tedious 16.4.0 → 16.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/benchmarks/bulk-load/iterable.js +1 -1
  2. package/benchmarks/common.js +2 -4
  3. package/benchmarks/package-lock.json +21173 -0
  4. package/benchmarks/package.json +11 -0
  5. package/benchmarks/query/call-tvp.js +1 -1
  6. package/benchmarks/query/insert-varbinary.js +1 -1
  7. package/benchmarks/query/select-many-rows.js +1 -1
  8. package/benchmarks/query/select-nvarchar.js +1 -1
  9. package/benchmarks/query/select-varbinary.js +1 -1
  10. package/benchmarks/request/rpcrequest-payload-tvp.js +2 -2
  11. package/benchmarks/request/rpcrequest-payload-varbinary.js +2 -2
  12. package/benchmarks/token-parser/colmetadata-token.js +4 -2
  13. package/benchmarks/token-parser/done-token.js +5 -2
  14. package/benchmarks/token-parser/simple-tokens.js +8 -2
  15. package/lib/always-encrypted/aead-aes-256-cbc-hmac-algorithm.js +1 -8
  16. package/lib/always-encrypted/aead-aes-256-cbc-hmac-algorithm.js.map +1 -1
  17. package/lib/always-encrypted/aead-aes-256-cbc-hmac-encryption-key.js +1 -8
  18. package/lib/always-encrypted/aead-aes-256-cbc-hmac-encryption-key.js.map +1 -1
  19. package/lib/always-encrypted/cek-entry.js +1 -7
  20. package/lib/always-encrypted/cek-entry.js.map +1 -1
  21. package/lib/always-encrypted/get-parameter-encryption-metadata.js +1 -1
  22. package/lib/always-encrypted/get-parameter-encryption-metadata.js.map +1 -1
  23. package/lib/always-encrypted/key-crypto.js +1 -1
  24. package/lib/always-encrypted/key-crypto.js.map +1 -1
  25. package/lib/always-encrypted/keystore-provider-azure-key-vault.js +1 -8
  26. package/lib/always-encrypted/keystore-provider-azure-key-vault.js.map +1 -1
  27. package/lib/always-encrypted/symmetric-key-cache.js +1 -1
  28. package/lib/always-encrypted/symmetric-key-cache.js.map +1 -1
  29. package/lib/always-encrypted/symmetric-key.js +1 -2
  30. package/lib/always-encrypted/symmetric-key.js.map +1 -1
  31. package/lib/always-encrypted/types.js +1 -1
  32. package/lib/always-encrypted/types.js.map +1 -1
  33. package/lib/bulk-load-payload.js +1 -3
  34. package/lib/bulk-load-payload.js.map +1 -1
  35. package/lib/bulk-load.js +15 -23
  36. package/lib/bulk-load.js.map +1 -1
  37. package/lib/collation.js +1 -7
  38. package/lib/collation.js.map +1 -1
  39. package/lib/connection.js +50 -35
  40. package/lib/connection.js.map +1 -1
  41. package/lib/connector.js +1 -1
  42. package/lib/connector.js.map +1 -1
  43. package/lib/data-type.js +1 -1
  44. package/lib/data-type.js.map +1 -1
  45. package/lib/data-types/bigint.js +1 -1
  46. package/lib/data-types/bigint.js.map +1 -1
  47. package/lib/data-types/binary.js +1 -1
  48. package/lib/data-types/binary.js.map +1 -1
  49. package/lib/data-types/bit.js +1 -1
  50. package/lib/data-types/bit.js.map +1 -1
  51. package/lib/data-types/bitn.js +1 -1
  52. package/lib/data-types/bitn.js.map +1 -1
  53. package/lib/data-types/char.js +1 -1
  54. package/lib/data-types/char.js.map +1 -1
  55. package/lib/data-types/date.js +1 -1
  56. package/lib/data-types/date.js.map +1 -1
  57. package/lib/data-types/datetime.js +1 -1
  58. package/lib/data-types/datetime.js.map +1 -1
  59. package/lib/data-types/datetime2.js +1 -1
  60. package/lib/data-types/datetime2.js.map +1 -1
  61. package/lib/data-types/datetimen.js +1 -1
  62. package/lib/data-types/datetimen.js.map +1 -1
  63. package/lib/data-types/datetimeoffset.js +1 -1
  64. package/lib/data-types/datetimeoffset.js.map +1 -1
  65. package/lib/data-types/decimal.js +1 -1
  66. package/lib/data-types/decimal.js.map +1 -1
  67. package/lib/data-types/decimaln.js +1 -1
  68. package/lib/data-types/decimaln.js.map +1 -1
  69. package/lib/data-types/float.js +1 -1
  70. package/lib/data-types/float.js.map +1 -1
  71. package/lib/data-types/floatn.js +1 -1
  72. package/lib/data-types/floatn.js.map +1 -1
  73. package/lib/data-types/image.js +1 -1
  74. package/lib/data-types/image.js.map +1 -1
  75. package/lib/data-types/int.js +1 -1
  76. package/lib/data-types/int.js.map +1 -1
  77. package/lib/data-types/intn.js +1 -1
  78. package/lib/data-types/intn.js.map +1 -1
  79. package/lib/data-types/money.js +1 -1
  80. package/lib/data-types/money.js.map +1 -1
  81. package/lib/data-types/moneyn.js +1 -1
  82. package/lib/data-types/moneyn.js.map +1 -1
  83. package/lib/data-types/nchar.js +1 -1
  84. package/lib/data-types/nchar.js.map +1 -1
  85. package/lib/data-types/ntext.js +1 -1
  86. package/lib/data-types/ntext.js.map +1 -1
  87. package/lib/data-types/null.js +1 -1
  88. package/lib/data-types/null.js.map +1 -1
  89. package/lib/data-types/numeric.js +1 -1
  90. package/lib/data-types/numeric.js.map +1 -1
  91. package/lib/data-types/numericn.js +1 -1
  92. package/lib/data-types/numericn.js.map +1 -1
  93. package/lib/data-types/nvarchar.js +1 -1
  94. package/lib/data-types/nvarchar.js.map +1 -1
  95. package/lib/data-types/real.js +1 -1
  96. package/lib/data-types/real.js.map +1 -1
  97. package/lib/data-types/smalldatetime.js +1 -1
  98. package/lib/data-types/smalldatetime.js.map +1 -1
  99. package/lib/data-types/smallint.js +1 -1
  100. package/lib/data-types/smallint.js.map +1 -1
  101. package/lib/data-types/smallmoney.js +1 -1
  102. package/lib/data-types/smallmoney.js.map +1 -1
  103. package/lib/data-types/sql-variant.js +1 -1
  104. package/lib/data-types/sql-variant.js.map +1 -1
  105. package/lib/data-types/text.js +1 -1
  106. package/lib/data-types/text.js.map +1 -1
  107. package/lib/data-types/time.js +1 -1
  108. package/lib/data-types/time.js.map +1 -1
  109. package/lib/data-types/tinyint.js +1 -1
  110. package/lib/data-types/tinyint.js.map +1 -1
  111. package/lib/data-types/tvp.js +1 -1
  112. package/lib/data-types/tvp.js.map +1 -1
  113. package/lib/data-types/udt.js +1 -1
  114. package/lib/data-types/udt.js.map +1 -1
  115. package/lib/data-types/uniqueidentifier.js +1 -1
  116. package/lib/data-types/uniqueidentifier.js.map +1 -1
  117. package/lib/data-types/varbinary.js +1 -1
  118. package/lib/data-types/varbinary.js.map +1 -1
  119. package/lib/data-types/varchar.js +1 -1
  120. package/lib/data-types/varchar.js.map +1 -1
  121. package/lib/data-types/xml.js +1 -1
  122. package/lib/data-types/xml.js.map +1 -1
  123. package/lib/debug.js +1 -4
  124. package/lib/debug.js.map +1 -1
  125. package/lib/errors/abort-error.js +1 -2
  126. package/lib/errors/abort-error.js.map +1 -1
  127. package/lib/errors/timeout-error.js +1 -2
  128. package/lib/errors/timeout-error.js.map +1 -1
  129. package/lib/errors.js +1 -10
  130. package/lib/errors.js.map +1 -1
  131. package/lib/incoming-message-stream.js +1 -4
  132. package/lib/incoming-message-stream.js.map +1 -1
  133. package/lib/login7-payload.js +1 -23
  134. package/lib/login7-payload.js.map +1 -1
  135. package/lib/message-io.js +1 -8
  136. package/lib/message-io.js.map +1 -1
  137. package/lib/message.js +1 -4
  138. package/lib/message.js.map +1 -1
  139. package/lib/metadata-parser.js +1 -1
  140. package/lib/metadata-parser.js.map +1 -1
  141. package/lib/ntlm-payload.js +1 -2
  142. package/lib/ntlm-payload.js.map +1 -1
  143. package/lib/outgoing-message-stream.js +1 -5
  144. package/lib/outgoing-message-stream.js.map +1 -1
  145. package/lib/packet.js +1 -2
  146. package/lib/packet.js.map +1 -1
  147. package/lib/prelogin-payload.js +1 -11
  148. package/lib/prelogin-payload.js.map +1 -1
  149. package/lib/request.js +13 -19
  150. package/lib/request.js.map +1 -1
  151. package/lib/rpcrequest-payload.js +1 -6
  152. package/lib/rpcrequest-payload.js.map +1 -1
  153. package/lib/sqlbatch-payload.js +1 -4
  154. package/lib/sqlbatch-payload.js.map +1 -1
  155. package/lib/tedious.js +1 -1
  156. package/lib/tedious.js.map +1 -1
  157. package/lib/token/colmetadata-token-parser.js +1 -1
  158. package/lib/token/colmetadata-token-parser.js.map +1 -1
  159. package/lib/token/done-token-parser.js +1 -1
  160. package/lib/token/done-token-parser.js.map +1 -1
  161. package/lib/token/env-change-token-parser.js +1 -1
  162. package/lib/token/env-change-token-parser.js.map +1 -1
  163. package/lib/token/feature-ext-ack-parser.js +1 -1
  164. package/lib/token/feature-ext-ack-parser.js.map +1 -1
  165. package/lib/token/fedauth-info-parser.js +1 -1
  166. package/lib/token/fedauth-info-parser.js.map +1 -1
  167. package/lib/token/handler.js +3 -13
  168. package/lib/token/handler.js.map +1 -1
  169. package/lib/token/infoerror-token-parser.js +1 -1
  170. package/lib/token/infoerror-token-parser.js.map +1 -1
  171. package/lib/token/loginack-token-parser.js +1 -1
  172. package/lib/token/loginack-token-parser.js.map +1 -1
  173. package/lib/token/nbcrow-token-parser.js +1 -1
  174. package/lib/token/nbcrow-token-parser.js.map +1 -1
  175. package/lib/token/order-token-parser.js +1 -1
  176. package/lib/token/order-token-parser.js.map +1 -1
  177. package/lib/token/returnstatus-token-parser.js +1 -1
  178. package/lib/token/returnstatus-token-parser.js.map +1 -1
  179. package/lib/token/returnvalue-token-parser.js +1 -1
  180. package/lib/token/returnvalue-token-parser.js.map +1 -1
  181. package/lib/token/row-token-parser.js +1 -1
  182. package/lib/token/row-token-parser.js.map +1 -1
  183. package/lib/token/sspi-token-parser.js +1 -1
  184. package/lib/token/sspi-token-parser.js.map +1 -1
  185. package/lib/token/stream-parser.js +1 -10
  186. package/lib/token/stream-parser.js.map +1 -1
  187. package/lib/token/token-stream-parser.js +1 -4
  188. package/lib/token/token-stream-parser.js.map +1 -1
  189. package/lib/token/token.js +2 -88
  190. package/lib/token/token.js.map +1 -1
  191. package/lib/tracking-buffer/writable-tracking-buffer.js +1 -7
  192. package/lib/tracking-buffer/writable-tracking-buffer.js.map +1 -1
  193. package/lib/transaction.js +1 -4
  194. package/lib/transaction.js.map +1 -1
  195. package/lib/value-parser.js +1 -1
  196. package/lib/value-parser.js.map +1 -1
  197. package/package.json +1 -1
  198. package/tsconfig.json +2 -2
  199. package/benchmarks/bulk-load/stream.js +0 -62
  200. package/benchmarks/bulk-load/sync.js +0 -59
@@ -15,12 +15,6 @@ const ZERO_LENGTH_BUFFER = Buffer.alloc(0);
15
15
  When writing, automatically allocates new buffers if there's not enough space.
16
16
  */
