tedious 19.0.0 → 19.1.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 (221) hide show
  1. package/README.md +1 -1
  2. package/lib/all-headers.js +1 -1
  3. package/lib/all-headers.js.map +1 -1
  4. package/lib/always-encrypted/aead-aes-256-cbc-hmac-algorithm.js +1 -1
  5. package/lib/always-encrypted/aead-aes-256-cbc-hmac-algorithm.js.map +1 -1
  6. package/lib/always-encrypted/aead-aes-256-cbc-hmac-encryption-key.js +2 -2
  7. package/lib/always-encrypted/aead-aes-256-cbc-hmac-encryption-key.js.map +1 -1
  8. package/lib/always-encrypted/cek-entry.js +1 -1
  9. package/lib/always-encrypted/cek-entry.js.map +1 -1
  10. package/lib/always-encrypted/get-parameter-encryption-metadata.js +2 -2
  11. package/lib/always-encrypted/get-parameter-encryption-metadata.js.map +1 -1
  12. package/lib/always-encrypted/key-crypto.js +1 -1
  13. package/lib/always-encrypted/key-crypto.js.map +1 -1
  14. package/lib/always-encrypted/keystore-provider-azure-key-vault.js +1 -1
  15. package/lib/always-encrypted/keystore-provider-azure-key-vault.js.map +1 -1
  16. package/lib/always-encrypted/symmetric-key-cache.js +2 -2
  17. package/lib/always-encrypted/symmetric-key-cache.js.map +1 -1
  18. package/lib/always-encrypted/symmetric-key.js +1 -1
  19. package/lib/always-encrypted/symmetric-key.js.map +1 -1
  20. package/lib/always-encrypted/types.js +1 -1
  21. package/lib/always-encrypted/types.js.map +1 -1
  22. package/lib/always-encrypted/utils.js +1 -1
  23. package/lib/always-encrypted/utils.js.map +1 -1
  24. package/lib/bulk-load-payload.js +1 -1
  25. package/lib/bulk-load-payload.js.map +1 -1
  26. package/lib/bulk-load.js +2 -2
  27. package/lib/bulk-load.js.map +1 -1
  28. package/lib/collation.js +1 -1
  29. package/lib/collation.js.map +1 -1
  30. package/lib/connection.d.ts +45 -50
  31. package/lib/connection.js +580 -581
  32. package/lib/connection.js.map +1 -1
  33. package/lib/connector.js +2 -2
  34. package/lib/connector.js.map +1 -1
  35. package/lib/data-type.js +2 -2
  36. package/lib/data-type.js.map +1 -1
  37. package/lib/data-types/bigint.js +2 -2
  38. package/lib/data-types/bigint.js.map +1 -1
  39. package/lib/data-types/binary.js +1 -1
  40. package/lib/data-types/binary.js.map +1 -1
  41. package/lib/data-types/bit.js +2 -2
  42. package/lib/data-types/bit.js.map +1 -1
  43. package/lib/data-types/bitn.js +1 -1
  44. package/lib/data-types/bitn.js.map +1 -1
  45. package/lib/data-types/char.js +2 -2
  46. package/lib/data-types/char.js.map +1 -1
  47. package/lib/data-types/date.js +1 -1
  48. package/lib/data-types/date.js.map +1 -1
  49. package/lib/data-types/datetime.js +2 -2
  50. package/lib/data-types/datetime.js.map +1 -1
  51. package/lib/data-types/datetime2.js +2 -2
  52. package/lib/data-types/datetime2.js.map +1 -1
  53. package/lib/data-types/datetimen.js +1 -1
  54. package/lib/data-types/datetimen.js.map +1 -1
  55. package/lib/data-types/datetimeoffset.js +2 -2
  56. package/lib/data-types/datetimeoffset.js.map +1 -1
  57. package/lib/data-types/decimal.js +2 -2
  58. package/lib/data-types/decimal.js.map +1 -1
  59. package/lib/data-types/decimaln.js +1 -1
  60. package/lib/data-types/decimaln.js.map +1 -1
  61. package/lib/data-types/float.js +2 -2
  62. package/lib/data-types/float.js.map +1 -1
  63. package/lib/data-types/floatn.js +1 -1
  64. package/lib/data-types/floatn.js.map +1 -1
  65. package/lib/data-types/image.js +1 -1
  66. package/lib/data-types/image.js.map +1 -1
  67. package/lib/data-types/int.js +2 -2
  68. package/lib/data-types/int.js.map +1 -1
  69. package/lib/data-types/intn.js +1 -1
  70. package/lib/data-types/intn.js.map +1 -1
  71. package/lib/data-types/money.js +2 -2
  72. package/lib/data-types/money.js.map +1 -1
  73. package/lib/data-types/moneyn.js +1 -1
  74. package/lib/data-types/moneyn.js.map +1 -1
  75. package/lib/data-types/nchar.js +1 -1
  76. package/lib/data-types/nchar.js.map +1 -1
  77. package/lib/data-types/ntext.js +1 -1
  78. package/lib/data-types/ntext.js.map +1 -1
  79. package/lib/data-types/null.js +1 -1
  80. package/lib/data-types/null.js.map +1 -1
  81. package/lib/data-types/numeric.js +2 -2
  82. package/lib/data-types/numeric.js.map +1 -1
  83. package/lib/data-types/numericn.js +1 -1
  84. package/lib/data-types/numericn.js.map +1 -1
  85. package/lib/data-types/nvarchar.js +1 -1
  86. package/lib/data-types/nvarchar.js.map +1 -1
  87. package/lib/data-types/real.js +2 -2
  88. package/lib/data-types/real.js.map +1 -1
  89. package/lib/data-types/smalldatetime.js +2 -2
  90. package/lib/data-types/smalldatetime.js.map +1 -1
  91. package/lib/data-types/smallint.js +2 -2
  92. package/lib/data-types/smallint.js.map +1 -1
  93. package/lib/data-types/smallmoney.js +2 -2
  94. package/lib/data-types/smallmoney.js.map +1 -1
  95. package/lib/data-types/sql-variant.js +1 -1
  96. package/lib/data-types/sql-variant.js.map +1 -1
  97. package/lib/data-types/text.js +2 -2
  98. package/lib/data-types/text.js.map +1 -1
  99. package/lib/data-types/time.js +2 -2
  100. package/lib/data-types/time.js.map +1 -1
  101. package/lib/data-types/tinyint.js +2 -2
  102. package/lib/data-types/tinyint.js.map +1 -1
  103. package/lib/data-types/tvp.js +2 -2
  104. package/lib/data-types/tvp.js.map +1 -1
  105. package/lib/data-types/udt.js +1 -1
  106. package/lib/data-types/udt.js.map +1 -1
  107. package/lib/data-types/uniqueidentifier.js +1 -1
  108. package/lib/data-types/uniqueidentifier.js.map +1 -1
  109. package/lib/data-types/varbinary.js +1 -1
  110. package/lib/data-types/varbinary.js.map +1 -1
  111. package/lib/data-types/varchar.js +2 -2
  112. package/lib/data-types/varchar.js.map +1 -1
  113. package/lib/data-types/xml.js +1 -1
  114. package/lib/data-types/xml.js.map +1 -1
  115. package/lib/debug.js +2 -2
  116. package/lib/debug.js.map +1 -1
  117. package/lib/errors.js +1 -1
  118. package/lib/errors.js.map +1 -1
  119. package/lib/guid-parser.js +1 -1
  120. package/lib/guid-parser.js.map +1 -1
  121. package/lib/incoming-message-stream.js +2 -2
  122. package/lib/incoming-message-stream.js.map +1 -1
  123. package/lib/instance-lookup.js +2 -2
  124. package/lib/instance-lookup.js.map +1 -1
  125. package/lib/library.js +1 -1
  126. package/lib/library.js.map +1 -1
  127. package/lib/login7-payload.js +21 -17
  128. package/lib/login7-payload.js.map +1 -1
  129. package/lib/message-io.js +3 -3
  130. package/lib/message-io.js.map +1 -1
  131. package/lib/message.js +1 -1
  132. package/lib/message.js.map +1 -1
  133. package/lib/metadata-parser.js +1 -1
  134. package/lib/metadata-parser.js.map +1 -1
  135. package/lib/ntlm-payload.js +3 -3
  136. package/lib/ntlm-payload.js.map +1 -1
  137. package/lib/ntlm.js +1 -1
  138. package/lib/ntlm.js.map +1 -1
  139. package/lib/outgoing-message-stream.js +2 -2
  140. package/lib/outgoing-message-stream.js.map +1 -1
  141. package/lib/packet.js +1 -1
  142. package/lib/packet.js.map +1 -1
  143. package/lib/prelogin-payload.d.ts +6 -0
  144. package/lib/prelogin-payload.js +23 -4
  145. package/lib/prelogin-payload.js.map +1 -1
  146. package/lib/request.js +1 -1
  147. package/lib/request.js.map +1 -1
  148. package/lib/rpcrequest-payload.js +2 -2
  149. package/lib/rpcrequest-payload.js.map +1 -1
  150. package/lib/sender.js +2 -2
  151. package/lib/sender.js.map +1 -1
  152. package/lib/special-stored-procedure.js +1 -1
  153. package/lib/special-stored-procedure.js.map +1 -1
  154. package/lib/sqlbatch-payload.js +2 -2
  155. package/lib/sqlbatch-payload.js.map +1 -1
  156. package/lib/tds-versions.js +1 -1
  157. package/lib/tds-versions.js.map +1 -1
  158. package/lib/tedious.js +2 -2
  159. package/lib/tedious.js.map +1 -1
  160. package/lib/token/colmetadata-token-parser.js +1 -1
  161. package/lib/token/colmetadata-token-parser.js.map +1 -1
  162. package/lib/token/done-token-parser.js +1 -1
  163. package/lib/token/done-token-parser.js.map +1 -1
  164. package/lib/token/env-change-token-parser.js +1 -1
  165. package/lib/token/env-change-token-parser.js.map +1 -1
  166. package/lib/token/feature-ext-ack-parser.js +1 -1
  167. package/lib/token/feature-ext-ack-parser.js.map +1 -1
  168. package/lib/token/fedauth-info-parser.js +1 -1
  169. package/lib/token/fedauth-info-parser.js.map +1 -1
  170. package/lib/token/handler.d.ts +1 -0
  171. package/lib/token/handler.js +6 -5
  172. package/lib/token/handler.js.map +1 -1
  173. package/lib/token/helpers.js +1 -1
  174. package/lib/token/helpers.js.map +1 -1
  175. package/lib/token/infoerror-token-parser.js +1 -1
  176. package/lib/token/infoerror-token-parser.js.map +1 -1
  177. package/lib/token/loginack-token-parser.js +1 -1
  178. package/lib/token/loginack-token-parser.js.map +1 -1
  179. package/lib/token/nbcrow-token-parser.js +2 -2
  180. package/lib/token/nbcrow-token-parser.js.map +1 -1
  181. package/lib/token/order-token-parser.js +1 -1
  182. package/lib/token/order-token-parser.js.map +1 -1
  183. package/lib/token/returnstatus-token-parser.js +1 -1
  184. package/lib/token/returnstatus-token-parser.js.map +1 -1
  185. package/lib/token/returnvalue-token-parser.js +2 -2
  186. package/lib/token/returnvalue-token-parser.js.map +1 -1
  187. package/lib/token/row-token-parser.js +2 -2
  188. package/lib/token/row-token-parser.js.map +1 -1
  189. package/lib/token/sspi-token-parser.js +1 -1
  190. package/lib/token/sspi-token-parser.js.map +1 -1
  191. package/lib/token/stream-parser.js +2 -2
  192. package/lib/token/stream-parser.js.map +1 -1
  193. package/lib/token/token-stream-parser.js +2 -2
  194. package/lib/token/token-stream-parser.js.map +1 -1
  195. package/lib/token/token.js +1 -1
  196. package/lib/token/token.js.map +1 -1
  197. package/lib/tracking-buffer/writable-tracking-buffer.js +1 -1
  198. package/lib/tracking-buffer/writable-tracking-buffer.js.map +1 -1
  199. package/lib/transaction.js +2 -2
  200. package/lib/transaction.js.map +1 -1
  201. package/lib/transient-error-lookup.js +1 -1
  202. package/lib/transient-error-lookup.js.map +1 -1
  203. package/lib/value-parser.js +2 -2
  204. package/lib/value-parser.js.map +1 -1
  205. package/package.json +18 -19
  206. package/benchmarks/README.md +0 -12
  207. package/benchmarks/bulk-load/iterable.js +0 -61
  208. package/benchmarks/common.js +0 -287
  209. package/benchmarks/connection/open.js +0 -26
  210. package/benchmarks/package-lock.json +0 -21173
  211. package/benchmarks/package.json +0 -11
  212. package/benchmarks/query/call-tvp.js +0 -105
  213. package/benchmarks/query/insert-varbinary.js +0 -46
  214. package/benchmarks/query/select-many-rows.js +0 -63
  215. package/benchmarks/query/select-nvarchar.js +0 -50
  216. package/benchmarks/query/select-varbinary.js +0 -50
  217. package/benchmarks/request/rpcrequest-payload-tvp.js +0 -45
  218. package/benchmarks/request/rpcrequest-payload-varbinary.js +0 -37
  219. package/benchmarks/token-parser/colmetadata-token.js +0 -27
  220. package/benchmarks/token-parser/done-token.js +0 -28
  221. package/benchmarks/token-parser/simple-tokens.js +0 -363
package/lib/bulk-load.js CHANGED
@@ -8,7 +8,7 @@ var _events = require("events");
8
8
  var _writableTrackingBuffer = _interopRequireDefault(require("./tracking-buffer/writable-tracking-buffer"));
9
9
  var _stream = require("stream");
10
10
  var _token = require("./token/token");
11
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
12
  /**
13
13
  * @private
14
14
  */
@@ -513,4 +513,4 @@ class BulkLoad extends _events.EventEmitter {
513
513
  }
514
514
  var _default = exports.default = BulkLoad;
515
515
  module.exports = BulkLoad;