17
17
  class WritableTrackingBuffer {
18
- initialSize;
19
- encoding;
20
- doubleSizeGrowth;
21
- buffer;
22
- compositeBuffer;
23
- position;
24
18
  constructor(initialSize, encoding, doubleSizeGrowth) {
25
19
  this.initialSize = initialSize;
26
20
  this.encoding = encoding || 'ucs2';
@@ -253,4 +247,4 @@ class WritableTrackingBuffer {
253
247
  var _default = WritableTrackingBuffer;
254
248
  exports.default = _default;
255
249
  module.exports = WritableTrackingBuffer;
256
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTSElGVF9MRUZUXzMyIiwiU0hJRlRfUklHSFRfMzIiLCJVTktOT1dOX1BMUF9MRU4iLCJCdWZmZXIiLCJmcm9tIiwiWkVST19MRU5HVEhfQlVGRkVSIiwiYWxsb2MiLCJXcml0YWJsZVRyYWNraW5nQnVmZmVyIiwiaW5pdGlhbFNpemUiLCJlbmNvZGluZyIsImRvdWJsZVNpemVHcm93dGgiLCJidWZmZXIiLCJjb21wb3NpdGVCdWZmZXIiLCJwb3NpdGlvbiIsImNvbnN0cnVjdG9yIiwiZGF0YSIsIm5ld0J1ZmZlciIsImNvcHlGcm9tIiwibGVuZ3RoIiwibWFrZVJvb21Gb3IiLCJjb3B5IiwicmVxdWlyZWRMZW5ndGgiLCJzaXplIiwiTWF0aCIsIm1heCIsInNsaWNlIiwiY29uY2F0Iiwid3JpdGVVSW50OCIsInZhbHVlIiwid3JpdGVVSW50MTZMRSIsIndyaXRlVVNob3J0Iiwid3JpdGVVSW50MTZCRSIsIndyaXRlVUludDI0TEUiLCJ3cml0ZVVJbnQzMkxFIiwid3JpdGVCaWdJbnQ2NExFIiwid3JpdGVJbnQ2NExFIiwiQmlnSW50Iiwid3JpdGVVSW50NjRMRSIsIndyaXRlQmlnVUludDY0TEUiLCJ3cml0ZVVJbnQzMkJFIiwid3JpdGVVSW50NDBMRSIsIndyaXRlSW50MzJMRSIsImZsb29yIiwid3JpdGVJbnQ4Iiwid3JpdGVJbnQxNkxFIiwid3JpdGVJbnQxNkJFIiwid3JpdGVJbnQzMkJFIiwid3JpdGVGbG9hdExFIiwid3JpdGVEb3VibGVMRSIsIndyaXRlU3RyaW5nIiwiYnl0ZUxlbmd0aCIsIndyaXRlIiwid3JpdGVCVmFyY2hhciIsIndyaXRlVXNWYXJjaGFyIiwid3JpdGVVc1ZhcmJ5dGUiLCJ0b1N0cmluZyIsIndyaXRlQnVmZmVyIiwid3JpdGVQTFBCb2R5Iiwid3JpdGVNb25leSIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiLCJtb2R1bGUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJhY2tpbmctYnVmZmVyL3dyaXRhYmxlLXRyYWNraW5nLWJ1ZmZlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBTSElGVF9MRUZUXzMyID0gKDEgPDwgMTYpICogKDEgPDwgMTYpO1xuY29uc3QgU0hJRlRfUklHSFRfMzIgPSAxIC8gU0hJRlRfTEVGVF8zMjtcbmNvbnN0IFVOS05PV05fUExQX0xFTiA9IEJ1ZmZlci5mcm9tKFsweGZlLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmXSk7XG5jb25zdCBaRVJPX0xFTkdUSF9CVUZGRVIgPSBCdWZmZXIuYWxsb2MoMCk7XG5cbmV4cG9ydCB0eXBlIEVuY29kaW5nID0gJ3V0ZjgnIHwgJ3VjczInIHwgJ2FzY2lpJztcblxuLyoqXG4gIEEgQnVmZmVyLWxpa2UgY2xhc3MgdGhhdCB0cmFja3MgcG9zaXRpb24uXG5cbiAgQXMgdmFsdWVzIGFyZSB3cml0dGVuLCB0aGUgcG9zaXRpb24gYWR2YW5jZXMgYnkgdGhlIHNpemUgb2YgdGhlIHdyaXR0ZW4gZGF0YS5cbiAgV2hlbiB3cml0aW5nLCBhdXRvbWF0aWNhbGx5IGFsbG9jYXRlcyBuZXcgYnVmZmVycyBpZiB0aGVyZSdzIG5vdCBlbm91Z2ggc3BhY2UuXG4gKi9cbmNsYXNzIFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIge1xuICBpbml0aWFsU2l6ZTogbnVtYmVyO1xuICBlbmNvZGluZzogRW5jb2Rpbmc7XG4gIGRvdWJsZVNpemVHcm93dGg6IGJvb2xlYW47XG5cbiAgYnVmZmVyOiBCdWZmZXI7XG4gIGNvbXBvc2l0ZUJ1ZmZlcjogQnVmZmVyO1xuXG4gIHBvc2l0aW9uOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoaW5pdGlhbFNpemU6IG51bWJlciwgZW5jb2Rpbmc/OiBFbmNvZGluZyB8IG51bGwsIGRvdWJsZVNpemVHcm93dGg/OiBib29sZWFuKSB7XG4gICAgdGhpcy5pbml0aWFsU2l6ZSA9IGluaXRpYWxTaXplO1xuICAgIHRoaXMuZW5jb2RpbmcgPSBlbmNvZGluZyB8fCAndWNzMic7XG4gICAgdGhpcy5kb3VibGVTaXplR3Jvd3RoID0gZG91YmxlU2l6ZUdyb3d0aCB8fCBmYWxzZTtcbiAgICB0aGlzLmJ1ZmZlciA9IEJ1ZmZlci5hbGxvYyh0aGlzLmluaXRpYWxTaXplLCAwKTtcbiAgICB0aGlzLmNvbXBvc2l0ZUJ1ZmZlciA9IFpFUk9fTEVOR1RIX0JVRkZFUjtcbiAgICB0aGlzLnBvc2l0aW9uID0gMDtcbiAgfVxuXG4gIGdldCBkYXRhKCkge1xuICAgIHRoaXMubmV3QnVmZmVyKDApO1xuICAgIHJldHVybiB0aGlzLmNvbXBvc2l0ZUJ1ZmZlcjtcbiAgfVxuXG4gIGNvcHlGcm9tKGJ1ZmZlcjogQnVmZmVyKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aDtcbiAgICB0aGlzLm1ha2VSb29tRm9yKGxlbmd0aCk7XG4gICAgYnVmZmVyLmNvcHkodGhpcy5idWZmZXIsIHRoaXMucG9zaXRpb24pO1xuICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoO1xuICB9XG5cbiAgbWFrZVJvb21Gb3IocmVxdWlyZWRMZW5ndGg6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmJ1ZmZlci5sZW5ndGggLSB0aGlzLnBvc2l0aW9uIDwgcmVxdWlyZWRMZW5ndGgpIHtcbiAgICAgIGlmICh0aGlzLmRvdWJsZVNpemVHcm93dGgpIHtcbiAgICAgICAgbGV0IHNpemUgPSBNYXRoLm1heCgxMjgsIHRoaXMuYnVmZmVyLmxlbmd0aCAqIDIpO1xuICAgICAgICB3aGlsZSAoc2l6ZSA8IHJlcXVpcmVkTGVuZ3RoKSB7XG4gICAgICAgICAgc2l6ZSAqPSAyO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmV3QnVmZmVyKHNpemUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5uZXdCdWZmZXIocmVxdWlyZWRMZW5ndGgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5ld0J1ZmZlcihzaXplOiBudW1iZXIpIHtcbiAgICBjb25zdCBidWZmZXIgPSB0aGlzLmJ1ZmZlci5zbGljZSgwLCB0aGlzLnBvc2l0aW9uKTtcbiAgICB0aGlzLmNvbXBvc2l0ZUJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuY29tcG9zaXRlQnVmZmVyLCBidWZmZXJdKTtcbiAgICB0aGlzLmJ1ZmZlciA9IChzaXplID09PSAwKSA/IFpFUk9fTEVOR1RIX0JVRkZFUiA6IEJ1ZmZlci5hbGxvYyhzaXplLCAwKTtcbiAgICB0aGlzLnBvc2l0aW9uID0gMDtcbiAgfVxuXG4gIHdyaXRlVUludDgodmFsdWU6IG51bWJlcikge1xuICAgIGNvbnN0IGxlbmd0aCA9IDE7XG4gICAgdGhpcy5tYWtlUm9vbUZvcihsZW5ndGgpO1xuICAgIHRoaXMuYnVmZmVyLndyaXRlVUludDgodmFsdWUsIHRoaXMucG9zaXRpb24pO1xuICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoO1xuICB9XG5cbiAgd3JpdGVVSW50MTZMRSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gMjtcbiAgICB0aGlzLm1ha2VSb29tRm9yKGxlbmd0aCk7XG4gICAgdGhpcy5idWZmZXIud3JpdGVVSW50MTZMRSh2YWx1ZSwgdGhpcy5wb3NpdGlvbik7XG4gICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGg7XG4gIH1cblxuICB3cml0ZVVTaG9ydCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy53cml0ZVVJbnQxNkxFKHZhbHVlKTtcbiAgfVxuXG4gIHdyaXRlVUludDE2QkUodmFsdWU6IG51bWJlcikge1xuICAgIGNvbnN0IGxlbmd0aCA9IDI7XG4gICAgdGhpcy5tYWtlUm9vbUZvcihsZW5ndGgpO1xuICAgIHRoaXMuYnVmZmVyLndyaXRlVUludDE2QkUodmFsdWUsIHRoaXMucG9zaXRpb24pO1xuICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoO1xuICB9XG5cbiAgd3JpdGVVSW50MjRMRSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gMztcbiAgICB0aGlzLm1ha2VSb29tRm9yKGxlbmd0aCk7XG4gICAgdGhpcy5idWZmZXJbdGhpcy5wb3NpdGlvbiArIDJdID0gKHZhbHVlID4+PiAxNikgJiAweGZmO1xuICAgIHRoaXMuYnVmZmVyW3RoaXMucG9zaXRpb24gKyAxXSA9ICh2YWx1ZSA+Pj4gOCkgJiAweGZmO1xuICAgIHRoaXMuYnVmZmVyW3RoaXMucG9zaXRpb25dID0gdmFsdWUgJiAweGZmO1xuICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoO1xuICB9XG5cbiAgd3JpdGVVSW50MzJMRSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gNDtcbiAgICB0aGlzLm1ha2VSb29tRm9yKGxlbmd0aCk7XG4gICAgdGhpcy5idWZmZXIud3JpdGVVSW50MzJMRSh2YWx1ZSwgdGhpcy5wb3NpdGlvbik7XG4gICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGg7XG4gIH1cblxuICB3cml0ZUJpZ0ludDY0TEUodmFsdWU6IGJpZ2ludCkge1xuICAgIGNvbnN0IGxlbmd0aCA9IDg7XG4gICAgdGhpcy5tYWtlUm9vbUZvcihsZW5ndGgpO1xuICAgIHRoaXMuYnVmZmVyLndyaXRlQmlnSW50NjRMRSh2YWx1ZSwgdGhpcy5wb3NpdGlvbik7XG4gICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGg7XG4gIH1cblxuICB3cml0ZUludDY0TEUodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMud3JpdGVCaWdJbnQ2NExFKEJpZ0ludCh2YWx1ZSkpO1xuICB9XG5cbiAgd3JpdGVVSW50NjRMRSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy53cml0ZUJpZ1VJbnQ2NExFKEJpZ0ludCh2YWx1ZSkpO1xuICB9XG5cbiAgd3JpdGVCaWdVSW50NjRMRSh2YWx1ZTogYmlnaW50KSB7XG4gICAgY29uc3QgbGVuZ3RoID0gODtcbiAgICB0aGlzLm1ha2VSb29tRm9yKGxlbmd0aCk7XG4gICAgdGhpcy5idWZmZXIud3JpdGVCaWdVSW50NjRMRSh2YWx1ZSwgdGhpcy5wb3NpdGlvbik7XG4gICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGg7XG4gIH1cblxuICB3cml0ZVVJbnQzMkJFKHZhbHVlOiBudW1iZXIpIHtcbiAgICBjb25zdCBsZW5ndGggPSA0O1xuICAgIHRoaXMubWFrZVJvb21Gb3IobGVuZ3RoKTtcbiAgICB0aGlzLmJ1ZmZlci53cml0ZVVJbnQzMkJFKHZhbHVlLCB0aGlzLnBvc2l0aW9uKTtcbiAgICB0aGlzLnBvc2l0aW9uICs9IGxlbmd0aDtcbiAgfVxuXG4gIHdyaXRlVUludDQwTEUodmFsdWU6IG51bWJlcikge1xuICAgIC8vIGluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9kcHcvbm9kZS1idWZmZXItbW9yZS1pbnRzXG4gICAgdGhpcy53cml0ZUludDMyTEUodmFsdWUgJiAtMSk7XG4gICAgdGhpcy53cml0ZVVJbnQ4KE1hdGguZmxvb3IodmFsdWUgKiBTSElGVF9SSUdIVF8zMikpO1xuICB9XG5cbiAgd3JpdGVJbnQ4KHZhbHVlOiBudW1iZXIpIHtcbiAgICBjb25zdCBsZW5ndGggPSAxO1xuICAgIHRoaXMubWFrZVJvb21Gb3IobGVuZ3RoKTtcbiAgICB0aGlzLmJ1ZmZlci53cml0ZUludDgodmFsdWUsIHRoaXMucG9zaXRpb24pO1xuICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoO1xuICB9XG5cbiAgd3JpdGVJbnQxNkxFKHZhbHVlOiBudW1iZXIpIHtcbiAgICBjb25zdCBsZW5ndGggPSAyO1xuICAgIHRoaXMubWFrZVJvb21Gb3IobGVuZ3RoKTtcbiAgICB0aGlzLmJ1ZmZlci53cml0ZUludDE2TEUodmFsdWUsIHRoaXMucG9zaXRpb24pO1xuICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoO1xuICB9XG5cbiAgd3JpdGVJbnQxNkJFKHZhbHVlOiBudW1iZXIpIHtcbiAgICBjb25zdCBsZW5ndGggPSAyO1xuICAgIHRoaXMubWFrZVJvb21Gb3IobGVuZ3RoKTtcbiAgICB0aGlzLmJ1ZmZlci53cml0ZUludDE2QkUodmFsdWUsIHRoaXMucG9zaXRpb24pO1xuICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoO1xuICB9XG5cbiAgd3JpdGVJbnQzMkxFKHZhbHVlOiBudW1iZXIpIHtcbiAgICBjb25zdCBsZW5ndGggPSA0O1xuICAgIHRoaXMubWFrZVJvb21Gb3IobGVuZ3RoKTtcbiAgICB0aGlzLmJ1ZmZlci53cml0ZUludDMyTEUodmFsdWUsIHRoaXMucG9zaXRpb24pO1xuICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoO1xuICB9XG5cbiAgd3JpdGVJbnQzMkJFKHZhbHVlOiBudW1iZXIpIHtcbiAgICBjb25zdCBsZW5ndGggPSA0O1xuICAgIHRoaXMubWFrZVJvb21Gb3IobGVuZ3RoKTtcbiAgICB0aGlzLmJ1ZmZlci53cml0ZUludDMyQkUodmFsdWUsIHRoaXMucG9zaXRpb24pO1xuICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoO1xuICB9XG5cbiAgd3JpdGVGbG9hdExFKHZhbHVlOiBudW1iZXIpIHtcbiAgICBjb25zdCBsZW5ndGggPSA0O1xuICAgIHRoaXMubWFrZVJvb21Gb3IobGVuZ3RoKTtcbiAgICB0aGlzLmJ1ZmZlci53cml0ZUZsb2F0TEUodmFsdWUsIHRoaXMucG9zaXRpb24pO1xuICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoO1xuICB9XG5cbiAgd3JpdGVEb3VibGVMRSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gODtcbiAgICB0aGlzLm1ha2VSb29tRm9yKGxlbmd0aCk7XG4gICAgdGhpcy5idWZmZXIud3JpdGVEb3VibGVMRSh2YWx1ZSwgdGhpcy5wb3NpdGlvbik7XG4gICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGg7XG4gIH1cblxuICB3cml0ZVN0cmluZyh2YWx1ZTogc3RyaW5nLCBlbmNvZGluZz86IEVuY29kaW5nIHwgbnVsbCkge1xuICAgIGlmIChlbmNvZGluZyA9PSBudWxsKSB7XG4gICAgICBlbmNvZGluZyA9IHRoaXMuZW5jb2Rpbmc7XG4gICAgfVxuXG4gICAgY29uc3QgbGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGgodmFsdWUsIGVuY29kaW5nKTtcbiAgICB0aGlzLm1ha2VSb29tRm9yKGxlbmd0aCk7XG5cbiAgICAvLyAkRmxvd0ZpeE1lIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L3B1bGwvNTM5OFxuICAgIHRoaXMuYnVmZmVyLndyaXRlKHZhbHVlLCB0aGlzLnBvc2l0aW9uLCBlbmNvZGluZyk7XG4gICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGg7XG4gIH1cblxuICB3cml0ZUJWYXJjaGFyKHZhbHVlOiBzdHJpbmcsIGVuY29kaW5nPzogRW5jb2RpbmcgfCBudWxsKSB7XG4gICAgdGhpcy53cml0ZVVJbnQ4KHZhbHVlLmxlbmd0aCk7XG4gICAgdGhpcy53cml0ZVN0cmluZyh2YWx1ZSwgZW5jb2RpbmcpO1xuICB9XG5cbiAgd3JpdGVVc1ZhcmNoYXIodmFsdWU6IHN0cmluZywgZW5jb2Rpbmc/OiBFbmNvZGluZyB8IG51bGwpIHtcbiAgICB0aGlzLndyaXRlVUludDE2TEUodmFsdWUubGVuZ3RoKTtcbiAgICB0aGlzLndyaXRlU3RyaW5nKHZhbHVlLCBlbmNvZGluZyk7XG4gIH1cblxuICAvLyBUT0RPOiBGaWd1cmUgb3V0IHdoYXQgdHlwZXMgYXJlIHBhc3NlZCBpbiBvdGhlciB0aGFuIGBCdWZmZXJgXG4gIHdyaXRlVXNWYXJieXRlKHZhbHVlOiBhbnksIGVuY29kaW5nPzogRW5jb2RpbmcgfCBudWxsKSB7XG4gICAgaWYgKGVuY29kaW5nID09IG51bGwpIHtcbiAgICAgIGVuY29kaW5nID0gdGhpcy5lbmNvZGluZztcbiAgICB9XG5cbiAgICBsZXQgbGVuZ3RoO1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgbGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICBsZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aCh2YWx1ZSwgZW5jb2RpbmcpO1xuICAgIH1cbiAgICB0aGlzLndyaXRlVUludDE2TEUobGVuZ3RoKTtcblxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgdGhpcy53cml0ZUJ1ZmZlcih2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWFrZVJvb21Gb3IobGVuZ3RoKTtcbiAgICAgIC8vICRGbG93Rml4TWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvcHVsbC81Mzk4XG4gICAgICB0aGlzLmJ1ZmZlci53cml0ZSh2YWx1ZSwgdGhpcy5wb3NpdGlvbiwgZW5jb2RpbmcpO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgd3JpdGVQTFBCb2R5KHZhbHVlOiBhbnksIGVuY29kaW5nPzogRW5jb2RpbmcgfCBudWxsKSB7XG4gICAgaWYgKGVuY29kaW5nID09IG51bGwpIHtcbiAgICAgIGVuY29kaW5nID0gdGhpcy5lbmNvZGluZztcbiAgICB9XG5cbiAgICBsZXQgbGVuZ3RoO1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgbGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICBsZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aCh2YWx1ZSwgZW5jb2RpbmcpO1xuICAgIH1cblxuICAgIC8vIExlbmd0aCBvZiBhbGwgY2h1bmtzLlxuICAgIC8vIHRoaXMud3JpdGVVSW50NjRMRShsZW5ndGgpO1xuICAgIC8vIHVua25vd24gc2VlbXMgdG8gd29yayBiZXR0ZXIgaGVyZSAtIG1pZ2h0IHJldmlzaXQgbGF0ZXIuXG4gICAgdGhpcy53cml0ZUJ1ZmZlcihVTktOT1dOX1BMUF9MRU4pO1xuXG4gICAgLy8gSW4gdGhlIFVOS05PV05fUExQX0xFTiBjYXNlLCB0aGUgZGF0YSBpcyByZXByZXNlbnRlZCBhcyBhIHNlcmllcyBvZiB6ZXJvIG9yIG1vcmUgY2h1bmtzLlxuICAgIGlmIChsZW5ndGggPiAwKSB7XG4gICAgICAvLyBPbmUgY2h1bmsuXG4gICAgICB0aGlzLndyaXRlVUludDMyTEUobGVuZ3RoKTtcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgICB0aGlzLndyaXRlQnVmZmVyKHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubWFrZVJvb21Gb3IobGVuZ3RoKTtcbiAgICAgICAgdGhpcy5idWZmZXIud3JpdGUodmFsdWUsIHRoaXMucG9zaXRpb24sIGVuY29kaW5nKTtcbiAgICAgICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUExQX1RFUk1JTkFUT1IgKG5vIG1vcmUgY2h1bmtzKS5cbiAgICB0aGlzLndyaXRlVUludDMyTEUoMCk7XG4gIH1cblxuICB3cml0ZUJ1ZmZlcih2YWx1ZTogQnVmZmVyKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICAgIHRoaXMubWFrZVJvb21Gb3IobGVuZ3RoKTtcbiAgICB2YWx1ZS5jb3B5KHRoaXMuYnVmZmVyLCB0aGlzLnBvc2l0aW9uKTtcbiAgICB0aGlzLnBvc2l0aW9uICs9IGxlbmd0aDtcbiAgfVxuXG4gIHdyaXRlTW9uZXkodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMud3JpdGVJbnQzMkxFKE1hdGguZmxvb3IodmFsdWUgKiBTSElGVF9SSUdIVF8zMikpO1xuICAgIHRoaXMud3JpdGVJbnQzMkxFKHZhbHVlICYgLTEpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE1BQU1BLGFBQWEsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMzQyxNQUFNQyxjQUFjLEdBQUcsQ0FBQyxHQUFHRCxhQUFhO0FBQ3hD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
250
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTSElGVF9MRUZUXzMyIiwiU0hJRlRfUklHSFRfMzIiLCJVTktOT1dOX1BMUF9MRU4iLCJCdWZmZXIiLCJmcm9tIiwiWkVST19MRU5HVEhfQlVGRkVSIiwiYWxsb2MiLCJXcml0YWJsZVRyYWNraW5nQnVmZmVyIiwiY29uc3RydWN0b3IiLCJpbml0aWFsU2l6ZSIsImVuY29kaW5nIiwiZG91YmxlU2l6ZUdyb3d0aCIsImJ1ZmZlciIsImNvbXBvc2l0ZUJ1ZmZlciIsInBvc2l0aW9uIiwiZGF0YSIsIm5ld0J1ZmZlciIsImNvcHlGcm9tIiwibGVuZ3RoIiwibWFrZVJvb21Gb3IiLCJjb3B5IiwicmVxdWlyZWRMZW5ndGgiLCJzaXplIiwiTWF0aCIsIm1heCIsInNsaWNlIiwiY29uY2F0Iiwid3JpdGVVSW50OCIsInZhbHVlIiwid3JpdGVVSW50MTZMRSIsIndyaXRlVVNob3J0Iiwid3JpdGVVSW50MTZCRSIsIndyaXRlVUludDI0TEUiLCJ3cml0ZVVJbnQzMkxFIiwid3JpdGVCaWdJbnQ2NExFIiwid3JpdGVJbnQ2NExFIiwiQmlnSW50Iiwid3JpdGVVSW50NjRMRSIsIndyaXRlQmlnVUludDY0TEUiLCJ3cml0ZVVJbnQzMkJFIiwid3JpdGVVSW50NDBMRSIsIndyaXRlSW50MzJMRSIsImZsb29yIiwid3JpdGVJbnQ4Iiwid3JpdGVJbnQxNkxFIiwid3JpdGVJbnQxNkJFIiwid3JpdGVJbnQzMkJFIiwid3JpdGVGbG9hdExFIiwid3JpdGVEb3VibGVMRSIsIndyaXRlU3RyaW5nIiwiYnl0ZUxlbmd0aCIsIndyaXRlIiwid3JpdGVCVmFyY2hhciIsIndyaXRlVXNWYXJjaGFyIiwid3JpdGVVc1ZhcmJ5dGUiLCJ0b1N0cmluZyIsIndyaXRlQnVmZmVyIiwid3JpdGVQTFBCb2R5Iiwid3JpdGVNb25leSIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiLCJtb2R1bGUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJhY2tpbmctYnVmZmVyL3dyaXRhYmxlLXRyYWNraW5nLWJ1ZmZlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBTSElGVF9MRUZUXzMyID0gKDEgPDwgMTYpICogKDEgPDwgMTYpO1xuY29uc3QgU0hJRlRfUklHSFRfMzIgPSAxIC8gU0hJRlRfTEVGVF8zMjtcbmNvbnN0IFVOS05PV05fUExQX0xFTiA9IEJ1ZmZlci5mcm9tKFsweGZlLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmXSk7XG5jb25zdCBaRVJPX0xFTkdUSF9CVUZGRVIgPSBCdWZmZXIuYWxsb2MoMCk7XG5cbmV4cG9ydCB0eXBlIEVuY29kaW5nID0gJ3V0ZjgnIHwgJ3VjczInIHwgJ2FzY2lpJztcblxuLyoqXG4gIEEgQnVmZmVyLWxpa2UgY2xhc3MgdGhhdCB0cmFja3MgcG9zaXRpb24uXG5cbiAgQXMgdmFsdWVzIGFyZSB3cml0dGVuLCB0aGUgcG9zaXRpb24gYWR2YW5jZXMgYnkgdGhlIHNpemUgb2YgdGhlIHdyaXR0ZW4gZGF0YS5cbiAgV2hlbiB3cml0aW5nLCBhdXRvbWF0aWNhbGx5IGFsbG9jYXRlcyBuZXcgYnVmZmVycyBpZiB0aGVyZSdzIG5vdCBlbm91Z2ggc3BhY2UuXG4gKi9cbmNsYXNzIFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIge1xuICBkZWNsYXJlIGluaXRpYWxTaXplOiBudW1iZXI7XG4gIGRlY2xhcmUgZW5jb2Rpbmc6IEVuY29kaW5nO1xuICBkZWNsYXJlIGRvdWJsZVNpemVHcm93dGg6IGJvb2xlYW47XG5cbiAgZGVjbGFyZSBidWZmZXI6IEJ1ZmZlcjtcbiAgZGVjbGFyZSBjb21wb3NpdGVCdWZmZXI6IEJ1ZmZlcjtcblxuICBkZWNsYXJlIHBvc2l0aW9uOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoaW5pdGlhbFNpemU6IG51bWJlciwgZW5jb2Rpbmc/OiBFbmNvZGluZyB8IG51bGwsIGRvdWJsZVNpemVHcm93dGg/OiBib29sZWFuKSB7XG4gICAgdGhpcy5pbml0aWFsU2l6ZSA9IGluaXRpYWxTaXplO1xuICAgIHRoaXMuZW5jb2RpbmcgPSBlbmNvZGluZyB8fCAndWNzMic7XG4gICAgdGhpcy5kb3VibGVTaXplR3Jvd3RoID0gZG91YmxlU2l6ZUdyb3d0aCB8fCBmYWxzZTtcbiAgICB0aGlzLmJ1ZmZlciA9IEJ1ZmZlci5hbGxvYyh0aGlzLmluaXRpYWxTaXplLCAwKTtcbiAgICB0aGlzLmNvbXBvc2l0ZUJ1ZmZlciA9IFpFUk9fTEVOR1RIX0JVRkZFUjtcbiAgICB0aGlzLnBvc2l0aW9uID0gMDtcbiAgfVxuXG4gIGdldCBkYXRhKCkge1xuICAgIHRoaXMubmV3QnVmZmVyKDApO1xuICAgIHJldHVybiB0aGlzLmNvbXBvc2l0ZUJ1ZmZlcjtcbiAgfVxuXG4gIGNvcHlGcm9tKGJ1ZmZlcjogQnVmZmVyKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aDtcbiAgICB0aGlzLm1ha2VSb29tRm9yKGxlbmd0aCk7XG4gICAgYnVmZmVyLmNvcHkodGhpcy5idWZmZXIsIHRoaXMucG9zaXRpb24pO1xuICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoO1xuICB9XG5cbiAgbWFrZVJvb21Gb3IocmVxdWlyZWRMZW5ndGg6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmJ1ZmZlci5sZW5ndGggLSB0aGlzLnBvc2l0aW9uIDwgcmVxdWlyZWRMZW5ndGgpIHtcbiAgICAgIGlmICh0aGlzLmRvdWJsZVNpemVHcm93dGgpIHtcbiAgICAgICAgbGV0IHNpemUgPSBNYXRoLm1heCgxMjgsIHRoaXMuYnVmZmVyLmxlbmd0aCAqIDIpO1xuICAgICAgICB3aGlsZSAoc2l6ZSA8IHJlcXVpcmVkTGVuZ3RoKSB7XG4gICAgICAgICAgc2l6ZSAqPSAyO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmV3QnVmZmVyKHNpemUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5uZXdCdWZmZXIocmVxdWlyZWRMZW5ndGgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5ld0J1ZmZlcihzaXplOiBudW1iZXIpIHtcbiAgICBjb25zdCBidWZmZXIgPSB0aGlzLmJ1ZmZlci5zbGljZSgwLCB0aGlzLnBvc2l0aW9uKTtcbiAgICB0aGlzLmNvbXBvc2l0ZUJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuY29tcG9zaXRlQnVmZmVyLCBidWZmZXJdKTtcbiAgICB0aGlzLmJ1ZmZlciA9IChzaXplID09PSAwKSA/IFpFUk9fTEVOR1RIX0JVRkZFUiA6IEJ1ZmZlci5hbGxvYyhzaXplLCAwKTtcbiAgICB0aGlzLnBvc2l0aW9uID0gMDtcbiAgfVxuXG4gIHdyaXRlVUludDgodmFsdWU6IG51bWJlcikge1xuICAgIGNvbnN0IGxlbmd0aCA9IDE7XG4gICAgdGhpcy5tYWtlUm9vbUZvcihsZW5ndGgpO1xuICAgIHRoaXMuYnVmZmVyLndyaXRlVUludDgodmFsdWUsIHRoaXMucG9zaXRpb24pO1xuICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoO1xuICB9XG5cbiAgd3JpdGVVSW50MTZMRSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gMjtcbiAgICB0aGlzLm1ha2VSb29tRm9yKGxlbmd0aCk7XG4gICAgdGhpcy5idWZmZXIud3JpdGVVSW50MTZMRSh2YWx1ZSwgdGhpcy5wb3NpdGlvbik7XG4gICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGg7XG4gIH1cblxuICB3cml0ZVVTaG9ydCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy53cml0ZVVJbnQxNkxFKHZhbHVlKTtcbiAgfVxuXG4gIHdyaXRlVUludDE2QkUodmFsdWU6IG51bWJlcikge1xuICAgIGNvbnN0IGxlbmd0aCA9IDI7XG4gICAgdGhpcy5tYWtlUm9vbUZvcihsZW5ndGgpO1xuICAgIHRoaXMuYnVmZmVyLndyaXRlVUludDE2QkUodmFsdWUsIHRoaXMucG9zaXRpb24pO1xuICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoO1xuICB9XG5cbiAgd3JpdGVVSW50MjRMRSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gMztcbiAgICB0aGlzLm1ha2VSb29tRm9yKGxlbmd0aCk7XG4gICAgdGhpcy5idWZmZXJbdGhpcy5wb3NpdGlvbiArIDJdID0gKHZhbHVlID4+PiAxNikgJiAweGZmO1xuICAgIHRoaXMuYnVmZmVyW3RoaXMucG9zaXRpb24gKyAxXSA9ICh2YWx1ZSA+Pj4gOCkgJiAweGZmO1xuICAgIHRoaXMuYnVmZmVyW3RoaXMucG9zaXRpb25dID0gdmFsdWUgJiAweGZmO1xuICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoO1xuICB9XG5cbiAgd3JpdGVVSW50MzJMRSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gNDtcbiAgICB0aGlzLm1ha2VSb29tRm9yKGxlbmd0aCk7XG4gICAgdGhpcy5idWZmZXIud3JpdGVVSW50MzJMRSh2YWx1ZSwgdGhpcy5wb3NpdGlvbik7XG4gICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGg7XG4gIH1cblxuICB3cml0ZUJpZ0ludDY0TEUodmFsdWU6IGJpZ2ludCkge1xuICAgIGNvbnN0IGxlbmd0aCA9IDg7XG4gICAgdGhpcy5tYWtlUm9vbUZvcihsZW5ndGgpO1xuICAgIHRoaXMuYnVmZmVyLndyaXRlQmlnSW50NjRMRSh2YWx1ZSwgdGhpcy5wb3NpdGlvbik7XG4gICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGg7XG4gIH1cblxuICB3cml0ZUludDY0TEUodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMud3JpdGVCaWdJbnQ2NExFKEJpZ0ludCh2YWx1ZSkpO1xuICB9XG5cbiAgd3JpdGVVSW50NjRMRSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy53cml0ZUJpZ1VJbnQ2NExFKEJpZ0ludCh2YWx1ZSkpO1xuICB9XG5cbiAgd3JpdGVCaWdVSW50NjRMRSh2YWx1ZTogYmlnaW50KSB7XG4gICAgY29uc3QgbGVuZ3RoID0gODtcbiAgICB0aGlzLm1ha2VSb29tRm9yKGxlbmd0aCk7XG4gICAgdGhpcy5idWZmZXIud3JpdGVCaWdVSW50NjRMRSh2YWx1ZSwgdGhpcy5wb3NpdGlvbik7XG4gICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGg7XG4gIH1cblxuICB3cml0ZVVJbnQzMkJFKHZhbHVlOiBudW1iZXIpIHtcbiAgICBjb25zdCBsZW5ndGggPSA0O1xuICAgIHRoaXMubWFrZVJvb21Gb3IobGVuZ3RoKTtcbiAgICB0aGlzLmJ1ZmZlci53cml0ZVVJbnQzMkJFKHZhbHVlLCB0aGlzLnBvc2l0aW9uKTtcbiAgICB0aGlzLnBvc2l0aW9uICs9IGxlbmd0aDtcbiAgfVxuXG4gIHdyaXRlVUludDQwTEUodmFsdWU6IG51bWJlcikge1xuICAgIC8vIGluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9kcHcvbm9kZS1idWZmZXItbW9yZS1pbnRzXG4gICAgdGhpcy53cml0ZUludDMyTEUodmFsdWUgJiAtMSk7XG4gICAgdGhpcy53cml0ZVVJbnQ4KE1hdGguZmxvb3IodmFsdWUgKiBTSElGVF9SSUdIVF8zMikpO1xuICB9XG5cbiAgd3JpdGVJbnQ4KHZhbHVlOiBudW1iZXIpIHtcbiAgICBjb25zdCBsZW5ndGggPSAxO1xuICAgIHRoaXMubWFrZVJvb21Gb3IobGVuZ3RoKTtcbiAgICB0aGlzLmJ1ZmZlci53cml0ZUludDgodmFsdWUsIHRoaXMucG9zaXRpb24pO1xuICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoO1xuICB9XG5cbiAgd3JpdGVJbnQxNkxFKHZhbHVlOiBudW1iZXIpIHtcbiAgICBjb25zdCBsZW5ndGggPSAyO1xuICAgIHRoaXMubWFrZVJvb21Gb3IobGVuZ3RoKTtcbiAgICB0aGlzLmJ1ZmZlci53cml0ZUludDE2TEUodmFsdWUsIHRoaXMucG9zaXRpb24pO1xuICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoO1xuICB9XG5cbiAgd3JpdGVJbnQxNkJFKHZhbHVlOiBudW1iZXIpIHtcbiAgICBjb25zdCBsZW5ndGggPSAyO1xuICAgIHRoaXMubWFrZVJvb21Gb3IobGVuZ3RoKTtcbiAgICB0aGlzLmJ1ZmZlci53cml0ZUludDE2QkUodmFsdWUsIHRoaXMucG9zaXRpb24pO1xuICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoO1xuICB9XG5cbiAgd3JpdGVJbnQzMkxFKHZhbHVlOiBudW1iZXIpIHtcbiAgICBjb25zdCBsZW5ndGggPSA0O1xuICAgIHRoaXMubWFrZVJvb21Gb3IobGVuZ3RoKTtcbiAgICB0aGlzLmJ1ZmZlci53cml0ZUludDMyTEUodmFsdWUsIHRoaXMucG9zaXRpb24pO1xuICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoO1xuICB9XG5cbiAgd3JpdGVJbnQzMkJFKHZhbHVlOiBudW1iZXIpIHtcbiAgICBjb25zdCBsZW5ndGggPSA0O1xuICAgIHRoaXMubWFrZVJvb21Gb3IobGVuZ3RoKTtcbiAgICB0aGlzLmJ1ZmZlci53cml0ZUludDMyQkUodmFsdWUsIHRoaXMucG9zaXRpb24pO1xuICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoO1xuICB9XG5cbiAgd3JpdGVGbG9hdExFKHZhbHVlOiBudW1iZXIpIHtcbiAgICBjb25zdCBsZW5ndGggPSA0O1xuICAgIHRoaXMubWFrZVJvb21Gb3IobGVuZ3RoKTtcbiAgICB0aGlzLmJ1ZmZlci53cml0ZUZsb2F0TEUodmFsdWUsIHRoaXMucG9zaXRpb24pO1xuICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoO1xuICB9XG5cbiAgd3JpdGVEb3VibGVMRSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gODtcbiAgICB0aGlzLm1ha2VSb29tRm9yKGxlbmd0aCk7XG4gICAgdGhpcy5idWZmZXIud3JpdGVEb3VibGVMRSh2YWx1ZSwgdGhpcy5wb3NpdGlvbik7XG4gICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGg7XG4gIH1cblxuICB3cml0ZVN0cmluZyh2YWx1ZTogc3RyaW5nLCBlbmNvZGluZz86IEVuY29kaW5nIHwgbnVsbCkge1xuICAgIGlmIChlbmNvZGluZyA9PSBudWxsKSB7XG4gICAgICBlbmNvZGluZyA9IHRoaXMuZW5jb2Rpbmc7XG4gICAgfVxuXG4gICAgY29uc3QgbGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGgodmFsdWUsIGVuY29kaW5nKTtcbiAgICB0aGlzLm1ha2VSb29tRm9yKGxlbmd0aCk7XG5cbiAgICAvLyAkRmxvd0ZpeE1lIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L3B1bGwvNTM5OFxuICAgIHRoaXMuYnVmZmVyLndyaXRlKHZhbHVlLCB0aGlzLnBvc2l0aW9uLCBlbmNvZGluZyk7XG4gICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGg7XG4gIH1cblxuICB3cml0ZUJWYXJjaGFyKHZhbHVlOiBzdHJpbmcsIGVuY29kaW5nPzogRW5jb2RpbmcgfCBudWxsKSB7XG4gICAgdGhpcy53cml0ZVVJbnQ4KHZhbHVlLmxlbmd0aCk7XG4gICAgdGhpcy53cml0ZVN0cmluZyh2YWx1ZSwgZW5jb2RpbmcpO1xuICB9XG5cbiAgd3JpdGVVc1ZhcmNoYXIodmFsdWU6IHN0cmluZywgZW5jb2Rpbmc/OiBFbmNvZGluZyB8IG51bGwpIHtcbiAgICB0aGlzLndyaXRlVUludDE2TEUodmFsdWUubGVuZ3RoKTtcbiAgICB0aGlzLndyaXRlU3RyaW5nKHZhbHVlLCBlbmNvZGluZyk7XG4gIH1cblxuICAvLyBUT0RPOiBGaWd1cmUgb3V0IHdoYXQgdHlwZXMgYXJlIHBhc3NlZCBpbiBvdGhlciB0aGFuIGBCdWZmZXJgXG4gIHdyaXRlVXNWYXJieXRlKHZhbHVlOiBhbnksIGVuY29kaW5nPzogRW5jb2RpbmcgfCBudWxsKSB7XG4gICAgaWYgKGVuY29kaW5nID09IG51bGwpIHtcbiAgICAgIGVuY29kaW5nID0gdGhpcy5lbmNvZGluZztcbiAgICB9XG5cbiAgICBsZXQgbGVuZ3RoO1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgbGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICBsZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aCh2YWx1ZSwgZW5jb2RpbmcpO1xuICAgIH1cbiAgICB0aGlzLndyaXRlVUludDE2TEUobGVuZ3RoKTtcblxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgdGhpcy53cml0ZUJ1ZmZlcih2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWFrZVJvb21Gb3IobGVuZ3RoKTtcbiAgICAgIC8vICRGbG93Rml4TWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvcHVsbC81Mzk4XG4gICAgICB0aGlzLmJ1ZmZlci53cml0ZSh2YWx1ZSwgdGhpcy5wb3NpdGlvbiwgZW5jb2RpbmcpO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgd3JpdGVQTFBCb2R5KHZhbHVlOiBhbnksIGVuY29kaW5nPzogRW5jb2RpbmcgfCBudWxsKSB7XG4gICAgaWYgKGVuY29kaW5nID09IG51bGwpIHtcbiAgICAgIGVuY29kaW5nID0gdGhpcy5lbmNvZGluZztcbiAgICB9XG5cbiAgICBsZXQgbGVuZ3RoO1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgbGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICBsZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aCh2YWx1ZSwgZW5jb2RpbmcpO1xuICAgIH1cblxuICAgIC8vIExlbmd0aCBvZiBhbGwgY2h1bmtzLlxuICAgIC8vIHRoaXMud3JpdGVVSW50NjRMRShsZW5ndGgpO1xuICAgIC8vIHVua25vd24gc2VlbXMgdG8gd29yayBiZXR0ZXIgaGVyZSAtIG1pZ2h0IHJldmlzaXQgbGF0ZXIuXG4gICAgdGhpcy53cml0ZUJ1ZmZlcihVTktOT1dOX1BMUF9MRU4pO1xuXG4gICAgLy8gSW4gdGhlIFVOS05PV05fUExQX0xFTiBjYXNlLCB0aGUgZGF0YSBpcyByZXByZXNlbnRlZCBhcyBhIHNlcmllcyBvZiB6ZXJvIG9yIG1vcmUgY2h1bmtzLlxuICAgIGlmIChsZW5ndGggPiAwKSB7XG4gICAgICAvLyBPbmUgY2h1bmsuXG4gICAgICB0aGlzLndyaXRlVUludDMyTEUobGVuZ3RoKTtcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgICB0aGlzLndyaXRlQnVmZmVyKHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubWFrZVJvb21Gb3IobGVuZ3RoKTtcbiAgICAgICAgdGhpcy5idWZmZXIud3JpdGUodmFsdWUsIHRoaXMucG9zaXRpb24sIGVuY29kaW5nKTtcbiAgICAgICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUExQX1RFUk1JTkFUT1IgKG5vIG1vcmUgY2h1bmtzKS5cbiAgICB0aGlzLndyaXRlVUludDMyTEUoMCk7XG4gIH1cblxuICB3cml0ZUJ1ZmZlcih2YWx1ZTogQnVmZmVyKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICAgIHRoaXMubWFrZVJvb21Gb3IobGVuZ3RoKTtcbiAgICB2YWx1ZS5jb3B5KHRoaXMuYnVmZmVyLCB0aGlzLnBvc2l0aW9uKTtcbiAgICB0aGlzLnBvc2l0aW9uICs9IGxlbmd0aDtcbiAgfVxuXG4gIHdyaXRlTW9uZXkodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMud3JpdGVJbnQzMkxFKE1hdGguZmxvb3IodmFsdWUgKiBTSElGVF9SSUdIVF8zMikpO1xuICAgIHRoaXMud3JpdGVJbnQzMkxFKHZhbHVlICYgLTEpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE1BQU1BLGFBQWEsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUs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
@@ -1 +1 @@
1
- {"version":3,"file":"writable-tracking-buffer.js","names":["SHIFT_LEFT_32","SHIFT_RIGHT_32","UNKNOWN_PLP_LEN","Buffer","from","ZERO_LENGTH_BUFFER","alloc","WritableTrackingBuffer","initialSize","encoding","doubleSizeGrowth","buffer","compositeBuffer","position","constructor","data","newBuffer","copyFrom","length","makeRoomFor","copy","requiredLength","size","Math","max","slice","concat","writeUInt8","value","writeUInt16LE","writeUShort","writeUInt16BE","writeUInt24LE","writeUInt32LE","writeBigInt64LE","writeInt64LE","BigInt","writeUInt64LE","writeBigUInt64LE","writeUInt32BE","writeUInt40LE","writeInt32LE","floor","writeInt8","writeInt16LE","writeInt16BE","writeInt32BE","writeFloatLE","writeDoubleLE","writeString","byteLength","write","writeBVarchar","writeUsVarchar","writeUsVarbyte","toString","writeBuffer","writePLPBody","writeMoney","_default","exports","default","module"],"sources":["../../src/tracking-buffer/writable-tracking-buffer.ts"],"sourcesContent":["const SHIFT_LEFT_32 = (1 << 16) * (1 << 16);\nconst SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32;\nconst UNKNOWN_PLP_LEN = Buffer.from([0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff]);\nconst ZERO_LENGTH_BUFFER = Buffer.alloc(0);\n\nexport type Encoding = 'utf8' | 'ucs2' | 'ascii';\n\n/**\n A Buffer-like class that tracks position.\n\n As values are written, the position advances by the size of the written data.\n When writing, automatically allocates new buffers if there's not enough space.\n */\nclass WritableTrackingBuffer {\n initialSize: number;\n encoding: Encoding;\n doubleSizeGrowth: boolean;\n\n buffer: Buffer;\n compositeBuffer: Buffer;\n\n position: number;\n\n constructor(initialSize: number, encoding?: Encoding | null, doubleSizeGrowth?: boolean) {\n this.initialSize = initialSize;\n this.encoding = encoding || 'ucs2';\n this.doubleSizeGrowth = doubleSizeGrowth || false;\n this.buffer = Buffer.alloc(this.initialSize, 0);\n this.compositeBuffer = ZERO_LENGTH_BUFFER;\n this.position = 0;\n }\n\n get data() {\n this.newBuffer(0);\n return this.compositeBuffer;\n }\n\n copyFrom(buffer: Buffer) {\n const length = buffer.length;\n this.makeRoomFor(length);\n buffer.copy(this.buffer, this.position);\n this.position += length;\n }\n\n makeRoomFor(requiredLength: number) {\n if (this.buffer.length - this.position < requiredLength) {\n if (this.doubleSizeGrowth) {\n let size = Math.max(128, this.buffer.length * 2);\n while (size < requiredLength) {\n size *= 2;\n }\n this.newBuffer(size);\n } else {\n this.newBuffer(requiredLength);\n }\n }\n }\n\n newBuffer(size: number) {\n const buffer = this.buffer.slice(0, this.position);\n this.compositeBuffer = Buffer.concat([this.compositeBuffer, buffer]);\n this.buffer = (size === 0) ? ZERO_LENGTH_BUFFER : Buffer.alloc(size, 0);\n this.position = 0;\n }\n\n writeUInt8(value: number) {\n const length = 1;\n this.makeRoomFor(length);\n this.buffer.writeUInt8(value, this.position);\n this.position += length;\n }\n\n writeUInt16LE(value: number) {\n const length = 2;\n this.makeRoomFor(length);\n this.buffer.writeUInt16LE(value, this.position);\n this.position += length;\n }\n\n writeUShort(value: number) {\n this.writeUInt16LE(value);\n }\n\n writeUInt16BE(value: number) {\n const length = 2;\n this.makeRoomFor(length);\n this.buffer.writeUInt16BE(value, this.position);\n this.position += length;\n }\n\n writeUInt24LE(value: number) {\n const length = 3;\n this.makeRoomFor(length);\n this.buffer[this.position + 2] = (value >>> 16) & 0xff;\n this.buffer[this.position + 1] = (value >>> 8) & 0xff;\n this.buffer[this.position] = value & 0xff;\n this.position += length;\n }\n\n writeUInt32LE(value: number) {\n const length = 4;\n this.makeRoomFor(length);\n this.buffer.writeUInt32LE(value, this.position);\n this.position += length;\n }\n\n writeBigInt64LE(value: bigint) {\n const length = 8;\n this.makeRoomFor(length);\n this.buffer.writeBigInt64LE(value, this.position);\n this.position += length;\n }\n\n writeInt64LE(value: number) {\n this.writeBigInt64LE(BigInt(value));\n }\n\n writeUInt64LE(value: number) {\n this.writeBigUInt64LE(BigInt(value));\n }\n\n writeBigUInt64LE(value: bigint) {\n const length = 8;\n this.makeRoomFor(length);\n this.buffer.writeBigUInt64LE(value, this.position);\n this.position += length;\n }\n\n writeUInt32BE(value: number) {\n const length = 4;\n this.makeRoomFor(length);\n this.buffer.writeUInt32BE(value, this.position);\n this.position += length;\n }\n\n writeUInt40LE(value: number) {\n // inspired by https://github.com/dpw/node-buffer-more-ints\n this.writeInt32LE(value & -1);\n this.writeUInt8(Math.floor(value * SHIFT_RIGHT_32));\n }\n\n writeInt8(value: number) {\n const length = 1;\n this.makeRoomFor(length);\n this.buffer.writeInt8(value, this.position);\n this.position += length;\n }\n\n writeInt16LE(value: number) {\n const length = 2;\n this.makeRoomFor(length);\n this.buffer.writeInt16LE(value, this.position);\n this.position += length;\n }\n\n writeInt16BE(value: number) {\n const length = 2;\n this.makeRoomFor(length);\n this.buffer.writeInt16BE(value, this.position);\n this.position += length;\n }\n\n writeInt32LE(value: number) {\n const length = 4;\n this.makeRoomFor(length);\n this.buffer.writeInt32LE(value, this.position);\n this.position += length;\n }\n\n writeInt32BE(value: number) {\n const length = 4;\n this.makeRoomFor(length);\n this.buffer.writeInt32BE(value, this.position);\n this.position += length;\n }\n\n writeFloatLE(value: number) {\n const length = 4;\n this.makeRoomFor(length);\n this.buffer.writeFloatLE(value, this.position);\n this.position += length;\n }\n\n writeDoubleLE(value: number) {\n const length = 8;\n this.makeRoomFor(length);\n this.buffer.writeDoubleLE(value, this.position);\n this.position += length;\n }\n\n writeString(value: string, encoding?: Encoding | null) {\n if (encoding == null) {\n encoding = this.encoding;\n }\n\n const length = Buffer.byteLength(value, encoding);\n this.makeRoomFor(length);\n\n // $FlowFixMe https://github.com/facebook/flow/pull/5398\n this.buffer.write(value, this.position, encoding);\n this.position += length;\n }\n\n writeBVarchar(value: string, encoding?: Encoding | null) {\n this.writeUInt8(value.length);\n this.writeString(value, encoding);\n }\n\n writeUsVarchar(value: string, encoding?: Encoding | null) {\n this.writeUInt16LE(value.length);\n this.writeString(value, encoding);\n }\n\n // TODO: Figure out what types are passed in other than `Buffer`\n writeUsVarbyte(value: any, encoding?: Encoding | null) {\n if (encoding == null) {\n encoding = this.encoding;\n }\n\n let length;\n if (value instanceof Buffer) {\n length = value.length;\n } else {\n value = value.toString();\n length = Buffer.byteLength(value, encoding);\n }\n this.writeUInt16LE(length);\n\n if (value instanceof Buffer) {\n this.writeBuffer(value);\n } else {\n this.makeRoomFor(length);\n // $FlowFixMe https://github.com/facebook/flow/pull/5398\n this.buffer.write(value, this.position, encoding);\n this.position += length;\n }\n }\n\n writePLPBody(value: any, encoding?: Encoding | null) {\n if (encoding == null) {\n encoding = this.encoding;\n }\n\n let length;\n if (value instanceof Buffer) {\n length = value.length;\n } else {\n value = value.toString();\n length = Buffer.byteLength(value, encoding);\n }\n\n // Length of all chunks.\n // this.writeUInt64LE(length);\n // unknown seems to work better here - might revisit later.\n this.writeBuffer(UNKNOWN_PLP_LEN);\n\n // In the UNKNOWN_PLP_LEN case, the data is represented as a series of zero or more chunks.\n if (length > 0) {\n // One chunk.\n this.writeUInt32LE(length);\n if (value instanceof Buffer) {\n this.writeBuffer(value);\n } else {\n this.makeRoomFor(length);\n this.buffer.write(value, this.position, encoding);\n this.position += length;\n }\n }\n\n // PLP_TERMINATOR (no more chunks).\n this.writeUInt32LE(0);\n }\n\n writeBuffer(value: Buffer) {\n const length = value.length;\n this.makeRoomFor(length);\n value.copy(this.buffer, this.position);\n this.position += length;\n }\n\n writeMoney(value: number) {\n this.writeInt32LE(Math.floor(value * SHIFT_RIGHT_32));\n this.writeInt32LE(value & -1);\n }\n}\n\nexport default WritableTrackingBuffer;\nmodule.exports = WritableTrackingBuffer;\n"],"mappings":"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"}
1
+ {"version":3,"file":"writable-tracking-buffer.js","names":["SHIFT_LEFT_32","SHIFT_RIGHT_32","UNKNOWN_PLP_LEN","Buffer","from","ZERO_LENGTH_BUFFER","alloc","WritableTrackingBuffer","constructor","initialSize","encoding","doubleSizeGrowth","buffer","compositeBuffer","position","data","newBuffer","copyFrom","length","makeRoomFor","copy","requiredLength","size","Math","max","slice","concat","writeUInt8","value","writeUInt16LE","writeUShort","writeUInt16BE","writeUInt24LE","writeUInt32LE","writeBigInt64LE","writeInt64LE","BigInt","writeUInt64LE","writeBigUInt64LE","writeUInt32BE","writeUInt40LE","writeInt32LE","floor","writeInt8","writeInt16LE","writeInt16BE","writeInt32BE","writeFloatLE","writeDoubleLE","writeString","byteLength","write","writeBVarchar","writeUsVarchar","writeUsVarbyte","toString","writeBuffer","writePLPBody","writeMoney","_default","exports","default","module"],"sources":["../../src/tracking-buffer/writable-tracking-buffer.ts"],"sourcesContent":["const SHIFT_LEFT_32 = (1 << 16) * (1 << 16);\nconst SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32;\nconst UNKNOWN_PLP_LEN = Buffer.from([0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff]);\nconst ZERO_LENGTH_BUFFER = Buffer.alloc(0);\n\nexport type Encoding = 'utf8' | 'ucs2' | 'ascii';\n\n/**\n A Buffer-like class that tracks position.\n\n As values are written, the position advances by the size of the written data.\n When writing, automatically allocates new buffers if there's not enough space.\n */\nclass WritableTrackingBuffer {\n declare initialSize: number;\n declare encoding: Encoding;\n declare doubleSizeGrowth: boolean;\n\n declare buffer: Buffer;\n declare compositeBuffer: Buffer;\n\n declare position: number;\n\n constructor(initialSize: number, encoding?: Encoding | null, doubleSizeGrowth?: boolean) {\n this.initialSize = initialSize;\n this.encoding = encoding || 'ucs2';\n this.doubleSizeGrowth = doubleSizeGrowth || false;\n this.buffer = Buffer.alloc(this.initialSize, 0);\n this.compositeBuffer = ZERO_LENGTH_BUFFER;\n this.position = 0;\n }\n\n get data() {\n this.newBuffer(0);\n return this.compositeBuffer;\n }\n\n copyFrom(buffer: Buffer) {\n const length = buffer.length;\n this.makeRoomFor(length);\n buffer.copy(this.buffer, this.position);\n this.position += length;\n }\n\n makeRoomFor(requiredLength: number) {\n if (this.buffer.length - this.position < requiredLength) {\n if (this.doubleSizeGrowth) {\n let size = Math.max(128, this.buffer.length * 2);\n while (size < requiredLength) {\n size *= 2;\n }\n this.newBuffer(size);\n } else {\n this.newBuffer(requiredLength);\n }\n }\n }\n\n newBuffer(size: number) {\n const buffer = this.buffer.slice(0, this.position);\n this.compositeBuffer = Buffer.concat([this.compositeBuffer, buffer]);\n this.buffer = (size === 0) ? ZERO_LENGTH_BUFFER : Buffer.alloc(size, 0);\n this.position = 0;\n }\n\n writeUInt8(value: number) {\n const length = 1;\n this.makeRoomFor(length);\n this.buffer.writeUInt8(value, this.position);\n this.position += length;\n }\n\n writeUInt16LE(value: number) {\n const length = 2;\n this.makeRoomFor(length);\n this.buffer.writeUInt16LE(value, this.position);\n this.position += length;\n }\n\n writeUShort(value: number) {\n this.writeUInt16LE(value);\n }\n\n writeUInt16BE(value: number) {\n const length = 2;\n this.makeRoomFor(length);\n this.buffer.writeUInt16BE(value, this.position);\n this.position += length;\n }\n\n writeUInt24LE(value: number) {\n const length = 3;\n this.makeRoomFor(length);\n this.buffer[this.position + 2] = (value >>> 16) & 0xff;\n this.buffer[this.position + 1] = (value >>> 8) & 0xff;\n this.buffer[this.position] = value & 0xff;\n this.position += length;\n }\n\n writeUInt32LE(value: number) {\n const length = 4;\n this.makeRoomFor(length);\n this.buffer.writeUInt32LE(value, this.position);\n this.position += length;\n }\n\n writeBigInt64LE(value: bigint) {\n const length = 8;\n this.makeRoomFor(length);\n this.buffer.writeBigInt64LE(value, this.position);\n this.position += length;\n }\n\n writeInt64LE(value: number) {\n this.writeBigInt64LE(BigInt(value));\n }\n\n writeUInt64LE(value: number) {\n this.writeBigUInt64LE(BigInt(value));\n }\n\n writeBigUInt64LE(value: bigint) {\n const length = 8;\n this.makeRoomFor(length);\n this.buffer.writeBigUInt64LE(value, this.position);\n this.position += length;\n }\n\n writeUInt32BE(value: number) {\n const length = 4;\n this.makeRoomFor(length);\n this.buffer.writeUInt32BE(value, this.position);\n this.position += length;\n }\n\n writeUInt40LE(value: number) {\n // inspired by https://github.com/dpw/node-buffer-more-ints\n this.writeInt32LE(value & -1);\n this.writeUInt8(Math.floor(value * SHIFT_RIGHT_32));\n }\n\n writeInt8(value: number) {\n const length = 1;\n this.makeRoomFor(length);\n this.buffer.writeInt8(value, this.position);\n this.position += length;\n }\n\n writeInt16LE(value: number) {\n const length = 2;\n this.makeRoomFor(length);\n this.buffer.writeInt16LE(value, this.position);\n this.position += length;\n }\n\n writeInt16BE(value: number) {\n const length = 2;\n this.makeRoomFor(length);\n this.buffer.writeInt16BE(value, this.position);\n this.position += length;\n }\n\n writeInt32LE(value: number) {\n const length = 4;\n this.makeRoomFor(length);\n this.buffer.writeInt32LE(value, this.position);\n this.position += length;\n }\n\n writeInt32BE(value: number) {\n const length = 4;\n this.makeRoomFor(length);\n this.buffer.writeInt32BE(value, this.position);\n this.position += length;\n }\n\n writeFloatLE(value: number) {\n const length = 4;\n this.makeRoomFor(length);\n this.buffer.writeFloatLE(value, this.position);\n this.position += length;\n }\n\n writeDoubleLE(value: number) {\n const length = 8;\n this.makeRoomFor(length);\n this.buffer.writeDoubleLE(value, this.position);\n this.position += length;\n }\n\n writeString(value: string, encoding?: Encoding | null) {\n if (encoding == null) {\n encoding = this.encoding;\n }\n\n const length = Buffer.byteLength(value, encoding);\n this.makeRoomFor(length);\n\n // $FlowFixMe https://github.com/facebook/flow/pull/5398\n this.buffer.write(value, this.position, encoding);\n this.position += length;\n }\n\n writeBVarchar(value: string, encoding?: Encoding | null) {\n this.writeUInt8(value.length);\n this.writeString(value, encoding);\n }\n\n writeUsVarchar(value: string, encoding?: Encoding | null) {\n this.writeUInt16LE(value.length);\n this.writeString(value, encoding);\n }\n\n // TODO: Figure out what types are passed in other than `Buffer`\n writeUsVarbyte(value: any, encoding?: Encoding | null) {\n if (encoding == null) {\n encoding = this.encoding;\n }\n\n let length;\n if (value instanceof Buffer) {\n length = value.length;\n } else {\n value = value.toString();\n length = Buffer.byteLength(value, encoding);\n }\n this.writeUInt16LE(length);\n\n if (value instanceof Buffer) {\n this.writeBuffer(value);\n } else {\n this.makeRoomFor(length);\n // $FlowFixMe https://github.com/facebook/flow/pull/5398\n this.buffer.write(value, this.position, encoding);\n this.position += length;\n }\n }\n\n writePLPBody(value: any, encoding?: Encoding | null) {\n if (encoding == null) {\n encoding = this.encoding;\n }\n\n let length;\n if (value instanceof Buffer) {\n length = value.length;\n } else {\n value = value.toString();\n length = Buffer.byteLength(value, encoding);\n }\n\n // Length of all chunks.\n // this.writeUInt64LE(length);\n // unknown seems to work better here - might revisit later.\n this.writeBuffer(UNKNOWN_PLP_LEN);\n\n // In the UNKNOWN_PLP_LEN case, the data is represented as a series of zero or more chunks.\n if (length > 0) {\n // One chunk.\n this.writeUInt32LE(length);\n if (value instanceof Buffer) {\n this.writeBuffer(value);\n } else {\n this.makeRoomFor(length);\n this.buffer.write(value, this.position, encoding);\n this.position += length;\n }\n }\n\n // PLP_TERMINATOR (no more chunks).\n this.writeUInt32LE(0);\n }\n\n writeBuffer(value: Buffer) {\n const length = value.length;\n this.makeRoomFor(length);\n value.copy(this.buffer, this.position);\n this.position += length;\n }\n\n writeMoney(value: number) {\n this.writeInt32LE(Math.floor(value * SHIFT_RIGHT_32));\n this.writeInt32LE(value & -1);\n }\n}\n\nexport default WritableTrackingBuffer;\nmodule.exports = WritableTrackingBuffer;\n"],"mappings":"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"}
@@ -50,9 +50,6 @@ function assertValidIsolationLevel(isolationLevel, name) {
50
50
  }
51
51
  }
52
52
  class Transaction {
53
- name;
54
- isolationLevel;
55
- outstandingRequestCount;
56
53
  constructor(name, isolationLevel = ISOLATION_LEVEL.NO_CHANGE) {
57
54
  this.name = name;
58
55
  this.isolationLevel = isolationLevel;
@@ -140,4 +137,4 @@ class Transaction {
140
137
  }
141
138
  }
142
139
  exports.Transaction = Transaction;
143
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd3JpdGFibGVUcmFja2luZ0J1ZmZlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2FsbEhlYWRlcnMiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIk9QRVJBVElPTl9UWVBFIiwiVE1fR0VUX0RUQ19BRERSRVNTIiwiVE1fUFJPUEFHQVRFX1hBQ1QiLCJUTV9CRUdJTl9YQUNUIiwiVE1fUFJPTU9URV9YQUNUIiwiVE1fQ09NTUlUX1hBQ1QiLCJUTV9ST0xMQkFDS19YQUNUIiwiVE1fU0FWRV9YQUNUIiwiZXhwb3J0cyIsIklTT0xBVElPTl9MRVZFTCIsIk5PX0NIQU5HRSIsIlJFQURfVU5DT01NSVRURUQiLCJSRUFEX0NPTU1JVFRFRCIsIlJFUEVBVEFCTEVfUkVBRCIsIlNFUklBTElaQUJMRSIsIlNOQVBTSE9UIiwiaXNvbGF0aW9uTGV2ZWxCeVZhbHVlIiwibmFtZSIsInZhbHVlIiwiYXNzZXJ0VmFsaWRJc29sYXRpb25MZXZlbCIsImlzb2xhdGlvbkxldmVsIiwiVHlwZUVycm9yIiwiaW5jbHVkZXMiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJSYW5nZUVycm9yIiwiVHJhbnNhY3Rpb24iLCJvdXRzdGFuZGluZ1JlcXVlc3RDb3VudCIsImNvbnN0cnVjdG9yIiwiYmVnaW5QYXlsb2FkIiwidHhuRGVzY3JpcHRvciIsImJ1ZmZlciIsIldyaXRhYmxlVHJhY2tpbmdCdWZmZXIiLCJ3cml0ZVRvVHJhY2tpbmdCdWZmZXIiLCJ3cml0ZVVTaG9ydCIsIndyaXRlVUludDgiLCJsZW5ndGgiLCJ3cml0ZVN0cmluZyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiZGF0YSIsInRvU3RyaW5nIiwiY29tbWl0UGF5bG9hZCIsInJvbGxiYWNrUGF5bG9hZCIsInNhdmVQYXlsb2FkIiwiaXNvbGF0aW9uTGV2ZWxUb1RTUUwiXSwic291cmNlcyI6WyIuLi9zcmMvdHJhbnNhY3Rpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIgZnJvbSAnLi90cmFja2luZy1idWZmZXIvd3JpdGFibGUtdHJhY2tpbmctYnVmZmVyJztcbmltcG9ydCB7IHdyaXRlVG9UcmFja2luZ0J1ZmZlciB9IGZyb20gJy4vYWxsLWhlYWRlcnMnO1xuXG4vKlxuICBzMi4yLjYuOFxuICovXG5cbmV4cG9ydCBjb25zdCBPUEVSQVRJT05fVFlQRSA9IHtcbiAgVE1fR0VUX0RUQ19BRERSRVNTOiAweDAwLFxuICBUTV9QUk9QQUdBVEVfWEFDVDogMHgwMSxcbiAgVE1fQkVHSU5fWEFDVDogMHgwNSxcbiAgVE1fUFJPTU9URV9YQUNUOiAweDA2LFxuICBUTV9DT01NSVRfWEFDVDogMHgwNyxcbiAgVE1fUk9MTEJBQ0tfWEFDVDogMHgwOCxcbiAgVE1fU0FWRV9YQUNUOiAweDA5XG59O1xuXG5leHBvcnQgY29uc3QgSVNPTEFUSU9OX0xFVkVMOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge1xuICBOT19DSEFOR0U6IDB4MDAsXG4gIFJFQURfVU5DT01NSVRURUQ6IDB4MDEsXG4gIFJFQURfQ09NTUlUVEVEOiAweDAyLFxuICBSRVBFQVRBQkxFX1JFQUQ6IDB4MDMsXG4gIFNFUklBTElaQUJMRTogMHgwNCxcbiAgU05BUFNIT1Q6IDB4MDVcbn07XG5cbmV4cG9ydCBjb25zdCBpc29sYXRpb25MZXZlbEJ5VmFsdWU6IHsgW2tleTogbnVtYmVyXTogc3RyaW5nIH0gPSB7fTtcbmZvciAoY29uc3QgbmFtZSBpbiBJU09MQVRJT05fTEVWRUwpIHtcbiAgY29uc3QgdmFsdWUgPSBJU09MQVRJT05fTEVWRUxbbmFtZV07XG4gIGlzb2xhdGlvbkxldmVsQnlWYWx1ZVt2YWx1ZV0gPSBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VmFsaWRJc29sYXRpb25MZXZlbChpc29sYXRpb25MZXZlbDogYW55LCBuYW1lOiBzdHJpbmcpOiBhc3NlcnRzIGlzb2xhdGlvbkxldmVsIGlzIDAgfCAxIHwgMiB8IDMgfCA0IHwgNSB7XG4gIGlmICh0eXBlb2YgaXNvbGF0aW9uTGV2ZWwgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVGhlIFwiJHtuYW1lfVwiICR7bmFtZS5pbmNsdWRlcygnLicpID8gJ3Byb3BlcnR5JyA6ICdhcmd1bWVudCd9IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJHt0eXBlb2YgaXNvbGF0aW9uTGV2ZWx9ICgke2lzb2xhdGlvbkxldmVsfSlgKTtcbiAgfVxuXG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcihpc29sYXRpb25MZXZlbCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVGhlIHZhbHVlIG9mIFwiJHtuYW1lfVwiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhbiBpbnRlZ2VyLiBSZWNlaXZlZDogJHtpc29sYXRpb25MZXZlbH1gKTtcbiAgfVxuXG4gIGlmICghKGlzb2xhdGlvbkxldmVsID49IDAgJiYgaXNvbGF0aW9uTGV2ZWwgPD0gNSkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVGhlIHZhbHVlIG9mIFwiJHtuYW1lfVwiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSA+PSAwICYmIDw9IDUuIFJlY2VpdmVkOiAke2lzb2xhdGlvbkxldmVsfWApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbiB7XG4gIG5hbWU6IHN0cmluZztcbiAgaXNvbGF0aW9uTGV2ZWw6IG51bWJlcjtcbiAgb3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIGlzb2xhdGlvbkxldmVsID0gSVNPTEFUSU9OX0xFVkVMLk5PX0NIQU5HRSkge1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5pc29sYXRpb25MZXZlbCA9IGlzb2xhdGlvbkxldmVsO1xuICAgIHRoaXMub3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQgPSAxO1xuICB9XG5cbiAgYmVnaW5QYXlsb2FkKHR4bkRlc2NyaXB0b3I6IEJ1ZmZlcikge1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKDEwMCwgJ3VjczInKTtcbiAgICB3cml0ZVRvVHJhY2tpbmdCdWZmZXIoYnVmZmVyLCB0eG5EZXNjcmlwdG9yLCB0aGlzLm91dHN0YW5kaW5nUmVxdWVzdENvdW50KTtcbiAgICBidWZmZXIud3JpdGVVU2hvcnQoT1BFUkFUSU9OX1RZUEUuVE1fQkVHSU5fWEFDVCk7XG4gICAgYnVmZmVyLndyaXRlVUludDgodGhpcy5pc29sYXRpb25MZXZlbCk7XG4gICAgYnVmZmVyLndyaXRlVUludDgodGhpcy5uYW1lLmxlbmd0aCAqIDIpO1xuICAgIGJ1ZmZlci53cml0ZVN0cmluZyh0aGlzLm5hbWUsICd1Y3MyJyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgKltTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICB5aWVsZCBidWZmZXIuZGF0YTtcbiAgICAgIH0sXG4gICAgICB0b1N0cmluZzogKCkgPT4ge1xuICAgICAgICByZXR1cm4gJ0JlZ2luIFRyYW5zYWN0aW9uOiBuYW1lPScgKyB0aGlzLm5hbWUgKyAnLCBpc29sYXRpb25MZXZlbD0nICsgaXNvbGF0aW9uTGV2ZWxCeVZhbHVlW3RoaXMuaXNvbGF0aW9uTGV2ZWxdO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBjb21taXRQYXlsb2FkKHR4bkRlc2NyaXB0b3I6IEJ1ZmZlcikge1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKDEwMCwgJ2FzY2lpJyk7XG4gICAgd3JpdGVUb1RyYWNraW5nQnVmZmVyKGJ1ZmZlciwgdHhuRGVzY3JpcHRvciwgdGhpcy5vdXRzdGFuZGluZ1JlcXVlc3RDb3VudCk7XG4gICAgYnVmZmVyLndyaXRlVVNob3J0KE9QRVJBVElPTl9UWVBFLlRNX0NPTU1JVF9YQUNUKTtcbiAgICBidWZmZXIud3JpdGVVSW50OCh0aGlzLm5hbWUubGVuZ3RoICogMik7XG4gICAgYnVmZmVyLndyaXRlU3RyaW5nKHRoaXMubmFtZSwgJ3VjczInKTtcbiAgICAvLyBObyBmQmVnaW5YYWN0IGZsYWcsIHNvIG5vIG5ldyB0cmFuc2FjdGlvbiBpcyBzdGFydGVkLlxuICAgIGJ1ZmZlci53cml0ZVVJbnQ4KDApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgeWllbGQgYnVmZmVyLmRhdGE7XG4gICAgICB9LFxuICAgICAgdG9TdHJpbmc6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuICdDb21taXQgVHJhbnNhY3Rpb246IG5hbWU9JyArIHRoaXMubmFtZTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcm9sbGJhY2tQYXlsb2FkKHR4bkRlc2NyaXB0b3I6IEJ1ZmZlcikge1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKDEwMCwgJ2FzY2lpJyk7XG4gICAgd3JpdGVUb1RyYWNraW5nQnVmZmVyKGJ1ZmZlciwgdHhuRGVzY3JpcHRvciwgdGhpcy5vdXRzdGFuZGluZ1JlcXVlc3RDb3VudCk7XG4gICAgYnVmZmVyLndyaXRlVVNob3J0KE9QRVJBVElPTl9UWVBFLlRNX1JPTExCQUNLX1hBQ1QpO1xuICAgIGJ1ZmZlci53cml0ZVVJbnQ4KHRoaXMubmFtZS5sZW5ndGggKiAyKTtcbiAgICBidWZmZXIud3JpdGVTdHJpbmcodGhpcy5uYW1lLCAndWNzMicpO1xuICAgIC8vIE5vIGZCZWdpblhhY3QgZmxhZywgc28gbm8gbmV3IHRyYW5zYWN0aW9uIGlzIHN0YXJ0ZWQuXG4gICAgYnVmZmVyLndyaXRlVUludDgoMCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgKltTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICB5aWVsZCBidWZmZXIuZGF0YTtcbiAgICAgIH0sXG4gICAgICB0b1N0cmluZzogKCkgPT4ge1xuICAgICAgICByZXR1cm4gJ1JvbGxiYWNrIFRyYW5zYWN0aW9uOiBuYW1lPScgKyB0aGlzLm5hbWU7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHNhdmVQYXlsb2FkKHR4bkRlc2NyaXB0b3I6IEJ1ZmZlcikge1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKDEwMCwgJ2FzY2lpJyk7XG4gICAgd3JpdGVUb1RyYWNraW5nQnVmZmVyKGJ1ZmZlciwgdHhuRGVzY3JpcHRvciwgdGhpcy5vdXRzdGFuZGluZ1JlcXVlc3RDb3VudCk7XG4gICAgYnVmZmVyLndyaXRlVVNob3J0KE9QRVJBVElPTl9UWVBFLlRNX1NBVkVfWEFDVCk7XG4gICAgYnVmZmVyLndyaXRlVUludDgodGhpcy5uYW1lLmxlbmd0aCAqIDIpO1xuICAgIGJ1ZmZlci53cml0ZVN0cmluZyh0aGlzLm5hbWUsICd1Y3MyJyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgKltTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICB5aWVsZCBidWZmZXIuZGF0YTtcbiAgICAgIH0sXG4gICAgICB0b1N0cmluZzogKCkgPT4ge1xuICAgICAgICByZXR1cm4gJ1NhdmUgVHJhbnNhY3Rpb246IG5hbWU9JyArIHRoaXMubmFtZTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgaXNvbGF0aW9uTGV2ZWxUb1RTUUwoKSB7XG4gICAgc3dpdGNoICh0aGlzLmlzb2xhdGlvbkxldmVsKSB7XG4gICAgICBjYXNlIElTT0xBVElPTl9MRVZFTC5SRUFEX1VOQ09NTUlUVEVEOlxuICAgICAgICByZXR1cm4gJ1JFQUQgVU5DT01NSVRURUQnO1xuICAgICAgY2FzZSBJU09MQVRJT05fTEVWRUwuUkVBRF9DT01NSVRURUQ6XG4gICAgICAgIHJldHVybiAnUkVBRCBDT01NSVRURUQnO1xuICAgICAgY2FzZSBJU09MQVRJT05fTEVWRUwuUkVQRUFUQUJMRV9SRUFEOlxuICAgICAgICByZXR1cm4gJ1JFUEVBVEFCTEUgUkVBRCc7XG4gICAgICBjYXNlIElTT0xBVElPTl9MRVZFTC5TRVJJQUxJWkFCTEU6XG4gICAgICAgIHJldHVybiAnU0VSSUFMSVpBQkxFJztcbiAgICAgIGNhc2UgSVNPTEFUSU9OX0xFVkVMLlNOQVBTSE9UOlxuICAgICAgICByZXR1cm4gJ1NOQVBTSE9UJztcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsdUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFdBQUEsR0FBQUQsT0FBQTtBQUFzRCxTQUFBRCx1QkFBQUcsR0FBQSxXQUFBQSxHQUFBLElBQUFBLEdBQUEsQ0FBQUMsVUFBQSxHQUFBRCxHQUFBLEtBQUFFLE9BQUEsRUFBQUYsR0FBQTtBQUV0RDtBQUNBO0FBQ0E7O0FBRU8sTUFBTUcsY0FBYyxHQUFHO0VBQzVCQyxrQkFBa0IsRUFBRSxJQUFJO0VBQ3hCQyxpQkFBaUIsRUFBRSxJQUFJO0VBQ3ZCQyxhQUFhLEVBQUUsSUFBSTtFQUNuQkMsZUFBZSxFQUFFLElBQUk7RUFDckJDLGNBQWMsRUFBRSxJQUFJO0VBQ3BCQyxnQkFBZ0IsRUFBRSxJQUFJO0VBQ3RCQyxZQUFZLEVBQUU7QUFDaEIsQ0FBQztBQUFDQyxPQUFBLENBQUFSLGNBQUEsR0FBQUEsY0FBQTtBQUVLLE1BQU1TLGVBQTBDLEdBQUc7RUFDeERDLFNBQVMsRUFBRSxJQUFJO0VBQ2ZDLGdCQUFnQixFQUFFLElBQUk7RUFDdEJDLGNBQWMsRUFBRSxJQUFJO0VBQ3BCQyxlQUFlLEVBQUUsSUFBSTtFQUNyQkMsWUFBWSxFQUFFLElBQUk7RUFDbEJDLFFBQVEsRUFBRTtBQUNaLENBQUM7QUFBQ1AsT0FBQSxDQUFBQyxlQUFBLEdBQUFBLGVBQUE7QUFFSyxNQUFNTyxxQkFBZ0QsR0FBRyxDQUFDLENBQUM7QUFBQ1IsT0FBQSxDQUFBUSxxQkFBQSxHQUFBQSxxQkFBQTtBQUNuRSxLQUFLLE1BQU1DLElBQUksSUFBSVIsZUFBZSxFQUFFO0VBQ2xDLE1BQU1TLEtBQUssR0FBR1QsZUFBZSxDQUFDUSxJQUFJLENBQUM7RUFDbkNE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
140
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd3JpdGFibGVUcmFja2luZ0J1ZmZlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2FsbEhlYWRlcnMiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIk9QRVJBVElPTl9UWVBFIiwiVE1fR0VUX0RUQ19BRERSRVNTIiwiVE1fUFJPUEFHQVRFX1hBQ1QiLCJUTV9CRUdJTl9YQUNUIiwiVE1fUFJPTU9URV9YQUNUIiwiVE1fQ09NTUlUX1hBQ1QiLCJUTV9ST0xMQkFDS19YQUNUIiwiVE1fU0FWRV9YQUNUIiwiZXhwb3J0cyIsIklTT0xBVElPTl9MRVZFTCIsIk5PX0NIQU5HRSIsIlJFQURfVU5DT01NSVRURUQiLCJSRUFEX0NPTU1JVFRFRCIsIlJFUEVBVEFCTEVfUkVBRCIsIlNFUklBTElaQUJMRSIsIlNOQVBTSE9UIiwiaXNvbGF0aW9uTGV2ZWxCeVZhbHVlIiwibmFtZSIsInZhbHVlIiwiYXNzZXJ0VmFsaWRJc29sYXRpb25MZXZlbCIsImlzb2xhdGlvbkxldmVsIiwiVHlwZUVycm9yIiwiaW5jbHVkZXMiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJSYW5nZUVycm9yIiwiVHJhbnNhY3Rpb24iLCJjb25zdHJ1Y3RvciIsIm91dHN0YW5kaW5nUmVxdWVzdENvdW50IiwiYmVnaW5QYXlsb2FkIiwidHhuRGVzY3JpcHRvciIsImJ1ZmZlciIsIldyaXRhYmxlVHJhY2tpbmdCdWZmZXIiLCJ3cml0ZVRvVHJhY2tpbmdCdWZmZXIiLCJ3cml0ZVVTaG9ydCIsIndyaXRlVUludDgiLCJsZW5ndGgiLCJ3cml0ZVN0cmluZyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiZGF0YSIsInRvU3RyaW5nIiwiY29tbWl0UGF5bG9hZCIsInJvbGxiYWNrUGF5bG9hZCIsInNhdmVQYXlsb2FkIiwiaXNvbGF0aW9uTGV2ZWxUb1RTUUwiXSwic291cmNlcyI6WyIuLi9zcmMvdHJhbnNhY3Rpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIgZnJvbSAnLi90cmFja2luZy1idWZmZXIvd3JpdGFibGUtdHJhY2tpbmctYnVmZmVyJztcbmltcG9ydCB7IHdyaXRlVG9UcmFja2luZ0J1ZmZlciB9IGZyb20gJy4vYWxsLWhlYWRlcnMnO1xuXG4vKlxuICBzMi4yLjYuOFxuICovXG5cbmV4cG9ydCBjb25zdCBPUEVSQVRJT05fVFlQRSA9IHtcbiAgVE1fR0VUX0RUQ19BRERSRVNTOiAweDAwLFxuICBUTV9QUk9QQUdBVEVfWEFDVDogMHgwMSxcbiAgVE1fQkVHSU5fWEFDVDogMHgwNSxcbiAgVE1fUFJPTU9URV9YQUNUOiAweDA2LFxuICBUTV9DT01NSVRfWEFDVDogMHgwNyxcbiAgVE1fUk9MTEJBQ0tfWEFDVDogMHgwOCxcbiAgVE1fU0FWRV9YQUNUOiAweDA5XG59O1xuXG5leHBvcnQgY29uc3QgSVNPTEFUSU9OX0xFVkVMOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge1xuICBOT19DSEFOR0U6IDB4MDAsXG4gIFJFQURfVU5DT01NSVRURUQ6IDB4MDEsXG4gIFJFQURfQ09NTUlUVEVEOiAweDAyLFxuICBSRVBFQVRBQkxFX1JFQUQ6IDB4MDMsXG4gIFNFUklBTElaQUJMRTogMHgwNCxcbiAgU05BUFNIT1Q6IDB4MDVcbn07XG5cbmV4cG9ydCBjb25zdCBpc29sYXRpb25MZXZlbEJ5VmFsdWU6IHsgW2tleTogbnVtYmVyXTogc3RyaW5nIH0gPSB7fTtcbmZvciAoY29uc3QgbmFtZSBpbiBJU09MQVRJT05fTEVWRUwpIHtcbiAgY29uc3QgdmFsdWUgPSBJU09MQVRJT05fTEVWRUxbbmFtZV07XG4gIGlzb2xhdGlvbkxldmVsQnlWYWx1ZVt2YWx1ZV0gPSBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VmFsaWRJc29sYXRpb25MZXZlbChpc29sYXRpb25MZXZlbDogYW55LCBuYW1lOiBzdHJpbmcpOiBhc3NlcnRzIGlzb2xhdGlvbkxldmVsIGlzIDAgfCAxIHwgMiB8IDMgfCA0IHwgNSB7XG4gIGlmICh0eXBlb2YgaXNvbGF0aW9uTGV2ZWwgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVGhlIFwiJHtuYW1lfVwiICR7bmFtZS5pbmNsdWRlcygnLicpID8gJ3Byb3BlcnR5JyA6ICdhcmd1bWVudCd9IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJHt0eXBlb2YgaXNvbGF0aW9uTGV2ZWx9ICgke2lzb2xhdGlvbkxldmVsfSlgKTtcbiAgfVxuXG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcihpc29sYXRpb25MZXZlbCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVGhlIHZhbHVlIG9mIFwiJHtuYW1lfVwiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhbiBpbnRlZ2VyLiBSZWNlaXZlZDogJHtpc29sYXRpb25MZXZlbH1gKTtcbiAgfVxuXG4gIGlmICghKGlzb2xhdGlvbkxldmVsID49IDAgJiYgaXNvbGF0aW9uTGV2ZWwgPD0gNSkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVGhlIHZhbHVlIG9mIFwiJHtuYW1lfVwiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSA+PSAwICYmIDw9IDUuIFJlY2VpdmVkOiAke2lzb2xhdGlvbkxldmVsfWApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbiB7XG4gIGRlY2xhcmUgbmFtZTogc3RyaW5nO1xuICBkZWNsYXJlIGlzb2xhdGlvbkxldmVsOiBudW1iZXI7XG4gIGRlY2xhcmUgb3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIGlzb2xhdGlvbkxldmVsID0gSVNPTEFUSU9OX0xFVkVMLk5PX0NIQU5HRSkge1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5pc29sYXRpb25MZXZlbCA9IGlzb2xhdGlvbkxldmVsO1xuICAgIHRoaXMub3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQgPSAxO1xuICB9XG5cbiAgYmVnaW5QYXlsb2FkKHR4bkRlc2NyaXB0b3I6IEJ1ZmZlcikge1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKDEwMCwgJ3VjczInKTtcbiAgICB3cml0ZVRvVHJhY2tpbmdCdWZmZXIoYnVmZmVyLCB0eG5EZXNjcmlwdG9yLCB0aGlzLm91dHN0YW5kaW5nUmVxdWVzdENvdW50KTtcbiAgICBidWZmZXIud3JpdGVVU2hvcnQoT1BFUkFUSU9OX1RZUEUuVE1fQkVHSU5fWEFDVCk7XG4gICAgYnVmZmVyLndyaXRlVUludDgodGhpcy5pc29sYXRpb25MZXZlbCk7XG4gICAgYnVmZmVyLndyaXRlVUludDgodGhpcy5uYW1lLmxlbmd0aCAqIDIpO1xuICAgIGJ1ZmZlci53cml0ZVN0cmluZyh0aGlzLm5hbWUsICd1Y3MyJyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgKltTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICB5aWVsZCBidWZmZXIuZGF0YTtcbiAgICAgIH0sXG4gICAgICB0b1N0cmluZzogKCkgPT4ge1xuICAgICAgICByZXR1cm4gJ0JlZ2luIFRyYW5zYWN0aW9uOiBuYW1lPScgKyB0aGlzLm5hbWUgKyAnLCBpc29sYXRpb25MZXZlbD0nICsgaXNvbGF0aW9uTGV2ZWxCeVZhbHVlW3RoaXMuaXNvbGF0aW9uTGV2ZWxdO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBjb21taXRQYXlsb2FkKHR4bkRlc2NyaXB0b3I6IEJ1ZmZlcikge1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKDEwMCwgJ2FzY2lpJyk7XG4gICAgd3JpdGVUb1RyYWNraW5nQnVmZmVyKGJ1ZmZlciwgdHhuRGVzY3JpcHRvciwgdGhpcy5vdXRzdGFuZGluZ1JlcXVlc3RDb3VudCk7XG4gICAgYnVmZmVyLndyaXRlVVNob3J0KE9QRVJBVElPTl9UWVBFLlRNX0NPTU1JVF9YQUNUKTtcbiAgICBidWZmZXIud3JpdGVVSW50OCh0aGlzLm5hbWUubGVuZ3RoICogMik7XG4gICAgYnVmZmVyLndyaXRlU3RyaW5nKHRoaXMubmFtZSwgJ3VjczInKTtcbiAgICAvLyBObyBmQmVnaW5YYWN0IGZsYWcsIHNvIG5vIG5ldyB0cmFuc2FjdGlvbiBpcyBzdGFydGVkLlxuICAgIGJ1ZmZlci53cml0ZVVJbnQ4KDApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgeWllbGQgYnVmZmVyLmRhdGE7XG4gICAgICB9LFxuICAgICAgdG9TdHJpbmc6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuICdDb21taXQgVHJhbnNhY3Rpb246IG5hbWU9JyArIHRoaXMubmFtZTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcm9sbGJhY2tQYXlsb2FkKHR4bkRlc2NyaXB0b3I6IEJ1ZmZlcikge1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKDEwMCwgJ2FzY2lpJyk7XG4gICAgd3JpdGVUb1RyYWNraW5nQnVmZmVyKGJ1ZmZlciwgdHhuRGVzY3JpcHRvciwgdGhpcy5vdXRzdGFuZGluZ1JlcXVlc3RDb3VudCk7XG4gICAgYnVmZmVyLndyaXRlVVNob3J0KE9QRVJBVElPTl9UWVBFLlRNX1JPTExCQUNLX1hBQ1QpO1xuICAgIGJ1ZmZlci53cml0ZVVJbnQ4KHRoaXMubmFtZS5sZW5ndGggKiAyKTtcbiAgICBidWZmZXIud3JpdGVTdHJpbmcodGhpcy5uYW1lLCAndWNzMicpO1xuICAgIC8vIE5vIGZCZWdpblhhY3QgZmxhZywgc28gbm8gbmV3IHRyYW5zYWN0aW9uIGlzIHN0YXJ0ZWQuXG4gICAgYnVmZmVyLndyaXRlVUludDgoMCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgKltTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICB5aWVsZCBidWZmZXIuZGF0YTtcbiAgICAgIH0sXG4gICAgICB0b1N0cmluZzogKCkgPT4ge1xuICAgICAgICByZXR1cm4gJ1JvbGxiYWNrIFRyYW5zYWN0aW9uOiBuYW1lPScgKyB0aGlzLm5hbWU7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHNhdmVQYXlsb2FkKHR4bkRlc2NyaXB0b3I6IEJ1ZmZlcikge1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKDEwMCwgJ2FzY2lpJyk7XG4gICAgd3JpdGVUb1RyYWNraW5nQnVmZmVyKGJ1ZmZlciwgdHhuRGVzY3JpcHRvciwgdGhpcy5vdXRzdGFuZGluZ1JlcXVlc3RDb3VudCk7XG4gICAgYnVmZmVyLndyaXRlVVNob3J0KE9QRVJBVElPTl9UWVBFLlRNX1NBVkVfWEFDVCk7XG4gICAgYnVmZmVyLndyaXRlVUludDgodGhpcy5uYW1lLmxlbmd0aCAqIDIpO1xuICAgIGJ1ZmZlci53cml0ZVN0cmluZyh0aGlzLm5hbWUsICd1Y3MyJyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgKltTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICB5aWVsZCBidWZmZXIuZGF0YTtcbiAgICAgIH0sXG4gICAgICB0b1N0cmluZzogKCkgPT4ge1xuICAgICAgICByZXR1cm4gJ1NhdmUgVHJhbnNhY3Rpb246IG5hbWU9JyArIHRoaXMubmFtZTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgaXNvbGF0aW9uTGV2ZWxUb1RTUUwoKSB7XG4gICAgc3dpdGNoICh0aGlzLmlzb2xhdGlvbkxldmVsKSB7XG4gICAgICBjYXNlIElTT0xBVElPTl9MRVZFTC5SRUFEX1VOQ09NTUlUVEVEOlxuICAgICAgICByZXR1cm4gJ1JFQUQgVU5DT01NSVRURUQnO1xuICAgICAgY2FzZSBJU09MQVRJT05fTEVWRUwuUkVBRF9DT01NSVRURUQ6XG4gICAgICAgIHJldHVybiAnUkVBRCBDT01NSVRURUQnO1xuICAgICAgY2FzZSBJU09MQVRJT05fTEVWRUwuUkVQRUFUQUJMRV9SRUFEOlxuICAgICAgICByZXR1cm4gJ1JFUEVBVEFCTEUgUkVBRCc7XG4gICAgICBjYXNlIElTT0xBVElPTl9MRVZFTC5TRVJJQUxJWkFCTEU6XG4gICAgICAgIHJldHVybiAnU0VSSUFMSVpBQkxFJztcbiAgICAgIGNhc2UgSVNPTEFUSU9OX0xFVkVMLlNOQVBTSE9UOlxuICAgICAgICByZXR1cm4gJ1NOQVBTSE9UJztcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsdUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFdBQUEsR0FBQUQsT0FBQTtBQUFzRCxTQUFBRCx1QkFBQUcsR0FBQSxXQUFBQSxHQUFBLElBQUFBLEdBQUEsQ0FBQUMsVUFBQSxHQUFBRCxHQUFBLEtBQUFFLE9BQUEsRUFBQUYsR0FBQTtBQUV0RDtBQUNBO0FBQ0E7O0FBRU8sTUFBTUcsY0FBYyxHQUFHO0VBQzVCQyxrQkFBa0IsRUFBRSxJQUFJO0VBQ3hCQyxpQkFBaUIsRUFBRSxJQUFJO0VBQ3ZCQyxhQUFhLEVBQUUsSUFBSTtFQUNuQkMsZUFBZSxFQUFFLElBQUk7RUFDckJDLGNBQWMsRUFBRSxJQUFJO0VBQ3BCQyxnQkFBZ0IsRUFBRSxJQUFJO0VBQ3RCQyxZQUFZLEVBQUU7QUFDaEIsQ0FBQztBQUFDQyxPQUFBLENBQUFSLGNBQUEsR0FBQUEsY0FBQTtBQUVLLE1BQU1TLGVBQTBDLEdBQUc7RUFDeERDLFNBQVMsRUFBRSxJQUFJO0VBQ2ZDLGdCQUFnQixFQUFFLElBQUk7RUFDdEJDLGNBQWMsRUFBRSxJQUFJO0VBQ3BCQyxlQUFlLEVBQUUsSUFBSTtFQUNyQkMsWUFBWSxFQUFFLElBQUk7RUFDbEJDLFFBQVEsRUFBRTtBQUNaLENBQUM7QUFBQ1AsT0FBQSxDQUFBQyxlQUFBLEdBQUFBLGVBQUE7QUFFSyxNQUFNTyxxQkFBZ0QsR0FBRyxDQUFDLENBQUM7QUFBQ1IsT0FBQSxDQUFBUSxxQkFBQSxHQUFBQSxxQkFBQTtBQUNuRSxLQUFLLE1BQU1DLElBQUksSUFBSVIsZUFBZSxFQUFFO0VBQ2xDLE1BQU1TLEtBQUssR0FBR1QsZUFBZSxDQUFDUSxJQUFJLENBQUM7RUFDbkNELHFCQUFxQixDQUFDRSxLQUFLLENBQUMsR0FBR0QsSUFBSTtBQUNyQztBQUVPLFNBQVNFLHlCQUF5QkEsQ0FBQ0MsY0FBbUIsRUFBRUgsSUFBWSxFQUFtRDtFQUM1SCxJQUFJLE9BQU9HLGNBQWMsS0FBSyxRQUFRLEVBQUU7SUFDdEMsTUFBTSxJQUFJQyxTQUFTLENBQUUsUUFBT0osSUFBSyxLQUFJQSxJQUFJLENBQUNLLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLEdBQUcsVUFBVywwQ0FBeUMsT0FBT0YsY0FBZSxLQUFJQSxjQUFlLEdBQUUsQ0FBQztFQUN6SztFQUVBLElBQUksQ0FBQ0csTUFBTSxDQUFDQyxTQUFTLENBQUNKLGNBQWMsQ0FBQyxFQUFFO0lBQ3JDLE1BQU0sSUFBSUssVUFBVSxDQUFFLGlCQUFnQlIsSUFBSyx1REFBc0RHLGNBQWUsRUFBQyxDQUFDO0VBQ3BIO0VBRUEsSUFBSSxFQUFFQSxjQUFjLElBQUksQ0FBQyxJQUFJQSxjQUFjLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDakQsTUFBTSxJQUFJSyxVQUFVLENBQUUsaUJBQWdCUixJQUFLLHlEQUF3REcsY0FBZSxFQUFDLENBQUM7RUFDdEg7QUFDRjtBQUVPLE1BQU1NLFdBQVcsQ0FBQztFQUt2QkMsV0FBV0EsQ0FBQ1YsSUFBWSxFQUFFRyxjQUFjLEdBQUdYLGVBQWUsQ0FBQ0MsU0FBUyxFQUFFO0lBQ3BFLElBQUksQ0FBQ08sSUFBSSxHQUFHQSxJQUFJO0lBQ2hCLElBQUksQ0FBQ0csY0FBYyxHQUFHQSxjQUFjO0lBQ3BDLElBQUksQ0FBQ1EsdUJBQXVCLEdBQUcsQ0FBQztFQUNsQztFQUVBQyxZQUFZQSxDQUFDQyxhQUFxQixFQUFFO0lBQ2xDLE1BQU1DLE1BQU0sR0FBRyxJQUFJQywrQkFBc0IsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDO0lBQ3RELElBQUFDLGlDQUFxQixFQUFDRixNQUFNLEVBQUVELGFBQWEsRUFBRSxJQUFJLENBQUNGLHVCQUF1QixDQUFDO0lBQzFFRyxNQUFNLENBQUNHLFdBQVcsQ0FBQ2xDLGNBQWMsQ0FBQ0csYUFBYSxDQUFDO0lBQ2hENEIsTUFBTSxDQUFDSSxVQUFVLENBQUMsSUFBSSxDQUFDZixjQUFjLENBQUM7SUFDdENXLE1BQU0sQ0FBQ0ksVUFBVSxDQUFDLElBQUksQ0FBQ2xCLElBQUksQ0FBQ21CLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDdkNMLE1BQU0sQ0FBQ00sV0FBVyxDQUFDLElBQUksQ0FBQ3BCLElBQUksRUFBRSxNQUFNLENBQUM7SUFFckMsT0FBTztNQUNMLEVBQUVxQixNQUFNLENBQUNDLFFBQVEsSUFBSTtRQUNuQixNQUFNUixNQUFNLENBQUNTLElBQUk7TUFDbkIsQ0FBQztNQUNEQyxRQUFRLEVBQUVBLENBQUEsS0FBTTtRQUNkLE9BQU8sMEJBQTBCLEdBQUcsSUFBSSxDQUFDeEIsSUFBSSxHQUFHLG1CQUFtQixHQUFHRCxxQkFBcUIsQ0FBQyxJQUFJLENBQUNJLGNBQWMsQ0FBQztNQUNsSDtJQUNGLENBQUM7RUFDSDtFQUVBc0IsYUFBYUEsQ0FBQ1osYUFBcUIsRUFBRTtJQUNuQyxNQUFNQyxNQUFNLEdBQUcsSUFBSUMsK0JBQXNCLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQztJQUN2RCxJQUFBQyxpQ0FBcUIsRUFBQ0YsTUFBTSxFQUFFRCxhQUFhLEVBQUUsSUFBSSxDQUFDRix1QkFBdUIsQ0FBQztJQUMxRUcsTUFBTSxDQUFDRyxXQUFXLENBQUNsQyxjQUFjLENBQUNLLGNBQWMsQ0FBQztJQUNqRDBCLE1BQU0sQ0FBQ0ksVUFBVSxDQUFDLElBQUksQ0FBQ2xCLElBQUksQ0FBQ21CLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDdkNMLE1BQU0sQ0FBQ00sV0FBVyxDQUFDLElBQUksQ0FBQ3BCLElBQUksRUFBRSxNQUFNLENBQUM7SUFDckM7SUFDQWMsTUFBTSxDQUFDSSxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBRXBCLE9BQU87TUFDTCxFQUFFRyxNQUFNLENBQUNDLFFBQVEsSUFBSTtRQUNuQixNQUFNUixNQUFNLENBQUNTLElBQUk7TUFDbkIsQ0FBQztNQUNEQyxRQUFRLEVBQUVBLENBQUEsS0FBTTtRQUNkLE9BQU8sMkJBQTJCLEdBQUcsSUFBSSxDQUFDeEIsSUFBSTtNQUNoRDtJQUNGLENBQUM7RUFDSDtFQUVBMEIsZUFBZUEsQ0FBQ2IsYUFBcUIsRUFBRTtJQUNyQyxNQUFNQyxNQUFNLEdBQUcsSUFBSUMsK0JBQXNCLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQztJQUN2RCxJQUFBQyxpQ0FBcUIsRUFBQ0YsTUFBTSxFQUFFRCxhQUFhLEVBQUUsSUFBSSxDQUFDRix1QkFBdUIsQ0FBQztJQUMxRUcsTUFBTSxDQUFDRyxXQUFXLENBQUNsQyxjQUFjLENBQUNNLGdCQUFnQixDQUFDO0lBQ25EeUIsTUFBTSxDQUFDSSxVQUFVLENBQUMsSUFBSSxDQUFDbEIsSUFBSSxDQUFDbUIsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUN2Q0wsTUFBTSxDQUFDTSxXQUFXLENBQUMsSUFBSSxDQUFDcEIsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUNyQztJQUNBYyxNQUFNLENBQUNJLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFFcEIsT0FBTztNQUNMLEVBQUVHLE1BQU0sQ0FBQ0MsUUFBUSxJQUFJO1FBQ25CLE1BQU1SLE1BQU0sQ0FBQ1MsSUFBSTtNQUNuQixDQUFDO01BQ0RDLFFBQVEsRUFBRUEsQ0FBQSxLQUFNO1FBQ2QsT0FBTyw2QkFBNkIsR0FBRyxJQUFJLENBQUN4QixJQUFJO01BQ2xEO0lBQ0YsQ0FBQztFQUNIO0VBRUEyQixXQUFXQSxDQUFDZCxhQUFxQixFQUFFO0lBQ2pDLE1BQU1DLE1BQU0sR0FBRyxJQUFJQywrQkFBc0IsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDO0lBQ3ZELElBQUFDLGlDQUFxQixFQUFDRixNQUFNLEVBQUVELGFBQWEsRUFBRSxJQUFJLENBQUNGLHVCQUF1QixDQUFDO0lBQzFFRyxNQUFNLENBQUNHLFdBQVcsQ0FBQ2xDLGNBQWMsQ0FBQ08sWUFBWSxDQUFDO0lBQy9Dd0IsTUFBTSxDQUFDSSxVQUFVLENBQUMsSUFBSSxDQUFDbEIsSUFBSSxDQUFDbUIsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUN2Q0wsTUFBTSxDQUFDTSxXQUFXLENBQUMsSUFBSSxDQUFDcEIsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUVyQyxPQUFPO01BQ0wsRUFBRXFCLE1BQU0sQ0FBQ0MsUUFBUSxJQUFJO1FBQ25CLE1BQU1SLE1BQU0sQ0FBQ1MsSUFBSTtNQUNuQixDQUFDO01BQ0RDLFFBQVEsRUFBRUEsQ0FBQSxLQUFNO1FBQ2QsT0FBTyx5QkFBeUIsR0FBRyxJQUFJLENBQUN4QixJQUFJO01BQzlDO0lBQ0YsQ0FBQztFQUNIO0VBRUE0QixvQkFBb0JBLENBQUEsRUFBRztJQUNyQixRQUFRLElBQUksQ0FBQ3pCLGNBQWM7TUFDekIsS0FBS1gsZUFBZSxDQUFDRSxnQkFBZ0I7UUFDbkMsT0FBTyxrQkFBa0I7TUFDM0IsS0FBS0YsZUFBZSxDQUFDRyxjQUFjO1FBQ2pDLE9BQU8sZ0JBQWdCO01BQ3pCLEtBQUtILGVBQWUsQ0FBQ0ksZUFBZTtRQUNsQyxPQUFPLGlCQUFpQjtNQUMxQixLQUFLSixlQUFlLENBQUNLLFlBQVk7UUFDL0IsT0FBTyxjQUFjO01BQ3ZCLEtBQUtMLGVBQWUsQ0FBQ00sUUFBUTtRQUMzQixPQUFPLFVBQVU7SUFDckI7SUFDQSxPQUFPLEVBQUU7RUFDWDtBQUNGO0FBQUNQLE9BQUEsQ0FBQWtCLFdBQUEsR0FBQUEsV0FBQSJ9
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.js","names":["_writableTrackingBuffer","_interopRequireDefault","require","_allHeaders","obj","__esModule","default","OPERATION_TYPE","TM_GET_DTC_ADDRESS","TM_PROPAGATE_XACT","TM_BEGIN_XACT","TM_PROMOTE_XACT","TM_COMMIT_XACT","TM_ROLLBACK_XACT","TM_SAVE_XACT","exports","ISOLATION_LEVEL","NO_CHANGE","READ_UNCOMMITTED","READ_COMMITTED","REPEATABLE_READ","SERIALIZABLE","SNAPSHOT","isolationLevelByValue","name","value","assertValidIsolationLevel","isolationLevel","TypeError","includes","Number","isInteger","RangeError","Transaction","outstandingRequestCount","constructor","beginPayload","txnDescriptor","buffer","WritableTrackingBuffer","writeToTrackingBuffer","writeUShort","writeUInt8","length","writeString","Symbol","iterator","data","toString","commitPayload","rollbackPayload","savePayload","isolationLevelToTSQL"],"sources":["../src/transaction.ts"],"sourcesContent":["import WritableTrackingBuffer from './tracking-buffer/writable-tracking-buffer';\nimport { writeToTrackingBuffer } from './all-headers';\n\n/*\n s2.2.6.8\n */\n\nexport const OPERATION_TYPE = {\n TM_GET_DTC_ADDRESS: 0x00,\n TM_PROPAGATE_XACT: 0x01,\n TM_BEGIN_XACT: 0x05,\n TM_PROMOTE_XACT: 0x06,\n TM_COMMIT_XACT: 0x07,\n TM_ROLLBACK_XACT: 0x08,\n TM_SAVE_XACT: 0x09\n};\n\nexport const ISOLATION_LEVEL: { [key: string]: number } = {\n NO_CHANGE: 0x00,\n READ_UNCOMMITTED: 0x01,\n READ_COMMITTED: 0x02,\n REPEATABLE_READ: 0x03,\n SERIALIZABLE: 0x04,\n SNAPSHOT: 0x05\n};\n\nexport const isolationLevelByValue: { [key: number]: string } = {};\nfor (const name in ISOLATION_LEVEL) {\n const value = ISOLATION_LEVEL[name];\n isolationLevelByValue[value] = name;\n}\n\nexport function assertValidIsolationLevel(isolationLevel: any, name: string): asserts isolationLevel is 0 | 1 | 2 | 3 | 4 | 5 {\n if (typeof isolationLevel !== 'number') {\n throw new TypeError(`The \"${name}\" ${name.includes('.') ? 'property' : 'argument'} must be of type number. Received type ${typeof isolationLevel} (${isolationLevel})`);\n }\n\n if (!Number.isInteger(isolationLevel)) {\n throw new RangeError(`The value of \"${name}\" is out of range. It must be an integer. Received: ${isolationLevel}`);\n }\n\n if (!(isolationLevel >= 0 && isolationLevel <= 5)) {\n throw new RangeError(`The value of \"${name}\" is out of range. It must be >= 0 && <= 5. Received: ${isolationLevel}`);\n }\n}\n\nexport class Transaction {\n name: string;\n isolationLevel: number;\n outstandingRequestCount: number;\n\n constructor(name: string, isolationLevel = ISOLATION_LEVEL.NO_CHANGE) {\n this.name = name;\n this.isolationLevel = isolationLevel;\n this.outstandingRequestCount = 1;\n }\n\n beginPayload(txnDescriptor: Buffer) {\n const buffer = new WritableTrackingBuffer(100, 'ucs2');\n writeToTrackingBuffer(buffer, txnDescriptor, this.outstandingRequestCount);\n buffer.writeUShort(OPERATION_TYPE.TM_BEGIN_XACT);\n buffer.writeUInt8(this.isolationLevel);\n buffer.writeUInt8(this.name.length * 2);\n buffer.writeString(this.name, 'ucs2');\n\n return {\n *[Symbol.iterator]() {\n yield buffer.data;\n },\n toString: () => {\n return 'Begin Transaction: name=' + this.name + ', isolationLevel=' + isolationLevelByValue[this.isolationLevel];\n }\n };\n }\n\n commitPayload(txnDescriptor: Buffer) {\n const buffer = new WritableTrackingBuffer(100, 'ascii');\n writeToTrackingBuffer(buffer, txnDescriptor, this.outstandingRequestCount);\n buffer.writeUShort(OPERATION_TYPE.TM_COMMIT_XACT);\n buffer.writeUInt8(this.name.length * 2);\n buffer.writeString(this.name, 'ucs2');\n // No fBeginXact flag, so no new transaction is started.\n buffer.writeUInt8(0);\n\n return {\n *[Symbol.iterator]() {\n yield buffer.data;\n },\n toString: () => {\n return 'Commit Transaction: name=' + this.name;\n }\n };\n }\n\n rollbackPayload(txnDescriptor: Buffer) {\n const buffer = new WritableTrackingBuffer(100, 'ascii');\n writeToTrackingBuffer(buffer, txnDescriptor, this.outstandingRequestCount);\n buffer.writeUShort(OPERATION_TYPE.TM_ROLLBACK_XACT);\n buffer.writeUInt8(this.name.length * 2);\n buffer.writeString(this.name, 'ucs2');\n // No fBeginXact flag, so no new transaction is started.\n buffer.writeUInt8(0);\n\n return {\n *[Symbol.iterator]() {\n yield buffer.data;\n },\n toString: () => {\n return 'Rollback Transaction: name=' + this.name;\n }\n };\n }\n\n savePayload(txnDescriptor: Buffer) {\n const buffer = new WritableTrackingBuffer(100, 'ascii');\n writeToTrackingBuffer(buffer, txnDescriptor, this.outstandingRequestCount);\n buffer.writeUShort(OPERATION_TYPE.TM_SAVE_XACT);\n buffer.writeUInt8(this.name.length * 2);\n buffer.writeString(this.name, 'ucs2');\n\n return {\n *[Symbol.iterator]() {\n yield buffer.data;\n },\n toString: () => {\n return 'Save Transaction: name=' + this.name;\n }\n };\n }\n\n isolationLevelToTSQL() {\n switch (this.isolationLevel) {\n case ISOLATION_LEVEL.READ_UNCOMMITTED:\n return 'READ UNCOMMITTED';\n case ISOLATION_LEVEL.READ_COMMITTED:\n return 'READ COMMITTED';\n case ISOLATION_LEVEL.REPEATABLE_READ:\n return 'REPEATABLE READ';\n case ISOLATION_LEVEL.SERIALIZABLE:\n return 'SERIALIZABLE';\n case ISOLATION_LEVEL.SNAPSHOT:\n return 'SNAPSHOT';\n }\n return '';\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"transaction.js","names":["_writableTrackingBuffer","_interopRequireDefault","require","_allHeaders","obj","__esModule","default","OPERATION_TYPE","TM_GET_DTC_ADDRESS","TM_PROPAGATE_XACT","TM_BEGIN_XACT","TM_PROMOTE_XACT","TM_COMMIT_XACT","TM_ROLLBACK_XACT","TM_SAVE_XACT","exports","ISOLATION_LEVEL","NO_CHANGE","READ_UNCOMMITTED","READ_COMMITTED","REPEATABLE_READ","SERIALIZABLE","SNAPSHOT","isolationLevelByValue","name","value","assertValidIsolationLevel","isolationLevel","TypeError","includes","Number","isInteger","RangeError","Transaction","constructor","outstandingRequestCount","beginPayload","txnDescriptor","buffer","WritableTrackingBuffer","writeToTrackingBuffer","writeUShort","writeUInt8","length","writeString","Symbol","iterator","data","toString","commitPayload","rollbackPayload","savePayload","isolationLevelToTSQL"],"sources":["../src/transaction.ts"],"sourcesContent":["import WritableTrackingBuffer from './tracking-buffer/writable-tracking-buffer';\nimport { writeToTrackingBuffer } from './all-headers';\n\n/*\n s2.2.6.8\n */\n\nexport const OPERATION_TYPE = {\n TM_GET_DTC_ADDRESS: 0x00,\n TM_PROPAGATE_XACT: 0x01,\n TM_BEGIN_XACT: 0x05,\n TM_PROMOTE_XACT: 0x06,\n TM_COMMIT_XACT: 0x07,\n TM_ROLLBACK_XACT: 0x08,\n TM_SAVE_XACT: 0x09\n};\n\nexport const ISOLATION_LEVEL: { [key: string]: number } = {\n NO_CHANGE: 0x00,\n READ_UNCOMMITTED: 0x01,\n READ_COMMITTED: 0x02,\n REPEATABLE_READ: 0x03,\n SERIALIZABLE: 0x04,\n SNAPSHOT: 0x05\n};\n\nexport const isolationLevelByValue: { [key: number]: string } = {};\nfor (const name in ISOLATION_LEVEL) {\n const value = ISOLATION_LEVEL[name];\n isolationLevelByValue[value] = name;\n}\n\nexport function assertValidIsolationLevel(isolationLevel: any, name: string): asserts isolationLevel is 0 | 1 | 2 | 3 | 4 | 5 {\n if (typeof isolationLevel !== 'number') {\n throw new TypeError(`The \"${name}\" ${name.includes('.') ? 'property' : 'argument'} must be of type number. Received type ${typeof isolationLevel} (${isolationLevel})`);\n }\n\n if (!Number.isInteger(isolationLevel)) {\n throw new RangeError(`The value of \"${name}\" is out of range. It must be an integer. Received: ${isolationLevel}`);\n }\n\n if (!(isolationLevel >= 0 && isolationLevel <= 5)) {\n throw new RangeError(`The value of \"${name}\" is out of range. It must be >= 0 && <= 5. Received: ${isolationLevel}`);\n }\n}\n\nexport class Transaction {\n declare name: string;\n declare isolationLevel: number;\n declare outstandingRequestCount: number;\n\n constructor(name: string, isolationLevel = ISOLATION_LEVEL.NO_CHANGE) {\n this.name = name;\n this.isolationLevel = isolationLevel;\n this.outstandingRequestCount = 1;\n }\n\n beginPayload(txnDescriptor: Buffer) {\n const buffer = new WritableTrackingBuffer(100, 'ucs2');\n writeToTrackingBuffer(buffer, txnDescriptor, this.outstandingRequestCount);\n buffer.writeUShort(OPERATION_TYPE.TM_BEGIN_XACT);\n buffer.writeUInt8(this.isolationLevel);\n buffer.writeUInt8(this.name.length * 2);\n buffer.writeString(this.name, 'ucs2');\n\n return {\n *[Symbol.iterator]() {\n yield buffer.data;\n },\n toString: () => {\n return 'Begin Transaction: name=' + this.name + ', isolationLevel=' + isolationLevelByValue[this.isolationLevel];\n }\n };\n }\n\n commitPayload(txnDescriptor: Buffer) {\n const buffer = new WritableTrackingBuffer(100, 'ascii');\n writeToTrackingBuffer(buffer, txnDescriptor, this.outstandingRequestCount);\n buffer.writeUShort(OPERATION_TYPE.TM_COMMIT_XACT);\n buffer.writeUInt8(this.name.length * 2);\n buffer.writeString(this.name, 'ucs2');\n // No fBeginXact flag, so no new transaction is started.\n buffer.writeUInt8(0);\n\n return {\n *[Symbol.iterator]() {\n yield buffer.data;\n },\n toString: () => {\n return 'Commit Transaction: name=' + this.name;\n }\n };\n }\n\n rollbackPayload(txnDescriptor: Buffer) {\n const buffer = new WritableTrackingBuffer(100, 'ascii');\n writeToTrackingBuffer(buffer, txnDescriptor, this.outstandingRequestCount);\n buffer.writeUShort(OPERATION_TYPE.TM_ROLLBACK_XACT);\n buffer.writeUInt8(this.name.length * 2);\n buffer.writeString(this.name, 'ucs2');\n // No fBeginXact flag, so no new transaction is started.\n buffer.writeUInt8(0);\n\n return {\n *[Symbol.iterator]() {\n yield buffer.data;\n },\n toString: () => {\n return 'Rollback Transaction: name=' + this.name;\n }\n };\n }\n\n savePayload(txnDescriptor: Buffer) {\n const buffer = new WritableTrackingBuffer(100, 'ascii');\n writeToTrackingBuffer(buffer, txnDescriptor, this.outstandingRequestCount);\n buffer.writeUShort(OPERATION_TYPE.TM_SAVE_XACT);\n buffer.writeUInt8(this.name.length * 2);\n buffer.writeString(this.name, 'ucs2');\n\n return {\n *[Symbol.iterator]() {\n yield buffer.data;\n },\n toString: () => {\n return 'Save Transaction: name=' + this.name;\n }\n };\n }\n\n isolationLevelToTSQL() {\n switch (this.isolationLevel) {\n case ISOLATION_LEVEL.READ_UNCOMMITTED:\n return 'READ UNCOMMITTED';\n case ISOLATION_LEVEL.READ_COMMITTED:\n return 'READ COMMITTED';\n case ISOLATION_LEVEL.REPEATABLE_READ:\n return 'REPEATABLE READ';\n case ISOLATION_LEVEL.SERIALIZABLE:\n return 'SERIALIZABLE';\n case ISOLATION_LEVEL.SNAPSHOT:\n return 'SNAPSHOT';\n }\n return '';\n }\n}\n"],"mappings":"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"}
@@ -593,4 +593,4 @@ function readDateTimeOffset(parser, dataLength, scale, callback) {
593
593
  var _default = valueParse;
594
594
  exports.default = _default;
595
595
  module.exports = valueParse;
596
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWV0YWRhdGFQYXJzZXIiLCJyZXF1aXJlIiwiX2RhdGFUeXBlIiwiX2ljb252TGl0ZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfc3ByaW50ZkpzIiwiX2d1aWRQYXJzZXIiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIk5VTEwiLCJNQVgiLCJUSFJFRV9BTkRfQV9USElSRCIsIk1PTkVZX0RJVklTT1IiLCJQTFBfTlVMTCIsIkJ1ZmZlciIsImZyb20iLCJVTktOT1dOX1BMUF9MRU4iLCJERUZBVUxUX0VOQ09ESU5HIiwicmVhZFRpbnlJbnQiLCJwYXJzZXIiLCJjYWxsYmFjayIsInJlYWRVSW50OCIsInJlYWRTbWFsbEludCIsInJlYWRJbnQxNkxFIiwicmVhZEludCIsInJlYWRJbnQzMkxFIiwicmVhZEJpZ0ludCIsInJlYWRCaWdJbnQ2NExFIiwidmFsdWUiLCJ0b1N0cmluZyIsInJlYWRSZWFsIiwicmVhZEZsb2F0TEUiLCJyZWFkRmxvYXQiLCJyZWFkRG91YmxlTEUiLCJyZWFkU21hbGxNb25leSIsInJlYWRNb25leSIsImhpZ2giLCJyZWFkVUludDMyTEUiLCJsb3ciLCJyZWFkQml0IiwidmFsdWVQYXJzZSIsIm1ldGFkYXRhIiwib3B0aW9ucyIsInR5cGUiLCJuYW1lIiwiZGF0YUxlbmd0aCIsIkVycm9yIiwiY29kZXBhZ2UiLCJjb2xsYXRpb24iLCJyZWFkTWF4Q2hhcnMiLCJyZWFkVUludDE2TEUiLCJyZWFkQ2hhcnMiLCJyZWFkTWF4TkNoYXJzIiwicmVhZE5DaGFycyIsInJlYWRNYXhCaW5hcnkiLCJyZWFkQmluYXJ5IiwidGV4dFBvaW50ZXJMZW5ndGgiLCJyZWFkQnVmZmVyIiwiX3RleHRQb2ludGVyIiwiX3RpbWVzdGFtcCIsInJlYWRTbWFsbERhdGVUaW1lIiwidXNlVVRDIiwicmVhZERhdGVUaW1lIiwicmVhZFRpbWUiLCJzY2FsZSIsInJlYWREYXRlIiwicmVhZERhdGVUaW1lMiIsInJlYWREYXRlVGltZU9mZnNldCIsInJlYWROdW1lcmljIiwicHJlY2lzaW9uIiwicmVhZFVuaXF1ZUlkZW50aWZpZXIiLCJzcHJpbnRmIiwicmVhZFZhcmlhbnQiLCJkYXRhIiwibG93ZXJDYXNlR3VpZHMiLCJidWZmZXJUb0xvd2VyQ2FzZUd1aWQiLCJidWZmZXJUb1VwcGVyQ2FzZUd1aWQiLCJfcHJlY2lzaW9uIiwic2lnbiIsInJlYWRWYWx1ZSIsInJlYWRVTnVtZXJpYzY0TEUiLCJyZWFkVU51bWVyaWM5NkxFIiwicmVhZFVOdW1lcmljMTI4TEUiLCJjYWxsIiwiTWF0aCIsInBvdyIsImJhc2VUeXBlIiwiVFlQRSIsInByb3BCeXRlcyIsIl9tYXhMZW5ndGgiLCJyZWFkQ29sbGF0aW9uIiwiX2NvbGxhdGlvbiIsImljb252IiwiZGVjb2RlIiwicmVhZE1heCIsImVxdWFscyIsInJlYWRNYXhVbmtub3duTGVuZ3RoIiwiY29uc29sZSIsIndhcm4iLCJleHBlY3RlZExlbmd0aCIsInJlYWRNYXhLbm93bkxlbmd0aCIsInRvdGFsTGVuZ3RoIiwiYWxsb2MiLCJvZmZzZXQiLCJuZXh0IiwiZG9uZSIsImNodW5rTGVuZ3RoIiwiY2h1bmsiLCJjb3B5IiwiY2h1bmtzIiwibGVuZ3RoIiwicHVzaCIsImNvbmNhdCIsImRheXMiLCJtaW51dGVzIiwiRGF0ZSIsIlVUQyIsInRocmVlSHVuZHJlZHRoc09mU2Vjb25kIiwibWlsbGlzZWNvbmRzIiwicm91bmQiLCJyZWFkVUludDI0TEUiLCJyZWFkVUludDQwTEUiLCJpIiwiZGF0ZSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsInRpbWUiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwiZ2V0TWlsbGlzZWNvbmRzIiwibmFub3NlY29uZHNEZWx0YSIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsIm1vZHVsZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy92YWx1ZS1wYXJzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFBhcnNlciwgeyBQYXJzZXJPcHRpb25zIH0gZnJvbSAnLi90b2tlbi9zdHJlYW0tcGFyc2VyJztcbmltcG9ydCB7IE1ldGFkYXRhLCByZWFkQ29sbGF0aW9uIH0gZnJvbSAnLi9tZXRhZGF0YS1wYXJzZXInO1xuaW1wb3J0IHsgVFlQRSB9IGZyb20gJy4vZGF0YS10eXBlJztcblxuaW1wb3J0IGljb252IGZyb20gJ2ljb252LWxpdGUnO1xuaW1wb3J0IHsgc3ByaW50ZiB9IGZyb20gJ3NwcmludGYtanMnO1xuaW1wb3J0IHsgYnVmZmVyVG9Mb3dlckNhc2VHdWlkLCBidWZmZXJUb1VwcGVyQ2FzZUd1aWQgfSBmcm9tICcuL2d1aWQtcGFyc2VyJztcblxuY29uc3QgTlVMTCA9ICgxIDw8IDE2KSAtIDE7XG5jb25zdCBNQVggPSAoMSA8PCAxNikgLSAxO1xuY29uc3QgVEhSRUVfQU5EX0FfVEhJUkQgPSAzICsgKDEgLyAzKTtcbmNvbnN0IE1PTkVZX0RJVklTT1IgPSAxMDAwMDtcbmNvbnN0IFBMUF9OVUxMID0gQnVmZmVyLmZyb20oWzB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkZdKTtcbmNvbnN0IFVOS05PV05fUExQX0xFTiA9IEJ1ZmZlci5mcm9tKFsweEZFLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGXSk7XG5jb25zdCBERUZBVUxUX0VOQ09ESU5HID0gJ3V0ZjgnO1xuXG5mdW5jdGlvbiByZWFkVGlueUludChwYXJzZXI6IFBhcnNlciwgY2FsbGJhY2s6ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCkge1xuICBwYXJzZXIucmVhZFVJbnQ4KGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gcmVhZFNtYWxsSW50KHBhcnNlcjogUGFyc2VyLCBjYWxsYmFjazogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB7XG4gIHBhcnNlci5yZWFkSW50MTZMRShjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHJlYWRJbnQocGFyc2VyOiBQYXJzZXIsIGNhbGxiYWNrOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpIHtcbiAgcGFyc2VyLnJlYWRJbnQzMkxFKGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gcmVhZEJpZ0ludChwYXJzZXI6IFBhcnNlciwgY2FsbGJhY2s6ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCkge1xuICBwYXJzZXIucmVhZEJpZ0ludDY0TEUoKHZhbHVlKSA9PiB7XG4gICAgY2FsbGJhY2sodmFsdWUudG9TdHJpbmcoKSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkUmVhbChwYXJzZXI6IFBhcnNlciwgY2FsbGJhY2s6ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCkge1xuICBwYXJzZXIucmVhZEZsb2F0TEUoY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiByZWFkRmxvYXQocGFyc2VyOiBQYXJzZXIsIGNhbGxiYWNrOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpIHtcbiAgcGFyc2VyLnJlYWREb3VibGVMRShjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHJlYWRTbWFsbE1vbmV5KHBhcnNlcjogUGFyc2VyLCBjYWxsYmFjazogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB7XG4gIHBhcnNlci5yZWFkSW50MzJMRSgodmFsdWUpID0+IHtcbiAgICBjYWxsYmFjayh2YWx1ZSAvIE1PTkVZX0RJVklTT1IpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVhZE1vbmV5KHBhcnNlcjogUGFyc2VyLCBjYWxsYmFjazogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB7XG4gIHBhcnNlci5yZWFkSW50MzJMRSgoaGlnaCkgPT4ge1xuICAgIHBhcnNlci5yZWFkVUludDMyTEUoKGxvdykgPT4ge1xuICAgICAgY2FsbGJhY2soKGxvdyArICgweDEwMDAwMDAwMCAqIGhpZ2gpKSAvIE1PTkVZX0RJVklTT1IpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVhZEJpdChwYXJzZXI6IFBhcnNlciwgY2FsbGJhY2s6ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCkge1xuICBwYXJzZXIucmVhZFVJbnQ4KCh2YWx1ZSkgPT4ge1xuICAgIGNhbGxiYWNrKCEhdmFsdWUpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdmFsdWVQYXJzZShwYXJzZXI6IFBhcnNlciwgbWV0YWRhdGE6IE1ldGFkYXRhLCBvcHRpb25zOiBQYXJzZXJPcHRpb25zLCBjYWxsYmFjazogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKTogdm9pZCB7XG4gIGNvbnN0IHR5cGUgPSBtZXRhZGF0YS50eXBlO1xuXG4gIHN3aXRjaCAodHlwZS5uYW1lKSB7XG4gICAgY2FzZSAnTnVsbCc6XG4gICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG5cbiAgICBjYXNlICdUaW55SW50JzpcbiAgICAgIHJldHVybiByZWFkVGlueUludChwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgIGNhc2UgJ1NtYWxsSW50JzpcbiAgICAgIHJldHVybiByZWFkU21hbGxJbnQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICBjYXNlICdJbnQnOlxuICAgICAgcmV0dXJuIHJlYWRJbnQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICBjYXNlICdCaWdJbnQnOlxuICAgICAgcmV0dXJuIHJlYWRCaWdJbnQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICBjYXNlICdJbnROJzpcbiAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoZGF0YUxlbmd0aCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHJldHVybiByZWFkVGlueUludChwYXJzZXIsIGNhbGxiYWNrKTtcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICByZXR1cm4gcmVhZFNtYWxsSW50KHBhcnNlciwgY2FsbGJhY2spO1xuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHJldHVybiByZWFkSW50KHBhcnNlciwgY2FsbGJhY2spO1xuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIHJldHVybiByZWFkQmlnSW50KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgZGF0YUxlbmd0aCAnICsgZGF0YUxlbmd0aCArICcgZm9yIEludE4nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdSZWFsJzpcbiAgICAgIHJldHVybiByZWFkUmVhbChwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgIGNhc2UgJ0Zsb2F0JzpcbiAgICAgIHJldHVybiByZWFkRmxvYXQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICBjYXNlICdGbG9hdE4nOlxuICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKGRhdGFMZW5ndGgpID0+IHtcbiAgICAgICAgc3dpdGNoIChkYXRhTGVuZ3RoKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuXG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgcmV0dXJuIHJlYWRSZWFsKHBhcnNlciwgY2FsbGJhY2spO1xuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIHJldHVybiByZWFkRmxvYXQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBkYXRhTGVuZ3RoICcgKyBkYXRhTGVuZ3RoICsgJyBmb3IgRmxvYXROJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnU21hbGxNb25leSc6XG4gICAgICByZXR1cm4gcmVhZFNtYWxsTW9uZXkocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICBjYXNlICdNb25leSc6XG4gICAgICByZXR1cm4gcmVhZE1vbmV5KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgY2FzZSAnTW9uZXlOJzpcbiAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoZGF0YUxlbmd0aCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHJldHVybiByZWFkU21hbGxNb25leShwYXJzZXIsIGNhbGxiYWNrKTtcbiAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICByZXR1cm4gcmVhZE1vbmV5KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgZGF0YUxlbmd0aCAnICsgZGF0YUxlbmd0aCArICcgZm9yIE1vbmV5TicpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIGNhc2UgJ0JpdCc6XG4gICAgICByZXR1cm4gcmVhZEJpdChwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgIGNhc2UgJ0JpdE4nOlxuICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKGRhdGFMZW5ndGgpID0+IHtcbiAgICAgICAgc3dpdGNoIChkYXRhTGVuZ3RoKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuXG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgcmV0dXJuIHJlYWRCaXQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBkYXRhTGVuZ3RoICcgKyBkYXRhTGVuZ3RoICsgJyBmb3IgQml0TicpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIGNhc2UgJ1ZhckNoYXInOlxuICAgIGNhc2UgJ0NoYXInOlxuICAgICAgY29uc3QgY29kZXBhZ2UgPSBtZXRhZGF0YS5jb2xsYXRpb24hLmNvZGVwYWdlITtcbiAgICAgIGlmIChtZXRhZGF0YS5kYXRhTGVuZ3RoID09PSBNQVgpIHtcbiAgICAgICAgcmV0dXJuIHJlYWRNYXhDaGFycyhwYXJzZXIsIGNvZGVwYWdlLCBjYWxsYmFjayk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50MTZMRSgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhTGVuZ3RoID09PSBOVUxMKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVhZENoYXJzKHBhcnNlciwgZGF0YUxlbmd0aCEsIGNvZGVwYWdlLCBjYWxsYmFjayk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgY2FzZSAnTlZhckNoYXInOlxuICAgIGNhc2UgJ05DaGFyJzpcbiAgICAgIGlmIChtZXRhZGF0YS5kYXRhTGVuZ3RoID09PSBNQVgpIHtcbiAgICAgICAgcmV0dXJuIHJlYWRNYXhOQ2hhcnMocGFyc2VyLCBjYWxsYmFjayk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50MTZMRSgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhTGVuZ3RoID09PSBOVUxMKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVhZE5DaGFycyhwYXJzZXIsIGRhdGFMZW5ndGghLCBjYWxsYmFjayk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgY2FzZSAnVmFyQmluYXJ5JzpcbiAgICBjYXNlICdCaW5hcnknOlxuICAgICAgaWYgKG1ldGFkYXRhLmRhdGFMZW5ndGggPT09IE1BWCkge1xuICAgICAgICByZXR1cm4gcmVhZE1heEJpbmFyeShwYXJzZXIsIGNhbGxiYWNrKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQxNkxFKChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGFMZW5ndGggPT09IE5VTEwpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZWFkQmluYXJ5KHBhcnNlciwgZGF0YUxlbmd0aCEsIGNhbGxiYWNrKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICBjYXNlICdUZXh0JzpcbiAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KCh0ZXh0UG9pbnRlckxlbmd0aCkgPT4ge1xuICAgICAgICBpZiAodGV4dFBvaW50ZXJMZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBwYXJzZXIucmVhZEJ1ZmZlcih0ZXh0UG9pbnRlckxlbmd0aCwgKF90ZXh0UG9pbnRlcikgPT4ge1xuICAgICAgICAgIHBhcnNlci5yZWFkQnVmZmVyKDgsIChfdGltZXN0YW1wKSA9PiB7XG4gICAgICAgICAgICBwYXJzZXIucmVhZFVJbnQzMkxFKChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgICAgICAgIHJlYWRDaGFycyhwYXJzZXIsIGRhdGFMZW5ndGghLCBtZXRhZGF0YS5jb2xsYXRpb24hLmNvZGVwYWdlISwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICBjYXNlICdOVGV4dCc6XG4gICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50OCgodGV4dFBvaW50ZXJMZW5ndGgpID0+IHtcbiAgICAgICAgaWYgKHRleHRQb2ludGVyTGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyc2VyLnJlYWRCdWZmZXIodGV4dFBvaW50ZXJMZW5ndGgsIChfdGV4dFBvaW50ZXIpID0+IHtcbiAgICAgICAgICBwYXJzZXIucmVhZEJ1ZmZlcig4LCAoX3RpbWVzdGFtcCkgPT4ge1xuICAgICAgICAgICAgcGFyc2VyLnJlYWRVSW50MzJMRSgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICAgICAgICByZWFkTkNoYXJzKHBhcnNlciwgZGF0YUxlbmd0aCEsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnSW1hZ2UnOlxuICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKHRleHRQb2ludGVyTGVuZ3RoKSA9PiB7XG4gICAgICAgIGlmICh0ZXh0UG9pbnRlckxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcnNlci5yZWFkQnVmZmVyKHRleHRQb2ludGVyTGVuZ3RoLCAoX3RleHRQb2ludGVyKSA9PiB7XG4gICAgICAgICAgcGFyc2VyLnJlYWRCdWZmZXIoOCwgKF90aW1lc3RhbXApID0+IHtcbiAgICAgICAgICAgIHBhcnNlci5yZWFkVUludDMyTEUoKGRhdGFMZW5ndGgpID0+IHtcbiAgICAgICAgICAgICAgcmVhZEJpbmFyeShwYXJzZXIsIGRhdGFMZW5ndGghLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIGNhc2UgJ1htbCc6XG4gICAgICByZXR1cm4gcmVhZE1heE5DaGFycyhwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgIGNhc2UgJ1NtYWxsRGF0ZVRpbWUnOlxuICAgICAgcmV0dXJuIHJlYWRTbWFsbERhdGVUaW1lKHBhcnNlciwgb3B0aW9ucy51c2VVVEMsIGNhbGxiYWNrKTtcblxuICAgIGNhc2UgJ0RhdGVUaW1lJzpcbiAgICAgIHJldHVybiByZWFkRGF0ZVRpbWUocGFyc2VyLCBvcHRpb25zLnVzZVVUQywgY2FsbGJhY2spO1xuXG4gICAgY2FzZSAnRGF0ZVRpbWVOJzpcbiAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoZGF0YUxlbmd0aCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHJldHVybiByZWFkU21hbGxEYXRlVGltZShwYXJzZXIsIG9wdGlvbnMudXNlVVRDLCBjYWxsYmFjayk7XG4gICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgcmV0dXJuIHJlYWREYXRlVGltZShwYXJzZXIsIG9wdGlvbnMudXNlVVRDLCBjYWxsYmFjayk7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBkYXRhTGVuZ3RoICcgKyBkYXRhTGVuZ3RoICsgJyBmb3IgRGF0ZVRpbWVOJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnVGltZSc6XG4gICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50OCgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICBpZiAoZGF0YUxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcmVhZFRpbWUocGFyc2VyLCBkYXRhTGVuZ3RoISwgbWV0YWRhdGEuc2NhbGUhLCBvcHRpb25zLnVzZVVUQywgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIGNhc2UgJ0RhdGUnOlxuICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKGRhdGFMZW5ndGgpID0+IHtcbiAgICAgICAgaWYgKGRhdGFMZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHJlYWREYXRlKHBhcnNlciwgb3B0aW9ucy51c2VVVEMsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdEYXRlVGltZTInOlxuICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKGRhdGFMZW5ndGgpID0+IHtcbiAgICAgICAgaWYgKGRhdGFMZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHJlYWREYXRlVGltZTIocGFyc2VyLCBkYXRhTGVuZ3RoISwgbWV0YWRhdGEuc2NhbGUhLCBvcHRpb25zLnVzZVVUQywgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIGNhc2UgJ0RhdGVUaW1lT2Zmc2V0JzpcbiAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgIGlmIChkYXRhTGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiByZWFkRGF0ZVRpbWVPZmZzZXQocGFyc2VyLCBkYXRhTGVuZ3RoISwgbWV0YWRhdGEuc2NhbGUhLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnTnVtZXJpY04nOlxuICAgIGNhc2UgJ0RlY2ltYWxOJzpcbiAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgIGlmIChkYXRhTGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiByZWFkTnVtZXJpYyhwYXJzZXIsIGRhdGFMZW5ndGghLCBtZXRhZGF0YS5wcmVjaXNpb24hLCBtZXRhZGF0YS5zY2FsZSEsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdVbmlxdWVJZGVudGlmaWVyJzpcbiAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoZGF0YUxlbmd0aCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICAgIGNhc2UgMHgxMDpcbiAgICAgICAgICAgIHJldHVybiByZWFkVW5pcXVlSWRlbnRpZmllcihwYXJzZXIsIG9wdGlvbnMsIGNhbGxiYWNrKTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Ioc3ByaW50ZignVW5zdXBwb3J0ZWQgZ3VpZCBzaXplICVkJywgZGF0YUxlbmd0aCEgLSAxKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnVURUJzpcbiAgICAgIHJldHVybiByZWFkTWF4QmluYXJ5KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgY2FzZSAnVmFyaWFudCc6XG4gICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50MzJMRSgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICBpZiAoZGF0YUxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlYWRWYXJpYW50KHBhcnNlciwgb3B0aW9ucywgZGF0YUxlbmd0aCEsIGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihzcHJpbnRmKCdVbnJlY29nbmlzZWQgdHlwZSAlcycsIHR5cGUubmFtZSkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRVbmlxdWVJZGVudGlmaWVyKHBhcnNlcjogUGFyc2VyLCBvcHRpb25zOiBQYXJzZXJPcHRpb25zLCBjYWxsYmFjazogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB7XG4gIHBhcnNlci5yZWFkQnVmZmVyKDB4MTAsIChkYXRhKSA9PiB7XG4gICAgY2FsbGJhY2sob3B0aW9ucy5sb3dlckNhc2VHdWlkcyA/IGJ1ZmZlclRvTG93ZXJDYXNlR3VpZChkYXRhKSA6IGJ1ZmZlclRvVXBwZXJDYXNlR3VpZChkYXRhKSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkTnVtZXJpYyhwYXJzZXI6IFBhcnNlciwgZGF0YUxlbmd0aDogbnVtYmVyLCBfcHJlY2lzaW9uOiBudW1iZXIsIHNjYWxlOiBudW1iZXIsIGNhbGxiYWNrOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpIHtcbiAgcGFyc2VyLnJlYWRVSW50OCgoc2lnbikgPT4ge1xuICAgIHNpZ24gPSBzaWduID09PSAxID8gMSA6IC0xO1xuXG4gICAgbGV0IHJlYWRWYWx1ZTtcbiAgICBpZiAoZGF0YUxlbmd0aCA9PT0gNSkge1xuICAgICAgcmVhZFZhbHVlID0gcGFyc2VyLnJlYWRVSW50MzJMRTtcbiAgICB9IGVsc2UgaWYgKGRhdGFMZW5ndGggPT09IDkpIHtcbiAgICAgIHJlYWRWYWx1ZSA9IHBhcnNlci5yZWFkVU51bWVyaWM2NExFO1xuICAgIH0gZWxzZSBpZiAoZGF0YUxlbmd0aCA9PT0gMTMpIHtcbiAgICAgIHJlYWRWYWx1ZSA9IHBhcnNlci5yZWFkVU51bWVyaWM5NkxFO1xuICAgIH0gZWxzZSBpZiAoZGF0YUxlbmd0aCA9PT0gMTcpIHtcbiAgICAgIHJlYWRWYWx1ZSA9IHBhcnNlci5yZWFkVU51bWVyaWMxMjhMRTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHNwcmludGYoJ1Vuc3VwcG9ydGVkIG51bWVyaWMgZGF0YUxlbmd0aCAlZCcsIGRhdGFMZW5ndGgpKTtcbiAgICB9XG5cbiAgICByZWFkVmFsdWUuY2FsbChwYXJzZXIsICh2YWx1ZSkgPT4ge1xuICAgICAgY2FsbGJhY2soKHZhbHVlICogc2lnbikgLyBNYXRoLnBvdygxMCwgc2NhbGUpKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRWYXJpYW50KHBhcnNlcjogUGFyc2VyLCBvcHRpb25zOiBQYXJzZXJPcHRpb25zLCBkYXRhTGVuZ3RoOiBudW1iZXIsIGNhbGxiYWNrOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpIHtcbiAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKGJhc2VUeXBlKSA9PiB7XG4gICAgY29uc3QgdHlwZSA9IFRZUEVbYmFzZVR5cGVdO1xuXG4gICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKHByb3BCeXRlcykgPT4ge1xuICAgICAgZGF0YUxlbmd0aCA9IGRhdGFMZW5ndGggLSBwcm9wQnl0ZXMgLSAyO1xuXG4gICAgICBzd2l0Y2ggKHR5cGUubmFtZSkge1xuICAgICAgICBjYXNlICdVbmlxdWVJZGVudGlmaWVyJzpcbiAgICAgICAgICByZXR1cm4gcmVhZFVuaXF1ZUlkZW50aWZpZXIocGFyc2VyLCBvcHRpb25zLCBjYWxsYmFjayk7XG5cbiAgICAgICAgY2FzZSAnQml0JzpcbiAgICAgICAgICByZXR1cm4gcmVhZEJpdChwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgICAgICBjYXNlICdUaW55SW50JzpcbiAgICAgICAgICByZXR1cm4gcmVhZFRpbnlJbnQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICAgICAgY2FzZSAnU21hbGxJbnQnOlxuICAgICAgICAgIHJldHVybiByZWFkU21hbGxJbnQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICAgICAgY2FzZSAnSW50JzpcbiAgICAgICAgICByZXR1cm4gcmVhZEludChwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgICAgICBjYXNlICdCaWdJbnQnOlxuICAgICAgICAgIHJldHVybiByZWFkQmlnSW50KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgICAgIGNhc2UgJ1NtYWxsRGF0ZVRpbWUnOlxuICAgICAgICAgIHJldHVybiByZWFkU21hbGxEYXRlVGltZShwYXJzZXIsIG9wdGlvbnMudXNlVVRDLCBjYWxsYmFjayk7XG5cbiAgICAgICAgY2FzZSAnRGF0ZVRpbWUnOlxuICAgICAgICAgIHJldHVybiByZWFkRGF0ZVRpbWUocGFyc2VyLCBvcHRpb25zLnVzZVVUQywgY2FsbGJhY2spO1xuXG4gICAgICAgIGNhc2UgJ1JlYWwnOlxuICAgICAgICAgIHJldHVybiByZWFkUmVhbChwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgICAgICBjYXNlICdGbG9hdCc6XG4gICAgICAgICAgcmV0dXJuIHJlYWRGbG9hdChwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgICAgICBjYXNlICdTbWFsbE1vbmV5JzpcbiAgICAgICAgICByZXR1cm4gcmVhZFNtYWxsTW9uZXkocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICAgICAgY2FzZSAnTW9uZXknOlxuICAgICAgICAgIHJldHVybiByZWFkTW9uZXkocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICAgICAgY2FzZSAnRGF0ZSc6XG4gICAgICAgICAgcmV0dXJuIHJlYWREYXRlKHBhcnNlciwgb3B0aW9ucy51c2VVVEMsIGNhbGxiYWNrKTtcblxuICAgICAgICBjYXNlICdUaW1lJzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50OCgoc2NhbGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiByZWFkVGltZShwYXJzZXIsIGRhdGFMZW5ndGgsIHNjYWxlLCBvcHRpb25zLnVzZVVUQywgY2FsbGJhY2spO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNhc2UgJ0RhdGVUaW1lMic6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKHNjYWxlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZERhdGVUaW1lMihwYXJzZXIsIGRhdGFMZW5ndGgsIHNjYWxlLCBvcHRpb25zLnVzZVVUQywgY2FsbGJhY2spO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNhc2UgJ0RhdGVUaW1lT2Zmc2V0JzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50OCgoc2NhbGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiByZWFkRGF0ZVRpbWVPZmZzZXQocGFyc2VyLCBkYXRhTGVuZ3RoLCBzY2FsZSwgY2FsbGJhY2spO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNhc2UgJ1ZhckJpbmFyeSc6XG4gICAgICAgIGNhc2UgJ0JpbmFyeSc6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDE2TEUoKF9tYXhMZW5ndGgpID0+IHtcbiAgICAgICAgICAgIHJlYWRCaW5hcnkocGFyc2VyLCBkYXRhTGVuZ3RoLCBjYWxsYmFjayk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgY2FzZSAnTnVtZXJpY04nOlxuICAgICAgICBjYXNlICdEZWNpbWFsTic6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKHByZWNpc2lvbikgPT4ge1xuICAgICAgICAgICAgcGFyc2VyLnJlYWRVSW50OCgoc2NhbGUpID0+IHtcbiAgICAgICAgICAgICAgcmVhZE51bWVyaWMocGFyc2VyLCBkYXRhTGVuZ3RoLCBwcmVjaXNpb24sIHNjYWxlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICBjYXNlICdWYXJDaGFyJzpcbiAgICAgICAgY2FzZSAnQ2hhcic6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDE2TEUoKF9tYXhMZW5ndGgpID0+IHtcbiAgICAgICAgICAgIHJlYWRDb2xsYXRpb24ocGFyc2VyLCAoY29sbGF0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIHJlYWRDaGFycyhwYXJzZXIsIGRhdGFMZW5ndGgsIGNvbGxhdGlvbi5jb2RlcGFnZSEsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNhc2UgJ05WYXJDaGFyJzpcbiAgICAgICAgY2FzZSAnTkNoYXInOlxuICAgICAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQxNkxFKChfbWF4TGVuZ3RoKSA9PiB7XG4gICAgICAgICAgICByZWFkQ29sbGF0aW9uKHBhcnNlciwgKF9jb2xsYXRpb24pID0+IHtcbiAgICAgICAgICAgICAgcmVhZE5DaGFycyhwYXJzZXIsIGRhdGFMZW5ndGgsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHR5cGUhJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkQmluYXJ5KHBhcnNlcjogUGFyc2VyLCBkYXRhTGVuZ3RoOiBudW1iZXIsIGNhbGxiYWNrOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpIHtcbiAgcmV0dXJuIHBhcnNlci5yZWFkQnVmZmVyKGRhdGFMZW5ndGgsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gcmVhZENoYXJzKHBhcnNlcjogUGFyc2VyLCBkYXRhTGVuZ3RoOiBudW1iZXIsIGNvZGVwYWdlOiBzdHJpbmcsIGNhbGxiYWNrOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpIHtcbiAgaWYgKGNvZGVwYWdlID09IG51bGwpIHtcbiAgICBjb2RlcGFnZSA9IERFRkFVTFRfRU5DT0RJTkc7XG4gIH1cblxuICByZXR1cm4gcGFyc2VyLnJlYWRCdWZmZXIoZGF0YUxlbmd0aCwgKGRhdGEpID0+IHtcbiAgICBjYWxsYmFjayhpY29udi5kZWNvZGUoZGF0YSwgY29kZXBhZ2UpKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWROQ2hhcnMocGFyc2VyOiBQYXJzZXIsIGRhdGFMZW5ndGg6IG51bWJlciwgY2FsbGJhY2s6ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCkge1xuICBwYXJzZXIucmVhZEJ1ZmZlcihkYXRhTGVuZ3RoLCAoZGF0YSkgPT4ge1xuICAgIGNhbGxiYWNrKGRhdGEudG9TdHJpbmcoJ3VjczInKSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkTWF4QmluYXJ5KHBhcnNlcjogUGFyc2VyLCBjYWxsYmFjazogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB7XG4gIHJldHVybiByZWFkTWF4KHBhcnNlciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiByZWFkTWF4Q2hhcnMocGFyc2VyOiBQYXJzZXIsIGNvZGVwYWdlOiBzdHJpbmcsIGNhbGxiYWNrOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpIHtcbiAgaWYgKGNvZGVwYWdlID09IG51bGwpIHtcbiAgICBjb2RlcGFnZSA9IERFRkFVTFRfRU5DT0RJTkc7XG4gIH1cblxuICByZWFkTWF4KHBhcnNlciwgKGRhdGEpID0+IHtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgY2FsbGJhY2soaWNvbnYuZGVjb2RlKGRhdGEsIGNvZGVwYWdlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRNYXhOQ2hhcnMocGFyc2VyOiBQYXJzZXIsIGNhbGxiYWNrOiAodmFsdWU6IHN0cmluZyB8IG51bGwpID0+IHZvaWQpIHtcbiAgcmVhZE1heChwYXJzZXIsIChkYXRhKSA9PiB7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGNhbGxiYWNrKGRhdGEudG9TdHJpbmcoJ3VjczInKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRNYXgocGFyc2VyOiBQYXJzZXIsIGNhbGxiYWNrOiAodmFsdWU6IG51bGwgfCBCdWZmZXIpID0+IHZvaWQpIHtcbiAgcGFyc2VyLnJlYWRCdWZmZXIoOCwgKHR5cGUpID0+IHtcbiAgICBpZiAodHlwZS5lcXVhbHMoUExQX05VTEwpKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgfSBlbHNlIGlmICh0eXBlLmVxdWFscyhVTktOT1dOX1BMUF9MRU4pKSB7XG4gICAgICByZXR1cm4gcmVhZE1heFVua25vd25MZW5ndGgocGFyc2VyLCBjYWxsYmFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxvdyA9IHR5cGUucmVhZFVJbnQzMkxFKDApO1xuICAgICAgY29uc3QgaGlnaCA9IHR5cGUucmVhZFVJbnQzMkxFKDQpO1xuXG4gICAgICBpZiAoaGlnaCA+PSAoMiA8PCAoNTMgLSAzMikpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignUmVhZCBVSW50NjRMRSA+IDUzIGJpdHMgOiBoaWdoPScgKyBoaWdoICsgJywgbG93PScgKyBsb3cpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBleHBlY3RlZExlbmd0aCA9IGxvdyArICgweDEwMDAwMDAwMCAqIGhpZ2gpO1xuICAgICAgcmV0dXJuIHJlYWRNYXhLbm93bkxlbmd0aChwYXJzZXIsIGV4cGVjdGVkTGVuZ3RoLCBjYWxsYmFjayk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVhZE1heEtub3duTGVuZ3RoKHBhcnNlcjogUGFyc2VyLCB0b3RhbExlbmd0aDogbnVtYmVyLCBjYWxsYmFjazogKHZhbHVlOiBudWxsIHwgQnVmZmVyKSA9PiB2b2lkKSB7XG4gIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2ModG90YWxMZW5ndGgsIDApO1xuXG4gIGxldCBvZmZzZXQgPSAwO1xuICBmdW5jdGlvbiBuZXh0KGRvbmU6IGFueSkge1xuICAgIHBhcnNlci5yZWFkVUludDMyTEUoKGNodW5rTGVuZ3RoKSA9PiB7XG4gICAgICBpZiAoIWNodW5rTGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBkb25lKCk7XG4gICAgICB9XG5cbiAgICAgIHBhcnNlci5yZWFkQnVmZmVyKGNodW5rTGVuZ3RoLCAoY2h1bmspID0+IHtcbiAgICAgICAgY2h1bmsuY29weShkYXRhLCBvZmZzZXQpO1xuICAgICAgICBvZmZzZXQgKz0gY2h1bmtMZW5ndGg7XG5cbiAgICAgICAgbmV4dChkb25lKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbmV4dCgoKSA9PiB7XG4gICAgaWYgKG9mZnNldCAhPT0gdG90YWxMZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFydGlhbGx5IExlbmd0aC1wcmVmaXhlZCBCeXRlcyB1bm1hdGNoZWQgbGVuZ3RocyA6IGV4cGVjdGVkICcgKyB0b3RhbExlbmd0aCArICcsIGJ1dCBnb3QgJyArIG9mZnNldCArICcgYnl0ZXMnKTtcbiAgICB9XG5cbiAgICBjYWxsYmFjayhkYXRhKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRNYXhVbmtub3duTGVuZ3RoKHBhcnNlcjogUGFyc2VyLCBjYWxsYmFjazogKHZhbHVlOiBudWxsIHwgQnVmZmVyKSA9PiB2b2lkKSB7XG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcblxuICBsZXQgbGVuZ3RoID0gMDtcbiAgZnVuY3Rpb24gbmV4dChkb25lOiBhbnkpIHtcbiAgICBwYXJzZXIucmVhZFVJbnQzMkxFKChjaHVua0xlbmd0aCkgPT4ge1xuICAgICAgaWYgKCFjaHVua0xlbmd0aCkge1xuICAgICAgICByZXR1cm4gZG9uZSgpO1xuICAgICAgfVxuXG4gICAgICBwYXJzZXIucmVhZEJ1ZmZlcihjaHVua0xlbmd0aCwgKGNodW5rKSA9PiB7XG4gICAgICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICAgICAgbGVuZ3RoICs9IGNodW5rTGVuZ3RoO1xuXG4gICAgICAgIG5leHQoZG9uZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5leHQoKCkgPT4ge1xuICAgIGNhbGxiYWNrKEJ1ZmZlci5jb25jYXQoY2h1bmtzLCBsZW5ndGgpKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRTbWFsbERhdGVUaW1lKHBhcnNlcjogUGFyc2VyLCB1c2VVVEM6IGJvb2xlYW4sIGNhbGxiYWNrOiAodmFsdWU6IERhdGUpID0+IHZvaWQpIHtcbiAgcGFyc2VyLnJlYWRVSW50MTZMRSgoZGF5cykgPT4ge1xuICAgIHBhcnNlci5yZWFkVUludDE2TEUoKG1pbnV0ZXMpID0+IHtcbiAgICAgIGxldCB2YWx1ZTtcbiAgICAgIGlmICh1c2VVVEMpIHtcbiAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZShEYXRlLlVUQygxOTAwLCAwLCAxICsgZGF5cywgMCwgbWludXRlcykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZSgxOTAwLCAwLCAxICsgZGF5cywgMCwgbWludXRlcyk7XG4gICAgICB9XG4gICAgICBjYWxsYmFjayh2YWx1ZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkRGF0ZVRpbWUocGFyc2VyOiBQYXJzZXIsIHVzZVVUQzogYm9vbGVhbiwgY2FsbGJhY2s6ICh2YWx1ZTogRGF0ZSkgPT4gdm9pZCkge1xuICBwYXJzZXIucmVhZEludDMyTEUoKGRheXMpID0+IHtcbiAgICBwYXJzZXIucmVhZFVJbnQzMkxFKCh0aHJlZUh1bmRyZWR0aHNPZlNlY29uZCkgPT4ge1xuICAgICAgY29uc3QgbWlsbGlzZWNvbmRzID0gTWF0aC5yb3VuZCh0aHJlZUh1bmRyZWR0aHNPZlNlY29uZCAqIFRIUkVFX0FORF9BX1RISVJEKTtcblxuICAgICAgbGV0IHZhbHVlO1xuICAgICAgaWYgKHVzZVVUQykge1xuICAgICAgICB2YWx1ZSA9IG5ldyBEYXRlKERhdGUuVVRDKDE5MDAsIDAsIDEgKyBkYXlzLCAwLCAwLCAwLCBtaWxsaXNlY29uZHMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gbmV3IERhdGUoMTkwMCwgMCwgMSArIGRheXMsIDAsIDAsIDAsIG1pbGxpc2Vjb25kcyk7XG4gICAgICB9XG5cbiAgICAgIGNhbGxiYWNrKHZhbHVlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmludGVyZmFjZSBEYXRlV2l0aE5hbm9zZWNvbmRzRGVsdGEgZXh0ZW5kcyBEYXRlIHtcbiAgbmFub3NlY29uZHNEZWx0YTogbnVtYmVyO1xufVxuXG5mdW5jdGlvbiByZWFkVGltZShwYXJzZXI6IFBhcnNlciwgZGF0YUxlbmd0aDogbnVtYmVyLCBzY2FsZTogbnVtYmVyLCB1c2VVVEM6IGJvb2xlYW4sIGNhbGxiYWNrOiAodmFsdWU6IERhdGVXaXRoTmFub3NlY29uZHNEZWx0YSkgPT4gdm9pZCkge1xuICBsZXQgcmVhZFZhbHVlOiBhbnk7XG4gIHN3aXRjaCAoZGF0YUxlbmd0aCkge1xuICAgIGNhc2UgMzpcbiAgICAgIHJlYWRWYWx1ZSA9IHBhcnNlci5yZWFkVUludDI0TEU7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDQ6XG4gICAgICByZWFkVmFsdWUgPSBwYXJzZXIucmVhZFVJbnQzMkxFO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA1OlxuICAgICAgcmVhZFZhbHVlID0gcGFyc2VyLnJlYWRVSW50NDBMRTtcbiAgfVxuXG4gIHJlYWRWYWx1ZSEuY2FsbChwYXJzZXIsICh2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgaWYgKHNjYWxlIDwgNykge1xuICAgICAgZm9yIChsZXQgaSA9IHNjYWxlOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgIHZhbHVlICo9IDEwO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBkYXRlO1xuICAgIGlmICh1c2VVVEMpIHtcbiAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQygxOTcwLCAwLCAxLCAwLCAwLCAwLCB2YWx1ZSAvIDEwMDAwKSkgYXMgRGF0ZVdpdGhOYW5vc2Vjb25kc0RlbHRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRlID0gbmV3IERhdGUoMTk3MCwgMCwgMSwgMCwgMCwgMCwgdmFsdWUgLyAxMDAwMCkgYXMgRGF0ZVdpdGhOYW5vc2Vjb25kc0RlbHRhO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZGF0ZSwgJ25hbm9zZWNvbmRzRGVsdGEnLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiAodmFsdWUgJSAxMDAwMCkgLyBNYXRoLnBvdygxMCwgNylcbiAgICB9KTtcbiAgICBjYWxsYmFjayhkYXRlKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWREYXRlKHBhcnNlcjogUGFyc2VyLCB1c2VVVEM6IGJvb2xlYW4sIGNhbGxiYWNrOiAodmFsdWU6IERhdGUpID0+IHZvaWQpIHtcbiAgcGFyc2VyLnJlYWRVSW50MjRMRSgoZGF5cykgPT4ge1xuICAgIGlmICh1c2VVVEMpIHtcbiAgICAgIGNhbGxiYWNrKG5ldyBEYXRlKERhdGUuVVRDKDIwMDAsIDAsIGRheXMgLSA3MzAxMTgpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKG5ldyBEYXRlKDIwMDAsIDAsIGRheXMgLSA3MzAxMTgpKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkRGF0ZVRpbWUyKHBhcnNlcjogUGFyc2VyLCBkYXRhTGVuZ3RoOiBudW1iZXIsIHNjYWxlOiBudW1iZXIsIHVzZVVUQzogYm9vbGVhbiwgY2FsbGJhY2s6ICh2YWx1ZTogRGF0ZVdpdGhOYW5vc2Vjb25kc0RlbHRhKSA9PiB2b2lkKSB7XG4gIHJlYWRUaW1lKHBhcnNlciwgZGF0YUxlbmd0aCAtIDMsIHNjYWxlLCB1c2VVVEMsICh0aW1lKSA9PiB7IC8vIFRPRE86ICdpbnB1dCcgaXMgJ3RpbWUnLCBidXQgVHlwZVNjcmlwdCBjYW5ub3QgZmluZCBcInRpbWUubmFub3NlY29uZHNEZWx0YVwiO1xuICAgIHBhcnNlci5yZWFkVUludDI0TEUoKGRheXMpID0+IHtcbiAgICAgIGxldCBkYXRlO1xuICAgICAgaWYgKHVzZVVUQykge1xuICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMoMjAwMCwgMCwgZGF5cyAtIDczMDExOCwgMCwgMCwgMCwgK3RpbWUpKSBhcyBEYXRlV2l0aE5hbm9zZWNvbmRzRGVsdGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRlID0gbmV3IERhdGUoMjAwMCwgMCwgZGF5cyAtIDczMDExOCwgdGltZS5nZXRIb3VycygpLCB0aW1lLmdldE1pbnV0ZXMoKSwgdGltZS5nZXRTZWNvbmRzKCksIHRpbWUuZ2V0TWlsbGlzZWNvbmRzKCkpIGFzIERhdGVXaXRoTmFub3NlY29uZHNEZWx0YTtcbiAgICAgIH1cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkYXRlLCAnbmFub3NlY29uZHNEZWx0YScsIHtcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHZhbHVlOiB0aW1lLm5hbm9zZWNvbmRzRGVsdGFcbiAgICAgIH0pO1xuICAgICAgY2FsbGJhY2soZGF0ZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkRGF0ZVRpbWVPZmZzZXQocGFyc2VyOiBQYXJzZXIsIGRhdGFMZW5ndGg6IG51bWJlciwgc2NhbGU6IG51bWJlciwgY2FsbGJhY2s6ICh2YWx1ZTogRGF0ZVdpdGhOYW5vc2Vjb25kc0RlbHRhKSA9PiB2b2lkKSB7XG4gIHJlYWRUaW1lKHBhcnNlciwgZGF0YUxlbmd0aCAtIDUsIHNjYWxlLCB0cnVlLCAodGltZSkgPT4ge1xuICAgIHBhcnNlci5yZWFkVUludDI0TEUoKGRheXMpID0+IHtcbiAgICAgIC8vIG9mZnNldFxuICAgICAgcGFyc2VyLnJlYWRJbnQxNkxFKCgpID0+IHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDKDIwMDAsIDAsIGRheXMgLSA3MzAxMTgsIDAsIDAsIDAsICt0aW1lKSkgYXMgRGF0ZVdpdGhOYW5vc2Vjb25kc0RlbHRhO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZGF0ZSwgJ25hbm9zZWNvbmRzRGVsdGEnLCB7XG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgdmFsdWU6IHRpbWUubmFub3NlY29uZHNEZWx0YVxuICAgICAgICB9KTtcbiAgICAgICAgY2FsbGJhY2soZGF0ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHZhbHVlUGFyc2U7XG5tb2R1bGUuZXhw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
596
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWV0YWRhdGFQYXJzZXIiLCJyZXF1aXJlIiwiX2RhdGFUeXBlIiwiX2ljb252TGl0ZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfc3ByaW50ZkpzIiwiX2d1aWRQYXJzZXIiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIk5VTEwiLCJNQVgiLCJUSFJFRV9BTkRfQV9USElSRCIsIk1PTkVZX0RJVklTT1IiLCJQTFBfTlVMTCIsIkJ1ZmZlciIsImZyb20iLCJVTktOT1dOX1BMUF9MRU4iLCJERUZBVUxUX0VOQ09ESU5HIiwicmVhZFRpbnlJbnQiLCJwYXJzZXIiLCJjYWxsYmFjayIsInJlYWRVSW50OCIsInJlYWRTbWFsbEludCIsInJlYWRJbnQxNkxFIiwicmVhZEludCIsInJlYWRJbnQzMkxFIiwicmVhZEJpZ0ludCIsInJlYWRCaWdJbnQ2NExFIiwidmFsdWUiLCJ0b1N0cmluZyIsInJlYWRSZWFsIiwicmVhZEZsb2F0TEUiLCJyZWFkRmxvYXQiLCJyZWFkRG91YmxlTEUiLCJyZWFkU21hbGxNb25leSIsInJlYWRNb25leSIsImhpZ2giLCJyZWFkVUludDMyTEUiLCJsb3ciLCJyZWFkQml0IiwidmFsdWVQYXJzZSIsIm1ldGFkYXRhIiwib3B0aW9ucyIsInR5cGUiLCJuYW1lIiwiZGF0YUxlbmd0aCIsIkVycm9yIiwiY29kZXBhZ2UiLCJjb2xsYXRpb24iLCJyZWFkTWF4Q2hhcnMiLCJyZWFkVUludDE2TEUiLCJyZWFkQ2hhcnMiLCJyZWFkTWF4TkNoYXJzIiwicmVhZE5DaGFycyIsInJlYWRNYXhCaW5hcnkiLCJyZWFkQmluYXJ5IiwidGV4dFBvaW50ZXJMZW5ndGgiLCJyZWFkQnVmZmVyIiwiX3RleHRQb2ludGVyIiwiX3RpbWVzdGFtcCIsInJlYWRTbWFsbERhdGVUaW1lIiwidXNlVVRDIiwicmVhZERhdGVUaW1lIiwicmVhZFRpbWUiLCJzY2FsZSIsInJlYWREYXRlIiwicmVhZERhdGVUaW1lMiIsInJlYWREYXRlVGltZU9mZnNldCIsInJlYWROdW1lcmljIiwicHJlY2lzaW9uIiwicmVhZFVuaXF1ZUlkZW50aWZpZXIiLCJzcHJpbnRmIiwicmVhZFZhcmlhbnQiLCJkYXRhIiwibG93ZXJDYXNlR3VpZHMiLCJidWZmZXJUb0xvd2VyQ2FzZUd1aWQiLCJidWZmZXJUb1VwcGVyQ2FzZUd1aWQiLCJfcHJlY2lzaW9uIiwic2lnbiIsInJlYWRWYWx1ZSIsInJlYWRVTnVtZXJpYzY0TEUiLCJyZWFkVU51bWVyaWM5NkxFIiwicmVhZFVOdW1lcmljMTI4TEUiLCJjYWxsIiwiTWF0aCIsInBvdyIsImJhc2VUeXBlIiwiVFlQRSIsInByb3BCeXRlcyIsIl9tYXhMZW5ndGgiLCJyZWFkQ29sbGF0aW9uIiwiX2NvbGxhdGlvbiIsImljb252IiwiZGVjb2RlIiwicmVhZE1heCIsImVxdWFscyIsInJlYWRNYXhVbmtub3duTGVuZ3RoIiwiY29uc29sZSIsIndhcm4iLCJleHBlY3RlZExlbmd0aCIsInJlYWRNYXhLbm93bkxlbmd0aCIsInRvdGFsTGVuZ3RoIiwiYWxsb2MiLCJvZmZzZXQiLCJuZXh0IiwiZG9uZSIsImNodW5rTGVuZ3RoIiwiY2h1bmsiLCJjb3B5IiwiY2h1bmtzIiwibGVuZ3RoIiwicHVzaCIsImNvbmNhdCIsImRheXMiLCJtaW51dGVzIiwiRGF0ZSIsIlVUQyIsInRocmVlSHVuZHJlZHRoc09mU2Vjb25kIiwibWlsbGlzZWNvbmRzIiwicm91bmQiLCJyZWFkVUludDI0TEUiLCJyZWFkVUludDQwTEUiLCJpIiwiZGF0ZSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsInRpbWUiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwiZ2V0TWlsbGlzZWNvbmRzIiwibmFub3NlY29uZHNEZWx0YSIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsIm1vZHVsZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy92YWx1ZS1wYXJzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFBhcnNlciwgeyB0eXBlIFBhcnNlck9wdGlvbnMgfSBmcm9tICcuL3Rva2VuL3N0cmVhbS1wYXJzZXInO1xuaW1wb3J0IHsgdHlwZSBNZXRhZGF0YSwgcmVhZENvbGxhdGlvbiB9IGZyb20gJy4vbWV0YWRhdGEtcGFyc2VyJztcbmltcG9ydCB7IFRZUEUgfSBmcm9tICcuL2RhdGEtdHlwZSc7XG5cbmltcG9ydCBpY29udiBmcm9tICdpY29udi1saXRlJztcbmltcG9ydCB7IHNwcmludGYgfSBmcm9tICdzcHJpbnRmLWpzJztcbmltcG9ydCB7IGJ1ZmZlclRvTG93ZXJDYXNlR3VpZCwgYnVmZmVyVG9VcHBlckNhc2VHdWlkIH0gZnJvbSAnLi9ndWlkLXBhcnNlcic7XG5cbmNvbnN0IE5VTEwgPSAoMSA8PCAxNikgLSAxO1xuY29uc3QgTUFYID0gKDEgPDwgMTYpIC0gMTtcbmNvbnN0IFRIUkVFX0FORF9BX1RISVJEID0gMyArICgxIC8gMyk7XG5jb25zdCBNT05FWV9ESVZJU09SID0gMTAwMDA7XG5jb25zdCBQTFBfTlVMTCA9IEJ1ZmZlci5mcm9tKFsweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGXSk7XG5jb25zdCBVTktOT1dOX1BMUF9MRU4gPSBCdWZmZXIuZnJvbShbMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRl0pO1xuY29uc3QgREVGQVVMVF9FTkNPRElORyA9ICd1dGY4JztcblxuZnVuY3Rpb24gcmVhZFRpbnlJbnQocGFyc2VyOiBQYXJzZXIsIGNhbGxiYWNrOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpIHtcbiAgcGFyc2VyLnJlYWRVSW50OChjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHJlYWRTbWFsbEludChwYXJzZXI6IFBhcnNlciwgY2FsbGJhY2s6ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCkge1xuICBwYXJzZXIucmVhZEludDE2TEUoY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiByZWFkSW50KHBhcnNlcjogUGFyc2VyLCBjYWxsYmFjazogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB7XG4gIHBhcnNlci5yZWFkSW50MzJMRShjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHJlYWRCaWdJbnQocGFyc2VyOiBQYXJzZXIsIGNhbGxiYWNrOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpIHtcbiAgcGFyc2VyLnJlYWRCaWdJbnQ2NExFKCh2YWx1ZSkgPT4ge1xuICAgIGNhbGxiYWNrKHZhbHVlLnRvU3RyaW5nKCkpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVhZFJlYWwocGFyc2VyOiBQYXJzZXIsIGNhbGxiYWNrOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpIHtcbiAgcGFyc2VyLnJlYWRGbG9hdExFKGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gcmVhZEZsb2F0KHBhcnNlcjogUGFyc2VyLCBjYWxsYmFjazogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB7XG4gIHBhcnNlci5yZWFkRG91YmxlTEUoY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiByZWFkU21hbGxNb25leShwYXJzZXI6IFBhcnNlciwgY2FsbGJhY2s6ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCkge1xuICBwYXJzZXIucmVhZEludDMyTEUoKHZhbHVlKSA9PiB7XG4gICAgY2FsbGJhY2sodmFsdWUgLyBNT05FWV9ESVZJU09SKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRNb25leShwYXJzZXI6IFBhcnNlciwgY2FsbGJhY2s6ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCkge1xuICBwYXJzZXIucmVhZEludDMyTEUoKGhpZ2gpID0+IHtcbiAgICBwYXJzZXIucmVhZFVJbnQzMkxFKChsb3cpID0+IHtcbiAgICAgIGNhbGxiYWNrKChsb3cgKyAoMHgxMDAwMDAwMDAgKiBoaWdoKSkgLyBNT05FWV9ESVZJU09SKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRCaXQocGFyc2VyOiBQYXJzZXIsIGNhbGxiYWNrOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpIHtcbiAgcGFyc2VyLnJlYWRVSW50OCgodmFsdWUpID0+IHtcbiAgICBjYWxsYmFjayghIXZhbHVlKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHZhbHVlUGFyc2UocGFyc2VyOiBQYXJzZXIsIG1ldGFkYXRhOiBNZXRhZGF0YSwgb3B0aW9uczogUGFyc2VyT3B0aW9ucywgY2FsbGJhY2s6ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCk6IHZvaWQge1xuICBjb25zdCB0eXBlID0gbWV0YWRhdGEudHlwZTtcblxuICBzd2l0Y2ggKHR5cGUubmFtZSkge1xuICAgIGNhc2UgJ051bGwnOlxuICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuXG4gICAgY2FzZSAnVGlueUludCc6XG4gICAgICByZXR1cm4gcmVhZFRpbnlJbnQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICBjYXNlICdTbWFsbEludCc6XG4gICAgICByZXR1cm4gcmVhZFNtYWxsSW50KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgY2FzZSAnSW50JzpcbiAgICAgIHJldHVybiByZWFkSW50KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgY2FzZSAnQmlnSW50JzpcbiAgICAgIHJldHVybiByZWFkQmlnSW50KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgY2FzZSAnSW50Tic6XG4gICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50OCgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGRhdGFMZW5ndGgpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG5cbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICByZXR1cm4gcmVhZFRpbnlJbnQocGFyc2VyLCBjYWxsYmFjayk7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgcmV0dXJuIHJlYWRTbWFsbEludChwYXJzZXIsIGNhbGxiYWNrKTtcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICByZXR1cm4gcmVhZEludChwYXJzZXIsIGNhbGxiYWNrKTtcbiAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICByZXR1cm4gcmVhZEJpZ0ludChwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGRhdGFMZW5ndGggJyArIGRhdGFMZW5ndGggKyAnIGZvciBJbnROJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnUmVhbCc6XG4gICAgICByZXR1cm4gcmVhZFJlYWwocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICBjYXNlICdGbG9hdCc6XG4gICAgICByZXR1cm4gcmVhZEZsb2F0KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgY2FzZSAnRmxvYXROJzpcbiAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoZGF0YUxlbmd0aCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHJldHVybiByZWFkUmVhbChwYXJzZXIsIGNhbGxiYWNrKTtcbiAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICByZXR1cm4gcmVhZEZsb2F0KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgZGF0YUxlbmd0aCAnICsgZGF0YUxlbmd0aCArICcgZm9yIEZsb2F0TicpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIGNhc2UgJ1NtYWxsTW9uZXknOlxuICAgICAgcmV0dXJuIHJlYWRTbWFsbE1vbmV5KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgY2FzZSAnTW9uZXknOlxuICAgICAgcmV0dXJuIHJlYWRNb25leShwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgIGNhc2UgJ01vbmV5Tic6XG4gICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50OCgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGRhdGFMZW5ndGgpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG5cbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICByZXR1cm4gcmVhZFNtYWxsTW9uZXkocGFyc2VyLCBjYWxsYmFjayk7XG4gICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgcmV0dXJuIHJlYWRNb25leShwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGRhdGFMZW5ndGggJyArIGRhdGFMZW5ndGggKyAnIGZvciBNb25leU4nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdCaXQnOlxuICAgICAgcmV0dXJuIHJlYWRCaXQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICBjYXNlICdCaXROJzpcbiAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoZGF0YUxlbmd0aCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHJldHVybiByZWFkQml0KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgZGF0YUxlbmd0aCAnICsgZGF0YUxlbmd0aCArICcgZm9yIEJpdE4nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdWYXJDaGFyJzpcbiAgICBjYXNlICdDaGFyJzpcbiAgICAgIGNvbnN0IGNvZGVwYWdlID0gbWV0YWRhdGEuY29sbGF0aW9uIS5jb2RlcGFnZSE7XG4gICAgICBpZiAobWV0YWRhdGEuZGF0YUxlbmd0aCA9PT0gTUFYKSB7XG4gICAgICAgIHJldHVybiByZWFkTWF4Q2hhcnMocGFyc2VyLCBjb2RlcGFnZSwgY2FsbGJhY2spO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDE2TEUoKGRhdGFMZW5ndGgpID0+IHtcbiAgICAgICAgICBpZiAoZGF0YUxlbmd0aCA9PT0gTlVMTCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlYWRDaGFycyhwYXJzZXIsIGRhdGFMZW5ndGghLCBjb2RlcGFnZSwgY2FsbGJhY2spO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ05WYXJDaGFyJzpcbiAgICBjYXNlICdOQ2hhcic6XG4gICAgICBpZiAobWV0YWRhdGEuZGF0YUxlbmd0aCA9PT0gTUFYKSB7XG4gICAgICAgIHJldHVybiByZWFkTWF4TkNoYXJzKHBhcnNlciwgY2FsbGJhY2spO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDE2TEUoKGRhdGFMZW5ndGgpID0+IHtcbiAgICAgICAgICBpZiAoZGF0YUxlbmd0aCA9PT0gTlVMTCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlYWROQ2hhcnMocGFyc2VyLCBkYXRhTGVuZ3RoISwgY2FsbGJhY2spO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ1ZhckJpbmFyeSc6XG4gICAgY2FzZSAnQmluYXJ5JzpcbiAgICAgIGlmIChtZXRhZGF0YS5kYXRhTGVuZ3RoID09PSBNQVgpIHtcbiAgICAgICAgcmV0dXJuIHJlYWRNYXhCaW5hcnkocGFyc2VyLCBjYWxsYmFjayk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50MTZMRSgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhTGVuZ3RoID09PSBOVUxMKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVhZEJpbmFyeShwYXJzZXIsIGRhdGFMZW5ndGghLCBjYWxsYmFjayk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgY2FzZSAnVGV4dCc6XG4gICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50OCgodGV4dFBvaW50ZXJMZW5ndGgpID0+IHtcbiAgICAgICAgaWYgKHRleHRQb2ludGVyTGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyc2VyLnJlYWRCdWZmZXIodGV4dFBvaW50ZXJMZW5ndGgsIChfdGV4dFBvaW50ZXIpID0+IHtcbiAgICAgICAgICBwYXJzZXIucmVhZEJ1ZmZlcig4LCAoX3RpbWVzdGFtcCkgPT4ge1xuICAgICAgICAgICAgcGFyc2VyLnJlYWRVSW50MzJMRSgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICAgICAgICByZWFkQ2hhcnMocGFyc2VyLCBkYXRhTGVuZ3RoISwgbWV0YWRhdGEuY29sbGF0aW9uIS5jb2RlcGFnZSEsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnTlRleHQnOlxuICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKHRleHRQb2ludGVyTGVuZ3RoKSA9PiB7XG4gICAgICAgIGlmICh0ZXh0UG9pbnRlckxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcnNlci5yZWFkQnVmZmVyKHRleHRQb2ludGVyTGVuZ3RoLCAoX3RleHRQb2ludGVyKSA9PiB7XG4gICAgICAgICAgcGFyc2VyLnJlYWRCdWZmZXIoOCwgKF90aW1lc3RhbXApID0+IHtcbiAgICAgICAgICAgIHBhcnNlci5yZWFkVUludDMyTEUoKGRhdGFMZW5ndGgpID0+IHtcbiAgICAgICAgICAgICAgcmVhZE5DaGFycyhwYXJzZXIsIGRhdGFMZW5ndGghLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIGNhc2UgJ0ltYWdlJzpcbiAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KCh0ZXh0UG9pbnRlckxlbmd0aCkgPT4ge1xuICAgICAgICBpZiAodGV4dFBvaW50ZXJMZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBwYXJzZXIucmVhZEJ1ZmZlcih0ZXh0UG9pbnRlckxlbmd0aCwgKF90ZXh0UG9pbnRlcikgPT4ge1xuICAgICAgICAgIHBhcnNlci5yZWFkQnVmZmVyKDgsIChfdGltZXN0YW1wKSA9PiB7XG4gICAgICAgICAgICBwYXJzZXIucmVhZFVJbnQzMkxFKChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgICAgICAgIHJlYWRCaW5hcnkocGFyc2VyLCBkYXRhTGVuZ3RoISwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICBjYXNlICdYbWwnOlxuICAgICAgcmV0dXJuIHJlYWRNYXhOQ2hhcnMocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICBjYXNlICdTbWFsbERhdGVUaW1lJzpcbiAgICAgIHJldHVybiByZWFkU21hbGxEYXRlVGltZShwYXJzZXIsIG9wdGlvbnMudXNlVVRDLCBjYWxsYmFjayk7XG5cbiAgICBjYXNlICdEYXRlVGltZSc6XG4gICAgICByZXR1cm4gcmVhZERhdGVUaW1lKHBhcnNlciwgb3B0aW9ucy51c2VVVEMsIGNhbGxiYWNrKTtcblxuICAgIGNhc2UgJ0RhdGVUaW1lTic6XG4gICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50OCgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGRhdGFMZW5ndGgpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG5cbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICByZXR1cm4gcmVhZFNtYWxsRGF0ZVRpbWUocGFyc2VyLCBvcHRpb25zLnVzZVVUQywgY2FsbGJhY2spO1xuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIHJldHVybiByZWFkRGF0ZVRpbWUocGFyc2VyLCBvcHRpb25zLnVzZVVUQywgY2FsbGJhY2spO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgZGF0YUxlbmd0aCAnICsgZGF0YUxlbmd0aCArICcgZm9yIERhdGVUaW1lTicpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIGNhc2UgJ1RpbWUnOlxuICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKGRhdGFMZW5ndGgpID0+IHtcbiAgICAgICAgaWYgKGRhdGFMZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHJlYWRUaW1lKHBhcnNlciwgZGF0YUxlbmd0aCEsIG1ldGFkYXRhLnNjYWxlISwgb3B0aW9ucy51c2VVVEMsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdEYXRlJzpcbiAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgIGlmIChkYXRhTGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiByZWFkRGF0ZShwYXJzZXIsIG9wdGlvbnMudXNlVVRDLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnRGF0ZVRpbWUyJzpcbiAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgIGlmIChkYXRhTGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiByZWFkRGF0ZVRpbWUyKHBhcnNlciwgZGF0YUxlbmd0aCEsIG1ldGFkYXRhLnNjYWxlISwgb3B0aW9ucy51c2VVVEMsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdEYXRlVGltZU9mZnNldCc6XG4gICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50OCgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICBpZiAoZGF0YUxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcmVhZERhdGVUaW1lT2Zmc2V0KHBhcnNlciwgZGF0YUxlbmd0aCEsIG1ldGFkYXRhLnNjYWxlISwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIGNhc2UgJ051bWVyaWNOJzpcbiAgICBjYXNlICdEZWNpbWFsTic6XG4gICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50OCgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICBpZiAoZGF0YUxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcmVhZE51bWVyaWMocGFyc2VyLCBkYXRhTGVuZ3RoISwgbWV0YWRhdGEucHJlY2lzaW9uISwgbWV0YWRhdGEuc2NhbGUhLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnVW5pcXVlSWRlbnRpZmllcic6XG4gICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50OCgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGRhdGFMZW5ndGgpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG5cbiAgICAgICAgICBjYXNlIDB4MTA6XG4gICAgICAgICAgICByZXR1cm4gcmVhZFVuaXF1ZUlkZW50aWZpZXIocGFyc2VyLCBvcHRpb25zLCBjYWxsYmFjayk7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHNwcmludGYoJ1Vuc3VwcG9ydGVkIGd1aWQgc2l6ZSAlZCcsIGRhdGFMZW5ndGghIC0gMSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIGNhc2UgJ1VEVCc6XG4gICAgICByZXR1cm4gcmVhZE1heEJpbmFyeShwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgIGNhc2UgJ1ZhcmlhbnQnOlxuICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDMyTEUoKGRhdGFMZW5ndGgpID0+IHtcbiAgICAgICAgaWYgKGRhdGFMZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICByZWFkVmFyaWFudChwYXJzZXIsIG9wdGlvbnMsIGRhdGFMZW5ndGghLCBjYWxsYmFjayk7XG4gICAgICB9KTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3Ioc3ByaW50ZignVW5yZWNvZ25pc2VkIHR5cGUgJXMnLCB0eXBlLm5hbWUpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkVW5pcXVlSWRlbnRpZmllcihwYXJzZXI6IFBhcnNlciwgb3B0aW9uczogUGFyc2VyT3B0aW9ucywgY2FsbGJhY2s6ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCkge1xuICBwYXJzZXIucmVhZEJ1ZmZlcigweDEwLCAoZGF0YSkgPT4ge1xuICAgIGNhbGxiYWNrKG9wdGlvbnMubG93ZXJDYXNlR3VpZHMgPyBidWZmZXJUb0xvd2VyQ2FzZUd1aWQoZGF0YSkgOiBidWZmZXJUb1VwcGVyQ2FzZUd1aWQoZGF0YSkpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVhZE51bWVyaWMocGFyc2VyOiBQYXJzZXIsIGRhdGFMZW5ndGg6IG51bWJlciwgX3ByZWNpc2lvbjogbnVtYmVyLCBzY2FsZTogbnVtYmVyLCBjYWxsYmFjazogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB7XG4gIHBhcnNlci5yZWFkVUludDgoKHNpZ24pID0+IHtcbiAgICBzaWduID0gc2lnbiA9PT0gMSA/IDEgOiAtMTtcblxuICAgIGxldCByZWFkVmFsdWU7XG4gICAgaWYgKGRhdGFMZW5ndGggPT09IDUpIHtcbiAgICAgIHJlYWRWYWx1ZSA9IHBhcnNlci5yZWFkVUludDMyTEU7XG4gICAgfSBlbHNlIGlmIChkYXRhTGVuZ3RoID09PSA5KSB7XG4gICAgICByZWFkVmFsdWUgPSBwYXJzZXIucmVhZFVOdW1lcmljNjRMRTtcbiAgICB9IGVsc2UgaWYgKGRhdGFMZW5ndGggPT09IDEzKSB7XG4gICAgICByZWFkVmFsdWUgPSBwYXJzZXIucmVhZFVOdW1lcmljOTZMRTtcbiAgICB9IGVsc2UgaWYgKGRhdGFMZW5ndGggPT09IDE3KSB7XG4gICAgICByZWFkVmFsdWUgPSBwYXJzZXIucmVhZFVOdW1lcmljMTI4TEU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihzcHJpbnRmKCdVbnN1cHBvcnRlZCBudW1lcmljIGRhdGFMZW5ndGggJWQnLCBkYXRhTGVuZ3RoKSk7XG4gICAgfVxuXG4gICAgcmVhZFZhbHVlLmNhbGwocGFyc2VyLCAodmFsdWUpID0+IHtcbiAgICAgIGNhbGxiYWNrKCh2YWx1ZSAqIHNpZ24pIC8gTWF0aC5wb3coMTAsIHNjYWxlKSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkVmFyaWFudChwYXJzZXI6IFBhcnNlciwgb3B0aW9uczogUGFyc2VyT3B0aW9ucywgZGF0YUxlbmd0aDogbnVtYmVyLCBjYWxsYmFjazogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB7XG4gIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChiYXNlVHlwZSkgPT4ge1xuICAgIGNvbnN0IHR5cGUgPSBUWVBFW2Jhc2VUeXBlXTtcblxuICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChwcm9wQnl0ZXMpID0+IHtcbiAgICAgIGRhdGFMZW5ndGggPSBkYXRhTGVuZ3RoIC0gcHJvcEJ5dGVzIC0gMjtcblxuICAgICAgc3dpdGNoICh0eXBlLm5hbWUpIHtcbiAgICAgICAgY2FzZSAnVW5pcXVlSWRlbnRpZmllcic6XG4gICAgICAgICAgcmV0dXJuIHJlYWRVbmlxdWVJZGVudGlmaWVyKHBhcnNlciwgb3B0aW9ucywgY2FsbGJhY2spO1xuXG4gICAgICAgIGNhc2UgJ0JpdCc6XG4gICAgICAgICAgcmV0dXJuIHJlYWRCaXQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICAgICAgY2FzZSAnVGlueUludCc6XG4gICAgICAgICAgcmV0dXJuIHJlYWRUaW55SW50KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgICAgIGNhc2UgJ1NtYWxsSW50JzpcbiAgICAgICAgICByZXR1cm4gcmVhZFNtYWxsSW50KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgICAgIGNhc2UgJ0ludCc6XG4gICAgICAgICAgcmV0dXJuIHJlYWRJbnQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICAgICAgY2FzZSAnQmlnSW50JzpcbiAgICAgICAgICByZXR1cm4gcmVhZEJpZ0ludChwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgICAgICBjYXNlICdTbWFsbERhdGVUaW1lJzpcbiAgICAgICAgICByZXR1cm4gcmVhZFNtYWxsRGF0ZVRpbWUocGFyc2VyLCBvcHRpb25zLnVzZVVUQywgY2FsbGJhY2spO1xuXG4gICAgICAgIGNhc2UgJ0RhdGVUaW1lJzpcbiAgICAgICAgICByZXR1cm4gcmVhZERhdGVUaW1lKHBhcnNlciwgb3B0aW9ucy51c2VVVEMsIGNhbGxiYWNrKTtcblxuICAgICAgICBjYXNlICdSZWFsJzpcbiAgICAgICAgICByZXR1cm4gcmVhZFJlYWwocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICAgICAgY2FzZSAnRmxvYXQnOlxuICAgICAgICAgIHJldHVybiByZWFkRmxvYXQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICAgICAgY2FzZSAnU21hbGxNb25leSc6XG4gICAgICAgICAgcmV0dXJuIHJlYWRTbWFsbE1vbmV5KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgICAgIGNhc2UgJ01vbmV5JzpcbiAgICAgICAgICByZXR1cm4gcmVhZE1vbmV5KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgICAgIGNhc2UgJ0RhdGUnOlxuICAgICAgICAgIHJldHVybiByZWFkRGF0ZShwYXJzZXIsIG9wdGlvbnMudXNlVVRDLCBjYWxsYmFjayk7XG5cbiAgICAgICAgY2FzZSAnVGltZSc6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKHNjYWxlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZFRpbWUocGFyc2VyLCBkYXRhTGVuZ3RoLCBzY2FsZSwgb3B0aW9ucy51c2VVVEMsIGNhbGxiYWNrKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICBjYXNlICdEYXRlVGltZTInOlxuICAgICAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChzY2FsZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHJlYWREYXRlVGltZTIocGFyc2VyLCBkYXRhTGVuZ3RoLCBzY2FsZSwgb3B0aW9ucy51c2VVVEMsIGNhbGxiYWNrKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICBjYXNlICdEYXRlVGltZU9mZnNldCc6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKHNjYWxlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZERhdGVUaW1lT2Zmc2V0KHBhcnNlciwgZGF0YUxlbmd0aCwgc2NhbGUsIGNhbGxiYWNrKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICBjYXNlICdWYXJCaW5hcnknOlxuICAgICAgICBjYXNlICdCaW5hcnknOlxuICAgICAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQxNkxFKChfbWF4TGVuZ3RoKSA9PiB7XG4gICAgICAgICAgICByZWFkQmluYXJ5KHBhcnNlciwgZGF0YUxlbmd0aCwgY2FsbGJhY2spO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNhc2UgJ051bWVyaWNOJzpcbiAgICAgICAgY2FzZSAnRGVjaW1hbE4nOlxuICAgICAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChwcmVjaXNpb24pID0+IHtcbiAgICAgICAgICAgIHBhcnNlci5yZWFkVUludDgoKHNjYWxlKSA9PiB7XG4gICAgICAgICAgICAgIHJlYWROdW1lcmljKHBhcnNlciwgZGF0YUxlbmd0aCwgcHJlY2lzaW9uLCBzY2FsZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgY2FzZSAnVmFyQ2hhcic6XG4gICAgICAgIGNhc2UgJ0NoYXInOlxuICAgICAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQxNkxFKChfbWF4TGVuZ3RoKSA9PiB7XG4gICAgICAgICAgICByZWFkQ29sbGF0aW9uKHBhcnNlciwgKGNvbGxhdGlvbikgPT4ge1xuICAgICAgICAgICAgICByZWFkQ2hhcnMocGFyc2VyLCBkYXRhTGVuZ3RoLCBjb2xsYXRpb24uY29kZXBhZ2UhLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICBjYXNlICdOVmFyQ2hhcic6XG4gICAgICAgIGNhc2UgJ05DaGFyJzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50MTZMRSgoX21heExlbmd0aCkgPT4ge1xuICAgICAgICAgICAgcmVhZENvbGxhdGlvbihwYXJzZXIsIChfY29sbGF0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIHJlYWROQ2hhcnMocGFyc2VyLCBkYXRhTGVuZ3RoLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0eXBlIScpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVhZEJpbmFyeShwYXJzZXI6IFBhcnNlciwgZGF0YUxlbmd0aDogbnVtYmVyLCBjYWxsYmFjazogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB7XG4gIHJldHVybiBwYXJzZXIucmVhZEJ1ZmZlcihkYXRhTGVuZ3RoLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHJlYWRDaGFycyhwYXJzZXI6IFBhcnNlciwgZGF0YUxlbmd0aDogbnVtYmVyLCBjb2RlcGFnZTogc3RyaW5nLCBjYWxsYmFjazogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB7XG4gIGlmIChjb2RlcGFnZSA9PSBudWxsKSB7XG4gICAgY29kZXBhZ2UgPSBERUZBVUxUX0VOQ09ESU5HO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlci5yZWFkQnVmZmVyKGRhdGFMZW5ndGgsIChkYXRhKSA9PiB7XG4gICAgY2FsbGJhY2soaWNvbnYuZGVjb2RlKGRhdGEsIGNvZGVwYWdlKSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkTkNoYXJzKHBhcnNlcjogUGFyc2VyLCBkYXRhTGVuZ3RoOiBudW1iZXIsIGNhbGxiYWNrOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpIHtcbiAgcGFyc2VyLnJlYWRCdWZmZXIoZGF0YUxlbmd0aCwgKGRhdGEpID0+IHtcbiAgICBjYWxsYmFjayhkYXRhLnRvU3RyaW5nKCd1Y3MyJykpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVhZE1heEJpbmFyeShwYXJzZXI6IFBhcnNlciwgY2FsbGJhY2s6ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCkge1xuICByZXR1cm4gcmVhZE1heChwYXJzZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gcmVhZE1heENoYXJzKHBhcnNlcjogUGFyc2VyLCBjb2RlcGFnZTogc3RyaW5nLCBjYWxsYmFjazogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB7XG4gIGlmIChjb2RlcGFnZSA9PSBudWxsKSB7XG4gICAgY29kZXBhZ2UgPSBERUZBVUxUX0VOQ09ESU5HO1xuICB9XG5cbiAgcmVhZE1heChwYXJzZXIsIChkYXRhKSA9PiB7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGNhbGxiYWNrKGljb252LmRlY29kZShkYXRhLCBjb2RlcGFnZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayhudWxsKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkTWF4TkNoYXJzKHBhcnNlcjogUGFyc2VyLCBjYWxsYmFjazogKHZhbHVlOiBzdHJpbmcgfCBudWxsKSA9PiB2b2lkKSB7XG4gIHJlYWRNYXgocGFyc2VyLCAoZGF0YSkgPT4ge1xuICAgIGlmIChkYXRhKSB7XG4gICAgICBjYWxsYmFjayhkYXRhLnRvU3RyaW5nKCd1Y3MyJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayhudWxsKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkTWF4KHBhcnNlcjogUGFyc2VyLCBjYWxsYmFjazogKHZhbHVlOiBudWxsIHwgQnVmZmVyKSA9PiB2b2lkKSB7XG4gIHBhcnNlci5yZWFkQnVmZmVyKDgsICh0eXBlKSA9PiB7XG4gICAgaWYgKHR5cGUuZXF1YWxzKFBMUF9OVUxMKSkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgIH0gZWxzZSBpZiAodHlwZS5lcXVhbHMoVU5LTk9XTl9QTFBfTEVOKSkge1xuICAgICAgcmV0dXJuIHJlYWRNYXhVbmtub3duTGVuZ3RoKHBhcnNlciwgY2FsbGJhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsb3cgPSB0eXBlLnJlYWRVSW50MzJMRSgwKTtcbiAgICAgIGNvbnN0IGhpZ2ggPSB0eXBlLnJlYWRVSW50MzJMRSg0KTtcblxuICAgICAgaWYgKGhpZ2ggPj0gKDIgPDwgKDUzIC0gMzIpKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1JlYWQgVUludDY0TEUgPiA1MyBiaXRzIDogaGlnaD0nICsgaGlnaCArICcsIGxvdz0nICsgbG93KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXhwZWN0ZWRMZW5ndGggPSBsb3cgKyAoMHgxMDAwMDAwMDAgKiBoaWdoKTtcbiAgICAgIHJldHVybiByZWFkTWF4S25vd25MZW5ndGgocGFyc2VyLCBleHBlY3RlZExlbmd0aCwgY2FsbGJhY2spO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRNYXhLbm93bkxlbmd0aChwYXJzZXI6IFBhcnNlciwgdG90YWxMZW5ndGg6IG51bWJlciwgY2FsbGJhY2s6ICh2YWx1ZTogbnVsbCB8IEJ1ZmZlcikgPT4gdm9pZCkge1xuICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKHRvdGFsTGVuZ3RoLCAwKTtcblxuICBsZXQgb2Zmc2V0ID0gMDtcbiAgZnVuY3Rpb24gbmV4dChkb25lOiBhbnkpIHtcbiAgICBwYXJzZXIucmVhZFVJbnQzMkxFKChjaHVua0xlbmd0aCkgPT4ge1xuICAgICAgaWYgKCFjaHVua0xlbmd0aCkge1xuICAgICAgICByZXR1cm4gZG9uZSgpO1xuICAgICAgfVxuXG4gICAgICBwYXJzZXIucmVhZEJ1ZmZlcihjaHVua0xlbmd0aCwgKGNodW5rKSA9PiB7XG4gICAgICAgIGNodW5rLmNvcHkoZGF0YSwgb2Zmc2V0KTtcbiAgICAgICAgb2Zmc2V0ICs9IGNodW5rTGVuZ3RoO1xuXG4gICAgICAgIG5leHQoZG9uZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5leHQoKCkgPT4ge1xuICAgIGlmIChvZmZzZXQgIT09IHRvdGFsTGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcnRpYWxseSBMZW5ndGgtcHJlZml4ZWQgQnl0ZXMgdW5tYXRjaGVkIGxlbmd0aHMgOiBleHBlY3RlZCAnICsgdG90YWxMZW5ndGggKyAnLCBidXQgZ290ICcgKyBvZmZzZXQgKyAnIGJ5dGVzJyk7XG4gICAgfVxuXG4gICAgY2FsbGJhY2soZGF0YSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkTWF4VW5rbm93bkxlbmd0aChwYXJzZXI6IFBhcnNlciwgY2FsbGJhY2s6ICh2YWx1ZTogbnVsbCB8IEJ1ZmZlcikgPT4gdm9pZCkge1xuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG5cbiAgbGV0IGxlbmd0aCA9IDA7XG4gIGZ1bmN0aW9uIG5leHQoZG9uZTogYW55KSB7XG4gICAgcGFyc2VyLnJlYWRVSW50MzJMRSgoY2h1bmtMZW5ndGgpID0+IHtcbiAgICAgIGlmICghY2h1bmtMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGRvbmUoKTtcbiAgICAgIH1cblxuICAgICAgcGFyc2VyLnJlYWRCdWZmZXIoY2h1bmtMZW5ndGgsIChjaHVuaykgPT4ge1xuICAgICAgICBjaHVua3MucHVzaChjaHVuayk7XG4gICAgICAgIGxlbmd0aCArPSBjaHVua0xlbmd0aDtcblxuICAgICAgICBuZXh0KGRvbmUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBuZXh0KCgpID0+IHtcbiAgICBjYWxsYmFjayhCdWZmZXIuY29uY2F0KGNodW5rcywgbGVuZ3RoKSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkU21hbGxEYXRlVGltZShwYXJzZXI6IFBhcnNlciwgdXNlVVRDOiBib29sZWFuLCBjYWxsYmFjazogKHZhbHVlOiBEYXRlKSA9PiB2b2lkKSB7XG4gIHBhcnNlci5yZWFkVUludDE2TEUoKGRheXMpID0+IHtcbiAgICBwYXJzZXIucmVhZFVJbnQxNkxFKChtaW51dGVzKSA9PiB7XG4gICAgICBsZXQgdmFsdWU7XG4gICAgICBpZiAodXNlVVRDKSB7XG4gICAgICAgIHZhbHVlID0gbmV3IERhdGUoRGF0ZS5VVEMoMTkwMCwgMCwgMSArIGRheXMsIDAsIG1pbnV0ZXMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gbmV3IERhdGUoMTkwMCwgMCwgMSArIGRheXMsIDAsIG1pbnV0ZXMpO1xuICAgICAgfVxuICAgICAgY2FsbGJhY2sodmFsdWUpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVhZERhdGVUaW1lKHBhcnNlcjogUGFyc2VyLCB1c2VVVEM6IGJvb2xlYW4sIGNhbGxiYWNrOiAodmFsdWU6IERhdGUpID0+IHZvaWQpIHtcbiAgcGFyc2VyLnJlYWRJbnQzMkxFKChkYXlzKSA9PiB7XG4gICAgcGFyc2VyLnJlYWRVSW50MzJMRSgodGhyZWVIdW5kcmVkdGhzT2ZTZWNvbmQpID0+IHtcbiAgICAgIGNvbnN0IG1pbGxpc2Vjb25kcyA9IE1hdGgucm91bmQodGhyZWVIdW5kcmVkdGhzT2ZTZWNvbmQgKiBUSFJFRV9BTkRfQV9USElSRCk7XG5cbiAgICAgIGxldCB2YWx1ZTtcbiAgICAgIGlmICh1c2VVVEMpIHtcbiAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZShEYXRlLlVUQygxOTAwLCAwLCAxICsgZGF5cywgMCwgMCwgMCwgbWlsbGlzZWNvbmRzKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IG5ldyBEYXRlKDE5MDAsIDAsIDEgKyBkYXlzLCAwLCAwLCAwLCBtaWxsaXNlY29uZHMpO1xuICAgICAgfVxuXG4gICAgICBjYWxsYmFjayh2YWx1ZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5pbnRlcmZhY2UgRGF0ZVdpdGhOYW5vc2Vjb25kc0RlbHRhIGV4dGVuZHMgRGF0ZSB7XG4gIG5hbm9zZWNvbmRzRGVsdGE6IG51bWJlcjtcbn1cblxuZnVuY3Rpb24gcmVhZFRpbWUocGFyc2VyOiBQYXJzZXIsIGRhdGFMZW5ndGg6IG51bWJlciwgc2NhbGU6IG51bWJlciwgdXNlVVRDOiBib29sZWFuLCBjYWxsYmFjazogKHZhbHVlOiBEYXRlV2l0aE5hbm9zZWNvbmRzRGVsdGEpID0+IHZvaWQpIHtcbiAgbGV0IHJlYWRWYWx1ZTogYW55O1xuICBzd2l0Y2ggKGRhdGFMZW5ndGgpIHtcbiAgICBjYXNlIDM6XG4gICAgICByZWFkVmFsdWUgPSBwYXJzZXIucmVhZFVJbnQyNExFO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0OlxuICAgICAgcmVhZFZhbHVlID0gcGFyc2VyLnJlYWRVSW50MzJMRTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNTpcbiAgICAgIHJlYWRWYWx1ZSA9IHBhcnNlci5yZWFkVUludDQwTEU7XG4gIH1cblxuICByZWFkVmFsdWUhLmNhbGwocGFyc2VyLCAodmFsdWU6IG51bWJlcikgPT4ge1xuICAgIGlmIChzY2FsZSA8IDcpIHtcbiAgICAgIGZvciAobGV0IGkgPSBzY2FsZTsgaSA8IDc7IGkrKykge1xuICAgICAgICB2YWx1ZSAqPSAxMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgZGF0ZTtcbiAgICBpZiAodXNlVVRDKSB7XG4gICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMoMTk3MCwgMCwgMSwgMCwgMCwgMCwgdmFsdWUgLyAxMDAwMCkpIGFzIERhdGVXaXRoTmFub3NlY29uZHNEZWx0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0ZSA9IG5ldyBEYXRlKDE5NzAsIDAsIDEsIDAsIDAsIDAsIHZhbHVlIC8gMTAwMDApIGFzIERhdGVXaXRoTmFub3NlY29uZHNEZWx0YTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGRhdGUsICduYW5vc2Vjb25kc0RlbHRhJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogKHZhbHVlICUgMTAwMDApIC8gTWF0aC5wb3coMTAsIDcpXG4gICAgfSk7XG4gICAgY2FsbGJhY2soZGF0ZSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkRGF0ZShwYXJzZXI6IFBhcnNlciwgdXNlVVRDOiBib29sZWFuLCBjYWxsYmFjazogKHZhbHVlOiBEYXRlKSA9PiB2b2lkKSB7XG4gIHBhcnNlci5yZWFkVUludDI0TEUoKGRheXMpID0+IHtcbiAgICBpZiAodXNlVVRDKSB7XG4gICAgICBjYWxsYmFjayhuZXcgRGF0ZShEYXRlLlVUQygyMDAwLCAwLCBkYXlzIC0gNzMwMTE4KSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayhuZXcgRGF0ZSgyMDAwLCAwLCBkYXlzIC0gNzMwMTE4KSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVhZERhdGVUaW1lMihwYXJzZXI6IFBhcnNlciwgZGF0YUxlbmd0aDogbnVtYmVyLCBzY2FsZTogbnVtYmVyLCB1c2VVVEM6IGJvb2xlYW4sIGNhbGxiYWNrOiAodmFsdWU6IERhdGVXaXRoTmFub3NlY29uZHNEZWx0YSkgPT4gdm9pZCkge1xuICByZWFkVGltZShwYXJzZXIsIGRhdGFMZW5ndGggLSAzLCBzY2FsZSwgdXNlVVRDLCAodGltZSkgPT4geyAvLyBUT0RPOiAnaW5wdXQnIGlzICd0aW1lJywgYnV0IFR5cGVTY3JpcHQgY2Fubm90IGZpbmQgXCJ0aW1lLm5hbm9zZWNvbmRzRGVsdGFcIjtcbiAgICBwYXJzZXIucmVhZFVJbnQyNExFKChkYXlzKSA9PiB7XG4gICAgICBsZXQgZGF0ZTtcbiAgICAgIGlmICh1c2VVVEMpIHtcbiAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDKDIwMDAsIDAsIGRheXMgLSA3MzAxMTgsIDAsIDAsIDAsICt0aW1lKSkgYXMgRGF0ZVdpdGhOYW5vc2Vjb25kc0RlbHRhO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKDIwMDAsIDAsIGRheXMgLSA3MzAxMTgsIHRpbWUuZ2V0SG91cnMoKSwgdGltZS5nZXRNaW51dGVzKCksIHRpbWUuZ2V0U2Vjb25kcygpLCB0aW1lLmdldE1pbGxpc2Vjb25kcygpKSBhcyBEYXRlV2l0aE5hbm9zZWNvbmRzRGVsdGE7XG4gICAgICB9XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZGF0ZSwgJ25hbm9zZWNvbmRzRGVsdGEnLCB7XG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB2YWx1ZTogdGltZS5uYW5vc2Vjb25kc0RlbHRhXG4gICAgICB9KTtcbiAgICAgIGNhbGxiYWNrKGRhdGUpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVhZERhdGVUaW1lT2Zmc2V0KHBhcnNlcjogUGFyc2VyLCBkYXRhTGVuZ3RoOiBudW1iZXIsIHNjYWxlOiBudW1iZXIsIGNhbGxiYWNrOiAodmFsdWU6IERhdGVXaXRoTmFub3NlY29uZHNEZWx0YSkgPT4gdm9pZCkge1xuICByZWFkVGltZShwYXJzZXIsIGRhdGFMZW5ndGggLSA1LCBzY2FsZSwgdHJ1ZSwgKHRpbWUpID0+IHtcbiAgICBwYXJzZXIucmVhZFVJbnQyNExFKChkYXlzKSA9PiB7XG4gICAgICAvLyBvZmZzZXRcbiAgICAgIHBhcnNlci5yZWFkSW50MTZMRSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQygyMDAwLCAwLCBkYXlzIC0gNzMwMTE4LCAwLCAwLCAwLCArdGltZSkpIGFzIERhdGVXaXRoTmFub3NlY29uZHNEZWx0YTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGRhdGUsICduYW5vc2Vjb25kc0RlbHRhJywge1xuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgIHZhbHVlOiB0aW1lLm5hbm9zZWNvbmRzRGVsdGFcbiAgICAgICAgfSk7XG4gICAgICAgIGNhbGxiYWNrKGRhdGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCB2YWx1ZVBhcnNlO1xu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