516
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXZlbnRzIiwicmVxdWlyZSIsIl93cml0YWJsZVRyYWNraW5nQnVmZmVyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9zdHJlYW0iLCJfdG9rZW4iLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIkZMQUdTIiwibnVsbGFibGUiLCJjYXNlU2VuIiwidXBkYXRlYWJsZVJlYWRXcml0ZSIsInVwZGF0ZWFibGVVbmtub3duIiwiaWRlbnRpdHkiLCJjb21wdXRlZCIsImZpeGVkTGVuQ0xSVHlwZSIsInNwYXJzZUNvbHVtblNldCIsImhpZGRlbiIsImtleSIsIm51bGxhYmxlVW5rbm93biIsIkRPTkVfU1RBVFVTIiwiRklOQUwiLCJNT1JFIiwiRVJST1IiLCJJTlhBQ1QiLCJDT1VOVCIsIkFUVE4iLCJTUlZFUlJPUiIsInJvd1Rva2VuQnVmZmVyIiwiQnVmZmVyIiwiZnJvbSIsIlRPS0VOX1RZUEUiLCJST1ciLCJ0ZXh0UG9pbnRlckFuZFRpbWVzdGFtcEJ1ZmZlciIsInRleHRQb2ludGVyTnVsbEJ1ZmZlciIsIlJvd1RyYW5zZm9ybSIsIlRyYW5zZm9ybSIsImNvbnN0cnVjdG9yIiwiYnVsa0xvYWQiLCJ3cml0YWJsZU9iamVjdE1vZGUiLCJtYWluT3B0aW9ucyIsIm9wdGlvbnMiLCJjb2x1bW5zIiwiY29sdW1uTWV0YWRhdGFXcml0dGVuIiwiX3RyYW5zZm9ybSIsInJvdyIsIl9lbmNvZGluZyIsImNhbGxiYWNrIiwicHVzaCIsImdldENvbE1ldGFEYXRhIiwiaSIsImxlbmd0aCIsImMiLCJ2YWx1ZSIsIkFycmF5IiwiaXNBcnJheSIsIm9iak5hbWUiLCJmaXJzdFJvd1dyaXR0ZW4iLCJ0eXBlIiwidmFsaWRhdGUiLCJjb2xsYXRpb24iLCJlcnJvciIsInBhcmFtZXRlciIsInNjYWxlIiwicHJlY2lzaW9uIiwibmFtZSIsImdlbmVyYXRlUGFyYW1ldGVyTGVuZ3RoIiwiY2h1bmsiLCJnZW5lcmF0ZVBhcmFtZXRlckRhdGEiLCJwcm9jZXNzIiwibmV4dFRpY2siLCJfZmx1c2giLCJjcmVhdGVEb25lVG9rZW4iLCJCdWxrTG9hZCIsIkV2ZW50RW1pdHRlciIsInRhYmxlIiwiY29ubmVjdGlvbk9wdGlvbnMiLCJjaGVja0NvbnN0cmFpbnRzIiwiZmlyZVRyaWdnZXJzIiwia2VlcE51bGxzIiwibG9ja1RhYmxlIiwib3JkZXIiLCJUeXBlRXJyb3IiLCJjb2x1bW4iLCJkaXJlY3Rpb24iLCJPYmplY3QiLCJlbnRyaWVzIiwidW5kZWZpbmVkIiwiY2FuY2VsZWQiLCJleGVjdXRpb25TdGFydGVkIiwiY29sdW1uc0J5TmFtZSIsInN0cmVhbWluZ01vZGUiLCJyb3dUb1BhY2tldFRyYW5zZm9ybSIsImJ1bGtPcHRpb25zIiwiYWRkQ29sdW1uIiwib3V0cHV0IiwiRXJyb3IiLCJpZCIsInJlc29sdmVMZW5ndGgiLCJyZXNvbHZlUHJlY2lzaW9uIiwicmVzb2x2ZVNjYWxlIiwiZ2V0T3B0aW9uc1NxbCIsImFkZE9wdGlvbnMiLCJvcmRlckNvbHVtbnMiLCJqb2luIiwiZ2V0QnVsa0luc2VydFNxbCIsInNxbCIsImxlbiIsImRlY2xhcmF0aW9uIiwiZ2V0VGFibGVDcmVhdGlvblNxbCIsInRCdWYiLCJXcml0YWJsZVRyYWNraW5nQnVmZmVyIiwid3JpdGVVSW50OCIsIkNPTE1FVEFEQVRBIiwid3JpdGVVSW50MTZMRSIsImoiLCJ0ZHNWZXJzaW9uIiwid3JpdGVVSW50MzJMRSIsImZsYWdzIiwid3JpdGVCdWZmZXIiLCJnZW5lcmF0ZVR5cGVJbmZvIiwiaGFzVGFibGVOYW1lIiwid3JpdGVVc1ZhcmNoYXIiLCJ3cml0ZUJWYXJjaGFyIiwiZGF0YSIsInNldFRpbWVvdXQiLCJ0aW1lb3V0IiwiRE9ORSIsInN0YXR1cyIsImNhbmNlbCIsImVtaXQiLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJtb2R1bGUiXSwic291cmNlcyI6WyIuLi9zcmMvYnVsay1sb2FkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgV3JpdGFibGVUcmFja2luZ0J1ZmZlciBmcm9tICcuL3RyYWNraW5nLWJ1ZmZlci93cml0YWJsZS10cmFja2luZy1idWZmZXInO1xuaW1wb3J0IENvbm5lY3Rpb24sIHsgdHlwZSBJbnRlcm5hbENvbm5lY3Rpb25PcHRpb25zIH0gZnJvbSAnLi9jb25uZWN0aW9uJztcblxuaW1wb3J0IHsgVHJhbnNmb3JtIH0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCB7IFRZUEUgYXMgVE9LRU5fVFlQRSB9IGZyb20gJy4vdG9rZW4vdG9rZW4nO1xuXG5pbXBvcnQgeyB0eXBlIERhdGFUeXBlLCB0eXBlIFBhcmFtZXRlciB9IGZyb20gJy4vZGF0YS10eXBlJztcbmltcG9ydCB7IENvbGxhdGlvbiB9IGZyb20gJy4vY29sbGF0aW9uJztcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBGTEFHUyA9IHtcbiAgbnVsbGFibGU6IDEgPDwgMCxcbiAgY2FzZVNlbjogMSA8PCAxLFxuICB1cGRhdGVhYmxlUmVhZFdyaXRlOiAxIDw8IDIsXG4gIHVwZGF0ZWFibGVVbmtub3duOiAxIDw8IDMsXG4gIGlkZW50aXR5OiAxIDw8IDQsXG4gIGNvbXB1dGVkOiAxIDw8IDUsIC8vIGludHJvZHVjZWQgaW4gVERTIDcuMlxuICBmaXhlZExlbkNMUlR5cGU6IDEgPDwgOCwgLy8gaW50cm9kdWNlZCBpbiBURFMgNy4yXG4gIHNwYXJzZUNvbHVtblNldDogMSA8PCAxMCwgLy8gaW50cm9kdWNlZCBpbiBURFMgNy4zLkJcbiAgaGlkZGVuOiAxIDw8IDEzLCAvLyBpbnRyb2R1Y2VkIGluIFREUyA3LjJcbiAga2V5OiAxIDw8IDE0LCAvLyBpbnRyb2R1Y2VkIGluIFREUyA3LjJcbiAgbnVsbGFibGVVbmtub3duOiAxIDw8IDE1IC8vIGludHJvZHVjZWQgaW4gVERTIDcuMlxufTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBET05FX1NUQVRVUyA9IHtcbiAgRklOQUw6IDB4MDAsXG4gIE1PUkU6IDB4MSxcbiAgRVJST1I6IDB4MixcbiAgSU5YQUNUOiAweDQsXG4gIENPVU5UOiAweDEwLFxuICBBVFROOiAweDIwLFxuICBTUlZFUlJPUjogMHgxMDBcbn07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuaW50ZXJmYWNlIEludGVybmFsT3B0aW9ucyB7XG4gIGNoZWNrQ29uc3RyYWludHM6IGJvb2xlYW47XG4gIGZpcmVUcmlnZ2VyczogYm9vbGVhbjtcbiAga2VlcE51bGxzOiBib29sZWFuO1xuICBsb2NrVGFibGU6IGJvb2xlYW47XG4gIG9yZGVyOiB7IFtjb2x1bW5OYW1lOiBzdHJpbmddOiAnQVNDJyB8ICdERVNDJyB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbnMge1xuICAvKipcbiAgICogSG9ub3JzIGNvbnN0cmFpbnRzIGR1cmluZyBidWxrIGxvYWQsIHVzaW5nIFQtU1FMXG4gICAqIFtDSEVDS19DT05TVFJBSU5UU10oaHR0cHM6Ly90ZWNobmV0Lm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczE4NjI0Nyh2PXNxbC4xMDUpLmFzcHgpLlxuICAgKiAoZGVmYXVsdDogYGZhbHNlYClcbiAgICovXG4gIGNoZWNrQ29uc3RyYWludHM/OiBJbnRlcm5hbE9wdGlvbnNbJ2NoZWNrQ29uc3RyYWludHMnXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogSG9ub3JzIGluc2VydCB0cmlnZ2VycyBkdXJpbmcgYnVsayBsb2FkLCB1c2luZyB0aGUgVC1TUUwgW0ZJUkVfVFJJR0dFUlNdKGh0dHBzOi8vdGVjaG5ldC5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXMxODc2NDAodj1zcWwuMTA1KS5hc3B4KS4gKGRlZmF1bHQ6IGBmYWxzZWApXG4gICAqL1xuICBmaXJlVHJpZ2dlcnM/OiBJbnRlcm5hbE9wdGlvbnNbJ2ZpcmVUcmlnZ2VycyddIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBIb25vcnMgbnVsbCB2YWx1ZSBwYXNzZWQsIGlnbm9yZXMgdGhlIGRlZmF1bHQgdmFsdWVzIHNldCBvbiB0YWJsZSwgdXNpbmcgVC1TUUwgW0tFRVBfTlVMTFNdKGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXMxODc4ODcodj1zcWwuMTIwKS5hc3B4KS4gKGRlZmF1bHQ6IGBmYWxzZWApXG4gICAqL1xuICBrZWVwTnVsbHM/OiBJbnRlcm5hbE9wdGlvbnNbJ2tlZXBOdWxscyddIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBQbGFjZXMgYSBidWxrIHVwZGF0ZShCVSkgbG9jayBvbiB0YWJsZSB3aGlsZSBwZXJmb3JtaW5nIGJ1bGsgbG9hZCwgdXNpbmcgVC1TUUwgW1RBQkxPQ0tdKGh0dHBzOi8vdGVjaG5ldC5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXMxODA4NzYodj1zcWwuMTA1KS5hc3B4KS4gKGRlZmF1bHQ6IGBmYWxzZWApXG4gICAqL1xuICBsb2NrVGFibGU/OiBJbnRlcm5hbE9wdGlvbnNbJ2xvY2tUYWJsZSddIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIG9yZGVyaW5nIG9mIHRoZSBkYXRhIHRvIHBvc3NpYmx5IGluY3JlYXNlIGJ1bGsgaW5zZXJ0IHBlcmZvcm1hbmNlLCB1c2luZyBULVNRTCBbT1JERVJdKGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3ByZXZpb3VzLXZlcnNpb25zL3NxbC9zcWwtc2VydmVyLTIwMDgtcjIvbXMxNzc0Njgodj1zcWwuMTA1KSkuIChkZWZhdWx0OiBge31gKVxuICAgKi9cbiAgb3JkZXI/OiBJbnRlcm5hbE9wdGlvbnNbJ29yZGVyJ10gfCB1bmRlZmluZWQ7XG59XG5cblxuZXhwb3J0IHR5cGUgQ2FsbGJhY2sgPVxuICAvKipcbiAgICogQSBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIGNhbGxlZCBhZnRlciB0aGUgW1tCdWxrTG9hZF1dIGZpbmlzaGVzIGV4ZWN1dGluZy5cbiAgICpcbiAgICogQHBhcmFtIHJvd0NvdW50IHRoZSBudW1iZXIgb2Ygcm93cyBpbnNlcnRlZFxuICAgKi9cbiAgKGVycjogRXJyb3IgfCB1bmRlZmluZWQgfCBudWxsLCByb3dDb3VudD86IG51bWJlcikgPT4gdm9pZDtcblxuaW50ZXJmYWNlIENvbHVtbiBleHRlbmRzIFBhcmFtZXRlciB7XG4gIG9iak5hbWU6IHN0cmluZztcbiAgY29sbGF0aW9uOiBDb2xsYXRpb24gfCB1bmRlZmluZWQ7XG59XG5cbmludGVyZmFjZSBDb2x1bW5PcHRpb25zIHtcbiAgb3V0cHV0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRm9yIFZhckNoYXIsIE5WYXJDaGFyLCBWYXJCaW5hcnkuIFVzZSBsZW5ndGggYXMgYEluZmluaXR5YCBmb3IgVmFyQ2hhcihtYXgpLCBOVmFyQ2hhcihtYXgpIGFuZCBWYXJCaW5hcnkobWF4KS5cbiAgICovXG4gIGxlbmd0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogRm9yIE51bWVyaWMsIERlY2ltYWwuXG4gICAqL1xuICBwcmVjaXNpb24/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEZvciBOdW1lcmljLCBEZWNpbWFsLCBUaW1lLCBEYXRlVGltZTIsIERhdGVUaW1lT2Zmc2V0LlxuICAgKi9cbiAgc2NhbGU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIElmIHRoZSBuYW1lIG9mIHRoZSBjb2x1bW4gaXMgZGlmZmVyZW50IGZyb20gdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IGZvdW5kIG9uIGByb3dPYmpgIGFyZ3VtZW50cyBwYXNzZWQgdG8gW1thZGRSb3ddXSwgdGhlbiB5b3UgY2FuIHVzZSB0aGlzIG9wdGlvbiB0byBzcGVjaWZ5IHRoZSBwcm9wZXJ0eSBuYW1lLlxuICAgKi9cbiAgb2JqTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvbHVtbiBhY2NlcHRzIE5VTEwgdmFsdWVzLlxuICAgKi9cbiAgbnVsbGFibGU/OiBib29sZWFuO1xufVxuXG5jb25zdCByb3dUb2tlbkJ1ZmZlciA9IEJ1ZmZlci5mcm9tKFsgVE9LRU5fVFlQRS5ST1cgXSk7XG5jb25zdCB0ZXh0UG9pbnRlckFuZFRpbWVzdGFtcEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKFtcbiAgLy8gVGV4dFBvaW50ZXIgbGVuZ3RoXG4gIDB4MTAsXG5cbiAgLy8gVGV4dFBvaW50ZXJcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCxcblxuICAvLyBUaW1lc3RhbXBcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMFxuXSk7XG5jb25zdCB0ZXh0UG9pbnRlck51bGxCdWZmZXIgPSBCdWZmZXIuZnJvbShbMHgwMF0pO1xuXG4vLyBBIHRyYW5zZm9ybSB0aGF0IGNvbnZlcnRzIHJvd3MgdG8gcGFja2V0cy5cbmNsYXNzIFJvd1RyYW5zZm9ybSBleHRlbmRzIFRyYW5zZm9ybSB7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBjb2x1bW5NZXRhZGF0YVdyaXR0ZW46IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBidWxrTG9hZDogQnVsa0xvYWQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBtYWluT3B0aW9uczogQnVsa0xvYWRbJ29wdGlvbnMnXTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGNvbHVtbnM6IEJ1bGtMb2FkWydjb2x1bW5zJ107XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihidWxrTG9hZDogQnVsa0xvYWQpIHtcbiAgICBzdXBlcih7IHdyaXRhYmxlT2JqZWN0TW9kZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMuYnVsa0xvYWQgPSBidWxrTG9hZDtcbiAgICB0aGlzLm1haW5PcHRpb25zID0gYnVsa0xvYWQub3B0aW9ucztcbiAgICB0aGlzLmNvbHVtbnMgPSBidWxrTG9hZC5jb2x1bW5zO1xuXG4gICAgdGhpcy5jb2x1bW5NZXRhZGF0YVdyaXR0ZW4gPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3RyYW5zZm9ybShyb3c6IEFycmF5PHVua25vd24+IHwgeyBbY29sTmFtZTogc3RyaW5nXTogdW5rbm93biB9LCBfZW5jb2Rpbmc6IHN0cmluZywgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKSB7XG4gICAgaWYgKCF0aGlzLmNvbHVtbk1ldGFkYXRhV3JpdHRlbikge1xuICAgICAgdGhpcy5wdXNoKHRoaXMuYnVsa0xvYWQuZ2V0Q29sTWV0YURhdGEoKSk7XG4gICAgICB0aGlzLmNvbHVtbk1ldGFkYXRhV3JpdHRlbiA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoKHJvd1Rva2VuQnVmZmVyKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjID0gdGhpcy5jb2x1bW5zW2ldO1xuICAgICAgbGV0IHZhbHVlID0gQXJyYXkuaXNBcnJheShyb3cpID8gcm93W2ldIDogcm93W2Mub2JqTmFtZV07XG5cbiAgICAgIGlmICghdGhpcy5idWxrTG9hZC5maXJzdFJvd1dyaXR0ZW4pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YWx1ZSA9IGMudHlwZS52YWxpZGF0ZSh2YWx1ZSwgYy5jb2xsYXRpb24pO1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXJhbWV0ZXIgPSB7XG4gICAgICAgIGxlbmd0aDogYy5sZW5ndGgsXG4gICAgICAgIHNjYWxlOiBjLnNjYWxlLFxuICAgICAgICBwcmVjaXNpb246IGMucHJlY2lzaW9uLFxuICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgIH07XG5cbiAgICAgIGlmIChjLnR5cGUubmFtZSA9PT0gJ1RleHQnIHx8IGMudHlwZS5uYW1lID09PSAnSW1hZ2UnIHx8IGMudHlwZS5uYW1lID09PSAnTlRleHQnKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5wdXNoKHRleHRQb2ludGVyTnVsbEJ1ZmZlcik7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnB1c2godGV4dFBvaW50ZXJBbmRUaW1lc3RhbXBCdWZmZXIpO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnB1c2goYy50eXBlLmdlbmVyYXRlUGFyYW1ldGVyTGVuZ3RoKHBhcmFtZXRlciwgdGhpcy5tYWluT3B0aW9ucykpO1xuICAgICAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGMudHlwZS5nZW5lcmF0ZVBhcmFtZXRlckRhdGEocGFyYW1ldGVyLCB0aGlzLm1haW5PcHRpb25zKSkge1xuICAgICAgICAgIHRoaXMucHVzaChjaHVuayk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2ZsdXNoKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5wdXNoKHRoaXMuYnVsa0xvYWQuY3JlYXRlRG9uZVRva2VuKCkpO1xuXG4gICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjayk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIEJ1bGtMb2FkIGluc3RhbmNlIGlzIHVzZWQgdG8gcGVyZm9ybSBhIGJ1bGsgaW5zZXJ0LlxuICpcbiAqIFVzZSBbW0Nvbm5lY3Rpb24ubmV3QnVsa0xvYWRdXSB0byBjcmVhdGUgYSBuZXcgaW5zdGFuY2UsIGFuZCBbW0Nvbm5lY3Rpb24uZXhlY0J1bGtMb2FkXV0gdG8gZXhlY3V0ZSBpdC5cbiAqXG4gKiBFeGFtcGxlIG9mIEJ1bGtMb2FkIFVzYWdlczpcbiAqXG4gKiBgYGBqc1xuICogLy8gb3B0aW9uYWwgQnVsa0xvYWQgb3B0aW9uc1xuICogY29uc3Qgb3B0aW9ucyA9IHsga2VlcE51bGxzOiB0cnVlIH07XG4gKlxuICogLy8gaW5zdGFudGlhdGUgLSBwcm92aWRlIHRoZSB0YWJsZSB3aGVyZSB5b3UnbGwgYmUgaW5zZXJ0aW5nIHRvLCBvcHRpb25zIGFuZCBhIGNhbGxiYWNrXG4gKiBjb25zdCBidWxrTG9hZCA9IGNvbm5lY3Rpb24ubmV3QnVsa0xvYWQoJ015VGFibGUnLCBvcHRpb25zLCAoZXJyb3IsIHJvd0NvdW50KSA9PiB7XG4gKiAgIGNvbnNvbGUubG9nKCdpbnNlcnRlZCAlZCByb3dzJywgcm93Q291bnQpO1xuICogfSk7XG4gKlxuICogLy8gc2V0dXAgeW91ciBjb2x1bW5zIC0gYWx3YXlzIGluZGljYXRlIHdoZXRoZXIgdGhlIGNvbHVtbiBpcyBudWxsYWJsZVxuICogYnVsa0xvYWQuYWRkQ29sdW1uKCdteUludCcsIFRZUEVTLkludCwgeyBudWxsYWJsZTogZmFsc2UgfSk7XG4gKiBidWxrTG9hZC5hZGRDb2x1bW4oJ215U3RyaW5nJywgVFlQRVMuTlZhckNoYXIsIHsgbGVuZ3RoOiA1MCwgbnVsbGFibGU6IHRydWUgfSk7XG4gKlxuICogLy8gZXhlY3V0ZVxuICogY29ubmVjdGlvbi5leGVjQnVsa0xvYWQoYnVsa0xvYWQsIFtcbiAqICAgeyBteUludDogNywgbXlTdHJpbmc6ICdoZWxsbycgfSxcbiAqICAgeyBteUludDogMjMsIG15U3RyaW5nOiAnd29ybGQnIH1cbiAqIF0pO1xuICogYGBgXG4gKi9cbmNsYXNzIEJ1bGtMb2FkIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGNhbmNlbGVkOiBib29sZWFuO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgZXhlY3V0aW9uU3RhcnRlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHN0cmVhbWluZ01vZGU6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSB0YWJsZTogc3RyaW5nO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgdGltZW91dDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBvcHRpb25zOiBJbnRlcm5hbENvbm5lY3Rpb25PcHRpb25zO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgY2FsbGJhY2s6IENhbGxiYWNrO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBjb2x1bW5zOiBBcnJheTxDb2x1bW4+O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgY29sdW1uc0J5TmFtZTogeyBbbmFtZTogc3RyaW5nXTogQ29sdW1uIH07XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGZpcnN0Um93V3JpdHRlbjogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHJvd1RvUGFja2V0VHJhbnNmb3JtOiBSb3dUcmFuc2Zvcm07XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGJ1bGtPcHRpb25zOiBJbnRlcm5hbE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGNvbm5lY3Rpb246IENvbm5lY3Rpb24gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSByb3dzOiBBcnJheTxhbnk+IHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgcnN0OiBBcnJheTxhbnk+IHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgcm93Q291bnQ6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICBkZWNsYXJlIGNvbGxhdGlvbjogQ29sbGF0aW9uIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29uc3RydWN0b3IodGFibGU6IHN0cmluZywgY29sbGF0aW9uOiBDb2xsYXRpb24gfCB1bmRlZmluZWQsIGNvbm5lY3Rpb25PcHRpb25zOiBJbnRlcm5hbENvbm5lY3Rpb25PcHRpb25zLCB7XG4gICAgY2hlY2tDb25zdHJhaW50cyA9IGZhbHNlLFxuICAgIGZpcmVUcmlnZ2VycyA9IGZhbHNlLFxuICAgIGtlZXBOdWxscyA9IGZhbHNlLFxuICAgIGxvY2tUYWJsZSA9IGZhbHNlLFxuICAgIG9yZGVyID0ge30sXG4gIH06IE9wdGlvbnMsIGNhbGxiYWNrOiBDYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgY2hlY2tDb25zdHJhaW50cyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJvcHRpb25zLmNoZWNrQ29uc3RyYWludHNcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi4nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZpcmVUcmlnZ2VycyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJvcHRpb25zLmZpcmVUcmlnZ2Vyc1wiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuLicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Yga2VlcE51bGxzICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcIm9wdGlvbnMua2VlcE51bGxzXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBsb2NrVGFibGUgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwib3B0aW9ucy5sb2NrVGFibGVcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi4nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9yZGVyICE9PSAnb2JqZWN0JyB8fCBvcmRlciA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwib3B0aW9ucy5vcmRlclwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBvYmplY3QuJyk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbY29sdW1uLCBkaXJlY3Rpb25dIG9mIE9iamVjdC5lbnRyaWVzKG9yZGVyKSkge1xuICAgICAgaWYgKGRpcmVjdGlvbiAhPT0gJ0FTQycgJiYgZGlyZWN0aW9uICE9PSAnREVTQycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlIG9mIHRoZSBcIicgKyBjb2x1bW4gKyAnXCIga2V5IGluIHRoZSBcIm9wdGlvbnMub3JkZXJcIiBvYmplY3QgbXVzdCBiZSBlaXRoZXIgXCJBU0NcIiBvciBcIkRFU0NcIi4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5lcnJvciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNhbmNlbGVkID0gZmFsc2U7XG4gICAgdGhpcy5leGVjdXRpb25TdGFydGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLmNvbGxhdGlvbiA9IGNvbGxhdGlvbjtcblxuICAgIHRoaXMudGFibGUgPSB0YWJsZTtcbiAgICB0aGlzLm9wdGlvbnMgPSBjb25uZWN0aW9uT3B0aW9ucztcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgdGhpcy5jb2x1bW5zID0gW107XG4gICAgdGhpcy5jb2x1bW5zQnlOYW1lID0ge307XG4gICAgdGhpcy5maXJzdFJvd1dyaXR0ZW4gPSBmYWxzZTtcbiAgICB0aGlzLnN0cmVhbWluZ01vZGUgPSBmYWxzZTtcblxuICAgIHRoaXMucm93VG9QYWNrZXRUcmFuc2Zvcm0gPSBuZXcgUm93VHJhbnNmb3JtKHRoaXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG5cbiAgICB0aGlzLmJ1bGtPcHRpb25zID0geyBjaGVja0NvbnN0cmFpbnRzLCBmaXJlVHJpZ2dlcnMsIGtlZXBOdWxscywgbG9ja1RhYmxlLCBvcmRlciB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBjb2x1bW4gdG8gdGhlIGJ1bGsgbG9hZC5cbiAgICpcbiAgICogVGhlIGNvbHVtbiBkZWZpbml0aW9ucyBzaG91bGQgbWF0Y2ggdGhlIHRhYmxlIHlvdSBhcmUgdHJ5aW5nIHRvIGluc2VydCBpbnRvLlxuICAgKiBBdHRlbXB0aW5nIHRvIGNhbGwgYWRkQ29sdW1uIGFmdGVyIHRoZSBmaXJzdCByb3cgaGFzIGJlZW4gYWRkZWQgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24uXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGJ1bGtMb2FkLmFkZENvbHVtbignTXlJbnRDb2x1bW4nLCBUWVBFUy5JbnQsIHsgbnVsbGFibGU6IGZhbHNlIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGNvbHVtbi5cbiAgICogQHBhcmFtIHR5cGUgT25lIG9mIHRoZSBzdXBwb3J0ZWQgYGRhdGEgdHlwZXNgLlxuICAgKiBAcGFyYW0gX19uYW1lZFBhcmFtZXRlcnMgQWRkaXRpb25hbCBjb2x1bW4gdHlwZSBpbmZvcm1hdGlvbi4gQXQgYSBtaW5pbXVtLCBgbnVsbGFibGVgIG11c3QgYmUgc2V0IHRvIHRydWUgb3IgZmFsc2UuXG4gICAqIEBwYXJhbSBsZW5ndGggRm9yIFZhckNoYXIsIE5WYXJDaGFyLCBWYXJCaW5hcnkuIFVzZSBsZW5ndGggYXMgYEluZmluaXR5YCBmb3IgVmFyQ2hhcihtYXgpLCBOVmFyQ2hhcihtYXgpIGFuZCBWYXJCaW5hcnkobWF4KS5cbiAgICogQHBhcmFtIG51bGxhYmxlIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb2x1bW4gYWNjZXB0cyBOVUxMIHZhbHVlcy5cbiAgICogQHBhcmFtIG9iak5hbWUgSWYgdGhlIG5hbWUgb2YgdGhlIGNvbHVtbiBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgZm91bmQgb24gYHJvd09iamAgYXJndW1lbnRzIHBhc3NlZCB0byBbW2FkZFJvd11dIG9yIFtbQ29ubmVjdGlvbi5leGVjQnVsa0xvYWRdXSwgdGhlbiB5b3UgY2FuIHVzZSB0aGlzIG9wdGlvbiB0byBzcGVjaWZ5IHRoZSBwcm9wZXJ0eSBuYW1lLlxuICAgKiBAcGFyYW0gcHJlY2lzaW9uIEZvciBOdW1lcmljLCBEZWNpbWFsLlxuICAgKiBAcGFyYW0gc2NhbGUgRm9yIE51bWVyaWMsIERlY2ltYWwsIFRpbWUsIERhdGVUaW1lMiwgRGF0ZVRpbWVPZmZzZXQuXG4gICovXG4gIGFkZENvbHVtbihuYW1lOiBzdHJpbmcsIHR5cGU6IERhdGFUeXBlLCB7IG91dHB1dCA9IGZhbHNlLCBsZW5ndGgsIHByZWNpc2lvbiwgc2NhbGUsIG9iak5hbWUgPSBuYW1lLCBudWxsYWJsZSA9IHRydWUgfTogQ29sdW1uT3B0aW9ucykge1xuICAgIGlmICh0aGlzLmZpcnN0Um93V3JpdHRlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2x1bW5zIGNhbm5vdCBiZSBhZGRlZCB0byBidWxrIGluc2VydCBhZnRlciB0aGUgZmlyc3Qgcm93IGhhcyBiZWVuIHdyaXR0ZW4uJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmV4ZWN1dGlvblN0YXJ0ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29sdW1ucyBjYW5ub3QgYmUgYWRkZWQgdG8gYnVsayBpbnNlcnQgYWZ0ZXIgZXhlY3V0aW9uIGhhcyBzdGFydGVkLicpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbHVtbjogQ29sdW1uID0ge1xuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIG91dHB1dDogb3V0cHV0LFxuICAgICAgbGVuZ3RoOiBsZW5ndGgsXG4gICAgICBwcmVjaXNpb246IHByZWNpc2lvbixcbiAgICAgIHNjYWxlOiBzY2FsZSxcbiAgICAgIG9iak5hbWU6IG9iak5hbWUsXG4gICAgICBudWxsYWJsZTogbnVsbGFibGUsXG4gICAgICBjb2xsYXRpb246IHRoaXMuY29sbGF0aW9uXG4gICAgfTtcblxuICAgIGlmICgodHlwZS5pZCAmIDB4MzApID09PSAweDIwKSB7XG4gICAgICBpZiAoY29sdW1uLmxlbmd0aCA9PSBudWxsICYmIHR5cGUucmVzb2x2ZUxlbmd0aCkge1xuICAgICAgICBjb2x1bW4ubGVuZ3RoID0gdHlwZS5yZXNvbHZlTGVuZ3RoKGNvbHVtbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGUucmVzb2x2ZVByZWNpc2lvbiAmJiBjb2x1bW4ucHJlY2lzaW9uID09IG51bGwpIHtcbiAgICAgIGNvbHVtbi5wcmVjaXNpb24gPSB0eXBlLnJlc29sdmVQcmVjaXNpb24oY29sdW1uKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZS5yZXNvbHZlU2NhbGUgJiYgY29sdW1uLnNjYWxlID09IG51bGwpIHtcbiAgICAgIGNvbHVtbi5zY2FsZSA9IHR5cGUucmVzb2x2ZVNjYWxlKGNvbHVtbik7XG4gICAgfVxuXG4gICAgdGhpcy5jb2x1bW5zLnB1c2goY29sdW1uKTtcblxuICAgIHRoaXMuY29sdW1uc0J5TmFtZVtuYW1lXSA9IGNvbHVtbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0T3B0aW9uc1NxbCgpIHtcbiAgICBjb25zdCBhZGRPcHRpb25zID0gW107XG5cbiAgICBpZiAodGhpcy5idWxrT3B0aW9ucy5jaGVja0NvbnN0cmFpbnRzKSB7XG4gICAgICBhZGRPcHRpb25zLnB1c2goJ0NIRUNLX0NPTlNUUkFJTlRTJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYnVsa09wdGlvbnMuZmlyZVRyaWdnZXJzKSB7XG4gICAgICBhZGRPcHRpb25zLnB1c2goJ0ZJUkVfVFJJR0dFUlMnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5idWxrT3B0aW9ucy5rZWVwTnVsbHMpIHtcbiAgICAgIGFkZE9wdGlvbnMucHVzaCgnS0VFUF9OVUxMUycpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmJ1bGtPcHRpb25zLmxvY2tUYWJsZSkge1xuICAgICAgYWRkT3B0aW9ucy5wdXNoKCdUQUJMT0NLJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYnVsa09wdGlvbnMub3JkZXIpIHtcbiAgICAgIGNvbnN0IG9yZGVyQ29sdW1ucyA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IFtjb2x1bW4sIGRpcmVjdGlvbl0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5idWxrT3B0aW9ucy5vcmRlcikpIHtcbiAgICAgICAgb3JkZXJDb2x1bW5zLnB1c2goYCR7Y29sdW1ufSAke2RpcmVjdGlvbn1gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9yZGVyQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgYWRkT3B0aW9ucy5wdXNoKGBPUkRFUiAoJHtvcmRlckNvbHVtbnMuam9pbignLCAnKX0pYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFkZE9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGAgV0lUSCAoJHthZGRPcHRpb25zLmpvaW4oJywnKX0pYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0QnVsa0luc2VydFNxbCgpIHtcbiAgICBsZXQgc3FsID0gJ2luc2VydCBidWxrICcgKyB0aGlzLnRhYmxlICsgJygnO1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLmNvbHVtbnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGMgPSB0aGlzLmNvbHVtbnNbaV07XG4gICAgICBpZiAoaSAhPT0gMCkge1xuICAgICAgICBzcWwgKz0gJywgJztcbiAgICAgIH1cbiAgICAgIHNxbCArPSAnWycgKyBjLm5hbWUgKyAnXSAnICsgKGMudHlwZS5kZWNsYXJhdGlvbihjKSk7XG4gICAgfVxuICAgIHNxbCArPSAnKSc7XG5cbiAgICBzcWwgKz0gdGhpcy5nZXRPcHRpb25zU3FsKCk7XG4gICAgcmV0dXJuIHNxbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIHNpbXBseSBhIGhlbHBlciB1dGlsaXR5IGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYSBgQ1JFQVRFIFRBQkxFIFNRTGAgc3RhdGVtZW50IGJhc2VkIG9uIHRoZSBjb2x1bW5zIGFkZGVkIHRvIHRoZSBidWxrTG9hZCBvYmplY3QuXG4gICAqIFRoaXMgbWF5IGJlIHBhcnRpY3VsYXJseSBoYW5keSB3aGVuIHlvdSB3YW50IHRvIGluc2VydCBpbnRvIGEgdGVtcG9yYXJ5IHRhYmxlIChhIHRhYmxlIHdoaWNoIHN0YXJ0cyB3aXRoIGAjYCkuXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIHZhciBzcWwgPSBidWxrTG9hZC5nZXRUYWJsZUNyZWF0aW9uU3FsKCk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBBIHNpZGUgbm90ZSBvbiBidWxrIGluc2VydGluZyBpbnRvIHRlbXBvcmFyeSB0YWJsZXM6IGlmIHlvdSB3YW50IHRvIGFjY2VzcyBhIGxvY2FsIHRlbXBvcmFyeSB0YWJsZSBhZnRlciBleGVjdXRpbmcgdGhlIGJ1bGsgbG9hZCxcbiAgICogeW91J2xsIG5lZWQgdG8gdXNlIHRoZSBzYW1lIGNvbm5lY3Rpb24gYW5kIGV4ZWN1dGUgeW91ciByZXF1ZXN0cyB1c2luZyBbW0Nvbm5lY3Rpb24uZXhlY1NxbEJhdGNoXV0gaW5zdGVhZCBvZiBbW0Nvbm5lY3Rpb24uZXhlY1NxbF1dXG4gICAqL1xuICBnZXRUYWJsZUNyZWF0aW9uU3FsKCkge1xuICAgIGxldCBzcWwgPSAnQ1JFQVRFIFRBQkxFICcgKyB0aGlzLnRhYmxlICsgJyhcXG4nO1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLmNvbHVtbnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGMgPSB0aGlzLmNvbHVtbnNbaV07XG4gICAgICBpZiAoaSAhPT0gMCkge1xuICAgICAgICBzcWwgKz0gJyxcXG4nO1xuICAgICAgfVxuICAgICAgc3FsICs9ICdbJyArIGMubmFtZSArICddICcgKyAoYy50eXBlLmRlY2xhcmF0aW9uKGMpKTtcbiAgICAgIGlmIChjLm51bGxhYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc3FsICs9ICcgJyArIChjLm51bGxhYmxlID8gJ05VTEwnIDogJ05PVCBOVUxMJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHNxbCArPSAnXFxuKSc7XG4gICAgcmV0dXJuIHNxbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0Q29sTWV0YURhdGEoKSB7XG4gICAgY29uc3QgdEJ1ZiA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKDEwMCwgbnVsbCwgdHJ1ZSk7XG4gICAgLy8gVG9rZW5UeXBlXG4gICAgdEJ1Zi53cml0ZVVJbnQ4KFRPS0VOX1RZUEUuQ09MTUVUQURBVEEpO1xuICAgIC8vIENvdW50XG4gICAgdEJ1Zi53cml0ZVVJbnQxNkxFKHRoaXMuY29sdW1ucy5sZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaiA9IDAsIGxlbiA9IHRoaXMuY29sdW1ucy5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgY29uc3QgYyA9IHRoaXMuY29sdW1uc1tqXTtcbiAgICAgIC8vIFVzZXJUeXBlXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnRkc1ZlcnNpb24gPCAnN18yJykge1xuICAgICAgICB0QnVmLndyaXRlVUludDE2TEUoMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0QnVmLndyaXRlVUludDMyTEUoMCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEZsYWdzXG4gICAgICBsZXQgZmxhZ3MgPSBGTEFHUy51cGRhdGVhYmxlUmVhZFdyaXRlO1xuICAgICAgaWYgKGMubnVsbGFibGUpIHtcbiAgICAgICAgZmxhZ3MgfD0gRkxBR1MubnVsbGFibGU7XG4gICAgICB9IGVsc2UgaWYgKGMubnVsbGFibGUgPT09IHVuZGVmaW5lZCAmJiB0aGlzLm9wdGlvbnMudGRzVmVyc2lvbiA+PSAnN18yJykge1xuICAgICAgICBmbGFncyB8PSBGTEFHUy5udWxsYWJsZVVua25vd247XG4gICAgICB9XG4gICAgICB0QnVmLndyaXRlVUludDE2TEUoZmxhZ3MpO1xuXG4gICAgICAvLyBUWVBFX0lORk9cbiAgICAgIHRCdWYud3JpdGVCdWZmZXIoYy50eXBlLmdlbmVyYXRlVHlwZUluZm8oYywgdGhpcy5vcHRpb25zKSk7XG5cbiAgICAgIC8vIFRhYmxlTmFtZVxuICAgICAgaWYgKGMudHlwZS5oYXNUYWJsZU5hbWUpIHtcbiAgICAgICAgdEJ1Zi53cml0ZVVzVmFyY2hhcih0aGlzLnRhYmxlLCAndWNzMicpO1xuICAgICAgfVxuXG4gICAgICAvLyBDb2xOYW1lXG4gICAgICB0QnVmLndyaXRlQlZhcmNoYXIoYy5uYW1lLCAndWNzMicpO1xuICAgIH1cbiAgICByZXR1cm4gdEJ1Zi5kYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYSB0aW1lb3V0IGZvciB0aGlzIGJ1bGsgbG9hZC5cbiAgICpcbiAgICogYGBganNcbiAgICogYnVsa0xvYWQuc2V0VGltZW91dCh0aW1lb3V0KTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSB0aW1lb3V0IFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgYnVsayBsb2FkIGlzIGNvbnNpZGVyZWQgZmFpbGVkLCBvciAwIGZvciBubyB0aW1lb3V0LlxuICAgKiAgIFdoZW4gbm8gdGltZW91dCBpcyBzZXQgZm9yIHRoZSBidWxrIGxvYWQsIHRoZSBbW0Nvbm5lY3Rpb25PcHRpb25zLnJlcXVlc3RUaW1lb3V0XV0gb2YgdGhlIENvbm5lY3Rpb24gaXMgdXNlZC5cbiAgICovXG4gIHNldFRpbWVvdXQodGltZW91dD86IG51bWJlcikge1xuICAgIHRoaXMudGltZW91dCA9IHRpbWVvdXQ7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNyZWF0ZURvbmVUb2tlbigpIHtcbiAgICAvLyBJdCBtaWdodCBiZSBuaWNlIHRvIG1ha2UgRG9uZVRva2VuIGEgY2xhc3MgaWYgYW55dGhpbmcgbmVlZHMgdG8gY3JlYXRlIHRoZW0sIGJ1dCBmb3Igbm93LCBqdXN0IGRvIGl0IGhlcmVcbiAgICBjb25zdCB0QnVmID0gbmV3IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIodGhpcy5vcHRpb25zLnRkc1ZlcnNpb24gPCAnN18yJyA/IDkgOiAxMyk7XG4gICAgdEJ1Zi53cml0ZVVJbnQ4KFRPS0VOX1RZUEUuRE9ORSk7XG4gICAgY29uc3Qgc3RhdHVzID0gRE9ORV9TVEFUVVMuRklOQUw7XG4gICAgdEJ1Zi53cml0ZVVJbnQxNkxFKHN0YXR1cyk7XG4gICAgdEJ1Zi53cml0ZVVJbnQxNkxFKDApOyAvLyBDdXJDbWQgKFREUyBpZ25vcmVzIHRoaXMpXG4gICAgdEJ1Zi53cml0ZVVJbnQzMkxFKDApOyAvLyByb3cgY291bnQgLSBkb2Vzbid0IHJlYWxseSBtYXR0ZXJcbiAgICBpZiAodGhpcy5vcHRpb25zLnRkc1ZlcnNpb24gPj0gJzdfMicpIHtcbiAgICAgIHRCdWYud3JpdGVVSW50MzJMRSgwKTsgLy8gcm93IGNvdW50IGlzIDY0IGJpdHMgaW4gPj0gVERTIDcuMlxuICAgIH1cbiAgICByZXR1cm4gdEJ1Zi5kYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjYW5jZWwoKSB7XG4gICAgaWYgKHRoaXMuY2FuY2VsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNhbmNlbGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVtaXQoJ2NhbmNlbCcpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1bGtMb2FkO1xubW9kdWxlLmV4cG9ydHMgPSBCdWxrTG9hZDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsdUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUdBLElBQUFHLE9BQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLE1BQUEsR0FBQUosT0FBQTtBQUFtRCxTQUFBRSx1QkFBQUcsR0FBQSxXQUFBQSxHQUFBLElBQUFBLEdBQUEsQ0FBQUMsVUFBQSxHQUFBRCxHQUFBLEtBQUFFLE9BQUEsRUFBQUYsR0FBQTtBQUtuRDtBQUNBO0FBQ0E7QUFDQSxNQUFNRyxLQUFLLEdBQUc7RUFDWkMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2hCQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDZkMsbUJBQW1CLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDM0JDLGlCQUFpQixFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ3pCQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDaEJDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQztFQUFFO0VBQ2xCQyxlQUFlLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFBRTtFQUN6QkMsZUFBZSxFQUFFLENBQUMsSUFBSSxFQUFFO0VBQUU7RUFDMUJDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRTtFQUFFO0VBQ2pCQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUU7RUFBRTtFQUNkQyxlQUFlLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMzQixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLE1BQU1DLFdBQVcs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
516
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXZlbnRzIiwicmVxdWlyZSIsIl93cml0YWJsZVRyYWNraW5nQnVmZmVyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9zdHJlYW0iLCJfdG9rZW4iLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJGTEFHUyIsIm51bGxhYmxlIiwiY2FzZVNlbiIsInVwZGF0ZWFibGVSZWFkV3JpdGUiLCJ1cGRhdGVhYmxlVW5rbm93biIsImlkZW50aXR5IiwiY29tcHV0ZWQiLCJmaXhlZExlbkNMUlR5cGUiLCJzcGFyc2VDb2x1bW5TZXQiLCJoaWRkZW4iLCJrZXkiLCJudWxsYWJsZVVua25vd24iLCJET05FX1NUQVRVUyIsIkZJTkFMIiwiTU9SRSIsIkVSUk9SIiwiSU5YQUNUIiwiQ09VTlQiLCJBVFROIiwiU1JWRVJST1IiLCJyb3dUb2tlbkJ1ZmZlciIsIkJ1ZmZlciIsImZyb20iLCJUT0tFTl9UWVBFIiwiUk9XIiwidGV4dFBvaW50ZXJBbmRUaW1lc3RhbXBCdWZmZXIiLCJ0ZXh0UG9pbnRlck51bGxCdWZmZXIiLCJSb3dUcmFuc2Zvcm0iLCJUcmFuc2Zvcm0iLCJjb25zdHJ1Y3RvciIsImJ1bGtMb2FkIiwid3JpdGFibGVPYmplY3RNb2RlIiwibWFpbk9wdGlvbnMiLCJvcHRpb25zIiwiY29sdW1ucyIsImNvbHVtbk1ldGFkYXRhV3JpdHRlbiIsIl90cmFuc2Zvcm0iLCJyb3ciLCJfZW5jb2RpbmciLCJjYWxsYmFjayIsInB1c2giLCJnZXRDb2xNZXRhRGF0YSIsImkiLCJsZW5ndGgiLCJjIiwidmFsdWUiLCJBcnJheSIsImlzQXJyYXkiLCJvYmpOYW1lIiwiZmlyc3RSb3dXcml0dGVuIiwidHlwZSIsInZhbGlkYXRlIiwiY29sbGF0aW9uIiwiZXJyb3IiLCJwYXJhbWV0ZXIiLCJzY2FsZSIsInByZWNpc2lvbiIsIm5hbWUiLCJnZW5lcmF0ZVBhcmFtZXRlckxlbmd0aCIsImNodW5rIiwiZ2VuZXJhdGVQYXJhbWV0ZXJEYXRhIiwicHJvY2VzcyIsIm5leHRUaWNrIiwiX2ZsdXNoIiwiY3JlYXRlRG9uZVRva2VuIiwiQnVsa0xvYWQiLCJFdmVudEVtaXR0ZXIiLCJ0YWJsZSIsImNvbm5lY3Rpb25PcHRpb25zIiwiY2hlY2tDb25zdHJhaW50cyIsImZpcmVUcmlnZ2VycyIsImtlZXBOdWxscyIsImxvY2tUYWJsZSIsIm9yZGVyIiwiVHlwZUVycm9yIiwiY29sdW1uIiwiZGlyZWN0aW9uIiwiT2JqZWN0IiwiZW50cmllcyIsInVuZGVmaW5lZCIsImNhbmNlbGVkIiwiZXhlY3V0aW9uU3RhcnRlZCIsImNvbHVtbnNCeU5hbWUiLCJzdHJlYW1pbmdNb2RlIiwicm93VG9QYWNrZXRUcmFuc2Zvcm0iLCJidWxrT3B0aW9ucyIsImFkZENvbHVtbiIsIm91dHB1dCIsIkVycm9yIiwiaWQiLCJyZXNvbHZlTGVuZ3RoIiwicmVzb2x2ZVByZWNpc2lvbiIsInJlc29sdmVTY2FsZSIsImdldE9wdGlvbnNTcWwiLCJhZGRPcHRpb25zIiwib3JkZXJDb2x1bW5zIiwiam9pbiIsImdldEJ1bGtJbnNlcnRTcWwiLCJzcWwiLCJsZW4iLCJkZWNsYXJhdGlvbiIsImdldFRhYmxlQ3JlYXRpb25TcWwiLCJ0QnVmIiwiV3JpdGFibGVUcmFja2luZ0J1ZmZlciIsIndyaXRlVUludDgiLCJDT0xNRVRBREFUQSIsIndyaXRlVUludDE2TEUiLCJqIiwidGRzVmVyc2lvbiIsIndyaXRlVUludDMyTEUiLCJmbGFncyIsIndyaXRlQnVmZmVyIiwiZ2VuZXJhdGVUeXBlSW5mbyIsImhhc1RhYmxlTmFtZSIsIndyaXRlVXNWYXJjaGFyIiwid3JpdGVCVmFyY2hhciIsImRhdGEiLCJzZXRUaW1lb3V0IiwidGltZW91dCIsIkRPTkUiLCJzdGF0dXMiLCJjYW5jZWwiLCJlbWl0IiwiX2RlZmF1bHQiLCJleHBvcnRzIiwibW9kdWxlIl0sInNvdXJjZXMiOlsiLi4vc3JjL2J1bGstbG9hZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuaW1wb3J0IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIgZnJvbSAnLi90cmFja2luZy1idWZmZXIvd3JpdGFibGUtdHJhY2tpbmctYnVmZmVyJztcbmltcG9ydCBDb25uZWN0aW9uLCB7IHR5cGUgSW50ZXJuYWxDb25uZWN0aW9uT3B0aW9ucyB9IGZyb20gJy4vY29ubmVjdGlvbic7XG5cbmltcG9ydCB7IFRyYW5zZm9ybSB9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgeyBUWVBFIGFzIFRPS0VOX1RZUEUgfSBmcm9tICcuL3Rva2VuL3Rva2VuJztcblxuaW1wb3J0IHsgdHlwZSBEYXRhVHlwZSwgdHlwZSBQYXJhbWV0ZXIgfSBmcm9tICcuL2RhdGEtdHlwZSc7XG5pbXBvcnQgeyBDb2xsYXRpb24gfSBmcm9tICcuL2NvbGxhdGlvbic7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgRkxBR1MgPSB7XG4gIG51bGxhYmxlOiAxIDw8IDAsXG4gIGNhc2VTZW46IDEgPDwgMSxcbiAgdXBkYXRlYWJsZVJlYWRXcml0ZTogMSA8PCAyLFxuICB1cGRhdGVhYmxlVW5rbm93bjogMSA8PCAzLFxuICBpZGVudGl0eTogMSA8PCA0LFxuICBjb21wdXRlZDogMSA8PCA1LCAvLyBpbnRyb2R1Y2VkIGluIFREUyA3LjJcbiAgZml4ZWRMZW5DTFJUeXBlOiAxIDw8IDgsIC8vIGludHJvZHVjZWQgaW4gVERTIDcuMlxuICBzcGFyc2VDb2x1bW5TZXQ6IDEgPDwgMTAsIC8vIGludHJvZHVjZWQgaW4gVERTIDcuMy5CXG4gIGhpZGRlbjogMSA8PCAxMywgLy8gaW50cm9kdWNlZCBpbiBURFMgNy4yXG4gIGtleTogMSA8PCAxNCwgLy8gaW50cm9kdWNlZCBpbiBURFMgNy4yXG4gIG51bGxhYmxlVW5rbm93bjogMSA8PCAxNSAvLyBpbnRyb2R1Y2VkIGluIFREUyA3LjJcbn07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgRE9ORV9TVEFUVVMgPSB7XG4gIEZJTkFMOiAweDAwLFxuICBNT1JFOiAweDEsXG4gIEVSUk9SOiAweDIsXG4gIElOWEFDVDogMHg0LFxuICBDT1VOVDogMHgxMCxcbiAgQVRUTjogMHgyMCxcbiAgU1JWRVJST1I6IDB4MTAwXG59O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmludGVyZmFjZSBJbnRlcm5hbE9wdGlvbnMge1xuICBjaGVja0NvbnN0cmFpbnRzOiBib29sZWFuO1xuICBmaXJlVHJpZ2dlcnM6IGJvb2xlYW47XG4gIGtlZXBOdWxsczogYm9vbGVhbjtcbiAgbG9ja1RhYmxlOiBib29sZWFuO1xuICBvcmRlcjogeyBbY29sdW1uTmFtZTogc3RyaW5nXTogJ0FTQycgfCAnREVTQycgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zIHtcbiAgLyoqXG4gICAqIEhvbm9ycyBjb25zdHJhaW50cyBkdXJpbmcgYnVsayBsb2FkLCB1c2luZyBULVNRTFxuICAgKiBbQ0hFQ0tfQ09OU1RSQUlOVFNdKGh0dHBzOi8vdGVjaG5ldC5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXMxODYyNDcodj1zcWwuMTA1KS5hc3B4KS5cbiAgICogKGRlZmF1bHQ6IGBmYWxzZWApXG4gICAqL1xuICBjaGVja0NvbnN0cmFpbnRzPzogSW50ZXJuYWxPcHRpb25zWydjaGVja0NvbnN0cmFpbnRzJ10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEhvbm9ycyBpbnNlcnQgdHJpZ2dlcnMgZHVyaW5nIGJ1bGsgbG9hZCwgdXNpbmcgdGhlIFQtU1FMIFtGSVJFX1RSSUdHRVJTXShodHRwczovL3RlY2huZXQubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zMTg3NjQwKHY9c3FsLjEwNSkuYXNweCkuIChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKi9cbiAgZmlyZVRyaWdnZXJzPzogSW50ZXJuYWxPcHRpb25zWydmaXJlVHJpZ2dlcnMnXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogSG9ub3JzIG51bGwgdmFsdWUgcGFzc2VkLCBpZ25vcmVzIHRoZSBkZWZhdWx0IHZhbHVlcyBzZXQgb24gdGFibGUsIHVzaW5nIFQtU1FMIFtLRUVQX05VTExTXShodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zMTg3ODg3KHY9c3FsLjEyMCkuYXNweCkuIChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKi9cbiAga2VlcE51bGxzPzogSW50ZXJuYWxPcHRpb25zWydrZWVwTnVsbHMnXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogUGxhY2VzIGEgYnVsayB1cGRhdGUoQlUpIGxvY2sgb24gdGFibGUgd2hpbGUgcGVyZm9ybWluZyBidWxrIGxvYWQsIHVzaW5nIFQtU1FMIFtUQUJMT0NLXShodHRwczovL3RlY2huZXQubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zMTgwODc2KHY9c3FsLjEwNSkuYXNweCkuIChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKi9cbiAgbG9ja1RhYmxlPzogSW50ZXJuYWxPcHRpb25zWydsb2NrVGFibGUnXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBvcmRlcmluZyBvZiB0aGUgZGF0YSB0byBwb3NzaWJseSBpbmNyZWFzZSBidWxrIGluc2VydCBwZXJmb3JtYW5jZSwgdXNpbmcgVC1TUUwgW09SREVSXShodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9wcmV2aW91cy12ZXJzaW9ucy9zcWwvc3FsLXNlcnZlci0yMDA4LXIyL21zMTc3NDY4KHY9c3FsLjEwNSkpLiAoZGVmYXVsdDogYHt9YClcbiAgICovXG4gIG9yZGVyPzogSW50ZXJuYWxPcHRpb25zWydvcmRlciddIHwgdW5kZWZpbmVkO1xufVxuXG5cbmV4cG9ydCB0eXBlIENhbGxiYWNrID1cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gd2hpY2ggd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIFtbQnVsa0xvYWRdXSBmaW5pc2hlcyBleGVjdXRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSByb3dDb3VudCB0aGUgbnVtYmVyIG9mIHJvd3MgaW5zZXJ0ZWRcbiAgICovXG4gIChlcnI6IEVycm9yIHwgdW5kZWZpbmVkIHwgbnVsbCwgcm93Q291bnQ/OiBudW1iZXIpID0+IHZvaWQ7XG5cbmludGVyZmFjZSBDb2x1bW4gZXh0ZW5kcyBQYXJhbWV0ZXIge1xuICBvYmpOYW1lOiBzdHJpbmc7XG4gIGNvbGxhdGlvbjogQ29sbGF0aW9uIHwgdW5kZWZpbmVkO1xufVxuXG5pbnRlcmZhY2UgQ29sdW1uT3B0aW9ucyB7XG4gIG91dHB1dD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEZvciBWYXJDaGFyLCBOVmFyQ2hhciwgVmFyQmluYXJ5LiBVc2UgbGVuZ3RoIGFzIGBJbmZpbml0eWAgZm9yIFZhckNoYXIobWF4KSwgTlZhckNoYXIobWF4KSBhbmQgVmFyQmluYXJ5KG1heCkuXG4gICAqL1xuICBsZW5ndGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEZvciBOdW1lcmljLCBEZWNpbWFsLlxuICAgKi9cbiAgcHJlY2lzaW9uPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBGb3IgTnVtZXJpYywgRGVjaW1hbCwgVGltZSwgRGF0ZVRpbWUyLCBEYXRlVGltZU9mZnNldC5cbiAgICovXG4gIHNjYWxlPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBJZiB0aGUgbmFtZSBvZiB0aGUgY29sdW1uIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBmb3VuZCBvbiBgcm93T2JqYCBhcmd1bWVudHMgcGFzc2VkIHRvIFtbYWRkUm93XV0sIHRoZW4geW91IGNhbiB1c2UgdGhpcyBvcHRpb24gdG8gc3BlY2lmeSB0aGUgcHJvcGVydHkgbmFtZS5cbiAgICovXG4gIG9iak5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb2x1bW4gYWNjZXB0cyBOVUxMIHZhbHVlcy5cbiAgICovXG4gIG51bGxhYmxlPzogYm9vbGVhbjtcbn1cblxuY29uc3Qgcm93VG9rZW5CdWZmZXIgPSBCdWZmZXIuZnJvbShbIFRPS0VOX1RZUEUuUk9XIF0pO1xuY29uc3QgdGV4dFBvaW50ZXJBbmRUaW1lc3RhbXBCdWZmZXIgPSBCdWZmZXIuZnJvbShbXG4gIC8vIFRleHRQb2ludGVyIGxlbmd0aFxuICAweDEwLFxuXG4gIC8vIFRleHRQb2ludGVyXG4gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsXG5cbiAgLy8gVGltZXN0YW1wXG4gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDBcbl0pO1xuY29uc3QgdGV4dFBvaW50ZXJOdWxsQnVmZmVyID0gQnVmZmVyLmZyb20oWzB4MDBdKTtcblxuLy8gQSB0cmFuc2Zvcm0gdGhhdCBjb252ZXJ0cyByb3dzIHRvIHBhY2tldHMuXG5jbGFzcyBSb3dUcmFuc2Zvcm0gZXh0ZW5kcyBUcmFuc2Zvcm0ge1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgY29sdW1uTWV0YWRhdGFXcml0dGVuOiBib29sZWFuO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgYnVsa0xvYWQ6IEJ1bGtMb2FkO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgbWFpbk9wdGlvbnM6IEJ1bGtMb2FkWydvcHRpb25zJ107XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBjb2x1bW5zOiBCdWxrTG9hZFsnY29sdW1ucyddO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29uc3RydWN0b3IoYnVsa0xvYWQ6IEJ1bGtMb2FkKSB7XG4gICAgc3VwZXIoeyB3cml0YWJsZU9iamVjdE1vZGU6IHRydWUgfSk7XG5cbiAgICB0aGlzLmJ1bGtMb2FkID0gYnVsa0xvYWQ7XG4gICAgdGhpcy5tYWluT3B0aW9ucyA9IGJ1bGtMb2FkLm9wdGlvbnM7XG4gICAgdGhpcy5jb2x1bW5zID0gYnVsa0xvYWQuY29sdW1ucztcblxuICAgIHRoaXMuY29sdW1uTWV0YWRhdGFXcml0dGVuID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF90cmFuc2Zvcm0ocm93OiBBcnJheTx1bmtub3duPiB8IHsgW2NvbE5hbWU6IHN0cmluZ106IHVua25vd24gfSwgX2VuY29kaW5nOiBzdHJpbmcsIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCkge1xuICAgIGlmICghdGhpcy5jb2x1bW5NZXRhZGF0YVdyaXR0ZW4pIHtcbiAgICAgIHRoaXMucHVzaCh0aGlzLmJ1bGtMb2FkLmdldENvbE1ldGFEYXRhKCkpO1xuICAgICAgdGhpcy5jb2x1bW5NZXRhZGF0YVdyaXR0ZW4gPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMucHVzaChyb3dUb2tlbkJ1ZmZlcik7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgYyA9IHRoaXMuY29sdW1uc1tpXTtcbiAgICAgIGxldCB2YWx1ZSA9IEFycmF5LmlzQXJyYXkocm93KSA/IHJvd1tpXSA6IHJvd1tjLm9iak5hbWVdO1xuXG4gICAgICBpZiAoIXRoaXMuYnVsa0xvYWQuZmlyc3RSb3dXcml0dGVuKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFsdWUgPSBjLnR5cGUudmFsaWRhdGUodmFsdWUsIGMuY29sbGF0aW9uKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFyYW1ldGVyID0ge1xuICAgICAgICBsZW5ndGg6IGMubGVuZ3RoLFxuICAgICAgICBzY2FsZTogYy5zY2FsZSxcbiAgICAgICAgcHJlY2lzaW9uOiBjLnByZWNpc2lvbixcbiAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICB9O1xuXG4gICAgICBpZiAoYy50eXBlLm5hbWUgPT09ICdUZXh0JyB8fCBjLnR5cGUubmFtZSA9PT0gJ0ltYWdlJyB8fCBjLnR5cGUubmFtZSA9PT0gJ05UZXh0Jykge1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMucHVzaCh0ZXh0UG9pbnRlck51bGxCdWZmZXIpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wdXNoKHRleHRQb2ludGVyQW5kVGltZXN0YW1wQnVmZmVyKTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5wdXNoKGMudHlwZS5nZW5lcmF0ZVBhcmFtZXRlckxlbmd0aChwYXJhbWV0ZXIsIHRoaXMubWFpbk9wdGlvbnMpKTtcbiAgICAgICAgZm9yIChjb25zdCBjaHVuayBvZiBjLnR5cGUuZ2VuZXJhdGVQYXJhbWV0ZXJEYXRhKHBhcmFtZXRlciwgdGhpcy5tYWluT3B0aW9ucykpIHtcbiAgICAgICAgICB0aGlzLnB1c2goY2h1bmspO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhlcnJvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9mbHVzaChjYWxsYmFjazogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMucHVzaCh0aGlzLmJ1bGtMb2FkLmNyZWF0ZURvbmVUb2tlbigpKTtcblxuICAgIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2spO1xuICB9XG59XG5cbi8qKlxuICogQSBCdWxrTG9hZCBpbnN0YW5jZSBpcyB1c2VkIHRvIHBlcmZvcm0gYSBidWxrIGluc2VydC5cbiAqXG4gKiBVc2UgW1tDb25uZWN0aW9uLm5ld0J1bGtMb2FkXV0gdG8gY3JlYXRlIGEgbmV3IGluc3RhbmNlLCBhbmQgW1tDb25uZWN0aW9uLmV4ZWNCdWxrTG9hZF1dIHRvIGV4ZWN1dGUgaXQuXG4gKlxuICogRXhhbXBsZSBvZiBCdWxrTG9hZCBVc2FnZXM6XG4gKlxuICogYGBganNcbiAqIC8vIG9wdGlvbmFsIEJ1bGtMb2FkIG9wdGlvbnNcbiAqIGNvbnN0IG9wdGlvbnMgPSB7IGtlZXBOdWxsczogdHJ1ZSB9O1xuICpcbiAqIC8vIGluc3RhbnRpYXRlIC0gcHJvdmlkZSB0aGUgdGFibGUgd2hlcmUgeW91J2xsIGJlIGluc2VydGluZyB0bywgb3B0aW9ucyBhbmQgYSBjYWxsYmFja1xuICogY29uc3QgYnVsa0xvYWQgPSBjb25uZWN0aW9uLm5ld0J1bGtMb2FkKCdNeVRhYmxlJywgb3B0aW9ucywgKGVycm9yLCByb3dDb3VudCkgPT4ge1xuICogICBjb25zb2xlLmxvZygnaW5zZXJ0ZWQgJWQgcm93cycsIHJvd0NvdW50KTtcbiAqIH0pO1xuICpcbiAqIC8vIHNldHVwIHlvdXIgY29sdW1ucyAtIGFsd2F5cyBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBjb2x1bW4gaXMgbnVsbGFibGVcbiAqIGJ1bGtMb2FkLmFkZENvbHVtbignbXlJbnQnLCBUWVBFUy5JbnQsIHsgbnVsbGFibGU6IGZhbHNlIH0pO1xuICogYnVsa0xvYWQuYWRkQ29sdW1uKCdteVN0cmluZycsIFRZUEVTLk5WYXJDaGFyLCB7IGxlbmd0aDogNTAsIG51bGxhYmxlOiB0cnVlIH0pO1xuICpcbiAqIC8vIGV4ZWN1dGVcbiAqIGNvbm5lY3Rpb24uZXhlY0J1bGtMb2FkKGJ1bGtMb2FkLCBbXG4gKiAgIHsgbXlJbnQ6IDcsIG15U3RyaW5nOiAnaGVsbG8nIH0sXG4gKiAgIHsgbXlJbnQ6IDIzLCBteVN0cmluZzogJ3dvcmxkJyB9XG4gKiBdKTtcbiAqIGBgYFxuICovXG5jbGFzcyBCdWxrTG9hZCBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBlcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBjYW5jZWxlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGV4ZWN1dGlvblN0YXJ0ZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBzdHJlYW1pbmdNb2RlOiBib29sZWFuO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgdGFibGU6IHN0cmluZztcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHRpbWVvdXQ6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgb3B0aW9uczogSW50ZXJuYWxDb25uZWN0aW9uT3B0aW9ucztcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGNhbGxiYWNrOiBDYWxsYmFjaztcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgY29sdW1uczogQXJyYXk8Q29sdW1uPjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGNvbHVtbnNCeU5hbWU6IHsgW25hbWU6IHN0cmluZ106IENvbHVtbiB9O1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBmaXJzdFJvd1dyaXR0ZW46IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSByb3dUb1BhY2tldFRyYW5zZm9ybTogUm93VHJhbnNmb3JtO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBidWxrT3B0aW9uczogSW50ZXJuYWxPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBjb25uZWN0aW9uOiBDb25uZWN0aW9uIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgcm93czogQXJyYXk8YW55PiB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHJzdDogQXJyYXk8YW55PiB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHJvd0NvdW50OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgZGVjbGFyZSBjb2xsYXRpb246IENvbGxhdGlvbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKHRhYmxlOiBzdHJpbmcsIGNvbGxhdGlvbjogQ29sbGF0aW9uIHwgdW5kZWZpbmVkLCBjb25uZWN0aW9uT3B0aW9uczogSW50ZXJuYWxDb25uZWN0aW9uT3B0aW9ucywge1xuICAgIGNoZWNrQ29uc3RyYWludHMgPSBmYWxzZSxcbiAgICBmaXJlVHJpZ2dlcnMgPSBmYWxzZSxcbiAgICBrZWVwTnVsbHMgPSBmYWxzZSxcbiAgICBsb2NrVGFibGUgPSBmYWxzZSxcbiAgICBvcmRlciA9IHt9LFxuICB9OiBPcHRpb25zLCBjYWxsYmFjazogQ2FsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIGNoZWNrQ29uc3RyYWludHMgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwib3B0aW9ucy5jaGVja0NvbnN0cmFpbnRzXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmaXJlVHJpZ2dlcnMgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwib3B0aW9ucy5maXJlVHJpZ2dlcnNcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi4nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGtlZXBOdWxscyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJvcHRpb25zLmtlZXBOdWxsc1wiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuLicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbG9ja1RhYmxlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcIm9wdGlvbnMubG9ja1RhYmxlXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcmRlciAhPT0gJ29iamVjdCcgfHwgb3JkZXIgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcIm9wdGlvbnMub3JkZXJcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgb2JqZWN0LicpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2NvbHVtbiwgZGlyZWN0aW9uXSBvZiBPYmplY3QuZW50cmllcyhvcmRlcikpIHtcbiAgICAgIGlmIChkaXJlY3Rpb24gIT09ICdBU0MnICYmIGRpcmVjdGlvbiAhPT0gJ0RFU0MnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSBvZiB0aGUgXCInICsgY29sdW1uICsgJ1wiIGtleSBpbiB0aGUgXCJvcHRpb25zLm9yZGVyXCIgb2JqZWN0IG11c3QgYmUgZWl0aGVyIFwiQVNDXCIgb3IgXCJERVNDXCIuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuZXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jYW5jZWxlZCA9IGZhbHNlO1xuICAgIHRoaXMuZXhlY3V0aW9uU3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5jb2xsYXRpb24gPSBjb2xsYXRpb247XG5cbiAgICB0aGlzLnRhYmxlID0gdGFibGU7XG4gICAgdGhpcy5vcHRpb25zID0gY29ubmVjdGlvbk9wdGlvbnM7XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIHRoaXMuY29sdW1ucyA9IFtdO1xuICAgIHRoaXMuY29sdW1uc0J5TmFtZSA9IHt9O1xuICAgIHRoaXMuZmlyc3RSb3dXcml0dGVuID0gZmFsc2U7XG4gICAgdGhpcy5zdHJlYW1pbmdNb2RlID0gZmFsc2U7XG5cbiAgICB0aGlzLnJvd1RvUGFja2V0VHJhbnNmb3JtID0gbmV3IFJvd1RyYW5zZm9ybSh0aGlzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuXG4gICAgdGhpcy5idWxrT3B0aW9ucyA9IHsgY2hlY2tDb25zdHJhaW50cywgZmlyZVRyaWdnZXJzLCBrZWVwTnVsbHMsIGxvY2tUYWJsZSwgb3JkZXIgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgY29sdW1uIHRvIHRoZSBidWxrIGxvYWQuXG4gICAqXG4gICAqIFRoZSBjb2x1bW4gZGVmaW5pdGlvbnMgc2hvdWxkIG1hdGNoIHRoZSB0YWJsZSB5b3UgYXJlIHRyeWluZyB0byBpbnNlcnQgaW50by5cbiAgICogQXR0ZW1wdGluZyB0byBjYWxsIGFkZENvbHVtbiBhZnRlciB0aGUgZmlyc3Qgcm93IGhhcyBiZWVuIGFkZGVkIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uLlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBidWxrTG9hZC5hZGRDb2x1bW4oJ015SW50Q29sdW1uJywgVFlQRVMuSW50LCB7IG51bGxhYmxlOiBmYWxzZSB9KTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBjb2x1bW4uXG4gICAqIEBwYXJhbSB0eXBlIE9uZSBvZiB0aGUgc3VwcG9ydGVkIGBkYXRhIHR5cGVzYC5cbiAgICogQHBhcmFtIF9fbmFtZWRQYXJhbWV0ZXJzIEFkZGl0aW9uYWwgY29sdW1uIHR5cGUgaW5mb3JtYXRpb24uIEF0IGEgbWluaW11bSwgYG51bGxhYmxlYCBtdXN0IGJlIHNldCB0byB0cnVlIG9yIGZhbHNlLlxuICAgKiBAcGFyYW0gbGVuZ3RoIEZvciBWYXJDaGFyLCBOVmFyQ2hhciwgVmFyQmluYXJ5LiBVc2UgbGVuZ3RoIGFzIGBJbmZpbml0eWAgZm9yIFZhckNoYXIobWF4KSwgTlZhckNoYXIobWF4KSBhbmQgVmFyQmluYXJ5KG1heCkuXG4gICAqIEBwYXJhbSBudWxsYWJsZSBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29sdW1uIGFjY2VwdHMgTlVMTCB2YWx1ZXMuXG4gICAqIEBwYXJhbSBvYmpOYW1lIElmIHRoZSBuYW1lIG9mIHRoZSBjb2x1bW4gaXMgZGlmZmVyZW50IGZyb20gdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IGZvdW5kIG9uIGByb3dPYmpgIGFyZ3VtZW50cyBwYXNzZWQgdG8gW1thZGRSb3ddXSBvciBbW0Nvbm5lY3Rpb24uZXhlY0J1bGtMb2FkXV0sIHRoZW4geW91IGNhbiB1c2UgdGhpcyBvcHRpb24gdG8gc3BlY2lmeSB0aGUgcHJvcGVydHkgbmFtZS5cbiAgICogQHBhcmFtIHByZWNpc2lvbiBGb3IgTnVtZXJpYywgRGVjaW1hbC5cbiAgICogQHBhcmFtIHNjYWxlIEZvciBOdW1lcmljLCBEZWNpbWFsLCBUaW1lLCBEYXRlVGltZTIsIERhdGVUaW1lT2Zmc2V0LlxuICAqL1xuICBhZGRDb2x1bW4obmFtZTogc3RyaW5nLCB0eXBlOiBEYXRhVHlwZSwgeyBvdXRwdXQgPSBmYWxzZSwgbGVuZ3RoLCBwcmVjaXNpb24sIHNjYWxlLCBvYmpOYW1lID0gbmFtZSwgbnVsbGFibGUgPSB0cnVlIH06IENvbHVtbk9wdGlvbnMpIHtcbiAgICBpZiAodGhpcy5maXJzdFJvd1dyaXR0ZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29sdW1ucyBjYW5ub3QgYmUgYWRkZWQgdG8gYnVsayBpbnNlcnQgYWZ0ZXIgdGhlIGZpcnN0IHJvdyBoYXMgYmVlbiB3cml0dGVuLicpO1xuICAgIH1cbiAgICBpZiAodGhpcy5leGVjdXRpb25TdGFydGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbHVtbnMgY2Fubm90IGJlIGFkZGVkIHRvIGJ1bGsgaW5zZXJ0IGFmdGVyIGV4ZWN1dGlvbiBoYXMgc3RhcnRlZC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb2x1bW46IENvbHVtbiA9IHtcbiAgICAgIHR5cGU6IHR5cGUsXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICBvdXRwdXQ6IG91dHB1dCxcbiAgICAgIGxlbmd0aDogbGVuZ3RoLFxuICAgICAgcHJlY2lzaW9uOiBwcmVjaXNpb24sXG4gICAgICBzY2FsZTogc2NhbGUsXG4gICAgICBvYmpOYW1lOiBvYmpOYW1lLFxuICAgICAgbnVsbGFibGU6IG51bGxhYmxlLFxuICAgICAgY29sbGF0aW9uOiB0aGlzLmNvbGxhdGlvblxuICAgIH07XG5cbiAgICBpZiAoKHR5cGUuaWQgJiAweDMwKSA9PT0gMHgyMCkge1xuICAgICAgaWYgKGNvbHVtbi5sZW5ndGggPT0gbnVsbCAmJiB0eXBlLnJlc29sdmVMZW5ndGgpIHtcbiAgICAgICAgY29sdW1uLmxlbmd0aCA9IHR5cGUucmVzb2x2ZUxlbmd0aChjb2x1bW4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlLnJlc29sdmVQcmVjaXNpb24gJiYgY29sdW1uLnByZWNpc2lvbiA9PSBudWxsKSB7XG4gICAgICBjb2x1bW4ucHJlY2lzaW9uID0gdHlwZS5yZXNvbHZlUHJlY2lzaW9uKGNvbHVtbik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUucmVzb2x2ZVNjYWxlICYmIGNvbHVtbi5zY2FsZSA9PSBudWxsKSB7XG4gICAgICBjb2x1bW4uc2NhbGUgPSB0eXBlLnJlc29sdmVTY2FsZShjb2x1bW4pO1xuICAgIH1cblxuICAgIHRoaXMuY29sdW1ucy5wdXNoKGNvbHVtbik7XG5cbiAgICB0aGlzLmNvbHVtbnNCeU5hbWVbbmFtZV0gPSBjb2x1bW47XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdldE9wdGlvbnNTcWwoKSB7XG4gICAgY29uc3QgYWRkT3B0aW9ucyA9IFtdO1xuXG4gICAgaWYgKHRoaXMuYnVsa09wdGlvbnMuY2hlY2tDb25zdHJhaW50cykge1xuICAgICAgYWRkT3B0aW9ucy5wdXNoKCdDSEVDS19DT05TVFJBSU5UUycpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmJ1bGtPcHRpb25zLmZpcmVUcmlnZ2Vycykge1xuICAgICAgYWRkT3B0aW9ucy5wdXNoKCdGSVJFX1RSSUdHRVJTJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYnVsa09wdGlvbnMua2VlcE51bGxzKSB7XG4gICAgICBhZGRPcHRpb25zLnB1c2goJ0tFRVBfTlVMTFMnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5idWxrT3B0aW9ucy5sb2NrVGFibGUpIHtcbiAgICAgIGFkZE9wdGlvbnMucHVzaCgnVEFCTE9DSycpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmJ1bGtPcHRpb25zLm9yZGVyKSB7XG4gICAgICBjb25zdCBvcmRlckNvbHVtbnMgPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBbY29sdW1uLCBkaXJlY3Rpb25dIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuYnVsa09wdGlvbnMub3JkZXIpKSB7XG4gICAgICAgIG9yZGVyQ29sdW1ucy5wdXNoKGAke2NvbHVtbn0gJHtkaXJlY3Rpb259YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcmRlckNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgIGFkZE9wdGlvbnMucHVzaChgT1JERVIgKCR7b3JkZXJDb2x1bW5zLmpvaW4oJywgJyl9KWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhZGRPcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBgIFdJVEggKCR7YWRkT3B0aW9ucy5qb2luKCcsJyl9KWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdldEJ1bGtJbnNlcnRTcWwoKSB7XG4gICAgbGV0IHNxbCA9ICdpbnNlcnQgYnVsayAnICsgdGhpcy50YWJsZSArICcoJztcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5jb2x1bW5zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBjID0gdGhpcy5jb2x1bW5zW2ldO1xuICAgICAgaWYgKGkgIT09IDApIHtcbiAgICAgICAgc3FsICs9ICcsICc7XG4gICAgICB9XG4gICAgICBzcWwgKz0gJ1snICsgYy5uYW1lICsgJ10gJyArIChjLnR5cGUuZGVjbGFyYXRpb24oYykpO1xuICAgIH1cbiAgICBzcWwgKz0gJyknO1xuXG4gICAgc3FsICs9IHRoaXMuZ2V0T3B0aW9uc1NxbCgpO1xuICAgIHJldHVybiBzcWw7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBzaW1wbHkgYSBoZWxwZXIgdXRpbGl0eSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGEgYENSRUFURSBUQUJMRSBTUUxgIHN0YXRlbWVudCBiYXNlZCBvbiB0aGUgY29sdW1ucyBhZGRlZCB0byB0aGUgYnVsa0xvYWQgb2JqZWN0LlxuICAgKiBUaGlzIG1heSBiZSBwYXJ0aWN1bGFybHkgaGFuZHkgd2hlbiB5b3Ugd2FudCB0byBpbnNlcnQgaW50byBhIHRlbXBvcmFyeSB0YWJsZSAoYSB0YWJsZSB3aGljaCBzdGFydHMgd2l0aCBgI2ApLlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiB2YXIgc3FsID0gYnVsa0xvYWQuZ2V0VGFibGVDcmVhdGlvblNxbCgpO1xuICAgKiBgYGBcbiAgICpcbiAgICogQSBzaWRlIG5vdGUgb24gYnVsayBpbnNlcnRpbmcgaW50byB0ZW1wb3JhcnkgdGFibGVzOiBpZiB5b3Ugd2FudCB0byBhY2Nlc3MgYSBsb2NhbCB0ZW1wb3JhcnkgdGFibGUgYWZ0ZXIgZXhlY3V0aW5nIHRoZSBidWxrIGxvYWQsXG4gICAqIHlvdSdsbCBuZWVkIHRvIHVzZSB0aGUgc2FtZSBjb25uZWN0aW9uIGFuZCBleGVjdXRlIHlvdXIgcmVxdWVzdHMgdXNpbmcgW1tDb25uZWN0aW9uLmV4ZWNTcWxCYXRjaF1dIGluc3RlYWQgb2YgW1tDb25uZWN0aW9uLmV4ZWNTcWxdXVxuICAgKi9cbiAgZ2V0VGFibGVDcmVhdGlvblNxbCgpIHtcbiAgICBsZXQgc3FsID0gJ0NSRUFURSBUQUJMRSAnICsgdGhpcy50YWJsZSArICcoXFxuJztcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5jb2x1bW5zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBjID0gdGhpcy5jb2x1bW5zW2ldO1xuICAgICAgaWYgKGkgIT09IDApIHtcbiAgICAgICAgc3FsICs9ICcsXFxuJztcbiAgICAgIH1cbiAgICAgIHNxbCArPSAnWycgKyBjLm5hbWUgKyAnXSAnICsgKGMudHlwZS5kZWNsYXJhdGlvbihjKSk7XG4gICAgICBpZiAoYy5udWxsYWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNxbCArPSAnICcgKyAoYy5udWxsYWJsZSA/ICdOVUxMJyA6ICdOT1QgTlVMTCcpO1xuICAgICAgfVxuICAgIH1cbiAgICBzcWwgKz0gJ1xcbiknO1xuICAgIHJldHVybiBzcWw7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdldENvbE1ldGFEYXRhKCkge1xuICAgIGNvbnN0IHRCdWYgPSBuZXcgV3JpdGFibGVUcmFja2luZ0J1ZmZlcigxMDAsIG51bGwsIHRydWUpO1xuICAgIC8vIFRva2VuVHlwZVxuICAgIHRCdWYud3JpdGVVSW50OChUT0tFTl9UWVBFLkNPTE1FVEFEQVRBKTtcbiAgICAvLyBDb3VudFxuICAgIHRCdWYud3JpdGVVSW50MTZMRSh0aGlzLmNvbHVtbnMubGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGogPSAwLCBsZW4gPSB0aGlzLmNvbHVtbnMubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgIGNvbnN0IGMgPSB0aGlzLmNvbHVtbnNbal07XG4gICAgICAvLyBVc2VyVHlwZVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy50ZHNWZXJzaW9uIDwgJzdfMicpIHtcbiAgICAgICAgdEJ1Zi53cml0ZVVJbnQxNkxFKDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdEJ1Zi53cml0ZVVJbnQzMkxFKDApO1xuICAgICAgfVxuXG4gICAgICAvLyBGbGFnc1xuICAgICAgbGV0IGZsYWdzID0gRkxBR1MudXBkYXRlYWJsZVJlYWRXcml0ZTtcbiAgICAgIGlmIChjLm51bGxhYmxlKSB7XG4gICAgICAgIGZsYWdzIHw9IEZMQUdTLm51bGxhYmxlO1xuICAgICAgfSBlbHNlIGlmIChjLm51bGxhYmxlID09PSB1bmRlZmluZWQgJiYgdGhpcy5vcHRpb25zLnRkc1ZlcnNpb24gPj0gJzdfMicpIHtcbiAgICAgICAgZmxhZ3MgfD0gRkxBR1MubnVsbGFibGVVbmtub3duO1xuICAgICAgfVxuICAgICAgdEJ1Zi53cml0ZVVJbnQxNkxFKGZsYWdzKTtcblxuICAgICAgLy8gVFlQRV9JTkZPXG4gICAgICB0QnVmLndyaXRlQnVmZmVyKGMudHlwZS5nZW5lcmF0ZVR5cGVJbmZvKGMsIHRoaXMub3B0aW9ucykpO1xuXG4gICAgICAvLyBUYWJsZU5hbWVcbiAgICAgIGlmIChjLnR5cGUuaGFzVGFibGVOYW1lKSB7XG4gICAgICAgIHRCdWYud3JpdGVVc1ZhcmNoYXIodGhpcy50YWJsZSwgJ3VjczInKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ29sTmFtZVxuICAgICAgdEJ1Zi53cml0ZUJWYXJjaGFyKGMubmFtZSwgJ3VjczInKTtcbiAgICB9XG4gICAgcmV0dXJuIHRCdWYuZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGEgdGltZW91dCBmb3IgdGhpcyBidWxrIGxvYWQuXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGJ1bGtMb2FkLnNldFRpbWVvdXQodGltZW91dCk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gdGltZW91dCBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBiZWZvcmUgdGhlIGJ1bGsgbG9hZCBpcyBjb25zaWRlcmVkIGZhaWxlZCwgb3IgMCBmb3Igbm8gdGltZW91dC5cbiAgICogICBXaGVuIG5vIHRpbWVvdXQgaXMgc2V0IGZvciB0aGUgYnVsayBsb2FkLCB0aGUgW1tDb25uZWN0aW9uT3B0aW9ucy5yZXF1ZXN0VGltZW91dF1dIG9mIHRoZSBDb25uZWN0aW9uIGlzIHVzZWQuXG4gICAqL1xuICBzZXRUaW1lb3V0KHRpbWVvdXQ/OiBudW1iZXIpIHtcbiAgICB0aGlzLnRpbWVvdXQgPSB0aW1lb3V0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjcmVhdGVEb25lVG9rZW4oKSB7XG4gICAgLy8gSXQgbWlnaHQgYmUgbmljZSB0byBtYWtlIERvbmVUb2tlbiBhIGNsYXNzIGlmIGFueXRoaW5nIG5lZWRzIHRvIGNyZWF0ZSB0aGVtLCBidXQgZm9yIG5vdywganVzdCBkbyBpdCBoZXJlXG4gICAgY29uc3QgdEJ1ZiA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKHRoaXMub3B0aW9ucy50ZHNWZXJzaW9uIDwgJzdfMicgPyA5IDogMTMpO1xuICAgIHRCdWYud3JpdGVVSW50OChUT0tFTl9UWVBFLkRPTkUpO1xuICAgIGNvbnN0IHN0YXR1cyA9IERPTkVfU1RBVFVTLkZJTkFMO1xuICAgIHRCdWYud3JpdGVVSW50MTZMRShzdGF0dXMpO1xuICAgIHRCdWYud3JpdGVVSW50MTZMRSgwKTsgLy8gQ3VyQ21kIChURFMgaWdub3JlcyB0aGlzKVxuICAgIHRCdWYud3JpdGVVSW50MzJMRSgwKTsgLy8gcm93IGNvdW50IC0gZG9lc24ndCByZWFsbHkgbWF0dGVyXG4gICAgaWYgKHRoaXMub3B0aW9ucy50ZHNWZXJzaW9uID49ICc3XzInKSB7XG4gICAgICB0QnVmLndyaXRlVUludDMyTEUoMCk7IC8vIHJvdyBjb3VudCBpcyA2NCBiaXRzIGluID49IFREUyA3LjJcbiAgICB9XG4gICAgcmV0dXJuIHRCdWYuZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY2FuY2VsKCkge1xuICAgIGlmICh0aGlzLmNhbmNlbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jYW5jZWxlZCA9IHRydWU7XG4gICAgdGhpcy5lbWl0KCdjYW5jZWwnKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCdWxrTG9hZDtcbm1vZHVsZS5leHBvcnRzID0gQnVsa0xvYWQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLHVCQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFHQSxJQUFBRyxPQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxNQUFBLEdBQUFKLE9BQUE7QUFBbUQsU0FBQUUsdUJBQUFHLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFLbkQ7QUFDQTtBQUNBO0FBQ0EsTUFBTUcsS0FBSyxHQUFHO0VBQ1pDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQztFQUNoQkMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2ZDLG1CQUFtQixFQUFFLENBQUMsSUFBSSxDQUFDO0VBQzNCQyxpQkFBaUIsRUFBRSxDQUFDLElBQUksQ0FBQztFQUN6QkMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2hCQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFBRTtFQUNsQkMsZUFBZSxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQUU7RUFDekJDLGVBQWUsRUFBRSxDQUFDLElBQUksRUFBRTtFQUFFO0VBQzFCQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUU7RUFBRTtFQUNqQkMsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFO0VBQUU7RUFDZEMsZUFBZSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0IsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxNQUFNQyxXQUFXLEdB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
@@ -1 +1 @@
1
- {"version":3,"file":"bulk-load.js","names":["_events","require","_writableTrackingBuffer","_interopRequireDefault","_stream","_token","obj","__esModule","default","FLAGS","nullable","caseSen","updateableReadWrite","updateableUnknown","identity","computed","fixedLenCLRType","sparseColumnSet","hidden","key","nullableUnknown","DONE_STATUS","FINAL","MORE","ERROR","INXACT","COUNT","ATTN","SRVERROR","rowTokenBuffer","Buffer","from","TOKEN_TYPE","ROW","textPointerAndTimestampBuffer","textPointerNullBuffer","RowTransform","Transform","constructor","bulkLoad","writableObjectMode","mainOptions","options","columns","columnMetadataWritten","_transform","row","_encoding","callback","push","getColMetaData","i","length","c","value","Array","isArray","objName","firstRowWritten","type","validate","collation","error","parameter","scale","precision","name","generateParameterLength","chunk","generateParameterData","process","nextTick","_flush","createDoneToken","BulkLoad","EventEmitter","table","connectionOptions","checkConstraints","fireTriggers","keepNulls","lockTable","order","TypeError","column","direction","Object","entries","undefined","canceled","executionStarted","columnsByName","streamingMode","rowToPacketTransform","bulkOptions","addColumn","output","Error","id","resolveLength","resolvePrecision","resolveScale","getOptionsSql","addOptions","orderColumns","join","getBulkInsertSql","sql","len","declaration","getTableCreationSql","tBuf","WritableTrackingBuffer","writeUInt8","COLMETADATA","writeUInt16LE","j","tdsVersion","writeUInt32LE","flags","writeBuffer","generateTypeInfo","hasTableName","writeUsVarchar","writeBVarchar","data","setTimeout","timeout","DONE","status","cancel","emit","_default","exports","module"],"sources":["../src/bulk-load.ts"],"sourcesContent":["import { EventEmitter } from 'events';\nimport WritableTrackingBuffer from './tracking-buffer/writable-tracking-buffer';\nimport Connection, { type InternalConnectionOptions } from './connection';\n\nimport { Transform } from 'stream';\nimport { TYPE as TOKEN_TYPE } from './token/token';\n\nimport { type DataType, type Parameter } from './data-type';\nimport { Collation } from './collation';\n\n/**\n * @private\n */\nconst FLAGS = {\n nullable: 1 << 0,\n caseSen: 1 << 1,\n updateableReadWrite: 1 << 2,\n updateableUnknown: 1 << 3,\n identity: 1 << 4,\n computed: 1 << 5, // introduced in TDS 7.2\n fixedLenCLRType: 1 << 8, // introduced in TDS 7.2\n sparseColumnSet: 1 << 10, // introduced in TDS 7.3.B\n hidden: 1 << 13, // introduced in TDS 7.2\n key: 1 << 14, // introduced in TDS 7.2\n nullableUnknown: 1 << 15 // introduced in TDS 7.2\n};\n\n/**\n * @private\n */\nconst DONE_STATUS = {\n FINAL: 0x00,\n MORE: 0x1,\n ERROR: 0x2,\n INXACT: 0x4,\n COUNT: 0x10,\n ATTN: 0x20,\n SRVERROR: 0x100\n};\n\n/**\n * @private\n */\ninterface InternalOptions {\n checkConstraints: boolean;\n fireTriggers: boolean;\n keepNulls: boolean;\n lockTable: boolean;\n order: { [columnName: string]: 'ASC' | 'DESC' };\n}\n\nexport interface Options {\n /**\n * Honors constraints during bulk load, using T-SQL\n * [CHECK_CONSTRAINTS](https://technet.microsoft.com/en-us/library/ms186247(v=sql.105).aspx).\n * (default: `false`)\n */\n checkConstraints?: InternalOptions['checkConstraints'] | undefined;\n\n /**\n * Honors insert triggers during bulk load, using the T-SQL [FIRE_TRIGGERS](https://technet.microsoft.com/en-us/library/ms187640(v=sql.105).aspx). (default: `false`)\n */\n fireTriggers?: InternalOptions['fireTriggers'] | undefined;\n\n /**\n * Honors null value passed, ignores the default values set on table, using T-SQL [KEEP_NULLS](https://msdn.microsoft.com/en-us/library/ms187887(v=sql.120).aspx). (default: `false`)\n */\n keepNulls?: InternalOptions['keepNulls'] | undefined;\n\n /**\n * Places a bulk update(BU) lock on table while performing bulk load, using T-SQL [TABLOCK](https://technet.microsoft.com/en-us/library/ms180876(v=sql.105).aspx). (default: `false`)\n */\n lockTable?: InternalOptions['lockTable'] | undefined;\n\n /**\n * Specifies the ordering of the data to possibly increase bulk insert performance, using T-SQL [ORDER](https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008-r2/ms177468(v=sql.105)). (default: `{}`)\n */\n order?: InternalOptions['order'] | undefined;\n}\n\n\nexport type Callback =\n /**\n * A function which will be called after the [[BulkLoad]] finishes executing.\n *\n * @param rowCount the number of rows inserted\n */\n (err: Error | undefined | null, rowCount?: number) => void;\n\ninterface Column extends Parameter {\n objName: string;\n collation: Collation | undefined;\n}\n\ninterface ColumnOptions {\n output?: boolean;\n\n /**\n * For VarChar, NVarChar, VarBinary. Use length as `Infinity` for VarChar(max), NVarChar(max) and VarBinary(max).\n */\n length?: number;\n\n /**\n * For Numeric, Decimal.\n */\n precision?: number;\n\n /**\n * For Numeric, Decimal, Time, DateTime2, DateTimeOffset.\n */\n scale?: number;\n\n /**\n * If the name of the column is different from the name of the property found on `rowObj` arguments passed to [[addRow]], then you can use this option to specify the property name.\n */\n objName?: string;\n\n /**\n * Indicates whether the column accepts NULL values.\n */\n nullable?: boolean;\n}\n\nconst rowTokenBuffer = Buffer.from([ TOKEN_TYPE.ROW ]);\nconst textPointerAndTimestampBuffer = Buffer.from([\n // TextPointer length\n 0x10,\n\n // TextPointer\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\n // Timestamp\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\n]);\nconst textPointerNullBuffer = Buffer.from([0x00]);\n\n// A transform that converts rows to packets.\nclass RowTransform extends Transform {\n /**\n * @private\n */\n declare columnMetadataWritten: boolean;\n /**\n * @private\n */\n declare bulkLoad: BulkLoad;\n /**\n * @private\n */\n declare mainOptions: BulkLoad['options'];\n /**\n * @private\n */\n declare columns: BulkLoad['columns'];\n\n /**\n * @private\n */\n constructor(bulkLoad: BulkLoad) {\n super({ writableObjectMode: true });\n\n this.bulkLoad = bulkLoad;\n this.mainOptions = bulkLoad.options;\n this.columns = bulkLoad.columns;\n\n this.columnMetadataWritten = false;\n }\n\n /**\n * @private\n */\n _transform(row: Array<unknown> | { [colName: string]: unknown }, _encoding: string, callback: (error?: Error) => void) {\n if (!this.columnMetadataWritten) {\n this.push(this.bulkLoad.getColMetaData());\n this.columnMetadataWritten = true;\n }\n\n this.push(rowTokenBuffer);\n\n for (let i = 0; i < this.columns.length; i++) {\n const c = this.columns[i];\n let value = Array.isArray(row) ? row[i] : row[c.objName];\n\n if (!this.bulkLoad.firstRowWritten) {\n try {\n value = c.type.validate(value, c.collation);\n } catch (error: any) {\n return callback(error);\n }\n }\n\n const parameter = {\n length: c.length,\n scale: c.scale,\n precision: c.precision,\n value: value\n };\n\n if (c.type.name === 'Text' || c.type.name === 'Image' || c.type.name === 'NText') {\n if (value == null) {\n this.push(textPointerNullBuffer);\n continue;\n }\n\n this.push(textPointerAndTimestampBuffer);\n }\n\n try {\n this.push(c.type.generateParameterLength(parameter, this.mainOptions));\n for (const chunk of c.type.generateParameterData(parameter, this.mainOptions)) {\n this.push(chunk);\n }\n } catch (error: any) {\n return callback(error);\n }\n }\n\n process.nextTick(callback);\n }\n\n /**\n * @private\n */\n _flush(callback: () => void) {\n this.push(this.bulkLoad.createDoneToken());\n\n process.nextTick(callback);\n }\n}\n\n/**\n * A BulkLoad instance is used to perform a bulk insert.\n *\n * Use [[Connection.newBulkLoad]] to create a new instance, and [[Connection.execBulkLoad]] to execute it.\n *\n * Example of BulkLoad Usages:\n *\n * ```js\n * // optional BulkLoad options\n * const options = { keepNulls: true };\n *\n * // instantiate - provide the table where you'll be inserting to, options and a callback\n * const bulkLoad = connection.newBulkLoad('MyTable', options, (error, rowCount) => {\n * console.log('inserted %d rows', rowCount);\n * });\n *\n * // setup your columns - always indicate whether the column is nullable\n * bulkLoad.addColumn('myInt', TYPES.Int, { nullable: false });\n * bulkLoad.addColumn('myString', TYPES.NVarChar, { length: 50, nullable: true });\n *\n * // execute\n * connection.execBulkLoad(bulkLoad, [\n * { myInt: 7, myString: 'hello' },\n * { myInt: 23, myString: 'world' }\n * ]);\n * ```\n */\nclass BulkLoad extends EventEmitter {\n /**\n * @private\n */\n declare error: Error | undefined;\n /**\n * @private\n */\n declare canceled: boolean;\n /**\n * @private\n */\n declare executionStarted: boolean;\n /**\n * @private\n */\n declare streamingMode: boolean;\n /**\n * @private\n */\n declare table: string;\n /**\n * @private\n */\n declare timeout: number | undefined;\n\n /**\n * @private\n */\n declare options: InternalConnectionOptions;\n /**\n * @private\n */\n declare callback: Callback;\n\n /**\n * @private\n */\n declare columns: Array<Column>;\n /**\n * @private\n */\n declare columnsByName: { [name: string]: Column };\n\n /**\n * @private\n */\n declare firstRowWritten: boolean;\n /**\n * @private\n */\n declare rowToPacketTransform: RowTransform;\n\n /**\n * @private\n */\n declare bulkOptions: InternalOptions;\n\n /**\n * @private\n */\n declare connection: Connection | undefined;\n /**\n * @private\n */\n declare rows: Array<any> | undefined;\n /**\n * @private\n */\n declare rst: Array<any> | undefined;\n /**\n * @private\n */\n declare rowCount: number | undefined;\n\n declare collation: Collation | undefined;\n\n /**\n * @private\n */\n constructor(table: string, collation: Collation | undefined, connectionOptions: InternalConnectionOptions, {\n checkConstraints = false,\n fireTriggers = false,\n keepNulls = false,\n lockTable = false,\n order = {},\n }: Options, callback: Callback) {\n if (typeof checkConstraints !== 'boolean') {\n throw new TypeError('The \"options.checkConstraints\" property must be of type boolean.');\n }\n\n if (typeof fireTriggers !== 'boolean') {\n throw new TypeError('The \"options.fireTriggers\" property must be of type boolean.');\n }\n\n if (typeof keepNulls !== 'boolean') {\n throw new TypeError('The \"options.keepNulls\" property must be of type boolean.');\n }\n\n if (typeof lockTable !== 'boolean') {\n throw new TypeError('The \"options.lockTable\" property must be of type boolean.');\n }\n\n if (typeof order !== 'object' || order === null) {\n throw new TypeError('The \"options.order\" property must be of type object.');\n }\n\n for (const [column, direction] of Object.entries(order)) {\n if (direction !== 'ASC' && direction !== 'DESC') {\n throw new TypeError('The value of the \"' + column + '\" key in the \"options.order\" object must be either \"ASC\" or \"DESC\".');\n }\n }\n\n super();\n\n this.error = undefined;\n this.canceled = false;\n this.executionStarted = false;\n\n this.collation = collation;\n\n this.table = table;\n this.options = connectionOptions;\n this.callback = callback;\n this.columns = [];\n this.columnsByName = {};\n this.firstRowWritten = false;\n this.streamingMode = false;\n\n this.rowToPacketTransform = new RowTransform(this); // eslint-disable-line no-use-before-define\n\n this.bulkOptions = { checkConstraints, fireTriggers, keepNulls, lockTable, order };\n }\n\n /**\n * Adds a column to the bulk load.\n *\n * The column definitions should match the table you are trying to insert into.\n * Attempting to call addColumn after the first row has been added will throw an exception.\n *\n * ```js\n * bulkLoad.addColumn('MyIntColumn', TYPES.Int, { nullable: false });\n * ```\n *\n * @param name The name of the column.\n * @param type One of the supported `data types`.\n * @param __namedParameters Additional column type information. At a minimum, `nullable` must be set to true or false.\n * @param length For VarChar, NVarChar, VarBinary. Use length as `Infinity` for VarChar(max), NVarChar(max) and VarBinary(max).\n * @param nullable Indicates whether the column accepts NULL values.\n * @param objName If the name of the column is different from the name of the property found on `rowObj` arguments passed to [[addRow]] or [[Connection.execBulkLoad]], then you can use this option to specify the property name.\n * @param precision For Numeric, Decimal.\n * @param scale For Numeric, Decimal, Time, DateTime2, DateTimeOffset.\n */\n addColumn(name: string, type: DataType, { output = false, length, precision, scale, objName = name, nullable = true }: ColumnOptions) {\n if (this.firstRowWritten) {\n throw new Error('Columns cannot be added to bulk insert after the first row has been written.');\n }\n if (this.executionStarted) {\n throw new Error('Columns cannot be added to bulk insert after execution has started.');\n }\n\n const column: Column = {\n type: type,\n name: name,\n value: null,\n output: output,\n length: length,\n precision: precision,\n scale: scale,\n objName: objName,\n nullable: nullable,\n collation: this.collation\n };\n\n if ((type.id & 0x30) === 0x20) {\n if (column.length == null && type.resolveLength) {\n column.length = type.resolveLength(column);\n }\n }\n\n if (type.resolvePrecision && column.precision == null) {\n column.precision = type.resolvePrecision(column);\n }\n\n if (type.resolveScale && column.scale == null) {\n column.scale = type.resolveScale(column);\n }\n\n this.columns.push(column);\n\n this.columnsByName[name] = column;\n }\n\n /**\n * @private\n */\n getOptionsSql() {\n const addOptions = [];\n\n if (this.bulkOptions.checkConstraints) {\n addOptions.push('CHECK_CONSTRAINTS');\n }\n\n if (this.bulkOptions.fireTriggers) {\n addOptions.push('FIRE_TRIGGERS');\n }\n\n if (this.bulkOptions.keepNulls) {\n addOptions.push('KEEP_NULLS');\n }\n\n if (this.bulkOptions.lockTable) {\n addOptions.push('TABLOCK');\n }\n\n if (this.bulkOptions.order) {\n const orderColumns = [];\n\n for (const [column, direction] of Object.entries(this.bulkOptions.order)) {\n orderColumns.push(`${column} ${direction}`);\n }\n\n if (orderColumns.length) {\n addOptions.push(`ORDER (${orderColumns.join(', ')})`);\n }\n }\n\n if (addOptions.length > 0) {\n return ` WITH (${addOptions.join(',')})`;\n } else {\n return '';\n }\n }\n\n /**\n * @private\n */\n getBulkInsertSql() {\n let sql = 'insert bulk ' + this.table + '(';\n for (let i = 0, len = this.columns.length; i < len; i++) {\n const c = this.columns[i];\n if (i !== 0) {\n sql += ', ';\n }\n sql += '[' + c.name + '] ' + (c.type.declaration(c));\n }\n sql += ')';\n\n sql += this.getOptionsSql();\n return sql;\n }\n\n /**\n * This is simply a helper utility function which returns a `CREATE TABLE SQL` statement based on the columns added to the bulkLoad object.\n * This may be particularly handy when you want to insert into a temporary table (a table which starts with `#`).\n *\n * ```js\n * var sql = bulkLoad.getTableCreationSql();\n * ```\n *\n * A side note on bulk inserting into temporary tables: if you want to access a local temporary table after executing the bulk load,\n * you'll need to use the same connection and execute your requests using [[Connection.execSqlBatch]] instead of [[Connection.execSql]]\n */\n getTableCreationSql() {\n let sql = 'CREATE TABLE ' + this.table + '(\\n';\n for (let i = 0, len = this.columns.length; i < len; i++) {\n const c = this.columns[i];\n if (i !== 0) {\n sql += ',\\n';\n }\n sql += '[' + c.name + '] ' + (c.type.declaration(c));\n if (c.nullable !== undefined) {\n sql += ' ' + (c.nullable ? 'NULL' : 'NOT NULL');\n }\n }\n sql += '\\n)';\n return sql;\n }\n\n /**\n * @private\n */\n getColMetaData() {\n const tBuf = new WritableTrackingBuffer(100, null, true);\n // TokenType\n tBuf.writeUInt8(TOKEN_TYPE.COLMETADATA);\n // Count\n tBuf.writeUInt16LE(this.columns.length);\n\n for (let j = 0, len = this.columns.length; j < len; j++) {\n const c = this.columns[j];\n // UserType\n if (this.options.tdsVersion < '7_2') {\n tBuf.writeUInt16LE(0);\n } else {\n tBuf.writeUInt32LE(0);\n }\n\n // Flags\n let flags = FLAGS.updateableReadWrite;\n if (c.nullable) {\n flags |= FLAGS.nullable;\n } else if (c.nullable === undefined && this.options.tdsVersion >= '7_2') {\n flags |= FLAGS.nullableUnknown;\n }\n tBuf.writeUInt16LE(flags);\n\n // TYPE_INFO\n tBuf.writeBuffer(c.type.generateTypeInfo(c, this.options));\n\n // TableName\n if (c.type.hasTableName) {\n tBuf.writeUsVarchar(this.table, 'ucs2');\n }\n\n // ColName\n tBuf.writeBVarchar(c.name, 'ucs2');\n }\n return tBuf.data;\n }\n\n /**\n * Sets a timeout for this bulk load.\n *\n * ```js\n * bulkLoad.setTimeout(timeout);\n * ```\n *\n * @param timeout The number of milliseconds before the bulk load is considered failed, or 0 for no timeout.\n * When no timeout is set for the bulk load, the [[ConnectionOptions.requestTimeout]] of the Connection is used.\n */\n setTimeout(timeout?: number) {\n this.timeout = timeout;\n }\n\n /**\n * @private\n */\n createDoneToken() {\n // It might be nice to make DoneToken a class if anything needs to create them, but for now, just do it here\n const tBuf = new WritableTrackingBuffer(this.options.tdsVersion < '7_2' ? 9 : 13);\n tBuf.writeUInt8(TOKEN_TYPE.DONE);\n const status = DONE_STATUS.FINAL;\n tBuf.writeUInt16LE(status);\n tBuf.writeUInt16LE(0); // CurCmd (TDS ignores this)\n tBuf.writeUInt32LE(0); // row count - doesn't really matter\n if (this.options.tdsVersion >= '7_2') {\n tBuf.writeUInt32LE(0); // row count is 64 bits in >= TDS 7.2\n }\n return tBuf.data;\n }\n\n /**\n * @private\n */\n cancel() {\n if (this.canceled) {\n return;\n }\n\n this.canceled = true;\n this.emit('cancel');\n }\n}\n\nexport default BulkLoad;\nmodule.exports = BulkLoad;\n"],"mappings":"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"}
1
+ {"version":3,"file":"bulk-load.js","names":["_events","require","_writableTrackingBuffer","_interopRequireDefault","_stream","_token","e","__esModule","default","FLAGS","nullable","caseSen","updateableReadWrite","updateableUnknown","identity","computed","fixedLenCLRType","sparseColumnSet","hidden","key","nullableUnknown","DONE_STATUS","FINAL","MORE","ERROR","INXACT","COUNT","ATTN","SRVERROR","rowTokenBuffer","Buffer","from","TOKEN_TYPE","ROW","textPointerAndTimestampBuffer","textPointerNullBuffer","RowTransform","Transform","constructor","bulkLoad","writableObjectMode","mainOptions","options","columns","columnMetadataWritten","_transform","row","_encoding","callback","push","getColMetaData","i","length","c","value","Array","isArray","objName","firstRowWritten","type","validate","collation","error","parameter","scale","precision","name","generateParameterLength","chunk","generateParameterData","process","nextTick","_flush","createDoneToken","BulkLoad","EventEmitter","table","connectionOptions","checkConstraints","fireTriggers","keepNulls","lockTable","order","TypeError","column","direction","Object","entries","undefined","canceled","executionStarted","columnsByName","streamingMode","rowToPacketTransform","bulkOptions","addColumn","output","Error","id","resolveLength","resolvePrecision","resolveScale","getOptionsSql","addOptions","orderColumns","join","getBulkInsertSql","sql","len","declaration","getTableCreationSql","tBuf","WritableTrackingBuffer","writeUInt8","COLMETADATA","writeUInt16LE","j","tdsVersion","writeUInt32LE","flags","writeBuffer","generateTypeInfo","hasTableName","writeUsVarchar","writeBVarchar","data","setTimeout","timeout","DONE","status","cancel","emit","_default","exports","module"],"sources":["../src/bulk-load.ts"],"sourcesContent":["import { EventEmitter } from 'events';\nimport WritableTrackingBuffer from './tracking-buffer/writable-tracking-buffer';\nimport Connection, { type InternalConnectionOptions } from './connection';\n\nimport { Transform } from 'stream';\nimport { TYPE as TOKEN_TYPE } from './token/token';\n\nimport { type DataType, type Parameter } from './data-type';\nimport { Collation } from './collation';\n\n/**\n * @private\n */\nconst FLAGS = {\n nullable: 1 << 0,\n caseSen: 1 << 1,\n updateableReadWrite: 1 << 2,\n updateableUnknown: 1 << 3,\n identity: 1 << 4,\n computed: 1 << 5, // introduced in TDS 7.2\n fixedLenCLRType: 1 << 8, // introduced in TDS 7.2\n sparseColumnSet: 1 << 10, // introduced in TDS 7.3.B\n hidden: 1 << 13, // introduced in TDS 7.2\n key: 1 << 14, // introduced in TDS 7.2\n nullableUnknown: 1 << 15 // introduced in TDS 7.2\n};\n\n/**\n * @private\n */\nconst DONE_STATUS = {\n FINAL: 0x00,\n MORE: 0x1,\n ERROR: 0x2,\n INXACT: 0x4,\n COUNT: 0x10,\n ATTN: 0x20,\n SRVERROR: 0x100\n};\n\n/**\n * @private\n */\ninterface InternalOptions {\n checkConstraints: boolean;\n fireTriggers: boolean;\n keepNulls: boolean;\n lockTable: boolean;\n order: { [columnName: string]: 'ASC' | 'DESC' };\n}\n\nexport interface Options {\n /**\n * Honors constraints during bulk load, using T-SQL\n * [CHECK_CONSTRAINTS](https://technet.microsoft.com/en-us/library/ms186247(v=sql.105).aspx).\n * (default: `false`)\n */\n checkConstraints?: InternalOptions['checkConstraints'] | undefined;\n\n /**\n * Honors insert triggers during bulk load, using the T-SQL [FIRE_TRIGGERS](https://technet.microsoft.com/en-us/library/ms187640(v=sql.105).aspx). (default: `false`)\n */\n fireTriggers?: InternalOptions['fireTriggers'] | undefined;\n\n /**\n * Honors null value passed, ignores the default values set on table, using T-SQL [KEEP_NULLS](https://msdn.microsoft.com/en-us/library/ms187887(v=sql.120).aspx). (default: `false`)\n */\n keepNulls?: InternalOptions['keepNulls'] | undefined;\n\n /**\n * Places a bulk update(BU) lock on table while performing bulk load, using T-SQL [TABLOCK](https://technet.microsoft.com/en-us/library/ms180876(v=sql.105).aspx). (default: `false`)\n */\n lockTable?: InternalOptions['lockTable'] | undefined;\n\n /**\n * Specifies the ordering of the data to possibly increase bulk insert performance, using T-SQL [ORDER](https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008-r2/ms177468(v=sql.105)). (default: `{}`)\n */\n order?: InternalOptions['order'] | undefined;\n}\n\n\nexport type Callback =\n /**\n * A function which will be called after the [[BulkLoad]] finishes executing.\n *\n * @param rowCount the number of rows inserted\n */\n (err: Error | undefined | null, rowCount?: number) => void;\n\ninterface Column extends Parameter {\n objName: string;\n collation: Collation | undefined;\n}\n\ninterface ColumnOptions {\n output?: boolean;\n\n /**\n * For VarChar, NVarChar, VarBinary. Use length as `Infinity` for VarChar(max), NVarChar(max) and VarBinary(max).\n */\n length?: number;\n\n /**\n * For Numeric, Decimal.\n */\n precision?: number;\n\n /**\n * For Numeric, Decimal, Time, DateTime2, DateTimeOffset.\n */\n scale?: number;\n\n /**\n * If the name of the column is different from the name of the property found on `rowObj` arguments passed to [[addRow]], then you can use this option to specify the property name.\n */\n objName?: string;\n\n /**\n * Indicates whether the column accepts NULL values.\n */\n nullable?: boolean;\n}\n\nconst rowTokenBuffer = Buffer.from([ TOKEN_TYPE.ROW ]);\nconst textPointerAndTimestampBuffer = Buffer.from([\n // TextPointer length\n 0x10,\n\n // TextPointer\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\n // Timestamp\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\n]);\nconst textPointerNullBuffer = Buffer.from([0x00]);\n\n// A transform that converts rows to packets.\nclass RowTransform extends Transform {\n /**\n * @private\n */\n declare columnMetadataWritten: boolean;\n /**\n * @private\n */\n declare bulkLoad: BulkLoad;\n /**\n * @private\n */\n declare mainOptions: BulkLoad['options'];\n /**\n * @private\n */\n declare columns: BulkLoad['columns'];\n\n /**\n * @private\n */\n constructor(bulkLoad: BulkLoad) {\n super({ writableObjectMode: true });\n\n this.bulkLoad = bulkLoad;\n this.mainOptions = bulkLoad.options;\n this.columns = bulkLoad.columns;\n\n this.columnMetadataWritten = false;\n }\n\n /**\n * @private\n */\n _transform(row: Array<unknown> | { [colName: string]: unknown }, _encoding: string, callback: (error?: Error) => void) {\n if (!this.columnMetadataWritten) {\n this.push(this.bulkLoad.getColMetaData());\n this.columnMetadataWritten = true;\n }\n\n this.push(rowTokenBuffer);\n\n for (let i = 0; i < this.columns.length; i++) {\n const c = this.columns[i];\n let value = Array.isArray(row) ? row[i] : row[c.objName];\n\n if (!this.bulkLoad.firstRowWritten) {\n try {\n value = c.type.validate(value, c.collation);\n } catch (error: any) {\n return callback(error);\n }\n }\n\n const parameter = {\n length: c.length,\n scale: c.scale,\n precision: c.precision,\n value: value\n };\n\n if (c.type.name === 'Text' || c.type.name === 'Image' || c.type.name === 'NText') {\n if (value == null) {\n this.push(textPointerNullBuffer);\n continue;\n }\n\n this.push(textPointerAndTimestampBuffer);\n }\n\n try {\n this.push(c.type.generateParameterLength(parameter, this.mainOptions));\n for (const chunk of c.type.generateParameterData(parameter, this.mainOptions)) {\n this.push(chunk);\n }\n } catch (error: any) {\n return callback(error);\n }\n }\n\n process.nextTick(callback);\n }\n\n /**\n * @private\n */\n _flush(callback: () => void) {\n this.push(this.bulkLoad.createDoneToken());\n\n process.nextTick(callback);\n }\n}\n\n/**\n * A BulkLoad instance is used to perform a bulk insert.\n *\n * Use [[Connection.newBulkLoad]] to create a new instance, and [[Connection.execBulkLoad]] to execute it.\n *\n * Example of BulkLoad Usages:\n *\n * ```js\n * // optional BulkLoad options\n * const options = { keepNulls: true };\n *\n * // instantiate - provide the table where you'll be inserting to, options and a callback\n * const bulkLoad = connection.newBulkLoad('MyTable', options, (error, rowCount) => {\n * console.log('inserted %d rows', rowCount);\n * });\n *\n * // setup your columns - always indicate whether the column is nullable\n * bulkLoad.addColumn('myInt', TYPES.Int, { nullable: false });\n * bulkLoad.addColumn('myString', TYPES.NVarChar, { length: 50, nullable: true });\n *\n * // execute\n * connection.execBulkLoad(bulkLoad, [\n * { myInt: 7, myString: 'hello' },\n * { myInt: 23, myString: 'world' }\n * ]);\n * ```\n */\nclass BulkLoad extends EventEmitter {\n /**\n * @private\n */\n declare error: Error | undefined;\n /**\n * @private\n */\n declare canceled: boolean;\n /**\n * @private\n */\n declare executionStarted: boolean;\n /**\n * @private\n */\n declare streamingMode: boolean;\n /**\n * @private\n */\n declare table: string;\n /**\n * @private\n */\n declare timeout: number | undefined;\n\n /**\n * @private\n */\n declare options: InternalConnectionOptions;\n /**\n * @private\n */\n declare callback: Callback;\n\n /**\n * @private\n */\n declare columns: Array<Column>;\n /**\n * @private\n */\n declare columnsByName: { [name: string]: Column };\n\n /**\n * @private\n */\n declare firstRowWritten: boolean;\n /**\n * @private\n */\n declare rowToPacketTransform: RowTransform;\n\n /**\n * @private\n */\n declare bulkOptions: InternalOptions;\n\n /**\n * @private\n */\n declare connection: Connection | undefined;\n /**\n * @private\n */\n declare rows: Array<any> | undefined;\n /**\n * @private\n */\n declare rst: Array<any> | undefined;\n /**\n * @private\n */\n declare rowCount: number | undefined;\n\n declare collation: Collation | undefined;\n\n /**\n * @private\n */\n constructor(table: string, collation: Collation | undefined, connectionOptions: InternalConnectionOptions, {\n checkConstraints = false,\n fireTriggers = false,\n keepNulls = false,\n lockTable = false,\n order = {},\n }: Options, callback: Callback) {\n if (typeof checkConstraints !== 'boolean') {\n throw new TypeError('The \"options.checkConstraints\" property must be of type boolean.');\n }\n\n if (typeof fireTriggers !== 'boolean') {\n throw new TypeError('The \"options.fireTriggers\" property must be of type boolean.');\n }\n\n if (typeof keepNulls !== 'boolean') {\n throw new TypeError('The \"options.keepNulls\" property must be of type boolean.');\n }\n\n if (typeof lockTable !== 'boolean') {\n throw new TypeError('The \"options.lockTable\" property must be of type boolean.');\n }\n\n if (typeof order !== 'object' || order === null) {\n throw new TypeError('The \"options.order\" property must be of type object.');\n }\n\n for (const [column, direction] of Object.entries(order)) {\n if (direction !== 'ASC' && direction !== 'DESC') {\n throw new TypeError('The value of the \"' + column + '\" key in the \"options.order\" object must be either \"ASC\" or \"DESC\".');\n }\n }\n\n super();\n\n this.error = undefined;\n this.canceled = false;\n this.executionStarted = false;\n\n this.collation = collation;\n\n this.table = table;\n this.options = connectionOptions;\n this.callback = callback;\n this.columns = [];\n this.columnsByName = {};\n this.firstRowWritten = false;\n this.streamingMode = false;\n\n this.rowToPacketTransform = new RowTransform(this); // eslint-disable-line no-use-before-define\n\n this.bulkOptions = { checkConstraints, fireTriggers, keepNulls, lockTable, order };\n }\n\n /**\n * Adds a column to the bulk load.\n *\n * The column definitions should match the table you are trying to insert into.\n * Attempting to call addColumn after the first row has been added will throw an exception.\n *\n * ```js\n * bulkLoad.addColumn('MyIntColumn', TYPES.Int, { nullable: false });\n * ```\n *\n * @param name The name of the column.\n * @param type One of the supported `data types`.\n * @param __namedParameters Additional column type information. At a minimum, `nullable` must be set to true or false.\n * @param length For VarChar, NVarChar, VarBinary. Use length as `Infinity` for VarChar(max), NVarChar(max) and VarBinary(max).\n * @param nullable Indicates whether the column accepts NULL values.\n * @param objName If the name of the column is different from the name of the property found on `rowObj` arguments passed to [[addRow]] or [[Connection.execBulkLoad]], then you can use this option to specify the property name.\n * @param precision For Numeric, Decimal.\n * @param scale For Numeric, Decimal, Time, DateTime2, DateTimeOffset.\n */\n addColumn(name: string, type: DataType, { output = false, length, precision, scale, objName = name, nullable = true }: ColumnOptions) {\n if (this.firstRowWritten) {\n throw new Error('Columns cannot be added to bulk insert after the first row has been written.');\n }\n if (this.executionStarted) {\n throw new Error('Columns cannot be added to bulk insert after execution has started.');\n }\n\n const column: Column = {\n type: type,\n name: name,\n value: null,\n output: output,\n length: length,\n precision: precision,\n scale: scale,\n objName: objName,\n nullable: nullable,\n collation: this.collation\n };\n\n if ((type.id & 0x30) === 0x20) {\n if (column.length == null && type.resolveLength) {\n column.length = type.resolveLength(column);\n }\n }\n\n if (type.resolvePrecision && column.precision == null) {\n column.precision = type.resolvePrecision(column);\n }\n\n if (type.resolveScale && column.scale == null) {\n column.scale = type.resolveScale(column);\n }\n\n this.columns.push(column);\n\n this.columnsByName[name] = column;\n }\n\n /**\n * @private\n */\n getOptionsSql() {\n const addOptions = [];\n\n if (this.bulkOptions.checkConstraints) {\n addOptions.push('CHECK_CONSTRAINTS');\n }\n\n if (this.bulkOptions.fireTriggers) {\n addOptions.push('FIRE_TRIGGERS');\n }\n\n if (this.bulkOptions.keepNulls) {\n addOptions.push('KEEP_NULLS');\n }\n\n if (this.bulkOptions.lockTable) {\n addOptions.push('TABLOCK');\n }\n\n if (this.bulkOptions.order) {\n const orderColumns = [];\n\n for (const [column, direction] of Object.entries(this.bulkOptions.order)) {\n orderColumns.push(`${column} ${direction}`);\n }\n\n if (orderColumns.length) {\n addOptions.push(`ORDER (${orderColumns.join(', ')})`);\n }\n }\n\n if (addOptions.length > 0) {\n return ` WITH (${addOptions.join(',')})`;\n } else {\n return '';\n }\n }\n\n /**\n * @private\n */\n getBulkInsertSql() {\n let sql = 'insert bulk ' + this.table + '(';\n for (let i = 0, len = this.columns.length; i < len; i++) {\n const c = this.columns[i];\n if (i !== 0) {\n sql += ', ';\n }\n sql += '[' + c.name + '] ' + (c.type.declaration(c));\n }\n sql += ')';\n\n sql += this.getOptionsSql();\n return sql;\n }\n\n /**\n * This is simply a helper utility function which returns a `CREATE TABLE SQL` statement based on the columns added to the bulkLoad object.\n * This may be particularly handy when you want to insert into a temporary table (a table which starts with `#`).\n *\n * ```js\n * var sql = bulkLoad.getTableCreationSql();\n * ```\n *\n * A side note on bulk inserting into temporary tables: if you want to access a local temporary table after executing the bulk load,\n * you'll need to use the same connection and execute your requests using [[Connection.execSqlBatch]] instead of [[Connection.execSql]]\n */\n getTableCreationSql() {\n let sql = 'CREATE TABLE ' + this.table + '(\\n';\n for (let i = 0, len = this.columns.length; i < len; i++) {\n const c = this.columns[i];\n if (i !== 0) {\n sql += ',\\n';\n }\n sql += '[' + c.name + '] ' + (c.type.declaration(c));\n if (c.nullable !== undefined) {\n sql += ' ' + (c.nullable ? 'NULL' : 'NOT NULL');\n }\n }\n sql += '\\n)';\n return sql;\n }\n\n /**\n * @private\n */\n getColMetaData() {\n const tBuf = new WritableTrackingBuffer(100, null, true);\n // TokenType\n tBuf.writeUInt8(TOKEN_TYPE.COLMETADATA);\n // Count\n tBuf.writeUInt16LE(this.columns.length);\n\n for (let j = 0, len = this.columns.length; j < len; j++) {\n const c = this.columns[j];\n // UserType\n if (this.options.tdsVersion < '7_2') {\n tBuf.writeUInt16LE(0);\n } else {\n tBuf.writeUInt32LE(0);\n }\n\n // Flags\n let flags = FLAGS.updateableReadWrite;\n if (c.nullable) {\n flags |= FLAGS.nullable;\n } else if (c.nullable === undefined && this.options.tdsVersion >= '7_2') {\n flags |= FLAGS.nullableUnknown;\n }\n tBuf.writeUInt16LE(flags);\n\n // TYPE_INFO\n tBuf.writeBuffer(c.type.generateTypeInfo(c, this.options));\n\n // TableName\n if (c.type.hasTableName) {\n tBuf.writeUsVarchar(this.table, 'ucs2');\n }\n\n // ColName\n tBuf.writeBVarchar(c.name, 'ucs2');\n }\n return tBuf.data;\n }\n\n /**\n * Sets a timeout for this bulk load.\n *\n * ```js\n * bulkLoad.setTimeout(timeout);\n * ```\n *\n * @param timeout The number of milliseconds before the bulk load is considered failed, or 0 for no timeout.\n * When no timeout is set for the bulk load, the [[ConnectionOptions.requestTimeout]] of the Connection is used.\n */\n setTimeout(timeout?: number) {\n this.timeout = timeout;\n }\n\n /**\n * @private\n */\n createDoneToken() {\n // It might be nice to make DoneToken a class if anything needs to create them, but for now, just do it here\n const tBuf = new WritableTrackingBuffer(this.options.tdsVersion < '7_2' ? 9 : 13);\n tBuf.writeUInt8(TOKEN_TYPE.DONE);\n const status = DONE_STATUS.FINAL;\n tBuf.writeUInt16LE(status);\n tBuf.writeUInt16LE(0); // CurCmd (TDS ignores this)\n tBuf.writeUInt32LE(0); // row count - doesn't really matter\n if (this.options.tdsVersion >= '7_2') {\n tBuf.writeUInt32LE(0); // row count is 64 bits in >= TDS 7.2\n }\n return tBuf.data;\n }\n\n /**\n * @private\n */\n cancel() {\n if (this.canceled) {\n return;\n }\n\n this.canceled = true;\n this.emit('cancel');\n }\n}\n\nexport default BulkLoad;\nmodule.exports = BulkLoad;\n"],"mappings":"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","ignoreList":[]}
package/lib/collation.js CHANGED
@@ -345,4 +345,4 @@ class Collation {
345
345
  }
346
346
  }
347
347
  exports.Collation = Collation;
348
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb2RlcGFnZUJ5TGFuZ3VhZ2VJZCIsImV4cG9ydHMiLCJjb2RlcGFnZUJ5U29ydElkIiwiRmxhZ3MiLCJJR05PUkVfQ0FTRSIsIklHTk9SRV9BQ0NFTlQiLCJJR05PUkVfS0FOQSIsIklHTk9SRV9XSURUSCIsIkJJTkFSWSIsIkJJTkFSWTIiLCJVVEY4IiwiQ29sbGF0aW9uIiwiZnJvbUJ1ZmZlciIsImJ1ZmZlciIsIm9mZnNldCIsImxjaWQiLCJmbGFncyIsInZlcnNpb24iLCJzb3J0SWQiLCJjb25zdHJ1Y3RvciIsInVuZGVmaW5lZCIsImNvZGVwYWdlIiwibGFuZ3VhZ2VJZCIsInRvQnVmZmVyIiwiQnVmZmVyIiwiYWxsb2MiXSwic291cmNlcyI6WyIuLi9zcmMvY29sbGF0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbInR5cGUgRW5jb2RpbmcgPSAndXRmLTgnIHwgJ0NQNDM3JyB8ICdDUDg1MCcgfCAnQ1A4NzQnIHwgJ0NQOTMyJyB8ICdDUDkzNicgfCAnQ1A5NDknIHwgJ0NQOTUwJyB8ICdDUDEyNTAnIHwgJ0NQMTI1MScgfCAnQ1AxMjUyJyB8ICdDUDEyNTMnIHwgJ0NQMTI1NCcgfCAnQ1AxMjU1JyB8ICdDUDEyNTYnIHwgJ0NQMTI1NycgfCAnQ1AxMjU4JztcblxuLy8gaHR0cDovL3RlY2huZXQubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2FhMTc2NTUzKHY9c3FsLjgwKS5hc3B4XG5leHBvcnQgY29uc3QgY29kZXBhZ2VCeUxhbmd1YWdlSWQ6IHsgW2tleTogbnVtYmVyXTogRW5jb2RpbmcgfSA9IHtcbiAgLy8gQXJhYmljXypcbiAgWzB4MDQwMV06ICdDUDEyNTYnLFxuXG4gIC8vIENoaW5lc2VfVGFpd2FuX1N0cm9rZV8qXG4gIC8vIENoaW5lc2VfVHJhZGl0aW9uYWxfU3Ryb2tlX0NvdW50XypcbiAgLy8gQ2hpbmVzZV9UYWl3YW5fQm9wb21vZm9fKlxuICAvLyBDaGluZXNlX1RyYWRpdGlvbmFsX0JvcG9tb2ZvXypcbiAgWzB4MDQwNF06ICdDUDk1MCcsXG5cbiAgLy8gQ3plY2hfKlxuICBbMHgwNDA1XTogJ0NQMTI1MCcsXG5cbiAgLy8gRGFuaXNoX0dyZWVubGFuZGljXypcbiAgLy8gRGFuaXNoX05vcndlZ2lhbl8qXG4gIFsweDA0MDZdOiAnQ1AxMjUyJyxcblxuICAvLyBHcmVla18qXG4gIFsweDA0MDhdOiAnQ1AxMjUzJyxcblxuICAvLyBMYXRpbjFfR2VuZXJhbF8qXG4gIFsweDA0MDldOiAnQ1AxMjUyJyxcblxuICAvLyBUcmFkaXRpb25hbF9TcGFuaXNoXypcbiAgWzB4MDQwQV06ICdDUDEyNTInLFxuXG4gIC8vIEZpbm5pc2hfU3dlZGlzaF8qXG4gIFsweDA0MEJdOiAnQ1AxMjUyJyxcblxuICAvLyBGcmVuY2hfKlxuICBbMHgwNDBDXTogJ0NQMTI1MicsXG5cbiAgLy8gSGVicmV3XypcbiAgWzB4MDQwRF06ICdDUDEyNTUnLFxuXG4gIC8vIEh1bmdhcmlhbl8qXG4gIC8vIEh1bmdhcmlhbl9UZWNobmljYWxfKlxuICBbMHgwNDBFXTogJ0NQMTI1MCcsXG5cbiAgLy8gSWNlbGFuZGljXypcbiAgWzB4MDQwRl06ICdDUDEyNTInLFxuXG4gIC8vIEphcGFuZXNlXypcbiAgLy8gSmFwYW5lc2VfWEpJU18qXG4gIC8vIEphcGFuZXNlX1VuaWNvZGVfKlxuICAvLyBKYXBhbmVzZV9CdXNodV9LYWt1c3VfKlxuICBbMHgwNDExXTogJ0NQOTMyJyxcblxuICAvLyBLb3JlYW5fKlxuICAvLyBLb3JlYW5fV2Fuc3VuZ18qXG4gIFsweDA0MTJdOiAnQ1A5NDknLFxuXG4gIC8vIE5vcndlZ2lhbl8qXG4gIFsweDA0MTRdOiAnQ1AxMjUyJyxcblxuICAvLyBQb2xpc2hfKlxuICBbMHgwNDE1XTogJ0NQMTI1MCcsXG5cbiAgLy8gUm9tYW5zaF8qXG4gIFsweDA0MTddOiAnQ1AxMjUyJyxcblxuICAvLyBSb21hbmlhbl8qXG4gIFsweDA0MThdOiAnQ1AxMjUwJyxcblxuICAvLyBDeXJpbGxpY18qXG4gIFsweDA0MTldOiAnQ1AxMjUxJyxcblxuICAvLyBDcm9hdGlhbl8qXG4gIFsweDA0MUFdOiAnQ1AxMjUwJyxcblxuICAvLyBTbG92YWtfKlxuICBbMHgwNDFCXTogJ0NQMTI1MCcsXG5cbiAgLy8gQWxiYW5pYW5fKlxuICBbMHgwNDFDXTogJ0NQMTI1MCcsXG5cbiAgLy8gVGhhaV8qXG4gIFsweDA0MUVdOiAnQ1A4NzQnLFxuXG4gIC8vIFR1cmtpc2hfKlxuICBbMHgwNDFGXTogJ0NQMTI1NCcsXG5cbiAgLy8gVXJkdV8qXG4gIFsweDA0MjBdOiAnQ1AxMjU2JyxcblxuICAvLyBVa3JhaW5pYW5fKlxuICBbMHgwNDIyXTogJ0NQMTI1MScsXG5cbiAgLy8gU2xvdmVuaWFuXypcbiAgWzB4MDQyNF06ICdDUDEyNTAnLFxuXG4gIC8vIEVzdG9uaWFuXypcbiAgWzB4MDQyNV06ICdDUDEyNTcnLFxuXG4gIC8vIExhdHZpYW5fKlxuICBbMHgwNDI2XTogJ0NQMTI1NycsXG5cbiAgLy8gTGl0aHVhbmlhbl8qXG4gIFsweDA0MjddOiAnQ1AxMjU3JyxcblxuICAvLyBQZXJzaWFuXypcbiAgWzB4MDQyOV06ICdDUDEyNTYnLFxuXG4gIC8vIFZpZXRuYW1lc2VfKlxuICBbMHgwNDJBXTogJ0NQMTI1OCcsXG5cbiAgLy8gQXplcmlfTGF0aW5fKlxuICBbMHgwNDJDXTogJ0NQMTI1NCcsXG5cbiAgLy8gVXBwZXJfU29yYmlhbl8qXG4gIFsweDA0MkVdOiAnQ1AxMjUyJyxcblxuICAvLyBNYWNlZG9uaWFuX0ZZUk9NXypcbiAgWzB4MDQyRl06ICdDUDEyNTEnLFxuXG4gIC8vIFNhbWlfTm9yd2F5XypcbiAgWzB4MDQzQl06ICdDUDEyNTInLFxuXG4gIC8vIEthemFraF8qXG4gIFsweDA0M0ZdOiAnQ1AxMjUxJyxcblxuICAvLyBUdXJrbWVuXypcbiAgWzB4MDQ0Ml06ICdDUDEyNTAnLFxuXG4gIC8vIFV6YmVrX0xhdGluXypcbiAgWzB4MDQ0M106ICdDUDEyNTQnLFxuXG4gIC8vIFRhdGFyXypcbiAgWzB4MDQ0NF06ICdDUDEyNTEnLFxuXG4gIC8vIFdlbHNoXypcbiAgWzB4MDQ1Ml06ICdDUDEyNTInLFxuXG4gIC8vIEZyaXNpYW5fKlxuICBbMHgwNDYyXTogJ0NQMTI1MicsXG5cbiAgLy8gQmFzaGtpcl8qXG4gIFsweDA0NkRdOiAnQ1AxMjUxJyxcblxuICAvLyBNYXB1ZHVuZ2FuXypcbiAgWzB4MDQ3QV06ICdDUDEyNTInLFxuXG4gIC8vIE1vaGF3a18qXG4gIFsweDA0N0NdOiAnQ1AxMjUyJyxcblxuICAvLyBCcmV0b25fKlxuICBbMHgwNDdFXTogJ0NQMTI1MicsXG5cbiAgLy8gVWlnaHVyXypcbiAgWzB4MDQ4MF06ICdDUDEyNTYnLFxuXG4gIC8vIENvcnNpY2FuXypcbiAgWzB4MDQ4M106ICdDUDEyNTInLFxuXG4gIC8vIFlha3V0XypcbiAgWzB4MDQ4NV06ICdDUDEyNTEnLFxuXG4gIC8vIERhcmlfKlxuICBbMHgwNDhDXTogJ0NQMTI1NicsXG5cbiAgLy8gQ2hpbmVzZV9QUkNfKlxuICAvLyBDaGluZXNlX1NpbXBsaWZpZWRfUGlueWluXypcbiAgLy8gQ2hpbmVzZV9QUkNfU3Ryb2tlXypcbiAgLy8gQ2hpbmVzZV9TaW1wbGlmaWVkX1N0cm9rZV9PcmRlcl8qXG4gIFsweDA4MDRdOiAnQ1A5MzYnLFxuXG4gIC8vIFNlcmJpYW5fTGF0aW5fKlxuICBbMHgwODFBXTogJ0NQMTI1MCcsXG5cbiAgLy8gQXplcmlfQ3lyaWxsaWNfKlxuICBbMHgwODJDXTogJ0NQMTI1MScsXG5cbiAgLy8gU2FtaV9Td2VkZW5fRmlubGFuZF8qXG4gIFsweDA4M0JdOiAnQ1AxMjUyJyxcblxuICAvLyBUYW1hemlnaHRfKlxuICBbMHgwODVGXTogJ0NQMTI1MicsXG5cbiAgLy8gQ2hpbmVzZV9Ib25nX0tvbmdfU3Ryb2tlXypcbiAgWzB4MEMwNF06ICdDUDk1MCcsXG5cbiAgLy8gTW9kZXJuX1NwYW5pc2hfKlxuICBbMHgwQzBBXTogJ0NQMTI1MicsXG5cbiAgLy8gU2VyYmlhbl9DeXJpbGxpY18qXG4gIFsweDBDMUFdOiAnQ1AxMjUxJyxcblxuICAvLyBDaGluZXNlX1RyYWRpdGlvbmFsX1Bpbnlpbl8qXG4gIC8vIENoaW5lc2VfVHJhZGl0aW9uYWxfU3Ryb2tlX09yZGVyXypcbiAgWzB4MTQwNF06ICdDUDk1MCcsXG5cbiAgLy8gQm9zbmlhbl9MYXRpbl8qXG4gIFsweDE0MUFdOiAnQ1AxMjUwJyxcblxuICAvLyBCb3NuaWFuX0N5cmlsbGljXypcbiAgWzB4MjAxQV06ICdDUDEyNTEnLFxuXG4gIC8vIEdlcm1hblxuICAvLyBHZXJtYW5fUGhvbmVCb29rXypcbiAgWzB4MDQwN106ICdDUDEyNTInLFxuXG4gIC8vIEdlb3JnaWFuX01vZGVybl9Tb3J0XypcbiAgWzB4MDQzN106ICdDUDEyNTInXG59O1xuXG5leHBvcnQgY29uc3QgY29kZXBhZ2VCeVNvcnRJZDogeyBba2V5OiBudW1iZXJdOiBFbmNvZGluZyB9ID0ge1xuICBbMzBdOiAnQ1A0MzcnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1A0MzdfQklOXG4gIFszMV06ICdDUDQzNycsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDQzN19DU19BU1xuICBbMzJdOiAnQ1A0MzcnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1A0MzdfQ0lfQVNcbiAgWzMzXTogJ0NQNDM3JywgLy8gU1FMX0xhdGluMV9HZW5lcmFsX1ByZWZfQ1A0MzdfQ0lfQVNcbiAgWzM0XTogJ0NQNDM3JywgLy8gU1FMX0xhdGluMV9HZW5lcmFsX0NQNDM3X0NJX0FJXG4gIFs0MF06ICdDUDg1MCcsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDg1MF9CSU5cbiAgWzQxXTogJ0NQODUwJywgLy8gU1FMX0xhdGluMV9HZW5lcmFsX0NQODUwX0NTX0FTXG4gIFs0Ml06ICdDUDg1MCcsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDg1MF9DSV9BU1xuICBbNDNdOiAnQ1A4NTAnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfUHJlZl9DUDg1MF9DSV9BU1xuICBbNDRdOiAnQ1A4NTAnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1A4NTBfQ0lfQUlcbiAgWzQ5XTogJ0NQODUwJywgLy8gU1FMXzF4Q29tcGF0X0NQODUwX0NJX0FTXG4gIFs1MV06ICdDUDEyNTInLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ3AxX0NTX0FTX0tJX1dJXG4gIFs1Ml06ICdDUDEyNTInLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ3AxX0NJX0FTX0tJX1dJXG4gIFs1M106ICdDUDEyNTInLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfUHJlZl9DcDFfQ0lfQVNfS0lfV0lcbiAgWzU0XTogJ0NQMTI1MicsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DcDFfQ0lfQUlfS0lfV0lcbiAgWzU1XTogJ0NQODUwJywgLy8gU1FMX0FsdERpY3Rpb25fQ1A4NTBfQ1NfQVNcbiAgWzU2XTogJ0NQODUwJywgLy8gU1FMX0FsdERpY3Rpb25fUHJlZl9DUDg1MF9DSV9BU1xuICBbNTddOiAnQ1A4NTAnLCAvLyBTUUxfQWx0RGljdGlvbl9DUDg1MF9DSV9BSVxuICBbNThdOiAnQ1A4NTAnLCAvLyBTUUxfU2NhbmRpbmF2aWFuX1ByZWZfQ1A4NTBfQ0lfQVNcbiAgWzU5XTogJ0NQODUwJywgLy8gU1FMX1NjYW5kaW5hdmlhbl9DUDg1MF9DU19BU1xuICBbNjBdOiAnQ1A4NTAnLCAvLyBTUUxfU2NhbmRpbmF2aWFuX0NQODUwX0NJX0FTXG4gIFs2MV06ICdDUDg1MCcsIC8vIFNRTF9BbHREaWN0aW9uX0NQODUwX0NJX0FTXG4gIFs4MF06ICdDUDEyNTAnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfMTI1MF9CSU5cbiAgWzgxXTogJ0NQMTI1MCcsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDEyNTBfQ1NfQVNcbiAgWzgyXTogJ0NQMTI1MCcsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DcDEyNTBfQ0lfQVNfS0lfV0lcbiAgWzgzXTogJ0NQMTI1MCcsIC8vIFNRTF9DemVjaF9DcDEyNTBfQ1NfQVNfS0lfV0lcbiAgWzg0XTogJ0NQMTI1MCcsIC8vIFNRTF9DemVjaF9DcDEyNTBfQ0lfQVNfS0lfV0lcbiAgWzg1XTogJ0NQMTI1MCcsIC8vIFNRTF9IdW5nYXJpYW5fQ3AxMjUwX0NTX0FTX0tJX1dJXG4gIFs4Nl06ICdDUDEyNTAnLCAvLyBTUUxfSHVuZ2FyaWFuX0NwMTI1MF9DSV9BU19LSV9XSVxuICBbODddOiAnQ1AxMjUwJywgLy8gU1FMX1BvbGlzaF9DcDEyNTBfQ1NfQVNfS0lfV0lcbiAgWzg4XTogJ0NQMTI1MCcsIC8vIFNRTF9Qb2xpc2hfQ3AxMjUwX0NJX0FTX0tJX1dJXG4gIFs4OV06ICdDUDEyNTAnLCAvLyBTUUxfUm9tYW5pYW5fQ3AxMjUwX0NTX0FTX0tJX1dJXG4gIFs5MF06ICdDUDEyNTAnLCAvLyBTUUxfUm9tYW5pYW5fQ3AxMjUwX0NJX0FTX0tJX1dJXG4gIFs5MV06ICdDUDEyNTAnLCAvLyBTUUxfQ3JvYXRpYW5fQ3AxMjUwX0NTX0FTX0tJX1dJXG4gIFs5Ml06ICdDUDEyNTAnLCAvLyBTUUxfQ3JvYXRpYW5fQ3AxMjUwX0NJX0FTX0tJX1dJXG4gIFs5M106ICdDUDEyNTAnLCAvLyBTUUxfU2xvdmFrX0NwMTI1MF9DU19BU19LSV9XSVxuICBbOTRdOiAnQ1AxMjUwJywgLy8gU1FMX1Nsb3Zha19DcDEyNTBfQ0lfQVNfS0lfV0lcbiAgWzk1XTogJ0NQMTI1MCcsIC8vIFNRTF9TbG92ZW5pYW5fQ3AxMjUwX0NTX0FTX0tJX1dJXG4gIFs5Nl06ICdDUDEyNTAnLCAvLyBTUUxfU2xvdmVuaWFuX0NwMTI1MF9DSV9BU19LSV9XSVxuICBbMTA0XTogJ0NQMTI1MScsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF8xMjUxX0JJTlxuICBbMTA1XTogJ0NQMTI1MScsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDEyNTFfQ1NfQVNcbiAgWzEwNl06ICdDUDEyNTEnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1AxMjUxX0NJX0FTXG4gIFsxMDddOiAnQ1AxMjUxJywgLy8gU1FMX1VrcmFpbmlhbl9DcDEyNTFfQ1NfQVNfS0lfV0lcbiAgWzEwOF06ICdDUDEyNTEnLCAvLyBTUUxfVWtyYWluaWFuX0NwMTI1MV9DSV9BU19LSV9XSVxuICBbMTEyXTogJ0NQMTI1MycsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF8xMjUzX0JJTlxuICBbMTEzXTogJ0NQMTI1MycsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDEyNTNfQ1NfQVNcbiAgWzExNF06ICdDUDEyNTMnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1AxMjUzX0NJX0FTXG4gIFsxMjBdOiAnQ1AxMjUzJywgLy8gU1FMX01peERpY3Rpb25fQ1AxMjUzX0NTX0FTXG4gIFsxMjFdOiAnQ1AxMjUzJywgLy8gU1FMX0FsdERpY3Rpb25fQ1AxMjUzX0NTX0FTXG4gIFsxMjJdOiAnQ1AxMjUzJywgLy8gU1FMX0FsdERpY3Rpb24yX0NQMTI1M19DU19BU1xuICBbMTI0XTogJ0NQMTI1MycsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDEyNTNfQ0lfQUlcbiAgWzEyOF06ICdDUDEyNTQnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfMTI1NF9CSU5cbiAgWzEyOV06ICdDUDEyNTQnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ3AxMjU0X0NTX0FTX0tJX1dJXG4gIFsxMzBdOiAnQ1AxMjU0JywgLy8gU1FMX0xhdGluMV9HZW5lcmFsX0NwMTI1NF9DSV9BU19LSV9XSVxuICBbMTM2XTogJ0NQMTI1NScsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF8xMjU1X0JJTlxuICBbMTM3XTogJ0NQMTI1NScsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDEyNTVfQ1NfQVNcbiAgWzEzOF06ICdDUDEyNTUnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1AxMjU1X0NJX0FTXG4gIFsxNDRdOiAnQ1AxMjU2JywgLy8gU1FMX0xhdGluMV9HZW5lcmFsXzEyNTZfQklOXG4gIFsxNDVdOiAnQ1AxMjU2JywgLy8gU1FMX0xhdGluMV9HZW5lcmFsX0NQMTI1Nl9DU19BU1xuICBbMTQ2XTogJ0NQMTI1NicsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDEyNTZfQ0lfQVNcbiAgWzE1Ml06ICdDUDEyNTcnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfMTI1N19CSU5cbiAgWzE1M106ICdDUDEyNTcnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1AxMjU3X0NTX0FTXG4gIFsxNTRdOiAnQ1AxMjU3JywgLy8gU1FMX0xhdGluMV9HZW5lcmFsX0NQMTI1N19DSV9BU1xuICBbMTU1XTogJ0NQMTI1NycsIC8vIFNRTF9Fc3Rvbmlhbl9DcDEyNTdfQ1NfQVNfS0lfV0lcbiAgWzE1Nl06ICdDUDEyNTcnLCAvLyBTUUxfRXN0b25pYW5fQ3AxMjU3X0NJX0FTX0tJX1dJXG4gIFsxNTddOiAnQ1AxMjU3JywgLy8gU1FMX0xhdHZpYW5fQ3AxMjU3X0NTX0FTX0tJX1dJXG4gIFsxNThdOiAnQ1AxMjU3JywgLy8gU1FMX0xhdHZpYW5fQ3AxMjU3X0NJX0FTX0tJX1dJXG4gIFsxNTldOiAnQ1AxMjU3JywgLy8gU1FMX0xpdGh1YW5pYW5fQ3AxMjU3X0NTX0FTX0tJX1dJXG4gIFsxNjBdOiAnQ1AxMjU3JywgLy8gU1FMX0xpdGh1YW5pYW5fQ3AxMjU3X0NJX0FTX0tJX1dJXG4gIFsxODNdOiAnQ1AxMjUyJywgLy8gU1FMX0RhbmlzaF9QcmVmX0NwMV9DSV9BU19LSV9XSVxuICBbMTg0XTogJ0NQMTI1MicsIC8vIFNRTF9Td2VkaXNoUGhvbmVfUHJlZl9DcDFfQ0lfQVNfS0lfV0lcbiAgWzE4NV06ICdDUDEyNTInLCAvLyBTUUxfU3dlZGlzaFN0ZF9QcmVmX0NwMV9DSV9BU19LSV9XSVxuICBbMTg2XTogJ0NQMTI1MicgLy8gU1FMX0ljZWxhbmRpY19QcmVmX0NwMV9DSV9BU19LSV9XSVxufTtcblxuZXhwb3J0IGNvbnN0IEZsYWdzID0ge1xuICBJR05PUkVfQ0FTRTogMSA8PCAwLFxuICBJR05PUkVfQUNDRU5UOiAxIDw8IDEsXG4gIElHTk9SRV9LQU5BOiAxIDw8IDIsXG4gIElHTk9SRV9XSURUSDogMSA8PCAzLFxuICBCSU5BUlk6IDEgPDwgNCxcbiAgQklOQVJZMjogMSA8PCA1LFxuICBVVEY4OiAxIDw8IDYsXG59O1xuXG5leHBvcnQgY2xhc3MgQ29sbGF0aW9uIHtcbiAgZGVjbGFyZSByZWFkb25seSBsY2lkOiBudW1iZXI7XG4gIGRlY2xhcmUgcmVhZG9ubHkgZmxhZ3M6IG51bWJlcjtcbiAgZGVjbGFyZSByZWFkb25seSB2ZXJzaW9uOiBudW1iZXI7XG4gIGRlY2xhcmUgcmVhZG9ubHkgc29ydElkOiBudW1iZXI7XG4gIGRlY2xhcmUgcmVhZG9ubHkgY29kZXBhZ2U6IEVuY29kaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGRlY2xhcmUgcHJpdmF0ZSBidWZmZXI6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcblxuICBzdGF0aWMgZnJvbUJ1ZmZlcihidWZmZXI6IEJ1ZmZlciwgb2Zmc2V0ID0gMCkge1xuICAgIGxldCBsY2lkID0gKGJ1ZmZlcltvZmZzZXQgKyAyXSAmIDB4MEYpIDw8IDE2O1xuICAgIGxjaWQgfD0gYnVmZmVyW29mZnNldCArIDFdIDw8IDg7XG4gICAgbGNpZCB8PSBidWZmZXJbb2Zmc2V0ICsgMF07XG5cbiAgICBsZXQgZmxhZ3MgPSAoYnVmZmVyW29mZnNldCArIDNdICYgMHgwRikgPDwgNDtcbiAgICBmbGFncyB8PSAoYnVmZmVyW29mZnNldCArIDJdICYgMHhGMCkgPj4+IDQ7XG5cbiAgICBjb25zdCB2ZXJzaW9uID0gKGJ1ZmZlcltvZmZzZXQgKyAzXSAmIDB4RjApID4+PiA0O1xuXG4gICAgY29uc3Qgc29ydElkID0gYnVmZmVyW29mZnNldCArIDRdO1xuXG4gICAgcmV0dXJuIG5ldyB0aGlzKGxjaWQsIGZsYWdzLCB2ZXJzaW9uLCBzb3J0SWQpO1xuICB9XG5cbiAgY29uc3RydWN0b3IobGNpZDogbnVtYmVyLCBmbGFnczogbnVtYmVyLCB2ZXJzaW9uOiBudW1iZXIsIHNvcnRJZDogbnVtYmVyKSB7XG4gICAgdGhpcy5idWZmZXIgPSB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLmxjaWQgPSBsY2lkO1xuICAgIHRoaXMuZmxhZ3MgPSBmbGFncztcbiAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uO1xuICAgIHRoaXMuc29ydElkID0gc29ydElkO1xuXG4gICAgaWYgKHRoaXMuZmxhZ3MgJiBGbGFncy5VVEY4KSB7XG4gICAgICB0aGlzLmNvZGVwYWdlID0gJ3V0Zi04JztcbiAgICB9IGVsc2UgaWYgKHRoaXMuc29ydElkKSB7XG4gICAgICB0aGlzLmNvZGVwYWdlID0gY29kZXBhZ2VCeVNvcnRJZFt0aGlzLnNvcnRJZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBsYXN0IDE2IGJpdHMgb2YgdGhlIExDSUQgYXJlIHRoZSBsYW5ndWFnZSBpZC5cbiAgICAgIC8vIFRoZSBmaXJzdCA0IGJpdHMgZGVmaW5lIGFkZGl0aW9uYWwgc29ydCBvcmRlcnMuXG4gICAgICBjb25zdCBsYW5ndWFnZUlkID0gdGhpcy5sY2lkICYgMHhGRkZGO1xuICAgICAgdGhpcy5jb2RlcGFnZSA9IGNvZGVwYWdlQnlMYW5ndWFnZUlkW2xhbmd1YWdlSWRdO1xuICAgIH1cbiAgfVxuXG4gIHRvQnVmZmVyKCk6IEJ1ZmZlciB7XG4gICAgaWYgKHRoaXMuYnVmZmVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5idWZmZXI7XG4gICAgfVxuXG4gICAgdGhpcy5idWZmZXIgPSBCdWZmZXIuYWxsb2MoNSk7XG5cbiAgICB0aGlzLmJ1ZmZlclswXSA9IHRoaXMubGNpZCAmIDB4RkY7XG4gICAgdGhpcy5idWZmZXJbMV0gPSAodGhpcy5sY2lkID4+PiA4KSAmIDB4RkY7XG4gICAgdGhpcy5idWZmZXJbMl0gPSAoKHRoaXMubGNpZCA+Pj4gMTYpICYgMHgwRikgfCAoKHRoaXMuZmxhZ3MgJiAweDBGKSA8PCA0KTtcbiAgICB0aGlzLmJ1ZmZlclszXSA9ICgodGhpcy5mbGFncyAmIDB4RjApID4+PiA0KSB8ICgodGhpcy52ZXJzaW9uICYgMHgwRikgPDwgNCk7XG4gICAgdGhpcy5idWZmZXJbNF0gPSB0aGlzLnNvcnRJZCAmIDB4RkY7XG5cbiAgICByZXR1cm4gdGhpcy5idWZmZXI7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUE7QUFDTyxNQUFNQSxvQkFBaUQsR0FBQUMsT0FBQSxDQUFBRCxvQkFBQSxHQUFHO0VBQy9EO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBO0VBQ0E7RUFDQTtFQUNBLENBQUMsTUFBTSxHQUFHLE9BQU87RUFFakI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0E7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0E7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBO0VBQ0E7RUFDQTtFQUNBLENBQUMsTUFBTSxHQUFHLE9BQU87RUFFakI7RUFDQTtFQUNBLENBQUMsTUFBTSxHQUFHLE9BQU87RUFFakI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLE9BQU87RUFFakI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQTtFQUNBO0VBQ0E7RUFDQSxDQUFDLE1BQU0sR0FBRyxPQUFPO0VBRWpCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLE9BQU87RUFFakI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsT0FBTztFQUVqQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0E7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUc7QUFDWixDQUFDO0FBRU0sTUFBTUUsZ0JBQTZDLEdBQUFELE9BQUEsQ0FBQUMsZ0JBQUEsR0FBRztFQUMzRCxDQUFDLEVBQUUsR0FBRyxPQUFPO0VBQUU7RUFDZixDQUFDLEVBQUUsR0FBRyxPQUFPO0VBQUU7RUFDZixDQUFDLEVBQUUsR0FBRyxPQUFPO0VBQUU7RUFDZixDQUFDLEVBQUUsR0FBRyxPQUFPO0VBQUU7RUFDZixDQUFDLEVBQUUsR0FBRyxPQUFPO0VBQUU7RUFDZixDQUFDLEVBQUUsR0FBRyxPQUFPO0VBQUU7RUFDZixDQUFDLEVBQUUsR0FBRyxPQUFPO0VBQUU7RUFDZixDQUFDLEVBQUUsR0FBRyxPQUFPO0VBQUU7RUFDZixDQUFDLEVBQUUsR0FBRyxPQUFPO0VBQUU7RUFDZixDQUFDLEVBQUUsR0FBRyxPQUFPO0VBQUU7RUFDZixDQUFDLEVBQUUsR0FBRyxPQUFPO0VBQUU7RUFDZixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEdBQUcsR0FBRyxRQUFRO0VBQUU7RUFDakIsQ0FBQyxHQUFHLEdBQUcsUUFBUTtFQUFFO0VBQ2pCLENBQUMsR0FBRyxHQUFHLFFBQVE7RUFBRTtFQUNqQixDQUFDLEdBQUcsR0FBRyxRQUFRO0VBQUU7RUFDakIsQ0FBQyxHQUFHLEdBQUcsUUFBUTtFQUFFO0VBQ2pCLENBQUMsR0FBRyxHQUFHLFFBQVE7RUFBRTtFQUNqQixDQUFDLEdBQUcsR0FBRyxRQUFRO0VBQUU7RUFDakIsQ0FBQyxHQUFHLEdBQUcsUUFBUTtFQUFFO0VBQ2pCLENBQUMsR0FBRyxHQUFHLFFBQVE7RUFBRTtFQUNqQixDQUFDLEdBQUcsR0FBRyxRQUFRO0VBQUU7RUFDakIsQ0FBQyxHQUFHLEdBQUcsUUFBUTtFQUFFO0VBQ2pCLENBQUMsR0FBRyxHQUFHLFFBQVE7RUFBRTtFQUNqQixDQUFDLEdBQUcsR0FBRyxRQUFRO0VBQUU7RUFDakIsQ0FBQyxHQUFHLEdBQUcsUUFBUTtFQUFFO0VBQ2pCLENBQUMsR0FBRyxHQUFHLFFBQVE7RUFBRTtFQUNqQixDQUFDLEdBQUcsR0FBRyxRQUFRO0VBQUU7RUFDakIsQ0FBQyxHQUFHLEdBQUcsUUFBUTtFQUFFO0VBQ2pCLENBQUMsR0FBRyxHQUFHLFFBQVE7RUFBRTtFQUNqQixDQUFDLEdBQUcsR0FBRyxRQUFRO0VBQUU7RUFDakIsQ0FBQyxHQUFHLEdBQUcsUUFBUTtFQUFFO0VBQ2pCLENBQUMsR0FBRyxHQUFHLFFBQVE7RUFBRTtFQUNqQixDQUFDLEdBQUcsR0FBRyxRQUFRO0VBQUU7RUFDakIsQ0FBQyxHQUFHLEdBQUcsUUFBUTtFQUFFO0VBQ2pCLENBQUMsR0FBRyxHQUFHLFFBQVE7RUFBRTtFQUNqQixDQUFDLEdBQUcsR0FBRyxRQUFRO0VBQUU7RUFDakIsQ0FBQyxHQUFHLEdBQUcsUUFBUTtFQUFFO0VBQ2pCLENBQUMsR0FBRyxHQUFHLFFBQVE7RUFBRTtFQUNqQixDQUFDLEdBQUcsR0FBRyxRQUFRO0VBQUU7RUFDakIsQ0FBQyxHQUFHLEdBQUcsUUFBUTtFQUFFO0VBQ2pCLENBQUMsR0FBRyxHQUFHLFFBQVE7RUFBRTtFQUNqQixDQUFDLEdBQUcsR0FBRyxRQUFRO0VBQUU7RUFDakIsQ0FBQyxHQUFHLEdBQUcsUUFBUTtFQUFFO0VBQ2pCLENBQUMsR0FBRyxHQUFHLFFBQVE7RUFBRTtFQUNqQixDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVNLE1BQU1DLEtBQUssR0FBQUYsT0FBQSxDQUFBRSxLQUFBLEdBQUc7RUFDbkJDLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQztFQUNuQkMsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ3JCQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDbkJDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQztFQUNwQkMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2RDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQztFQUNmQyxJQUFJLEVBQUUsQ0FBQyxJQUFJO0FBQ2IsQ0FBQztBQUVNLE1BQU1DLFNBQVMsQ0FBQztFQVNyQixPQUFPQyxVQUFVQSxDQUFDQyxNQUFjLEVBQUVDLE1BQU0sR0FBRyxDQUFDLEVBQUU7SUFDNUMsSUFBSUMsSUFBSSxHQUFHLENBQUNGLE1BQU0sQ0FBQ0MsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxFQUFFO0lBQzVDQyxJQUFJLElBQUlGLE1BQU0sQ0FBQ0MsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDL0JDLElBQUksSUFBSUYsTUFBTSxDQUFDQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRTFCLElBQUlFLEtBQUssR0FBRyxDQUFDSCxNQUFNLENBQUNDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztJQUM1Q0UsS0FBSyxJQUFJLENBQUNILE1BQU0sQ0FBQ0MsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDO0lBRTFDLE1BQU1HLE9BQU8sR0FBRyxDQUFDSixNQUFNLENBQUNDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQztJQUVqRCxNQUFNSSxNQUFNLEdBQUdMLE1BQU0sQ0FBQ0MsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVqQyxPQUFPLElBQUksSUFBSSxDQUFDQyxJQUFJLEVBQUVDLEtBQUssRUFBRUMsT0FBTyxFQUFFQyxNQUFNLENBQUM7RUFDL0M7RUFFQUMsV0FBV0EsQ0FBQ0osSUFBWSxFQUFFQyxLQUFhLEVBQUVDLE9BQWUsRUFBRUMsTUFBYyxFQUFFO0lBQ3hFLElBQUksQ0FBQ0wsTUFBTSxHQUFHTyxTQUFTO0lBRXZCLElBQUksQ0FBQ0wsSUFBSSxHQUFHQSxJQUFJO0lBQ2hCLElBQUksQ0FBQ0MsS0FBSyxHQUFHQSxLQUFLO0lBQ2xCLElBQUksQ0FBQ0MsT0FBTyxHQUFHQSxPQUFPO0lBQ3RCLElBQUksQ0FBQ0MsTUFBTSxHQUFHQSxNQUFNO0lBRXBCLElBQUksSUFBSSxDQUFDRixLQUFLLEdBQUdiLEtBQUssQ0FBQ08sSUFBSSxFQUFFO01BQzNCLElBQUksQ0FBQ1csUUFBUSxHQUFHLE9BQU87SUFDekIsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDSCxNQUFNLEVBQUU7TUFDdEIsSUFBSSxDQUFDRyxRQUFRLEdBQUduQixnQkFBZ0IsQ0FBQyxJQUFJLENBQUNnQixNQUFNLENBQUM7SUFDL0MsQ0FBQyxNQUFNO01BQ0w7TUFDQTtNQUNBLE1BQU1JLFVBQVUsR0FBRyxJQUFJLENBQUNQLElBQUksR0FBRyxNQUFNO01BQ3JDLElBQUksQ0FBQ00sUUFBUSxHQUFHckIsb0JBQW9CLENBQUNzQixVQUFVLENBQUM7SUFDbEQ7RUFDRjtFQUVBQyxRQUFRQSxDQUFBLEVBQVc7SUFDakIsSUFBSSxJQUFJLENBQUNWLE1BQU0sRUFBRTtNQUNmLE9BQU8sSUFBSSxDQUFDQSxNQUFNO0lBQ3BCO0lBRUEsSUFBSSxDQUFDQSxNQUFNLEdBQUdXLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUU3QixJQUFJLENBQUNaLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUNFLElBQUksR0FBRyxJQUFJO0lBQ2pDLElBQUksQ0FBQ0YsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFJLElBQUksQ0FBQ0UsSUFBSSxLQUFLLENBQUMsR0FBSSxJQUFJO0lBQ3pDLElBQUksQ0FBQ0YsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFLLElBQUksQ0FBQ0UsSUFBSSxLQUFLLEVBQUUsR0FBSSxJQUFJLEdBQUssQ0FBQyxJQUFJLENBQUNDLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBRTtJQUN6RSxJQUFJLENBQUNILE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBSSxDQUFDLElBQUksQ0FBQ0csS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUssQ0FBQyxJQUFJLENBQUNDLE9BQU8sR0FBRyxJQUFJLEtBQUssQ0FBRTtJQUMzRSxJQUFJLENBQUNKLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUNLLE1BQU0sR0FBRyxJQUFJO0lBRW5DLE9BQU8sSUFBSSxDQUFDTCxNQUFNO0VBQ3BCO0FBQ0Y7QUFBQ1osT0FBQSxDQUFBVSxTQUFBLEdBQUFBLFNBQUEifQ==
348
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb2RlcGFnZUJ5TGFuZ3VhZ2VJZCIsImV4cG9ydHMiLCJjb2RlcGFnZUJ5U29ydElkIiwiRmxhZ3MiLCJJR05PUkVfQ0FTRSIsIklHTk9SRV9BQ0NFTlQiLCJJR05PUkVfS0FOQSIsIklHTk9SRV9XSURUSCIsIkJJTkFSWSIsIkJJTkFSWTIiLCJVVEY4IiwiQ29sbGF0aW9uIiwiZnJvbUJ1ZmZlciIsImJ1ZmZlciIsIm9mZnNldCIsImxjaWQiLCJmbGFncyIsInZlcnNpb24iLCJzb3J0SWQiLCJjb25zdHJ1Y3RvciIsInVuZGVmaW5lZCIsImNvZGVwYWdlIiwibGFuZ3VhZ2VJZCIsInRvQnVmZmVyIiwiQnVmZmVyIiwiYWxsb2MiXSwic291cmNlcyI6WyIuLi9zcmMvY29sbGF0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbInR5cGUgRW5jb2RpbmcgPSAndXRmLTgnIHwgJ0NQNDM3JyB8ICdDUDg1MCcgfCAnQ1A4NzQnIHwgJ0NQOTMyJyB8ICdDUDkzNicgfCAnQ1A5NDknIHwgJ0NQOTUwJyB8ICdDUDEyNTAnIHwgJ0NQMTI1MScgfCAnQ1AxMjUyJyB8ICdDUDEyNTMnIHwgJ0NQMTI1NCcgfCAnQ1AxMjU1JyB8ICdDUDEyNTYnIHwgJ0NQMTI1NycgfCAnQ1AxMjU4JztcblxuLy8gaHR0cDovL3RlY2huZXQubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2FhMTc2NTUzKHY9c3FsLjgwKS5hc3B4XG5leHBvcnQgY29uc3QgY29kZXBhZ2VCeUxhbmd1YWdlSWQ6IHsgW2tleTogbnVtYmVyXTogRW5jb2RpbmcgfSA9IHtcbiAgLy8gQXJhYmljXypcbiAgWzB4MDQwMV06ICdDUDEyNTYnLFxuXG4gIC8vIENoaW5lc2VfVGFpd2FuX1N0cm9rZV8qXG4gIC8vIENoaW5lc2VfVHJhZGl0aW9uYWxfU3Ryb2tlX0NvdW50XypcbiAgLy8gQ2hpbmVzZV9UYWl3YW5fQm9wb21vZm9fKlxuICAvLyBDaGluZXNlX1RyYWRpdGlvbmFsX0JvcG9tb2ZvXypcbiAgWzB4MDQwNF06ICdDUDk1MCcsXG5cbiAgLy8gQ3plY2hfKlxuICBbMHgwNDA1XTogJ0NQMTI1MCcsXG5cbiAgLy8gRGFuaXNoX0dyZWVubGFuZGljXypcbiAgLy8gRGFuaXNoX05vcndlZ2lhbl8qXG4gIFsweDA0MDZdOiAnQ1AxMjUyJyxcblxuICAvLyBHcmVla18qXG4gIFsweDA0MDhdOiAnQ1AxMjUzJyxcblxuICAvLyBMYXRpbjFfR2VuZXJhbF8qXG4gIFsweDA0MDldOiAnQ1AxMjUyJyxcblxuICAvLyBUcmFkaXRpb25hbF9TcGFuaXNoXypcbiAgWzB4MDQwQV06ICdDUDEyNTInLFxuXG4gIC8vIEZpbm5pc2hfU3dlZGlzaF8qXG4gIFsweDA0MEJdOiAnQ1AxMjUyJyxcblxuICAvLyBGcmVuY2hfKlxuICBbMHgwNDBDXTogJ0NQMTI1MicsXG5cbiAgLy8gSGVicmV3XypcbiAgWzB4MDQwRF06ICdDUDEyNTUnLFxuXG4gIC8vIEh1bmdhcmlhbl8qXG4gIC8vIEh1bmdhcmlhbl9UZWNobmljYWxfKlxuICBbMHgwNDBFXTogJ0NQMTI1MCcsXG5cbiAgLy8gSWNlbGFuZGljXypcbiAgWzB4MDQwRl06ICdDUDEyNTInLFxuXG4gIC8vIEphcGFuZXNlXypcbiAgLy8gSmFwYW5lc2VfWEpJU18qXG4gIC8vIEphcGFuZXNlX1VuaWNvZGVfKlxuICAvLyBKYXBhbmVzZV9CdXNodV9LYWt1c3VfKlxuICBbMHgwNDExXTogJ0NQOTMyJyxcblxuICAvLyBLb3JlYW5fKlxuICAvLyBLb3JlYW5fV2Fuc3VuZ18qXG4gIFsweDA0MTJdOiAnQ1A5NDknLFxuXG4gIC8vIE5vcndlZ2lhbl8qXG4gIFsweDA0MTRdOiAnQ1AxMjUyJyxcblxuICAvLyBQb2xpc2hfKlxuICBbMHgwNDE1XTogJ0NQMTI1MCcsXG5cbiAgLy8gUm9tYW5zaF8qXG4gIFsweDA0MTddOiAnQ1AxMjUyJyxcblxuICAvLyBSb21hbmlhbl8qXG4gIFsweDA0MThdOiAnQ1AxMjUwJyxcblxuICAvLyBDeXJpbGxpY18qXG4gIFsweDA0MTldOiAnQ1AxMjUxJyxcblxuICAvLyBDcm9hdGlhbl8qXG4gIFsweDA0MUFdOiAnQ1AxMjUwJyxcblxuICAvLyBTbG92YWtfKlxuICBbMHgwNDFCXTogJ0NQMTI1MCcsXG5cbiAgLy8gQWxiYW5pYW5fKlxuICBbMHgwNDFDXTogJ0NQMTI1MCcsXG5cbiAgLy8gVGhhaV8qXG4gIFsweDA0MUVdOiAnQ1A4NzQnLFxuXG4gIC8vIFR1cmtpc2hfKlxuICBbMHgwNDFGXTogJ0NQMTI1NCcsXG5cbiAgLy8gVXJkdV8qXG4gIFsweDA0MjBdOiAnQ1AxMjU2JyxcblxuICAvLyBVa3JhaW5pYW5fKlxuICBbMHgwNDIyXTogJ0NQMTI1MScsXG5cbiAgLy8gU2xvdmVuaWFuXypcbiAgWzB4MDQyNF06ICdDUDEyNTAnLFxuXG4gIC8vIEVzdG9uaWFuXypcbiAgWzB4MDQyNV06ICdDUDEyNTcnLFxuXG4gIC8vIExhdHZpYW5fKlxuICBbMHgwNDI2XTogJ0NQMTI1NycsXG5cbiAgLy8gTGl0aHVhbmlhbl8qXG4gIFsweDA0MjddOiAnQ1AxMjU3JyxcblxuICAvLyBQZXJzaWFuXypcbiAgWzB4MDQyOV06ICdDUDEyNTYnLFxuXG4gIC8vIFZpZXRuYW1lc2VfKlxuICBbMHgwNDJBXTogJ0NQMTI1OCcsXG5cbiAgLy8gQXplcmlfTGF0aW5fKlxuICBbMHgwNDJDXTogJ0NQMTI1NCcsXG5cbiAgLy8gVXBwZXJfU29yYmlhbl8qXG4gIFsweDA0MkVdOiAnQ1AxMjUyJyxcblxuICAvLyBNYWNlZG9uaWFuX0ZZUk9NXypcbiAgWzB4MDQyRl06ICdDUDEyNTEnLFxuXG4gIC8vIFNhbWlfTm9yd2F5XypcbiAgWzB4MDQzQl06ICdDUDEyNTInLFxuXG4gIC8vIEthemFraF8qXG4gIFsweDA0M0ZdOiAnQ1AxMjUxJyxcblxuICAvLyBUdXJrbWVuXypcbiAgWzB4MDQ0Ml06ICdDUDEyNTAnLFxuXG4gIC8vIFV6YmVrX0xhdGluXypcbiAgWzB4MDQ0M106ICdDUDEyNTQnLFxuXG4gIC8vIFRhdGFyXypcbiAgWzB4MDQ0NF06ICdDUDEyNTEnLFxuXG4gIC8vIFdlbHNoXypcbiAgWzB4MDQ1Ml06ICdDUDEyNTInLFxuXG4gIC8vIEZyaXNpYW5fKlxuICBbMHgwNDYyXTogJ0NQMTI1MicsXG5cbiAgLy8gQmFzaGtpcl8qXG4gIFsweDA0NkRdOiAnQ1AxMjUxJyxcblxuICAvLyBNYXB1ZHVuZ2FuXypcbiAgWzB4MDQ3QV06ICdDUDEyNTInLFxuXG4gIC8vIE1vaGF3a18qXG4gIFsweDA0N0NdOiAnQ1AxMjUyJyxcblxuICAvLyBCcmV0b25fKlxuICBbMHgwNDdFXTogJ0NQMTI1MicsXG5cbiAgLy8gVWlnaHVyXypcbiAgWzB4MDQ4MF06ICdDUDEyNTYnLFxuXG4gIC8vIENvcnNpY2FuXypcbiAgWzB4MDQ4M106ICdDUDEyNTInLFxuXG4gIC8vIFlha3V0XypcbiAgWzB4MDQ4NV06ICdDUDEyNTEnLFxuXG4gIC8vIERhcmlfKlxuICBbMHgwNDhDXTogJ0NQMTI1NicsXG5cbiAgLy8gQ2hpbmVzZV9QUkNfKlxuICAvLyBDaGluZXNlX1NpbXBsaWZpZWRfUGlueWluXypcbiAgLy8gQ2hpbmVzZV9QUkNfU3Ryb2tlXypcbiAgLy8gQ2hpbmVzZV9TaW1wbGlmaWVkX1N0cm9rZV9PcmRlcl8qXG4gIFsweDA4MDRdOiAnQ1A5MzYnLFxuXG4gIC8vIFNlcmJpYW5fTGF0aW5fKlxuICBbMHgwODFBXTogJ0NQMTI1MCcsXG5cbiAgLy8gQXplcmlfQ3lyaWxsaWNfKlxuICBbMHgwODJDXTogJ0NQMTI1MScsXG5cbiAgLy8gU2FtaV9Td2VkZW5fRmlubGFuZF8qXG4gIFsweDA4M0JdOiAnQ1AxMjUyJyxcblxuICAvLyBUYW1hemlnaHRfKlxuICBbMHgwODVGXTogJ0NQMTI1MicsXG5cbiAgLy8gQ2hpbmVzZV9Ib25nX0tvbmdfU3Ryb2tlXypcbiAgWzB4MEMwNF06ICdDUDk1MCcsXG5cbiAgLy8gTW9kZXJuX1NwYW5pc2hfKlxuICBbMHgwQzBBXTogJ0NQMTI1MicsXG5cbiAgLy8gU2VyYmlhbl9DeXJpbGxpY18qXG4gIFsweDBDMUFdOiAnQ1AxMjUxJyxcblxuICAvLyBDaGluZXNlX1RyYWRpdGlvbmFsX1Bpbnlpbl8qXG4gIC8vIENoaW5lc2VfVHJhZGl0aW9uYWxfU3Ryb2tlX09yZGVyXypcbiAgWzB4MTQwNF06ICdDUDk1MCcsXG5cbiAgLy8gQm9zbmlhbl9MYXRpbl8qXG4gIFsweDE0MUFdOiAnQ1AxMjUwJyxcblxuICAvLyBCb3NuaWFuX0N5cmlsbGljXypcbiAgWzB4MjAxQV06ICdDUDEyNTEnLFxuXG4gIC8vIEdlcm1hblxuICAvLyBHZXJtYW5fUGhvbmVCb29rXypcbiAgWzB4MDQwN106ICdDUDEyNTInLFxuXG4gIC8vIEdlb3JnaWFuX01vZGVybl9Tb3J0XypcbiAgWzB4MDQzN106ICdDUDEyNTInXG59O1xuXG5leHBvcnQgY29uc3QgY29kZXBhZ2VCeVNvcnRJZDogeyBba2V5OiBudW1iZXJdOiBFbmNvZGluZyB9ID0ge1xuICBbMzBdOiAnQ1A0MzcnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1A0MzdfQklOXG4gIFszMV06ICdDUDQzNycsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDQzN19DU19BU1xuICBbMzJdOiAnQ1A0MzcnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1A0MzdfQ0lfQVNcbiAgWzMzXTogJ0NQNDM3JywgLy8gU1FMX0xhdGluMV9HZW5lcmFsX1ByZWZfQ1A0MzdfQ0lfQVNcbiAgWzM0XTogJ0NQNDM3JywgLy8gU1FMX0xhdGluMV9HZW5lcmFsX0NQNDM3X0NJX0FJXG4gIFs0MF06ICdDUDg1MCcsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDg1MF9CSU5cbiAgWzQxXTogJ0NQODUwJywgLy8gU1FMX0xhdGluMV9HZW5lcmFsX0NQODUwX0NTX0FTXG4gIFs0Ml06ICdDUDg1MCcsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDg1MF9DSV9BU1xuICBbNDNdOiAnQ1A4NTAnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfUHJlZl9DUDg1MF9DSV9BU1xuICBbNDRdOiAnQ1A4NTAnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1A4NTBfQ0lfQUlcbiAgWzQ5XTogJ0NQODUwJywgLy8gU1FMXzF4Q29tcGF0X0NQODUwX0NJX0FTXG4gIFs1MV06ICdDUDEyNTInLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ3AxX0NTX0FTX0tJX1dJXG4gIFs1Ml06ICdDUDEyNTInLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ3AxX0NJX0FTX0tJX1dJXG4gIFs1M106ICdDUDEyNTInLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfUHJlZl9DcDFfQ0lfQVNfS0lfV0lcbiAgWzU0XTogJ0NQMTI1MicsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DcDFfQ0lfQUlfS0lfV0lcbiAgWzU1XTogJ0NQODUwJywgLy8gU1FMX0FsdERpY3Rpb25fQ1A4NTBfQ1NfQVNcbiAgWzU2XTogJ0NQODUwJywgLy8gU1FMX0FsdERpY3Rpb25fUHJlZl9DUDg1MF9DSV9BU1xuICBbNTddOiAnQ1A4NTAnLCAvLyBTUUxfQWx0RGljdGlvbl9DUDg1MF9DSV9BSVxuICBbNThdOiAnQ1A4NTAnLCAvLyBTUUxfU2NhbmRpbmF2aWFuX1ByZWZfQ1A4NTBfQ0lfQVNcbiAgWzU5XTogJ0NQODUwJywgLy8gU1FMX1NjYW5kaW5hdmlhbl9DUDg1MF9DU19BU1xuICBbNjBdOiAnQ1A4NTAnLCAvLyBTUUxfU2NhbmRpbmF2aWFuX0NQODUwX0NJX0FTXG4gIFs2MV06ICdDUDg1MCcsIC8vIFNRTF9BbHREaWN0aW9uX0NQODUwX0NJX0FTXG4gIFs4MF06ICdDUDEyNTAnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfMTI1MF9CSU5cbiAgWzgxXTogJ0NQMTI1MCcsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDEyNTBfQ1NfQVNcbiAgWzgyXTogJ0NQMTI1MCcsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DcDEyNTBfQ0lfQVNfS0lfV0lcbiAgWzgzXTogJ0NQMTI1MCcsIC8vIFNRTF9DemVjaF9DcDEyNTBfQ1NfQVNfS0lfV0lcbiAgWzg0XTogJ0NQMTI1MCcsIC8vIFNRTF9DemVjaF9DcDEyNTBfQ0lfQVNfS0lfV0lcbiAgWzg1XTogJ0NQMTI1MCcsIC8vIFNRTF9IdW5nYXJpYW5fQ3AxMjUwX0NTX0FTX0tJX1dJXG4gIFs4Nl06ICdDUDEyNTAnLCAvLyBTUUxfSHVuZ2FyaWFuX0NwMTI1MF9DSV9BU19LSV9XSVxuICBbODddOiAnQ1AxMjUwJywgLy8gU1FMX1BvbGlzaF9DcDEyNTBfQ1NfQVNfS0lfV0lcbiAgWzg4XTogJ0NQMTI1MCcsIC8vIFNRTF9Qb2xpc2hfQ3AxMjUwX0NJX0FTX0tJX1dJXG4gIFs4OV06ICdDUDEyNTAnLCAvLyBTUUxfUm9tYW5pYW5fQ3AxMjUwX0NTX0FTX0tJX1dJXG4gIFs5MF06ICdDUDEyNTAnLCAvLyBTUUxfUm9tYW5pYW5fQ3AxMjUwX0NJX0FTX0tJX1dJXG4gIFs5MV06ICdDUDEyNTAnLCAvLyBTUUxfQ3JvYXRpYW5fQ3AxMjUwX0NTX0FTX0tJX1dJXG4gIFs5Ml06ICdDUDEyNTAnLCAvLyBTUUxfQ3JvYXRpYW5fQ3AxMjUwX0NJX0FTX0tJX1dJXG4gIFs5M106ICdDUDEyNTAnLCAvLyBTUUxfU2xvdmFrX0NwMTI1MF9DU19BU19LSV9XSVxuICBbOTRdOiAnQ1AxMjUwJywgLy8gU1FMX1Nsb3Zha19DcDEyNTBfQ0lfQVNfS0lfV0lcbiAgWzk1XTogJ0NQMTI1MCcsIC8vIFNRTF9TbG92ZW5pYW5fQ3AxMjUwX0NTX0FTX0tJX1dJXG4gIFs5Nl06ICdDUDEyNTAnLCAvLyBTUUxfU2xvdmVuaWFuX0NwMTI1MF9DSV9BU19LSV9XSVxuICBbMTA0XTogJ0NQMTI1MScsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF8xMjUxX0JJTlxuICBbMTA1XTogJ0NQMTI1MScsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDEyNTFfQ1NfQVNcbiAgWzEwNl06ICdDUDEyNTEnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1AxMjUxX0NJX0FTXG4gIFsxMDddOiAnQ1AxMjUxJywgLy8gU1FMX1VrcmFpbmlhbl9DcDEyNTFfQ1NfQVNfS0lfV0lcbiAgWzEwOF06ICdDUDEyNTEnLCAvLyBTUUxfVWtyYWluaWFuX0NwMTI1MV9DSV9BU19LSV9XSVxuICBbMTEyXTogJ0NQMTI1MycsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF8xMjUzX0JJTlxuICBbMTEzXTogJ0NQMTI1MycsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDEyNTNfQ1NfQVNcbiAgWzExNF06ICdDUDEyNTMnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1AxMjUzX0NJX0FTXG4gIFsxMjBdOiAnQ1AxMjUzJywgLy8gU1FMX01peERpY3Rpb25fQ1AxMjUzX0NTX0FTXG4gIFsxMjFdOiAnQ1AxMjUzJywgLy8gU1FMX0FsdERpY3Rpb25fQ1AxMjUzX0NTX0FTXG4gIFsxMjJdOiAnQ1AxMjUzJywgLy8gU1FMX0FsdERpY3Rpb24yX0NQMTI1M19DU19BU1xuICBbMTI0XTogJ0NQMTI1MycsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDEyNTNfQ0lfQUlcbiAgWzEyOF06ICdDUDEyNTQnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfMTI1NF9CSU5cbiAgWzEyOV06ICdDUDEyNTQnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ3AxMjU0X0NTX0FTX0tJX1dJXG4gIFsxMzBdOiAnQ1AxMjU0JywgLy8gU1FMX0xhdGluMV9HZW5lcmFsX0NwMTI1NF9DSV9BU19LSV9XSVxuICBbMTM2XTogJ0NQMTI1NScsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF8xMjU1X0JJTlxuICBbMTM3XTogJ0NQMTI1NScsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDEyNTVfQ1NfQVNcbiAgWzEzOF06ICdDUDEyNTUnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1AxMjU1X0NJX0FTXG4gIFsxNDRdOiAnQ1AxMjU2JywgLy8gU1FMX0xhdGluMV9HZW5lcmFsXzEyNTZfQklOXG4gIFsxNDVdOiAnQ1AxMjU2JywgLy8gU1FMX0xhdGluMV9HZW5lcmFsX0NQMTI1Nl9DU19BU1xuICBbMTQ2XTogJ0NQMTI1NicsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDEyNTZfQ0lfQVNcbiAgWzE1Ml06ICdDUDEyNTcnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfMTI1N19CSU5cbiAgWzE1M106ICdDUDEyNTcnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1AxMjU3X0NTX0FTXG4gIFsxNTRdOiAnQ1AxMjU3JywgLy8gU1FMX0xhdGluMV9HZW5lcmFsX0NQMTI1N19DSV9BU1xuICBbMTU1XTogJ0NQMTI1NycsIC8vIFNRTF9Fc3Rvbmlhbl9DcDEyNTdfQ1NfQVNfS0lfV0lcbiAgWzE1Nl06ICdDUDEyNTcnLCAvLyBTUUxfRXN0b25pYW5fQ3AxMjU3X0NJX0FTX0tJX1dJXG4gIFsxNTddOiAnQ1AxMjU3JywgLy8gU1FMX0xhdHZpYW5fQ3AxMjU3X0NTX0FTX0tJX1dJXG4gIFsxNThdOiAnQ1AxMjU3JywgLy8gU1FMX0xhdHZpYW5fQ3AxMjU3X0NJX0FTX0tJX1dJXG4gIFsxNTldOiAnQ1AxMjU3JywgLy8gU1FMX0xpdGh1YW5pYW5fQ3AxMjU3X0NTX0FTX0tJX1dJXG4gIFsxNjBdOiAnQ1AxMjU3JywgLy8gU1FMX0xpdGh1YW5pYW5fQ3AxMjU3X0NJX0FTX0tJX1dJXG4gIFsxODNdOiAnQ1AxMjUyJywgLy8gU1FMX0RhbmlzaF9QcmVmX0NwMV9DSV9BU19LSV9XSVxuICBbMTg0XTogJ0NQMTI1MicsIC8vIFNRTF9Td2VkaXNoUGhvbmVfUHJlZl9DcDFfQ0lfQVNfS0lfV0lcbiAgWzE4NV06ICdDUDEyNTInLCAvLyBTUUxfU3dlZGlzaFN0ZF9QcmVmX0NwMV9DSV9BU19LSV9XSVxuICBbMTg2XTogJ0NQMTI1MicgLy8gU1FMX0ljZWxhbmRpY19QcmVmX0NwMV9DSV9BU19LSV9XSVxufTtcblxuZXhwb3J0IGNvbnN0IEZsYWdzID0ge1xuICBJR05PUkVfQ0FTRTogMSA8PCAwLFxuICBJR05PUkVfQUNDRU5UOiAxIDw8IDEsXG4gIElHTk9SRV9LQU5BOiAxIDw8IDIsXG4gIElHTk9SRV9XSURUSDogMSA8PCAzLFxuICBCSU5BUlk6IDEgPDwgNCxcbiAgQklOQVJZMjogMSA8PCA1LFxuICBVVEY4OiAxIDw8IDYsXG59O1xuXG5leHBvcnQgY2xhc3MgQ29sbGF0aW9uIHtcbiAgZGVjbGFyZSByZWFkb25seSBsY2lkOiBudW1iZXI7XG4gIGRlY2xhcmUgcmVhZG9ubHkgZmxhZ3M6IG51bWJlcjtcbiAgZGVjbGFyZSByZWFkb25seSB2ZXJzaW9uOiBudW1iZXI7XG4gIGRlY2xhcmUgcmVhZG9ubHkgc29ydElkOiBudW1iZXI7XG4gIGRlY2xhcmUgcmVhZG9ubHkgY29kZXBhZ2U6IEVuY29kaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGRlY2xhcmUgcHJpdmF0ZSBidWZmZXI6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcblxuICBzdGF0aWMgZnJvbUJ1ZmZlcihidWZmZXI6IEJ1ZmZlciwgb2Zmc2V0ID0gMCkge1xuICAgIGxldCBsY2lkID0gKGJ1ZmZlcltvZmZzZXQgKyAyXSAmIDB4MEYpIDw8IDE2O1xuICAgIGxjaWQgfD0gYnVmZmVyW29mZnNldCArIDFdIDw8IDg7XG4gICAgbGNpZCB8PSBidWZmZXJbb2Zmc2V0ICsgMF07XG5cbiAgICBsZXQgZmxhZ3MgPSAoYnVmZmVyW29mZnNldCArIDNdICYgMHgwRikgPDwgNDtcbiAgICBmbGFncyB8PSAoYnVmZmVyW29mZnNldCArIDJdICYgMHhGMCkgPj4+IDQ7XG5cbiAgICBjb25zdCB2ZXJzaW9uID0gKGJ1ZmZlcltvZmZzZXQgKyAzXSAmIDB4RjApID4+PiA0O1xuXG4gICAgY29uc3Qgc29ydElkID0gYnVmZmVyW29mZnNldCArIDRdO1xuXG4gICAgcmV0dXJuIG5ldyB0aGlzKGxjaWQsIGZsYWdzLCB2ZXJzaW9uLCBzb3J0SWQpO1xuICB9XG5cbiAgY29uc3RydWN0b3IobGNpZDogbnVtYmVyLCBmbGFnczogbnVtYmVyLCB2ZXJzaW9uOiBudW1iZXIsIHNvcnRJZDogbnVtYmVyKSB7XG4gICAgdGhpcy5idWZmZXIgPSB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLmxjaWQgPSBsY2lkO1xuICAgIHRoaXMuZmxhZ3MgPSBmbGFncztcbiAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uO1xuICAgIHRoaXMuc29ydElkID0gc29ydElkO1xuXG4gICAgaWYgKHRoaXMuZmxhZ3MgJiBGbGFncy5VVEY4KSB7XG4gICAgICB0aGlzLmNvZGVwYWdlID0gJ3V0Zi04JztcbiAgICB9IGVsc2UgaWYgKHRoaXMuc29ydElkKSB7XG4gICAgICB0aGlzLmNvZGVwYWdlID0gY29kZXBhZ2VCeVNvcnRJZFt0aGlzLnNvcnRJZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBsYXN0IDE2IGJpdHMgb2YgdGhlIExDSUQgYXJlIHRoZSBsYW5ndWFnZSBpZC5cbiAgICAgIC8vIFRoZSBmaXJzdCA0IGJpdHMgZGVmaW5lIGFkZGl0aW9uYWwgc29ydCBvcmRlcnMuXG4gICAgICBjb25zdCBsYW5ndWFnZUlkID0gdGhpcy5sY2lkICYgMHhGRkZGO1xuICAgICAgdGhpcy5jb2RlcGFnZSA9IGNvZGVwYWdlQnlMYW5ndWFnZUlkW2xhbmd1YWdlSWRdO1xuICAgIH1cbiAgfVxuXG4gIHRvQnVmZmVyKCk6IEJ1ZmZlciB7XG4gICAgaWYgKHRoaXMuYnVmZmVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5idWZmZXI7XG4gICAgfVxuXG4gICAgdGhpcy5idWZmZXIgPSBCdWZmZXIuYWxsb2MoNSk7XG5cbiAgICB0aGlzLmJ1ZmZlclswXSA9IHRoaXMubGNpZCAmIDB4RkY7XG4gICAgdGhpcy5idWZmZXJbMV0gPSAodGhpcy5sY2lkID4+PiA4KSAmIDB4RkY7XG4gICAgdGhpcy5idWZmZXJbMl0gPSAoKHRoaXMubGNpZCA+Pj4gMTYpICYgMHgwRikgfCAoKHRoaXMuZmxhZ3MgJiAweDBGKSA8PCA0KTtcbiAgICB0aGlzLmJ1ZmZlclszXSA9ICgodGhpcy5mbGFncyAmIDB4RjApID4+PiA0KSB8ICgodGhpcy52ZXJzaW9uICYgMHgwRikgPDwgNCk7XG4gICAgdGhpcy5idWZmZXJbNF0gPSB0aGlzLnNvcnRJZCAmIDB4RkY7XG5cbiAgICByZXR1cm4gdGhpcy5idWZmZXI7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUE7QUFDTyxNQUFNQSxvQkFBaUQsR0FBQUMsT0FBQSxDQUFBRCxvQkFBQSxHQUFHO0VBQy9EO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBO0VBQ0E7RUFDQTtFQUNBLENBQUMsTUFBTSxHQUFHLE9BQU87RUFFakI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0E7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0E7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBO0VBQ0E7RUFDQTtFQUNBLENBQUMsTUFBTSxHQUFHLE9BQU87RUFFakI7RUFDQTtFQUNBLENBQUMsTUFBTSxHQUFHLE9BQU87RUFFakI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLE9BQU87RUFFakI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQTtFQUNBO0VBQ0E7RUFDQSxDQUFDLE1BQU0sR0FBRyxPQUFPO0VBRWpCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLE9BQU87RUFFakI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsT0FBTztFQUVqQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0E7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUc7QUFDWixDQUFDO0FBRU0sTUFBTUUsZ0JBQTZDLEdBQUFELE9BQUEsQ0FBQUMsZ0JBQUEsR0FBRztFQUMzRCxDQUFDLEVBQUUsR0FBRyxPQUFPO0VBQUU7RUFDZixDQUFDLEVBQUUsR0FBRyxPQUFPO0VBQUU7RUFDZixDQUFDLEVBQUUsR0FBRyxPQUFPO0VBQUU7RUFDZixDQUFDLEVBQUUsR0FBRyxPQUFPO0VBQUU7RUFDZixDQUFDLEVBQUUsR0FBRyxPQUFPO0VBQUU7RUFDZixDQUFDLEVBQUUsR0FBRyxPQUFPO0VBQUU7RUFDZixDQUFDLEVBQUUsR0FBRyxPQUFPO0VBQUU7RUFDZixDQUFDLEVBQUUsR0FBRyxPQUFPO0VBQUU7RUFDZixDQUFDLEVBQUUsR0FBRyxPQUFPO0VBQUU7RUFDZixDQUFDLEVBQUUsR0FBRyxPQUFPO0VBQUU7RUFDZixDQUFDLEVBQUUsR0FBRyxPQUFPO0VBQUU7RUFDZixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEdBQUcsR0FBRyxRQUFRO0VBQUU7RUFDakIsQ0FBQyxHQUFHLEdBQUcsUUFBUTtFQUFFO0VBQ2pCLENBQUMsR0FBRyxHQUFHLFFBQVE7RUFBRTtFQUNqQixDQUFDLEdBQUcsR0FBRyxRQUFRO0VBQUU7RUFDakIsQ0FBQyxHQUFHLEdBQUcsUUFBUTtFQUFFO0VBQ2pCLENBQUMsR0FBRyxHQUFHLFFBQVE7RUFBRTtFQUNqQixDQUFDLEdBQUcsR0FBRyxRQUFRO0VBQUU7RUFDakIsQ0FBQyxHQUFHLEdBQUcsUUFBUTtFQUFFO0VBQ2pCLENBQUMsR0FBRyxHQUFHLFFBQVE7RUFBRTtFQUNqQixDQUFDLEdBQUcsR0FB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Q0FBQ0MsS0FBSyxHQUFHQSxLQUFLO0lBQ2xCLElBQUksQ0FBQ0MsT0FBTyxHQUFHQSxPQUFPO0lBQ3RCLElBQUksQ0FBQ0MsTUFBTSxHQUFHQSxNQUFNO0lBRXBCLElBQUksSUFBSSxDQUFDRixLQUFLLEdBQUdiLEtBQUssQ0FBQ08sSUFBSSxFQUFFO01BQzNCLElBQUksQ0FBQ1csUUFBUSxHQUFHLE9BQU87SUFDekIsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDSCxNQUFNLEVBQUU7TUFDdEIsSUFBSSxDQUFDRyxRQUFRLEdBQUduQixnQkFBZ0IsQ0FBQyxJQUFJLENBQUNnQixNQUFNLENBQUM7SUFDL0MsQ0FBQyxNQUFNO01BQ0w7TUFDQTtNQUNBLE1BQU1JLFVBQVUsR0FBRyxJQUFJLENBQUNQLElBQUksR0FBRyxNQUFNO01BQ3JDLElBQUksQ0FBQ00sUUFBUSxHQUFHckIsb0JBQW9CLENBQUNzQixVQUFVLENBQUM7SUFDbEQ7RUFDRjtFQUVBQyxRQUFRQSxDQUFBLEVBQVc7SUFDakIsSUFBSSxJQUFJLENBQUNWLE1BQU0sRUFBRTtNQUNmLE9BQU8sSUFBSSxDQUFDQSxNQUFNO0lBQ3BCO0lBRUEsSUFBSSxDQUFDQSxNQUFNLEdBQUdXLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUU3QixJQUFJLENBQUNaLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUNFLElBQUksR0FBRyxJQUFJO0lBQ2pDLElBQUksQ0FBQ0YsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFJLElBQUksQ0FBQ0UsSUFBSSxLQUFLLENBQUMsR0FBSSxJQUFJO0lBQ3pDLElBQUksQ0FBQ0YsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFLLElBQUksQ0FBQ0UsSUFBSSxLQUFLLEVBQUUsR0FBSSxJQUFJLEdBQUssQ0FBQyxJQUFJLENBQUNDLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBRTtJQUN6RSxJQUFJLENBQUNILE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBSSxDQUFDLElBQUksQ0FBQ0csS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUssQ0FBQyxJQUFJLENBQUNDLE9BQU8sR0FBRyxJQUFJLEtBQUssQ0FBRTtJQUMzRSxJQUFJLENBQUNKLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUNLLE1BQU0sR0FBRyxJQUFJO0lBRW5DLE9BQU8sSUFBSSxDQUFDTCxNQUFNO0VBQ3BCO0FBQ0Y7QUFBQ1osT0FBQSxDQUFBVSxTQUFBLEdBQUFBLFNBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"collation.js","names":["codepageByLanguageId","exports","codepageBySortId","Flags","IGNORE_CASE","IGNORE_ACCENT","IGNORE_KANA","IGNORE_WIDTH","BINARY","BINARY2","UTF8","Collation","fromBuffer","buffer","offset","lcid","flags","version","sortId","constructor","undefined","codepage","languageId","toBuffer","Buffer","alloc"],"sources":["../src/collation.ts"],"sourcesContent":["type Encoding = 'utf-8' | 'CP437' | 'CP850' | 'CP874' | 'CP932' | 'CP936' | 'CP949' | 'CP950' | 'CP1250' | 'CP1251' | 'CP1252' | 'CP1253' | 'CP1254' | 'CP1255' | 'CP1256' | 'CP1257' | 'CP1258';\n\n// http://technet.microsoft.com/en-us/library/aa176553(v=sql.80).aspx\nexport const codepageByLanguageId: { [key: number]: Encoding } = {\n // Arabic_*\n [0x0401]: 'CP1256',\n\n // Chinese_Taiwan_Stroke_*\n // Chinese_Traditional_Stroke_Count_*\n // Chinese_Taiwan_Bopomofo_*\n // Chinese_Traditional_Bopomofo_*\n [0x0404]: 'CP950',\n\n // Czech_*\n [0x0405]: 'CP1250',\n\n // Danish_Greenlandic_*\n // Danish_Norwegian_*\n [0x0406]: 'CP1252',\n\n // Greek_*\n [0x0408]: 'CP1253',\n\n // Latin1_General_*\n [0x0409]: 'CP1252',\n\n // Traditional_Spanish_*\n [0x040A]: 'CP1252',\n\n // Finnish_Swedish_*\n [0x040B]: 'CP1252',\n\n // French_*\n [0x040C]: 'CP1252',\n\n // Hebrew_*\n [0x040D]: 'CP1255',\n\n // Hungarian_*\n // Hungarian_Technical_*\n [0x040E]: 'CP1250',\n\n // Icelandic_*\n [0x040F]: 'CP1252',\n\n // Japanese_*\n // Japanese_XJIS_*\n // Japanese_Unicode_*\n // Japanese_Bushu_Kakusu_*\n [0x0411]: 'CP932',\n\n // Korean_*\n // Korean_Wansung_*\n [0x0412]: 'CP949',\n\n // Norwegian_*\n [0x0414]: 'CP1252',\n\n // Polish_*\n [0x0415]: 'CP1250',\n\n // Romansh_*\n [0x0417]: 'CP1252',\n\n // Romanian_*\n [0x0418]: 'CP1250',\n\n // Cyrillic_*\n [0x0419]: 'CP1251',\n\n // Croatian_*\n [0x041A]: 'CP1250',\n\n // Slovak_*\n [0x041B]: 'CP1250',\n\n // Albanian_*\n [0x041C]: 'CP1250',\n\n // Thai_*\n [0x041E]: 'CP874',\n\n // Turkish_*\n [0x041F]: 'CP1254',\n\n // Urdu_*\n [0x0420]: 'CP1256',\n\n // Ukrainian_*\n [0x0422]: 'CP1251',\n\n // Slovenian_*\n [0x0424]: 'CP1250',\n\n // Estonian_*\n [0x0425]: 'CP1257',\n\n // Latvian_*\n [0x0426]: 'CP1257',\n\n // Lithuanian_*\n [0x0427]: 'CP1257',\n\n // Persian_*\n [0x0429]: 'CP1256',\n\n // Vietnamese_*\n [0x042A]: 'CP1258',\n\n // Azeri_Latin_*\n [0x042C]: 'CP1254',\n\n // Upper_Sorbian_*\n [0x042E]: 'CP1252',\n\n // Macedonian_FYROM_*\n [0x042F]: 'CP1251',\n\n // Sami_Norway_*\n [0x043B]: 'CP1252',\n\n // Kazakh_*\n [0x043F]: 'CP1251',\n\n // Turkmen_*\n [0x0442]: 'CP1250',\n\n // Uzbek_Latin_*\n [0x0443]: 'CP1254',\n\n // Tatar_*\n [0x0444]: 'CP1251',\n\n // Welsh_*\n [0x0452]: 'CP1252',\n\n // Frisian_*\n [0x0462]: 'CP1252',\n\n // Bashkir_*\n [0x046D]: 'CP1251',\n\n // Mapudungan_*\n [0x047A]: 'CP1252',\n\n // Mohawk_*\n [0x047C]: 'CP1252',\n\n // Breton_*\n [0x047E]: 'CP1252',\n\n // Uighur_*\n [0x0480]: 'CP1256',\n\n // Corsican_*\n [0x0483]: 'CP1252',\n\n // Yakut_*\n [0x0485]: 'CP1251',\n\n // Dari_*\n [0x048C]: 'CP1256',\n\n // Chinese_PRC_*\n // Chinese_Simplified_Pinyin_*\n // Chinese_PRC_Stroke_*\n // Chinese_Simplified_Stroke_Order_*\n [0x0804]: 'CP936',\n\n // Serbian_Latin_*\n [0x081A]: 'CP1250',\n\n // Azeri_Cyrillic_*\n [0x082C]: 'CP1251',\n\n // Sami_Sweden_Finland_*\n [0x083B]: 'CP1252',\n\n // Tamazight_*\n [0x085F]: 'CP1252',\n\n // Chinese_Hong_Kong_Stroke_*\n [0x0C04]: 'CP950',\n\n // Modern_Spanish_*\n [0x0C0A]: 'CP1252',\n\n // Serbian_Cyrillic_*\n [0x0C1A]: 'CP1251',\n\n // Chinese_Traditional_Pinyin_*\n // Chinese_Traditional_Stroke_Order_*\n [0x1404]: 'CP950',\n\n // Bosnian_Latin_*\n [0x141A]: 'CP1250',\n\n // Bosnian_Cyrillic_*\n [0x201A]: 'CP1251',\n\n // German\n // German_PhoneBook_*\n [0x0407]: 'CP1252',\n\n // Georgian_Modern_Sort_*\n [0x0437]: 'CP1252'\n};\n\nexport const codepageBySortId: { [key: number]: Encoding } = {\n [30]: 'CP437', // SQL_Latin1_General_CP437_BIN\n [31]: 'CP437', // SQL_Latin1_General_CP437_CS_AS\n [32]: 'CP437', // SQL_Latin1_General_CP437_CI_AS\n [33]: 'CP437', // SQL_Latin1_General_Pref_CP437_CI_AS\n [34]: 'CP437', // SQL_Latin1_General_CP437_CI_AI\n [40]: 'CP850', // SQL_Latin1_General_CP850_BIN\n [41]: 'CP850', // SQL_Latin1_General_CP850_CS_AS\n [42]: 'CP850', // SQL_Latin1_General_CP850_CI_AS\n [43]: 'CP850', // SQL_Latin1_General_Pref_CP850_CI_AS\n [44]: 'CP850', // SQL_Latin1_General_CP850_CI_AI\n [49]: 'CP850', // SQL_1xCompat_CP850_CI_AS\n [51]: 'CP1252', // SQL_Latin1_General_Cp1_CS_AS_KI_WI\n [52]: 'CP1252', // SQL_Latin1_General_Cp1_CI_AS_KI_WI\n [53]: 'CP1252', // SQL_Latin1_General_Pref_Cp1_CI_AS_KI_WI\n [54]: 'CP1252', // SQL_Latin1_General_Cp1_CI_AI_KI_WI\n [55]: 'CP850', // SQL_AltDiction_CP850_CS_AS\n [56]: 'CP850', // SQL_AltDiction_Pref_CP850_CI_AS\n [57]: 'CP850', // SQL_AltDiction_CP850_CI_AI\n [58]: 'CP850', // SQL_Scandinavian_Pref_CP850_CI_AS\n [59]: 'CP850', // SQL_Scandinavian_CP850_CS_AS\n [60]: 'CP850', // SQL_Scandinavian_CP850_CI_AS\n [61]: 'CP850', // SQL_AltDiction_CP850_CI_AS\n [80]: 'CP1250', // SQL_Latin1_General_1250_BIN\n [81]: 'CP1250', // SQL_Latin1_General_CP1250_CS_AS\n [82]: 'CP1250', // SQL_Latin1_General_Cp1250_CI_AS_KI_WI\n [83]: 'CP1250', // SQL_Czech_Cp1250_CS_AS_KI_WI\n [84]: 'CP1250', // SQL_Czech_Cp1250_CI_AS_KI_WI\n [85]: 'CP1250', // SQL_Hungarian_Cp1250_CS_AS_KI_WI\n [86]: 'CP1250', // SQL_Hungarian_Cp1250_CI_AS_KI_WI\n [87]: 'CP1250', // SQL_Polish_Cp1250_CS_AS_KI_WI\n [88]: 'CP1250', // SQL_Polish_Cp1250_CI_AS_KI_WI\n [89]: 'CP1250', // SQL_Romanian_Cp1250_CS_AS_KI_WI\n [90]: 'CP1250', // SQL_Romanian_Cp1250_CI_AS_KI_WI\n [91]: 'CP1250', // SQL_Croatian_Cp1250_CS_AS_KI_WI\n [92]: 'CP1250', // SQL_Croatian_Cp1250_CI_AS_KI_WI\n [93]: 'CP1250', // SQL_Slovak_Cp1250_CS_AS_KI_WI\n [94]: 'CP1250', // SQL_Slovak_Cp1250_CI_AS_KI_WI\n [95]: 'CP1250', // SQL_Slovenian_Cp1250_CS_AS_KI_WI\n [96]: 'CP1250', // SQL_Slovenian_Cp1250_CI_AS_KI_WI\n [104]: 'CP1251', // SQL_Latin1_General_1251_BIN\n [105]: 'CP1251', // SQL_Latin1_General_CP1251_CS_AS\n [106]: 'CP1251', // SQL_Latin1_General_CP1251_CI_AS\n [107]: 'CP1251', // SQL_Ukrainian_Cp1251_CS_AS_KI_WI\n [108]: 'CP1251', // SQL_Ukrainian_Cp1251_CI_AS_KI_WI\n [112]: 'CP1253', // SQL_Latin1_General_1253_BIN\n [113]: 'CP1253', // SQL_Latin1_General_CP1253_CS_AS\n [114]: 'CP1253', // SQL_Latin1_General_CP1253_CI_AS\n [120]: 'CP1253', // SQL_MixDiction_CP1253_CS_AS\n [121]: 'CP1253', // SQL_AltDiction_CP1253_CS_AS\n [122]: 'CP1253', // SQL_AltDiction2_CP1253_CS_AS\n [124]: 'CP1253', // SQL_Latin1_General_CP1253_CI_AI\n [128]: 'CP1254', // SQL_Latin1_General_1254_BIN\n [129]: 'CP1254', // SQL_Latin1_General_Cp1254_CS_AS_KI_WI\n [130]: 'CP1254', // SQL_Latin1_General_Cp1254_CI_AS_KI_WI\n [136]: 'CP1255', // SQL_Latin1_General_1255_BIN\n [137]: 'CP1255', // SQL_Latin1_General_CP1255_CS_AS\n [138]: 'CP1255', // SQL_Latin1_General_CP1255_CI_AS\n [144]: 'CP1256', // SQL_Latin1_General_1256_BIN\n [145]: 'CP1256', // SQL_Latin1_General_CP1256_CS_AS\n [146]: 'CP1256', // SQL_Latin1_General_CP1256_CI_AS\n [152]: 'CP1257', // SQL_Latin1_General_1257_BIN\n [153]: 'CP1257', // SQL_Latin1_General_CP1257_CS_AS\n [154]: 'CP1257', // SQL_Latin1_General_CP1257_CI_AS\n [155]: 'CP1257', // SQL_Estonian_Cp1257_CS_AS_KI_WI\n [156]: 'CP1257', // SQL_Estonian_Cp1257_CI_AS_KI_WI\n [157]: 'CP1257', // SQL_Latvian_Cp1257_CS_AS_KI_WI\n [158]: 'CP1257', // SQL_Latvian_Cp1257_CI_AS_KI_WI\n [159]: 'CP1257', // SQL_Lithuanian_Cp1257_CS_AS_KI_WI\n [160]: 'CP1257', // SQL_Lithuanian_Cp1257_CI_AS_KI_WI\n [183]: 'CP1252', // SQL_Danish_Pref_Cp1_CI_AS_KI_WI\n [184]: 'CP1252', // SQL_SwedishPhone_Pref_Cp1_CI_AS_KI_WI\n [185]: 'CP1252', // SQL_SwedishStd_Pref_Cp1_CI_AS_KI_WI\n [186]: 'CP1252' // SQL_Icelandic_Pref_Cp1_CI_AS_KI_WI\n};\n\nexport const Flags = {\n IGNORE_CASE: 1 << 0,\n IGNORE_ACCENT: 1 << 1,\n IGNORE_KANA: 1 << 2,\n IGNORE_WIDTH: 1 << 3,\n BINARY: 1 << 4,\n BINARY2: 1 << 5,\n UTF8: 1 << 6,\n};\n\nexport class Collation {\n declare readonly lcid: number;\n declare readonly flags: number;\n declare readonly version: number;\n declare readonly sortId: number;\n declare readonly codepage: Encoding | undefined;\n\n declare private buffer: Buffer | undefined;\n\n static fromBuffer(buffer: Buffer, offset = 0) {\n let lcid = (buffer[offset + 2] & 0x0F) << 16;\n lcid |= buffer[offset + 1] << 8;\n lcid |= buffer[offset + 0];\n\n let flags = (buffer[offset + 3] & 0x0F) << 4;\n flags |= (buffer[offset + 2] & 0xF0) >>> 4;\n\n const version = (buffer[offset + 3] & 0xF0) >>> 4;\n\n const sortId = buffer[offset + 4];\n\n return new this(lcid, flags, version, sortId);\n }\n\n constructor(lcid: number, flags: number, version: number, sortId: number) {\n this.buffer = undefined;\n\n this.lcid = lcid;\n this.flags = flags;\n this.version = version;\n this.sortId = sortId;\n\n if (this.flags & Flags.UTF8) {\n this.codepage = 'utf-8';\n } else if (this.sortId) {\n this.codepage = codepageBySortId[this.sortId];\n } else {\n // The last 16 bits of the LCID are the language id.\n // The first 4 bits define additional sort orders.\n const languageId = this.lcid & 0xFFFF;\n this.codepage = codepageByLanguageId[languageId];\n }\n }\n\n toBuffer(): Buffer {\n if (this.buffer) {\n return this.buffer;\n }\n\n this.buffer = Buffer.alloc(5);\n\n this.buffer[0] = this.lcid & 0xFF;\n this.buffer[1] = (this.lcid >>> 8) & 0xFF;\n this.buffer[2] = ((this.lcid >>> 16) & 0x0F) | ((this.flags & 0x0F) << 4);\n this.buffer[3] = ((this.flags & 0xF0) >>> 4) | ((this.version & 0x0F) << 4);\n this.buffer[4] = this.sortId & 0xFF;\n\n return this.buffer;\n }\n}\n"],"mappings":"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E;EACf,CAAC,EAAE,GAAG,OAAO;EAAE;EACf,CAAC,EAAE,GAAG,OAAO;EAAE;EACf,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,OAAO;EAAE;EACf,CAAC,EAAE,GAAG,OAAO;EAAE;EACf,CAAC,EAAE,GAAG,OAAO;EAAE;EACf,CAAC,EAAE,GAAG,OAAO;EAAE;EACf,CAAC,EAAE,GAAG,OAAO;EAAE;EACf,CAAC,EAAE,GAAG,OAAO;EAAE;EACf,CAAC,EAAE,GAAG,OAAO;EAAE;EACf,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,GAAG,GAAG,QAAQ;EAAE;EACjB,CAAC,GAAG,GAAG,QAAQ;EAAE;EACjB,CAAC,GAAG,GAAG,QAAQ;EAAE;EACjB,CAAC,GAAG,GAAG,QAAQ;EAAE;EACjB,CAAC,GAAG,GAAG,QAAQ;EAAE;EACjB,CAAC,GAAG,GAAG,QAAQ;EAAE;EACjB,CAAC,GAAG,GAAG,QAAQ;EAAE;EACjB,CAAC,GAAG,GAAG,QAAQ;EAAE;EACjB,CAAC,GAAG,GAAG,QAAQ;EAAE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"}
1
+ {"version":3,"file":"collation.js","names":["codepageByLanguageId","exports","codepageBySortId","Flags","IGNORE_CASE","IGNORE_ACCENT","IGNORE_KANA","IGNORE_WIDTH","BINARY","BINARY2","UTF8","Collation","fromBuffer","buffer","offset","lcid","flags","version","sortId","constructor","undefined","codepage","languageId","toBuffer","Buffer","alloc"],"sources":["../src/collation.ts"],"sourcesContent":["type Encoding = 'utf-8' | 'CP437' | 'CP850' | 'CP874' | 'CP932' | 'CP936' | 'CP949' | 'CP950' | 'CP1250' | 'CP1251' | 'CP1252' | 'CP1253' | 'CP1254' | 'CP1255' | 'CP1256' | 'CP1257' | 'CP1258';\n\n// http://technet.microsoft.com/en-us/library/aa176553(v=sql.80).aspx\nexport const codepageByLanguageId: { [key: number]: Encoding } = {\n // Arabic_*\n [0x0401]: 'CP1256',\n\n // Chinese_Taiwan_Stroke_*\n // Chinese_Traditional_Stroke_Count_*\n // Chinese_Taiwan_Bopomofo_*\n // Chinese_Traditional_Bopomofo_*\n [0x0404]: 'CP950',\n\n // Czech_*\n [0x0405]: 'CP1250',\n\n // Danish_Greenlandic_*\n // Danish_Norwegian_*\n [0x0406]: 'CP1252',\n\n // Greek_*\n [0x0408]: 'CP1253',\n\n // Latin1_General_*\n [0x0409]: 'CP1252',\n\n // Traditional_Spanish_*\n [0x040A]: 'CP1252',\n\n // Finnish_Swedish_*\n [0x040B]: 'CP1252',\n\n // French_*\n [0x040C]: 'CP1252',\n\n // Hebrew_*\n [0x040D]: 'CP1255',\n\n // Hungarian_*\n // Hungarian_Technical_*\n [0x040E]: 'CP1250',\n\n // Icelandic_*\n [0x040F]: 'CP1252',\n\n // Japanese_*\n // Japanese_XJIS_*\n // Japanese_Unicode_*\n // Japanese_Bushu_Kakusu_*\n [0x0411]: 'CP932',\n\n // Korean_*\n // Korean_Wansung_*\n [0x0412]: 'CP949',\n\n // Norwegian_*\n [0x0414]: 'CP1252',\n\n // Polish_*\n [0x0415]: 'CP1250',\n\n // Romansh_*\n [0x0417]: 'CP1252',\n\n // Romanian_*\n [0x0418]: 'CP1250',\n\n // Cyrillic_*\n [0x0419]: 'CP1251',\n\n // Croatian_*\n [0x041A]: 'CP1250',\n\n // Slovak_*\n [0x041B]: 'CP1250',\n\n // Albanian_*\n [0x041C]: 'CP1250',\n\n // Thai_*\n [0x041E]: 'CP874',\n\n // Turkish_*\n [0x041F]: 'CP1254',\n\n // Urdu_*\n [0x0420]: 'CP1256',\n\n // Ukrainian_*\n [0x0422]: 'CP1251',\n\n // Slovenian_*\n [0x0424]: 'CP1250',\n\n // Estonian_*\n [0x0425]: 'CP1257',\n\n // Latvian_*\n [0x0426]: 'CP1257',\n\n // Lithuanian_*\n [0x0427]: 'CP1257',\n\n // Persian_*\n [0x0429]: 'CP1256',\n\n // Vietnamese_*\n [0x042A]: 'CP1258',\n\n // Azeri_Latin_*\n [0x042C]: 'CP1254',\n\n // Upper_Sorbian_*\n [0x042E]: 'CP1252',\n\n // Macedonian_FYROM_*\n [0x042F]: 'CP1251',\n\n // Sami_Norway_*\n [0x043B]: 'CP1252',\n\n // Kazakh_*\n [0x043F]: 'CP1251',\n\n // Turkmen_*\n [0x0442]: 'CP1250',\n\n // Uzbek_Latin_*\n [0x0443]: 'CP1254',\n\n // Tatar_*\n [0x0444]: 'CP1251',\n\n // Welsh_*\n [0x0452]: 'CP1252',\n\n // Frisian_*\n [0x0462]: 'CP1252',\n\n // Bashkir_*\n [0x046D]: 'CP1251',\n\n // Mapudungan_*\n [0x047A]: 'CP1252',\n\n // Mohawk_*\n [0x047C]: 'CP1252',\n\n // Breton_*\n [0x047E]: 'CP1252',\n\n // Uighur_*\n [0x0480]: 'CP1256',\n\n // Corsican_*\n [0x0483]: 'CP1252',\n\n // Yakut_*\n [0x0485]: 'CP1251',\n\n // Dari_*\n [0x048C]: 'CP1256',\n\n // Chinese_PRC_*\n // Chinese_Simplified_Pinyin_*\n // Chinese_PRC_Stroke_*\n // Chinese_Simplified_Stroke_Order_*\n [0x0804]: 'CP936',\n\n // Serbian_Latin_*\n [0x081A]: 'CP1250',\n\n // Azeri_Cyrillic_*\n [0x082C]: 'CP1251',\n\n // Sami_Sweden_Finland_*\n [0x083B]: 'CP1252',\n\n // Tamazight_*\n [0x085F]: 'CP1252',\n\n // Chinese_Hong_Kong_Stroke_*\n [0x0C04]: 'CP950',\n\n // Modern_Spanish_*\n [0x0C0A]: 'CP1252',\n\n // Serbian_Cyrillic_*\n [0x0C1A]: 'CP1251',\n\n // Chinese_Traditional_Pinyin_*\n // Chinese_Traditional_Stroke_Order_*\n [0x1404]: 'CP950',\n\n // Bosnian_Latin_*\n [0x141A]: 'CP1250',\n\n // Bosnian_Cyrillic_*\n [0x201A]: 'CP1251',\n\n // German\n // German_PhoneBook_*\n [0x0407]: 'CP1252',\n\n // Georgian_Modern_Sort_*\n [0x0437]: 'CP1252'\n};\n\nexport const codepageBySortId: { [key: number]: Encoding } = {\n [30]: 'CP437', // SQL_Latin1_General_CP437_BIN\n [31]: 'CP437', // SQL_Latin1_General_CP437_CS_AS\n [32]: 'CP437', // SQL_Latin1_General_CP437_CI_AS\n [33]: 'CP437', // SQL_Latin1_General_Pref_CP437_CI_AS\n [34]: 'CP437', // SQL_Latin1_General_CP437_CI_AI\n [40]: 'CP850', // SQL_Latin1_General_CP850_BIN\n [41]: 'CP850', // SQL_Latin1_General_CP850_CS_AS\n [42]: 'CP850', // SQL_Latin1_General_CP850_CI_AS\n [43]: 'CP850', // SQL_Latin1_General_Pref_CP850_CI_AS\n [44]: 'CP850', // SQL_Latin1_General_CP850_CI_AI\n [49]: 'CP850', // SQL_1xCompat_CP850_CI_AS\n [51]: 'CP1252', // SQL_Latin1_General_Cp1_CS_AS_KI_WI\n [52]: 'CP1252', // SQL_Latin1_General_Cp1_CI_AS_KI_WI\n [53]: 'CP1252', // SQL_Latin1_General_Pref_Cp1_CI_AS_KI_WI\n [54]: 'CP1252', // SQL_Latin1_General_Cp1_CI_AI_KI_WI\n [55]: 'CP850', // SQL_AltDiction_CP850_CS_AS\n [56]: 'CP850', // SQL_AltDiction_Pref_CP850_CI_AS\n [57]: 'CP850', // SQL_AltDiction_CP850_CI_AI\n [58]: 'CP850', // SQL_Scandinavian_Pref_CP850_CI_AS\n [59]: 'CP850', // SQL_Scandinavian_CP850_CS_AS\n [60]: 'CP850', // SQL_Scandinavian_CP850_CI_AS\n [61]: 'CP850', // SQL_AltDiction_CP850_CI_AS\n [80]: 'CP1250', // SQL_Latin1_General_1250_BIN\n [81]: 'CP1250', // SQL_Latin1_General_CP1250_CS_AS\n [82]: 'CP1250', // SQL_Latin1_General_Cp1250_CI_AS_KI_WI\n [83]: 'CP1250', // SQL_Czech_Cp1250_CS_AS_KI_WI\n [84]: 'CP1250', // SQL_Czech_Cp1250_CI_AS_KI_WI\n [85]: 'CP1250', // SQL_Hungarian_Cp1250_CS_AS_KI_WI\n [86]: 'CP1250', // SQL_Hungarian_Cp1250_CI_AS_KI_WI\n [87]: 'CP1250', // SQL_Polish_Cp1250_CS_AS_KI_WI\n [88]: 'CP1250', // SQL_Polish_Cp1250_CI_AS_KI_WI\n [89]: 'CP1250', // SQL_Romanian_Cp1250_CS_AS_KI_WI\n [90]: 'CP1250', // SQL_Romanian_Cp1250_CI_AS_KI_WI\n [91]: 'CP1250', // SQL_Croatian_Cp1250_CS_AS_KI_WI\n [92]: 'CP1250', // SQL_Croatian_Cp1250_CI_AS_KI_WI\n [93]: 'CP1250', // SQL_Slovak_Cp1250_CS_AS_KI_WI\n [94]: 'CP1250', // SQL_Slovak_Cp1250_CI_AS_KI_WI\n [95]: 'CP1250', // SQL_Slovenian_Cp1250_CS_AS_KI_WI\n [96]: 'CP1250', // SQL_Slovenian_Cp1250_CI_AS_KI_WI\n [104]: 'CP1251', // SQL_Latin1_General_1251_BIN\n [105]: 'CP1251', // SQL_Latin1_General_CP1251_CS_AS\n [106]: 'CP1251', // SQL_Latin1_General_CP1251_CI_AS\n [107]: 'CP1251', // SQL_Ukrainian_Cp1251_CS_AS_KI_WI\n [108]: 'CP1251', // SQL_Ukrainian_Cp1251_CI_AS_KI_WI\n [112]: 'CP1253', // SQL_Latin1_General_1253_BIN\n [113]: 'CP1253', // SQL_Latin1_General_CP1253_CS_AS\n [114]: 'CP1253', // SQL_Latin1_General_CP1253_CI_AS\n [120]: 'CP1253', // SQL_MixDiction_CP1253_CS_AS\n [121]: 'CP1253', // SQL_AltDiction_CP1253_CS_AS\n [122]: 'CP1253', // SQL_AltDiction2_CP1253_CS_AS\n [124]: 'CP1253', // SQL_Latin1_General_CP1253_CI_AI\n [128]: 'CP1254', // SQL_Latin1_General_1254_BIN\n [129]: 'CP1254', // SQL_Latin1_General_Cp1254_CS_AS_KI_WI\n [130]: 'CP1254', // SQL_Latin1_General_Cp1254_CI_AS_KI_WI\n [136]: 'CP1255', // SQL_Latin1_General_1255_BIN\n [137]: 'CP1255', // SQL_Latin1_General_CP1255_CS_AS\n [138]: 'CP1255', // SQL_Latin1_General_CP1255_CI_AS\n [144]: 'CP1256', // SQL_Latin1_General_1256_BIN\n [145]: 'CP1256', // SQL_Latin1_General_CP1256_CS_AS\n [146]: 'CP1256', // SQL_Latin1_General_CP1256_CI_AS\n [152]: 'CP1257', // SQL_Latin1_General_1257_BIN\n [153]: 'CP1257', // SQL_Latin1_General_CP1257_CS_AS\n [154]: 'CP1257', // SQL_Latin1_General_CP1257_CI_AS\n [155]: 'CP1257', // SQL_Estonian_Cp1257_CS_AS_KI_WI\n [156]: 'CP1257', // SQL_Estonian_Cp1257_CI_AS_KI_WI\n [157]: 'CP1257', // SQL_Latvian_Cp1257_CS_AS_KI_WI\n [158]: 'CP1257', // SQL_Latvian_Cp1257_CI_AS_KI_WI\n [159]: 'CP1257', // SQL_Lithuanian_Cp1257_CS_AS_KI_WI\n [160]: 'CP1257', // SQL_Lithuanian_Cp1257_CI_AS_KI_WI\n [183]: 'CP1252', // SQL_Danish_Pref_Cp1_CI_AS_KI_WI\n [184]: 'CP1252', // SQL_SwedishPhone_Pref_Cp1_CI_AS_KI_WI\n [185]: 'CP1252', // SQL_SwedishStd_Pref_Cp1_CI_AS_KI_WI\n [186]: 'CP1252' // SQL_Icelandic_Pref_Cp1_CI_AS_KI_WI\n};\n\nexport const Flags = {\n IGNORE_CASE: 1 << 0,\n IGNORE_ACCENT: 1 << 1,\n IGNORE_KANA: 1 << 2,\n IGNORE_WIDTH: 1 << 3,\n BINARY: 1 << 4,\n BINARY2: 1 << 5,\n UTF8: 1 << 6,\n};\n\nexport class Collation {\n declare readonly lcid: number;\n declare readonly flags: number;\n declare readonly version: number;\n declare readonly sortId: number;\n declare readonly codepage: Encoding | undefined;\n\n declare private buffer: Buffer | undefined;\n\n static fromBuffer(buffer: Buffer, offset = 0) {\n let lcid = (buffer[offset + 2] & 0x0F) << 16;\n lcid |= buffer[offset + 1] << 8;\n lcid |= buffer[offset + 0];\n\n let flags = (buffer[offset + 3] & 0x0F) << 4;\n flags |= (buffer[offset + 2] & 0xF0) >>> 4;\n\n const version = (buffer[offset + 3] & 0xF0) >>> 4;\n\n const sortId = buffer[offset + 4];\n\n return new this(lcid, flags, version, sortId);\n }\n\n constructor(lcid: number, flags: number, version: number, sortId: number) {\n this.buffer = undefined;\n\n this.lcid = lcid;\n this.flags = flags;\n this.version = version;\n this.sortId = sortId;\n\n if (this.flags & Flags.UTF8) {\n this.codepage = 'utf-8';\n } else if (this.sortId) {\n this.codepage = codepageBySortId[this.sortId];\n } else {\n // The last 16 bits of the LCID are the language id.\n // The first 4 bits define additional sort orders.\n const languageId = this.lcid & 0xFFFF;\n this.codepage = codepageByLanguageId[languageId];\n }\n }\n\n toBuffer(): Buffer {\n if (this.buffer) {\n return this.buffer;\n }\n\n this.buffer = Buffer.alloc(5);\n\n this.buffer[0] = this.lcid & 0xFF;\n this.buffer[1] = (this.lcid >>> 8) & 0xFF;\n this.buffer[2] = ((this.lcid >>> 16) & 0x0F) | ((this.flags & 0x0F) << 4);\n this.buffer[3] = ((this.flags & 0xF0) >>> 4) | ((this.version & 0x0F) << 4);\n this.buffer[4] = this.sortId & 0xFF;\n\n return this.buffer;\n }\n}\n"],"mappings":"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E;EACf,CAAC,EAAE,GAAG,OAAO;EAAE;EACf,CAAC,EAAE,GAAG,OAAO;EAAE;EACf,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,OAAO;EAAE;EACf,CAAC,EAAE,GAAG,OAAO;EAAE;EACf,CAAC,EAAE,GAAG,OAAO;EAAE;EACf,CAAC,EAAE,GAAG,OAAO;EAAE;EACf,CAAC,EAAE,GAAG,OAAO;EAAE;EACf,CAAC,EAAE,GAAG,OAAO;EAAE;EACf,CAAC,EAAE,GAAG,OAAO;EAAE;EACf,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,EAAE,GAAG,QAAQ;EAAE;EAChB,CAAC,GAAG,GAAG,QAAQ;EAAE;EACjB,CAAC,GAAG,GAAG,QAAQ;EAAE;EACjB,CAAC,GAAG,GAAG,QAAQ;EAAE;EACjB,CAAC,GAAG,GAAG,QAAQ;EAAE;EACjB,CAAC,GAAG,GAAG,QAAQ;EAAE;EACjB,CAAC,GAAG,GAAG,QAAQ;EAAE;EACjB,CAAC,GAAG,GAAG,QAAQ;EAAE;EACjB,CAAC,GAAG,GAAG,QAAQ;EAAE;EACjB,CAAC,GAAG,GAAG,QAAQ;EAAE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","ignoreList":[]}