tedious 16.2.0 → 16.4.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 (205) hide show
  1. package/lib/all-headers.js +1 -2
  2. package/lib/all-headers.js.map +1 -0
  3. package/lib/always-encrypted/aead-aes-256-cbc-hmac-algorithm.js +9 -31
  4. package/lib/always-encrypted/aead-aes-256-cbc-hmac-algorithm.js.map +1 -0
  5. package/lib/always-encrypted/aead-aes-256-cbc-hmac-encryption-key.js +9 -24
  6. package/lib/always-encrypted/aead-aes-256-cbc-hmac-encryption-key.js.map +1 -0
  7. package/lib/always-encrypted/cek-entry.js +8 -12
  8. package/lib/always-encrypted/cek-entry.js.map +1 -0
  9. package/lib/always-encrypted/get-parameter-encryption-metadata.js +2 -24
  10. package/lib/always-encrypted/get-parameter-encryption-metadata.js.map +1 -0
  11. package/lib/always-encrypted/key-crypto.js +5 -30
  12. package/lib/always-encrypted/key-crypto.js.map +1 -0
  13. package/lib/always-encrypted/keystore-provider-azure-key-vault.js +11 -72
  14. package/lib/always-encrypted/keystore-provider-azure-key-vault.js.map +1 -0
  15. package/lib/always-encrypted/symmetric-key-cache.js +2 -13
  16. package/lib/always-encrypted/symmetric-key-cache.js.map +1 -0
  17. package/lib/always-encrypted/symmetric-key.js +3 -8
  18. package/lib/always-encrypted/symmetric-key.js.map +1 -0
  19. package/lib/always-encrypted/types.js +19 -27
  20. package/lib/always-encrypted/types.js.map +1 -0
  21. package/lib/always-encrypted/utils.js +2 -6
  22. package/lib/always-encrypted/utils.js.map +1 -0
  23. package/lib/bulk-load-payload.js +7 -15
  24. package/lib/bulk-load-payload.js.map +1 -0
  25. package/lib/bulk-load.js +58 -131
  26. package/lib/bulk-load.js.map +1 -0
  27. package/lib/collation.js +7 -15
  28. package/lib/collation.js.map +1 -0
  29. package/lib/connection.js +307 -534
  30. package/lib/connection.js.map +1 -0
  31. package/lib/connector.js +6 -37
  32. package/lib/connector.js.map +1 -0
  33. package/lib/data-type.js +2 -43
  34. package/lib/data-type.js.map +1 -0
  35. package/lib/data-types/bigint.js +1 -15
  36. package/lib/data-types/bigint.js.map +1 -0
  37. package/lib/data-types/binary.js +1 -12
  38. package/lib/data-types/binary.js.map +1 -0
  39. package/lib/data-types/bit.js +1 -11
  40. package/lib/data-types/bit.js.map +1 -0
  41. package/lib/data-types/bitn.js +1 -7
  42. package/lib/data-types/bitn.js.map +1 -0
  43. package/lib/data-types/char.js +1 -20
  44. package/lib/data-types/char.js.map +1 -0
  45. package/lib/data-types/date.js +1 -15
  46. package/lib/data-types/date.js.map +1 -0
  47. package/lib/data-types/datetime.js +3 -20
  48. package/lib/data-types/datetime.js.map +1 -0
  49. package/lib/data-types/datetime2.js +1 -26
  50. package/lib/data-types/datetime2.js.map +1 -0
  51. package/lib/data-types/datetimen.js +1 -7
  52. package/lib/data-types/datetimen.js.map +1 -0
  53. package/lib/data-types/datetimeoffset.js +1 -23
  54. package/lib/data-types/datetimeoffset.js.map +1 -0
  55. package/lib/data-types/decimal.js +1 -18
  56. package/lib/data-types/decimal.js.map +1 -0
  57. package/lib/data-types/decimaln.js +1 -7
  58. package/lib/data-types/decimaln.js.map +1 -0
  59. package/lib/data-types/float.js +1 -13
  60. package/lib/data-types/float.js.map +1 -0
  61. package/lib/data-types/floatn.js +1 -7
  62. package/lib/data-types/floatn.js.map +1 -0
  63. package/lib/data-types/image.js +1 -10
  64. package/lib/data-types/image.js.map +1 -0
  65. package/lib/data-types/int.js +1 -14
  66. package/lib/data-types/int.js.map +1 -0
  67. package/lib/data-types/intn.js +1 -7
  68. package/lib/data-types/intn.js.map +1 -0
  69. package/lib/data-types/money.js +1 -12
  70. package/lib/data-types/money.js.map +1 -0
  71. package/lib/data-types/moneyn.js +1 -7
  72. package/lib/data-types/moneyn.js.map +1 -0
  73. package/lib/data-types/nchar.js +1 -14
  74. package/lib/data-types/nchar.js.map +1 -0
  75. package/lib/data-types/ntext.js +1 -10
  76. package/lib/data-types/ntext.js.map +1 -0
  77. package/lib/data-types/null.js +1 -7
  78. package/lib/data-types/null.js.map +1 -0
  79. package/lib/data-types/numeric.js +1 -18
  80. package/lib/data-types/numeric.js.map +1 -0
  81. package/lib/data-types/numericn.js +1 -7
  82. package/lib/data-types/numericn.js.map +1 -0
  83. package/lib/data-types/nvarchar.js +1 -22
  84. package/lib/data-types/nvarchar.js.map +1 -0
  85. package/lib/data-types/real.js +1 -13
  86. package/lib/data-types/real.js.map +1 -0
  87. package/lib/data-types/smalldatetime.js +1 -14
  88. package/lib/data-types/smalldatetime.js.map +1 -0
  89. package/lib/data-types/smallint.js +1 -14
  90. package/lib/data-types/smallint.js.map +1 -0
  91. package/lib/data-types/smallmoney.js +1 -13
  92. package/lib/data-types/smallmoney.js.map +1 -0
  93. package/lib/data-types/sql-variant.js +1 -6
  94. package/lib/data-types/sql-variant.js.map +1 -0
  95. package/lib/data-types/text.js +1 -18
  96. package/lib/data-types/text.js.map +1 -0
  97. package/lib/data-types/time.js +1 -22
  98. package/lib/data-types/time.js.map +1 -0
  99. package/lib/data-types/tinyint.js +1 -14
  100. package/lib/data-types/tinyint.js.map +1 -0
  101. package/lib/data-types/tvp.js +11 -27
  102. package/lib/data-types/tvp.js.map +1 -0
  103. package/lib/data-types/udt.js +1 -7
  104. package/lib/data-types/udt.js.map +1 -0
  105. package/lib/data-types/uniqueidentifier.js +1 -11
  106. package/lib/data-types/uniqueidentifier.js.map +1 -0
  107. package/lib/data-types/varbinary.js +1 -22
  108. package/lib/data-types/varbinary.js.map +1 -0
  109. package/lib/data-types/varchar.js +1 -23
  110. package/lib/data-types/varchar.js.map +1 -0
  111. package/lib/data-types/xml.js +1 -7
  112. package/lib/data-types/xml.js.map +1 -0
  113. package/lib/debug.js +4 -16
  114. package/lib/debug.js.map +1 -0
  115. package/lib/errors/abort-error.js +2 -5
  116. package/lib/errors/abort-error.js.map +1 -0
  117. package/lib/errors/timeout-error.js +2 -5
  118. package/lib/errors/timeout-error.js.map +1 -0
  119. package/lib/errors.js +10 -16
  120. package/lib/errors.js.map +1 -0
  121. package/lib/guid-parser.js +1 -7
  122. package/lib/guid-parser.js.map +1 -0
  123. package/lib/incoming-message-stream.js +9 -29
  124. package/lib/incoming-message-stream.js.map +1 -0
  125. package/lib/instance-lookup.js +3 -34
  126. package/lib/instance-lookup.js.map +1 -0
  127. package/lib/library.js +1 -1
  128. package/lib/library.js.map +1 -0
  129. package/lib/login7-payload.js +99 -100
  130. package/lib/login7-payload.js.map +1 -0
  131. package/lib/message-io.js +17 -45
  132. package/lib/message-io.js.map +1 -0
  133. package/lib/message.js +4 -8
  134. package/lib/message.js.map +1 -0
  135. package/lib/metadata-parser.js +1 -22
  136. package/lib/metadata-parser.js.map +1 -0
  137. package/lib/ntlm-payload.js +2 -22
  138. package/lib/ntlm-payload.js.map +1 -0
  139. package/lib/ntlm.js +1 -4
  140. package/lib/ntlm.js.map +1 -0
  141. package/lib/outgoing-message-stream.js +12 -21
  142. package/lib/outgoing-message-stream.js.map +1 -0
  143. package/lib/packet.js +2 -47
  144. package/lib/packet.js.map +1 -0
  145. package/lib/prelogin-payload.js +11 -54
  146. package/lib/prelogin-payload.js.map +1 -0
  147. package/lib/request.js +88 -66
  148. package/lib/request.js.map +1 -0
  149. package/lib/rpcrequest-payload.js +8 -35
  150. package/lib/rpcrequest-payload.js.map +1 -0
  151. package/lib/sender.js +1 -24
  152. package/lib/sender.js.map +1 -0
  153. package/lib/special-stored-procedure.js +1 -1
  154. package/lib/special-stored-procedure.js.map +1 -0
  155. package/lib/sqlbatch-payload.js +5 -18
  156. package/lib/sqlbatch-payload.js.map +1 -0
  157. package/lib/tds-versions.js +3 -3
  158. package/lib/tds-versions.js.map +1 -0
  159. package/lib/tedious.js +1 -12
  160. package/lib/tedious.js.map +1 -0
  161. package/lib/token/colmetadata-token-parser.js +1 -17
  162. package/lib/token/colmetadata-token-parser.js.map +1 -0
  163. package/lib/token/done-token-parser.js +2 -8
  164. package/lib/token/done-token-parser.js.map +1 -0
  165. package/lib/token/env-change-token-parser.js +7 -28
  166. package/lib/token/env-change-token-parser.js.map +1 -0
  167. package/lib/token/feature-ext-ack-parser.js +1 -10
  168. package/lib/token/feature-ext-ack-parser.js.map +1 -0
  169. package/lib/token/fedauth-info-parser.js +2 -10
  170. package/lib/token/fedauth-info-parser.js.map +1 -0
  171. package/lib/token/handler.js +39 -149
  172. package/lib/token/handler.js.map +1 -0
  173. package/lib/token/infoerror-token-parser.js +1 -5
  174. package/lib/token/infoerror-token-parser.js.map +1 -0
  175. package/lib/token/loginack-token-parser.js +1 -6
  176. package/lib/token/loginack-token-parser.js.map +1 -0
  177. package/lib/token/nbcrow-token-parser.js +2 -15
  178. package/lib/token/nbcrow-token-parser.js.map +1 -0
  179. package/lib/token/order-token-parser.js +2 -7
  180. package/lib/token/order-token-parser.js.map +1 -0
  181. package/lib/token/returnstatus-token-parser.js +2 -4
  182. package/lib/token/returnstatus-token-parser.js.map +1 -0
  183. package/lib/token/returnvalue-token-parser.js +4 -9
  184. package/lib/token/returnvalue-token-parser.js.map +1 -0
  185. package/lib/token/row-token-parser.js +2 -11
  186. package/lib/token/row-token-parser.js.map +1 -0
  187. package/lib/token/sspi-token-parser.js +1 -5
  188. package/lib/token/sspi-token-parser.js.map +1 -0
  189. package/lib/token/stream-parser.js +24 -86
  190. package/lib/token/stream-parser.js.map +1 -0
  191. package/lib/token/token-stream-parser.js +4 -13
  192. package/lib/token/token-stream-parser.js.map +1 -0
  193. package/lib/token/token.js +88 -168
  194. package/lib/token/token.js.map +1 -0
  195. package/lib/tracking-buffer/writable-tracking-buffer.js +20 -60
  196. package/lib/tracking-buffer/writable-tracking-buffer.js.map +1 -0
  197. package/lib/transaction.js +9 -33
  198. package/lib/transaction.js.map +1 -0
  199. package/lib/transient-error-lookup.js +1 -4
  200. package/lib/transient-error-lookup.js.map +1 -0
  201. package/lib/utils/with-timeout.js +1 -9
  202. package/lib/utils/with-timeout.js.map +1 -0
  203. package/lib/value-parser.js +1 -143
  204. package/lib/value-parser.js.map +1 -0
  205. package/package.json +27 -71
@@ -4,13 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _sprintfJs = require("sprintf-js");
9
-
10
8
  var _writableTrackingBuffer = _interopRequireDefault(require("./tracking-buffer/writable-tracking-buffer"));
11
-
12
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
10
  const optionBufferSize = 20;
15
11
  const TOKEN = {
16
12
  VERSION: 0x00,
@@ -28,27 +24,33 @@ const ENCRYPT = {
28
24
  REQ: 0x03
29
25
  };
30
26
  const encryptByValue = {};
31
-
32
27
  for (const name in ENCRYPT) {
33
28
  const value = ENCRYPT[name];
34
29
  encryptByValue[value] = name;
35
30
  }
36
-
37
31
  const MARS = {
38
32
  OFF: 0x00,
39
33
  ON: 0x01
40
34
  };
41
35
  const marsByValue = {};
42
-
43
36
  for (const name in MARS) {
44
37
  const value = MARS[name];
45
38
  marsByValue[value] = name;
46
39
  }
47
-
48
40
  /*
49
41
  s2.2.6.4
50
42
  */
51
43
  class PreloginPayload {
44
+ data;
45
+ options;
46
+ version;
47
+ encryption;
48
+ encryptionString;
49
+ instance;
50
+ threadId;
51
+ mars;
52
+ marsString;
53
+ fedAuthRequired;
52
54
  constructor(bufferOrOptions = {
53
55
  encrypt: false,
54
56
  version: {
@@ -58,17 +60,6 @@ class PreloginPayload {
58
60
  subbuild: 0
59
61
  }
60
62
  }) {
61
- this.data = void 0;
62
- this.options = void 0;
63
- this.version = void 0;
64
- this.encryption = void 0;
65
- this.encryptionString = void 0;
66
- this.instance = void 0;
67
- this.threadId = void 0;
68
- this.mars = void 0;
69
- this.marsString = void 0;
70
- this.fedAuthRequired = void 0;
71
-
72
63
  if (bufferOrOptions instanceof Buffer) {
73
64
  this.data = bufferOrOptions;
74
65
  this.options = {
@@ -84,25 +75,19 @@ class PreloginPayload {
84
75
  this.options = bufferOrOptions;
85
76
  this.createOptions();
86
77
  }
87
-
88
78
  this.extractOptions();
89
79
  }
90
-
91
80
  createOptions() {
92
81
  const options = [this.createVersionOption(), this.createEncryptionOption(), this.createInstanceOption(), this.createThreadIdOption(), this.createMarsOption(), this.createFedAuthOption()];
93
82
  let length = 0;
94
-
95
83
  for (let i = 0, len = options.length; i < len; i++) {
96
84
  const option = options[i];
97
85
  length += 5 + option.data.length;
98
86
  }
99
-
100
87
  length++; // terminator
101
-
102
88
  this.data = Buffer.alloc(length, 0);
103
89
  let optionOffset = 0;
104
90
  let optionDataOffset = 5 * options.length + 1;
105
-
106
91
  for (let j = 0, len = options.length; j < len; j++) {
107
92
  const option = options[j];
108
93
  this.data.writeUInt8(option.token, optionOffset + 0);
@@ -112,10 +97,8 @@ class PreloginPayload {
112
97
  option.data.copy(this.data, optionDataOffset);
113
98
  optionDataOffset += option.data.length;
114
99
  }
115
-
116
100
  this.data.writeUInt8(TOKEN.TERMINATOR, optionOffset);
117
101
  }
118
-
119
102
  createVersionOption() {
120
103
  const buffer = new _writableTrackingBuffer.default(optionBufferSize);
121
104
  buffer.writeUInt8(this.options.version.major);
@@ -127,22 +110,18 @@ class PreloginPayload {
127
110
  data: buffer.data
128
111
  };
129
112
  }
130
-
131
113
  createEncryptionOption() {
132
114
  const buffer = new _writableTrackingBuffer.default(optionBufferSize);
133
-
134
115
  if (this.options.encrypt) {
135
116
  buffer.writeUInt8(ENCRYPT.ON);
136
117
  } else {
137
118
  buffer.writeUInt8(ENCRYPT.NOT_SUP);
138
119
  }
139
-
140
120
  return {
141
121
  token: TOKEN.ENCRYPTION,
142
122
  data: buffer.data
143
123
  };
144
124
  }
145
-
146
125
  createInstanceOption() {
147
126
  const buffer = new _writableTrackingBuffer.default(optionBufferSize);
148
127
  buffer.writeUInt8(0x00);
@@ -151,7 +130,6 @@ class PreloginPayload {
151
130
  data: buffer.data
152
131
  };
153
132
  }
154
-
155
133
  createThreadIdOption() {
156
134
  const buffer = new _writableTrackingBuffer.default(optionBufferSize);
157
135
  buffer.writeUInt32BE(0x00);
@@ -160,7 +138,6 @@ class PreloginPayload {
160
138
  data: buffer.data
161
139
  };
162
140
  }
163
-
164
141
  createMarsOption() {
165
142
  const buffer = new _writableTrackingBuffer.default(optionBufferSize);
166
143
  buffer.writeUInt8(MARS.OFF);
@@ -169,7 +146,6 @@ class PreloginPayload {
169
146
  data: buffer.data
170
147
  };
171
148
  }
172
-
173
149
  createFedAuthOption() {
174
150
  const buffer = new _writableTrackingBuffer.default(optionBufferSize);
175
151
  buffer.writeUInt8(0x01);
@@ -178,48 +154,37 @@ class PreloginPayload {
178
154
  data: buffer.data
179
155
  };
180
156
  }
181
-
182
157
  extractOptions() {
183
158
  let offset = 0;
184
-
185
159
  while (this.data[offset] !== TOKEN.TERMINATOR) {
186
160
  let dataOffset = this.data.readUInt16BE(offset + 1);
187
161
  const dataLength = this.data.readUInt16BE(offset + 3);
188
-
189
162
  switch (this.data[offset]) {
190
163
  case TOKEN.VERSION:
191
164
  this.extractVersion(dataOffset);
192
165
  break;
193
-
194
166
  case TOKEN.ENCRYPTION:
195
167
  this.extractEncryption(dataOffset);
196
168
  break;
197
-
198
169
  case TOKEN.INSTOPT:
199
170
  this.extractInstance(dataOffset);
200
171
  break;
201
-
202
172
  case TOKEN.THREADID:
203
173
  if (dataLength > 0) {
204
174
  this.extractThreadId(dataOffset);
205
175
  }
206
-
207
176
  break;
208
-
209
177
  case TOKEN.MARS:
210
178
  this.extractMars(dataOffset);
211
179
  break;
212
-
213
180
  case TOKEN.FEDAUTHREQUIRED:
214
181
  this.extractFedAuth(dataOffset);
215
182
  break;
216
183
  }
217
-
218
184
  offset += 5;
219
185
  dataOffset += dataLength;
220
186
  }
221
187
  }
222
-
223
188
  extractVersion(offset) {
224
189
  this.version = {
225
190
  major: this.data.readUInt8(offset + 0),
@@ -228,36 +193,28 @@ class PreloginPayload {
228
193
  subbuild: this.data.readUInt16BE(offset + 4)
229
194
  };
230
195
  }
231
-
232
196
  extractEncryption(offset) {
233
197
  this.encryption = this.data.readUInt8(offset);
234
198
  this.encryptionString = encryptByValue[this.encryption];
235
199
  }
236
-
237
200
  extractInstance(offset) {
238
201
  this.instance = this.data.readUInt8(offset);
239
202
  }
240
-
241
203
  extractThreadId(offset) {
242
204
  this.threadId = this.data.readUInt32BE(offset);
243
205
  }
244
-
245
206
  extractMars(offset) {
246
207
  this.mars = this.data.readUInt8(offset);
247
208
  this.marsString = marsByValue[this.mars];
248
209
  }
249
-
250
210
  extractFedAuth(offset) {
251
211
  this.fedAuthRequired = this.data.readUInt8(offset);
252
212
  }
253
-
254
213
  toString(indent = '') {
255
214
  return indent + 'PreLogin - ' + (0, _sprintfJs.sprintf)('version:%d.%d.%d.%d, encryption:0x%02X(%s), instopt:0x%02X, threadId:0x%08X, mars:0x%02X(%s)', this.version.major, this.version.minor, this.version.build, this.version.subbuild, this.encryption ? this.encryption : 0, this.encryptionString ? this.encryptionString : '', this.instance ? this.instance : 0, this.threadId ? this.threadId : 0, this.mars ? this.mars : 0, this.marsString ? this.marsString : '');
256
215
  }
257
-
258
216
  }
259
-
260
217
  var _default = PreloginPayload;
261
218
  exports.default = _default;
262
219
  module.exports = PreloginPayload;
263
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJvcHRpb25CdWZmZXJTaXplIiwiVE9LRU4iLCJWRVJTSU9OIiwiRU5DUllQVElPTiIsIklOU1RPUFQiLCJUSFJFQURJRCIsIk1BUlMiLCJGRURBVVRIUkVRVUlSRUQiLCJURVJNSU5BVE9SIiwiRU5DUllQVCIsIk9GRiIsIk9OIiwiTk9UX1NVUCIsIlJFUSIsImVuY3J5cHRCeVZhbHVlIiwibmFtZSIsInZhbHVlIiwibWFyc0J5VmFsdWUiLCJQcmVsb2dpblBheWxvYWQiLCJjb25zdHJ1Y3RvciIsImJ1ZmZlck9yT3B0aW9ucyIsImVuY3J5cHQiLCJ2ZXJzaW9uIiwibWFqb3IiLCJtaW5vciIsImJ1aWxkIiwic3ViYnVpbGQiLCJkYXRhIiwib3B0aW9ucyIsImVuY3J5cHRpb24iLCJlbmNyeXB0aW9uU3RyaW5nIiwiaW5zdGFuY2UiLCJ0aHJlYWRJZCIsIm1hcnMiLCJtYXJzU3RyaW5nIiwiZmVkQXV0aFJlcXVpcmVkIiwiQnVmZmVyIiwiY3JlYXRlT3B0aW9ucyIsImV4dHJhY3RPcHRpb25zIiwiY3JlYXRlVmVyc2lvbk9wdGlvbiIsImNyZWF0ZUVuY3J5cHRpb25PcHRpb24iLCJjcmVhdGVJbnN0YW5jZU9wdGlvbiIsImNyZWF0ZVRocmVhZElkT3B0aW9uIiwiY3JlYXRlTWFyc09wdGlvbiIsImNyZWF0ZUZlZEF1dGhPcHRpb24iLCJsZW5ndGgiLCJpIiwibGVuIiwib3B0aW9uIiwiYWxsb2MiLCJvcHRpb25PZmZzZXQiLCJvcHRpb25EYXRhT2Zmc2V0IiwiaiIsIndyaXRlVUludDgiLCJ0b2tlbiIsIndyaXRlVUludDE2QkUiLCJjb3B5IiwiYnVmZmVyIiwiV3JpdGFibGVUcmFja2luZ0J1ZmZlciIsIndyaXRlVUludDMyQkUiLCJvZmZzZXQiLCJkYXRhT2Zmc2V0IiwicmVhZFVJbnQxNkJFIiwiZGF0YUxlbmd0aCIsImV4dHJhY3RWZXJzaW9uIiwiZXh0cmFjdEVuY3J5cHRpb24iLCJleHRyYWN0SW5zdGFuY2UiLCJleHRyYWN0VGhyZWFkSWQiLCJleHRyYWN0TWFycyIsImV4dHJhY3RGZWRBdXRoIiwicmVhZFVJbnQ4IiwicmVhZFVJbnQzMkJFIiwidG9TdHJpbmciLCJpbmRlbnQiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL3ByZWxvZ2luLXBheWxvYWQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3ByaW50ZiB9IGZyb20gJ3NwcmludGYtanMnO1xuXG5pbXBvcnQgV3JpdGFibGVUcmFja2luZ0J1ZmZlciBmcm9tICcuL3RyYWNraW5nLWJ1ZmZlci93cml0YWJsZS10cmFja2luZy1idWZmZXInO1xuXG5jb25zdCBvcHRpb25CdWZmZXJTaXplID0gMjA7XG5cbmNvbnN0IFRPS0VOID0ge1xuICBWRVJTSU9OOiAweDAwLFxuICBFTkNSWVBUSU9OOiAweDAxLFxuICBJTlNUT1BUOiAweDAyLFxuICBUSFJFQURJRDogMHgwMyxcbiAgTUFSUzogMHgwNCxcbiAgRkVEQVVUSFJFUVVJUkVEOiAweDA2LFxuICBURVJNSU5BVE9SOiAweEZGXG59O1xuXG5jb25zdCBFTkNSWVBUOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge1xuICBPRkY6IDB4MDAsXG4gIE9OOiAweDAxLFxuICBOT1RfU1VQOiAweDAyLFxuICBSRVE6IDB4MDNcbn07XG5cbmNvbnN0IGVuY3J5cHRCeVZhbHVlOiB7IFtrZXk6IG51bWJlcl06IHN0cmluZyB9ID0ge307XG5cbmZvciAoY29uc3QgbmFtZSBpbiBFTkNSWVBUKSB7XG4gIGNvbnN0IHZhbHVlID0gRU5DUllQVFtuYW1lXTtcbiAgZW5jcnlwdEJ5VmFsdWVbdmFsdWVdID0gbmFtZTtcbn1cblxuY29uc3QgTUFSUzogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHtcbiAgT0ZGOiAweDAwLFxuICBPTjogMHgwMVxufTtcblxuY29uc3QgbWFyc0J5VmFsdWU6IHsgW2tleTogbnVtYmVyXTogc3RyaW5nIH0gPSB7fTtcblxuZm9yIChjb25zdCBuYW1lIGluIE1BUlMpIHtcbiAgY29uc3QgdmFsdWUgPSBNQVJTW25hbWVdO1xuICBtYXJzQnlWYWx1ZVt2YWx1ZV0gPSBuYW1lO1xufVxuXG5pbnRlcmZhY2UgT3B0aW9ucyB7XG4gIGVuY3J5cHQ6IGJvb2xlYW47XG4gIHZlcnNpb246IHtcbiAgICBtYWpvcjogbnVtYmVyO1xuICAgIG1pbm9yOiBudW1iZXI7XG4gICAgYnVpbGQ6IG51bWJlcjtcbiAgICBzdWJidWlsZDogbnVtYmVyO1xuICB9O1xufVxuXG4vKlxuICBzMi4yLjYuNFxuICovXG5jbGFzcyBQcmVsb2dpblBheWxvYWQge1xuICBkYXRhITogQnVmZmVyO1xuICBvcHRpb25zOiBPcHRpb25zO1xuXG4gIHZlcnNpb24hOiB7XG4gICAgbWFqb3I6IG51bWJlcjtcbiAgICBtaW5vcjogbnVtYmVyO1xuICAgIGJ1aWxkOiBudW1iZXI7XG4gICAgc3ViYnVpbGQ6IG51bWJlcjtcbiAgfTtcblxuICBlbmNyeXB0aW9uITogbnVtYmVyO1xuICBlbmNyeXB0aW9uU3RyaW5nITogc3RyaW5nO1xuXG4gIGluc3RhbmNlITogbnVtYmVyO1xuXG4gIHRocmVhZElkITogbnVtYmVyO1xuXG4gIG1hcnMhOiBudW1iZXI7XG4gIG1hcnNTdHJpbmchOiBzdHJpbmc7XG4gIGZlZEF1dGhSZXF1aXJlZCE6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihidWZmZXJPck9wdGlvbnM6IEJ1ZmZlciB8IE9wdGlvbnMgPSB7IGVuY3J5cHQ6IGZhbHNlLCB2ZXJzaW9uOiB7IG1ham9yOiAwLCBtaW5vcjogMCwgYnVpbGQ6IDAsIHN1YmJ1aWxkOiAwIH0gfSkge1xuICAgIGlmIChidWZmZXJPck9wdGlvbnMgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAgIHRoaXMuZGF0YSA9IGJ1ZmZlck9yT3B0aW9ucztcbiAgICAgIHRoaXMub3B0aW9ucyA9IHsgZW5jcnlwdDogZmFsc2UsIHZlcnNpb246IHsgbWFqb3I6IDAsIG1pbm9yOiAwLCBidWlsZDogMCwgc3ViYnVpbGQ6IDAgfSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wdGlvbnMgPSBidWZmZXJPck9wdGlvbnM7XG4gICAgICB0aGlzLmNyZWF0ZU9wdGlvbnMoKTtcbiAgICB9XG4gICAgdGhpcy5leHRyYWN0T3B0aW9ucygpO1xuICB9XG5cbiAgY3JlYXRlT3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25zID0gW1xuICAgICAgdGhpcy5jcmVhdGVWZXJzaW9uT3B0aW9uKCksXG4gICAgICB0aGlzLmNyZWF0ZUVuY3J5cHRpb25PcHRpb24oKSxcbiAgICAgIHRoaXMuY3JlYXRlSW5zdGFuY2VPcHRpb24oKSxcbiAgICAgIHRoaXMuY3JlYXRlVGhyZWFkSWRPcHRpb24oKSxcbiAgICAgIHRoaXMuY3JlYXRlTWFyc09wdGlvbigpLFxuICAgICAgdGhpcy5jcmVhdGVGZWRBdXRoT3B0aW9uKClcbiAgICBdO1xuXG4gICAgbGV0IGxlbmd0aCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IG9wdGlvbnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IG9wdGlvbnNbaV07XG4gICAgICBsZW5ndGggKz0gNSArIG9wdGlvbi5kYXRhLmxlbmd0aDtcbiAgICB9XG4gICAgbGVuZ3RoKys7IC8vIHRlcm1pbmF0b3JcbiAgICB0aGlzLmRhdGEgPSBCdWZmZXIuYWxsb2MobGVuZ3RoLCAwKTtcbiAgICBsZXQgb3B0aW9uT2Zmc2V0ID0gMDtcbiAgICBsZXQgb3B0aW9uRGF0YU9mZnNldCA9IDUgKiBvcHRpb25zLmxlbmd0aCArIDE7XG5cbiAgICBmb3IgKGxldCBqID0gMCwgbGVuID0gb3B0aW9ucy5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgY29uc3Qgb3B0aW9uID0gb3B0aW9uc1tqXTtcbiAgICAgIHRoaXMuZGF0YS53cml0ZVVJbnQ4KG9wdGlvbi50b2tlbiwgb3B0aW9uT2Zmc2V0ICsgMCk7XG4gICAgICB0aGlzLmRhdGEud3JpdGVVSW50MTZCRShvcHRpb25EYXRhT2Zmc2V0LCBvcHRpb25PZmZzZXQgKyAxKTtcbiAgICAgIHRoaXMuZGF0YS53cml0ZVVJbnQxNkJFKG9wdGlvbi5kYXRhLmxlbmd0aCwgb3B0aW9uT2Zmc2V0ICsgMyk7XG4gICAgICBvcHRpb25PZmZzZXQgKz0gNTtcbiAgICAgIG9wdGlvbi5kYXRhLmNvcHkodGhpcy5kYXRhLCBvcHRpb25EYXRhT2Zmc2V0KTtcbiAgICAgIG9wdGlvbkRhdGFPZmZzZXQgKz0gb3B0aW9uLmRhdGEubGVuZ3RoO1xuICAgIH1cblxuICAgIHRoaXMuZGF0YS53cml0ZVVJbnQ4KFRPS0VOLlRFUk1JTkFUT1IsIG9wdGlvbk9mZnNldCk7XG4gIH1cblxuICBjcmVhdGVWZXJzaW9uT3B0aW9uKCkge1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKG9wdGlvbkJ1ZmZlclNpemUpO1xuICAgIGJ1ZmZlci53cml0ZVVJbnQ4KHRoaXMub3B0aW9ucy52ZXJzaW9uLm1ham9yKTtcbiAgICBidWZmZXIud3JpdGVVSW50OCh0aGlzLm9wdGlvbnMudmVyc2lvbi5taW5vcik7XG4gICAgYnVmZmVyLndyaXRlVUludDE2QkUodGhpcy5vcHRpb25zLnZlcnNpb24uYnVpbGQpO1xuICAgIGJ1ZmZlci53cml0ZVVJbnQxNkJFKHRoaXMub3B0aW9ucy52ZXJzaW9uLnN1YmJ1aWxkKTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW46IFRPS0VOLlZFUlNJT04sXG4gICAgICBkYXRhOiBidWZmZXIuZGF0YVxuICAgIH07XG4gIH1cblxuICBjcmVhdGVFbmNyeXB0aW9uT3B0aW9uKCkge1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKG9wdGlvbkJ1ZmZlclNpemUpO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZW5jcnlwdCkge1xuICAgICAgYnVmZmVyLndyaXRlVUludDgoRU5DUllQVC5PTik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1ZmZlci53cml0ZVVJbnQ4KEVOQ1JZUFQuTk9UX1NVUCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB0b2tlbjogVE9LRU4uRU5DUllQVElPTixcbiAgICAgIGRhdGE6IGJ1ZmZlci5kYXRhXG4gICAgfTtcbiAgfVxuXG4gIGNyZWF0ZUluc3RhbmNlT3B0aW9uKCkge1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKG9wdGlvbkJ1ZmZlclNpemUpO1xuICAgIGJ1ZmZlci53cml0ZVVJbnQ4KDB4MDApO1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbjogVE9LRU4uSU5TVE9QVCxcbiAgICAgIGRhdGE6IGJ1ZmZlci5kYXRhXG4gICAgfTtcbiAgfVxuXG4gIGNyZWF0ZVRocmVhZElkT3B0aW9uKCkge1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKG9wdGlvbkJ1ZmZlclNpemUpO1xuICAgIGJ1ZmZlci53cml0ZVVJbnQzMkJFKDB4MDApO1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbjogVE9LRU4uVEhSRUFESUQsXG4gICAgICBkYXRhOiBidWZmZXIuZGF0YVxuICAgIH07XG4gIH1cblxuICBjcmVhdGVNYXJzT3B0aW9uKCkge1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKG9wdGlvbkJ1ZmZlclNpemUpO1xuICAgIGJ1ZmZlci53cml0ZVVJbnQ4KE1BUlMuT0ZGKTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW46IFRPS0VOLk1BUlMsXG4gICAgICBkYXRhOiBidWZmZXIuZGF0YVxuICAgIH07XG4gIH1cblxuICBjcmVhdGVGZWRBdXRoT3B0aW9uKCkge1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKG9wdGlvbkJ1ZmZlclNpemUpO1xuICAgIGJ1ZmZlci53cml0ZVVJbnQ4KDB4MDEpO1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbjogVE9LRU4uRkVEQVVUSFJFUVVJUkVELFxuICAgICAgZGF0YTogYnVmZmVyLmRhdGFcbiAgICB9O1xuICB9XG5cbiAgZXh0cmFjdE9wdGlvbnMoKSB7XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgd2hpbGUgKHRoaXMuZGF0YVtvZmZzZXRdICE9PSBUT0tFTi5URVJNSU5BVE9SKSB7XG4gICAgICBsZXQgZGF0YU9mZnNldCA9IHRoaXMuZGF0YS5yZWFkVUludDE2QkUob2Zmc2V0ICsgMSk7XG4gICAgICBjb25zdCBkYXRhTGVuZ3RoID0gdGhpcy5kYXRhLnJlYWRVSW50MTZCRShvZmZzZXQgKyAzKTtcbiAgICAgIHN3aXRjaCAodGhpcy5kYXRhW29mZnNldF0pIHtcbiAgICAgICAgY2FzZSBUT0tFTi5WRVJTSU9OOlxuICAgICAgICAgIHRoaXMuZXh0cmFjdFZlcnNpb24oZGF0YU9mZnNldCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgVE9LRU4uRU5DUllQVElPTjpcbiAgICAgICAgICB0aGlzLmV4dHJhY3RFbmNyeXB0aW9uKGRhdGFPZmZzZXQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFRPS0VOLklOU1RPUFQ6XG4gICAgICAgICAgdGhpcy5leHRyYWN0SW5zdGFuY2UoZGF0YU9mZnNldCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgVE9LRU4uVEhSRUFESUQ6XG4gICAgICAgICAgaWYgKGRhdGFMZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmV4dHJhY3RUaHJlYWRJZChkYXRhT2Zmc2V0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgVE9LRU4uTUFSUzpcbiAgICAgICAgICB0aGlzLmV4dHJhY3RNYXJzKGRhdGFPZmZzZXQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFRPS0VOLkZFREFVVEhSRVFVSVJFRDpcbiAgICAgICAgICB0aGlzLmV4dHJhY3RGZWRBdXRoKGRhdGFPZmZzZXQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgb2Zmc2V0ICs9IDU7XG4gICAgICBkYXRhT2Zmc2V0ICs9IGRhdGFMZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgZXh0cmFjdFZlcnNpb24ob2Zmc2V0OiBudW1iZXIpIHtcbiAgICB0aGlzLnZlcnNpb24gPSB7XG4gICAgICBtYWpvcjogdGhpcy5kYXRhLnJlYWRVSW50OChvZmZzZXQgKyAwKSxcbiAgICAgIG1pbm9yOiB0aGlzLmRhdGEucmVhZFVJbnQ4KG9mZnNldCArIDEpLFxuICAgICAgYnVpbGQ6IHRoaXMuZGF0YS5yZWFkVUludDE2QkUob2Zmc2V0ICsgMiksXG4gICAgICBzdWJidWlsZDogdGhpcy5kYXRhLnJlYWRVSW50MTZCRShvZmZzZXQgKyA0KVxuICAgIH07XG4gIH1cblxuICBleHRyYWN0RW5jcnlwdGlvbihvZmZzZXQ6IG51bWJlcikge1xuICAgIHRoaXMuZW5jcnlwdGlvbiA9IHRoaXMuZGF0YS5yZWFkVUludDgob2Zmc2V0KTtcbiAgICB0aGlzLmVuY3J5cHRpb25TdHJpbmcgPSBlbmNyeXB0QnlWYWx1ZVt0aGlzLmVuY3J5cHRpb25dO1xuICB9XG5cbiAgZXh0cmFjdEluc3RhbmNlKG9mZnNldDogbnVtYmVyKSB7XG4gICAgdGhpcy5pbnN0YW5jZSA9IHRoaXMuZGF0YS5yZWFkVUludDgob2Zmc2V0KTtcbiAgfVxuXG4gIGV4dHJhY3RUaHJlYWRJZChvZmZzZXQ6IG51bWJlcikge1xuICAgIHRoaXMudGhyZWFkSWQgPSB0aGlzLmRhdGEucmVhZFVJbnQzMkJFKG9mZnNldCk7XG4gIH1cblxuICBleHRyYWN0TWFycyhvZmZzZXQ6IG51bWJlcikge1xuICAgIHRoaXMubWFycyA9IHRoaXMuZGF0YS5yZWFkVUludDgob2Zmc2V0KTtcbiAgICB0aGlzLm1hcnNTdHJpbmcgPSBtYXJzQnlWYWx1ZVt0aGlzLm1hcnNdO1xuICB9XG5cbiAgZXh0cmFjdEZlZEF1dGgob2Zmc2V0OiBudW1iZXIpIHtcbiAgICB0aGlzLmZlZEF1dGhSZXF1aXJlZCA9IHRoaXMuZGF0YS5yZWFkVUludDgob2Zmc2V0KTtcbiAgfVxuXG4gIHRvU3RyaW5nKGluZGVudCA9ICcnKSB7XG4gICAgcmV0dXJuIGluZGVudCArICdQcmVMb2dpbiAtICcgKyBzcHJpbnRmKFxuICAgICAgJ3ZlcnNpb246JWQuJWQuJWQuJWQsIGVuY3J5cHRpb246MHglMDJYKCVzKSwgaW5zdG9wdDoweCUwMlgsIHRocmVhZElkOjB4JTA4WCwgbWFyczoweCUwMlgoJXMpJyxcbiAgICAgIHRoaXMudmVyc2lvbi5tYWpvciwgdGhpcy52ZXJzaW9uLm1pbm9yLCB0aGlzLnZlcnNpb24uYnVpbGQsIHRoaXMudmVyc2lvbi5zdWJidWlsZCxcbiAgICAgIHRoaXMuZW5jcnlwdGlvbiA/IHRoaXMuZW5jcnlwdGlvbiA6IDAsXG4gICAgICB0aGlzLmVuY3J5cHRpb25TdHJpbmcgPyB0aGlzLmVuY3J5cHRpb25TdHJpbmcgOiAnJyxcbiAgICAgIHRoaXMuaW5zdGFuY2UgPyB0aGlzLmluc3RhbmNlIDogMCxcbiAgICAgIHRoaXMudGhyZWFkSWQgPyB0aGlzLnRocmVhZElkIDogMCxcbiAgICAgIHRoaXMubWFycyA/IHRoaXMubWFycyA6IDAsXG4gICAgICB0aGlzLm1hcnNTdHJpbmcgPyB0aGlzLm1hcnNTdHJpbmcgOiAnJ1xuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUHJlbG9naW5QYXlsb2FkO1xubW9kdWxlLmV4cG9ydHMgPSBQcmVsb2dpblBheWxvYWQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFFQTs7OztBQUVBLE1BQU1BLGdCQUFnQixHQUFHLEVBQXpCO0FBRUEsTUFBTUMsS0FBSyxHQUFHO0VBQ1pDLE9BQU8sRUFBRSxJQURHO0VBRVpDLFVBQVUsRUFBRSxJQUZBO0VBR1pDLE9BQU8sRUFBRSxJQUhHO0VBSVpDLFFBQVEsRUFBRSxJQUpFO0VBS1pDLElBQUksRUFBRSxJQUxNO0VBTVpDLGVBQWUsRUFBRSxJQU5MO0VBT1pDLFVBQVUsRUFBRTtBQVBBLENBQWQ7QUFVQSxNQUFNQyxPQUFrQyxHQUFHO0VBQ3pDQyxHQUFHLEVBQUUsSUFEb0M7RUFFekNDLEVBQUUsRUFBRSxJQUZxQztFQUd6Q0MsT0FBTyxFQUFFLElBSGdDO0VBSXpDQyxHQUFHLEVBQUU7QUFKb0MsQ0FBM0M7QUFPQSxNQUFNQyxjQUF5QyxHQUFHLEVBQWxEOztBQUVBLEtBQUssTUFBTUMsSUFBWCxJQUFtQk4sT0FBbkIsRUFBNEI7RUFDMUIsTUFBTU8sS0FBSyxHQUFHUCxPQUFPLENBQUNNLElBQUQsQ0FBckI7RUFDQUQsY0FBYyxDQUFDRSxLQUFELENBQWQsR0FBd0JELElBQXhCO0FBQ0Q7O0FBRUQsTUFBTVQsSUFBK0IsR0FBRztFQUN0Q0ksR0FBRyxFQUFFLElBRGlDO0VBRXRDQyxFQUFFLEVBQUU7QUFGa0MsQ0FBeEM7QUFLQSxNQUFNTSxXQUFzQyxHQUFHLEVBQS9DOztBQUVBLEtBQUssTUFBTUYsSUFBWCxJQUFtQlQsSUFBbkIsRUFBeUI7RUFDdkIsTUFBTVUsS0FBSyxHQUFHVixJQUFJLENBQUNTLElBQUQsQ0FBbEI7RUFDQUUsV0FBVyxDQUFDRCxLQUFELENBQVgsR0FBcUJELElBQXJCO0FBQ0Q7O0FBWUQ7QUFDQTtBQUNBO0FBQ0EsTUFBTUcsZUFBTixDQUFzQjtFQXNCcEJDLFdBQVcsQ0FBQ0MsZUFBaUMsR0FBRztJQUFFQyxPQUFPLEVBQUUsS0FBWDtJQUFrQkMsT0FBTyxFQUFFO01BQUVDLEtBQUssRUFBRSxDQUFUO01BQVlDLEtBQUssRUFBRSxDQUFuQjtNQUFzQkMsS0FBSyxFQUFFLENBQTdCO01BQWdDQyxRQUFRLEVBQUU7SUFBMUM7RUFBM0IsQ0FBckMsRUFBaUg7SUFBQSxLQXJCNUhDLElBcUI0SDtJQUFBLEtBcEI1SEMsT0FvQjRIO0lBQUEsS0FsQjVITixPQWtCNEg7SUFBQSxLQVg1SE8sVUFXNEg7SUFBQSxLQVY1SEMsZ0JBVTRIO0lBQUEsS0FSNUhDLFFBUTRIO0lBQUEsS0FONUhDLFFBTTRIO0lBQUEsS0FKNUhDLElBSTRIO0lBQUEsS0FINUhDLFVBRzRIO0lBQUEsS0FGNUhDLGVBRTRIOztJQUMxSCxJQUFJZixlQUFlLFlBQVlnQixNQUEvQixFQUF1QztNQUNyQyxLQUFLVCxJQUFMLEdBQVlQLGVBQVo7TUFDQSxLQUFLUSxPQUFMLEdBQWU7UUFBRVAsT0FBTyxFQUFFLEtBQVg7UUFBa0JDLE9BQU8sRUFBRTtVQUFFQyxLQUFLLEVBQUUsQ0FBVDtVQUFZQyxLQUFLLEVBQUUsQ0FBbkI7VUFBc0JDLEtBQUssRUFBRSxDQUE3QjtVQUFnQ0MsUUFBUSxFQUFFO1FBQTFDO01BQTNCLENBQWY7SUFDRCxDQUhELE1BR087TUFDTCxLQUFLRSxPQUFMLEdBQWVSLGVBQWY7TUFDQSxLQUFLaUIsYUFBTDtJQUNEOztJQUNELEtBQUtDLGNBQUw7RUFDRDs7RUFFREQsYUFBYSxHQUFHO0lBQ2QsTUFBTVQsT0FBTyxHQUFHLENBQ2QsS0FBS1csbUJBQUwsRUFEYyxFQUVkLEtBQUtDLHNCQUFMLEVBRmMsRUFHZCxLQUFLQyxvQkFBTCxFQUhjLEVBSWQsS0FBS0Msb0JBQUwsRUFKYyxFQUtkLEtBQUtDLGdCQUFMLEVBTGMsRUFNZCxLQUFLQyxtQkFBTCxFQU5jLENBQWhCO0lBU0EsSUFBSUMsTUFBTSxHQUFHLENBQWI7O0lBQ0EsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBUixFQUFXQyxHQUFHLEdBQUduQixPQUFPLENBQUNpQixNQUE5QixFQUFzQ0MsQ0FBQyxHQUFHQyxHQUExQyxFQUErQ0QsQ0FBQyxFQUFoRCxFQUFvRDtNQUNsRCxNQUFNRSxNQUFNLEdBQUdwQixPQUFPLENBQUNrQixDQUFELENBQXRCO01BQ0FELE1BQU0sSUFBSSxJQUFJRyxNQUFNLENBQUNyQixJQUFQLENBQVlrQixNQUExQjtJQUNEOztJQUNEQSxNQUFNLEdBZlEsQ0FlSjs7SUFDVixLQUFLbEIsSUFBTCxHQUFZUyxNQUFNLENBQUNhLEtBQVAsQ0FBYUosTUFBYixFQUFxQixDQUFyQixDQUFaO0lBQ0EsSUFBSUssWUFBWSxHQUFHLENBQW5CO0lBQ0EsSUFBSUMsZ0JBQWdCLEdBQUcsSUFBSXZCLE9BQU8sQ0FBQ2lCLE1BQVosR0FBcUIsQ0FBNUM7O0lBRUEsS0FBSyxJQUFJTyxDQUFDLEdBQUcsQ0FBUixFQUFXTCxHQUFHLEdBQUduQixPQUFPLENBQUNpQixNQUE5QixFQUFzQ08sQ0FBQyxHQUFHTCxHQUExQyxFQUErQ0ssQ0FBQyxFQUFoRCxFQUFvRDtNQUNsRCxNQUFNSixNQUFNLEdBQUdwQixPQUFPLENBQUN3QixDQUFELENBQXRCO01BQ0EsS0FBS3pCLElBQUwsQ0FBVTBCLFVBQVYsQ0FBcUJMLE1BQU0sQ0FBQ00sS0FBNUIsRUFBbUNKLFlBQVksR0FBRyxDQUFsRDtNQUNBLEtBQUt2QixJQUFMLENBQVU0QixhQUFWLENBQXdCSixnQkFBeEIsRUFBMENELFlBQVksR0FBRyxDQUF6RDtNQUNBLEtBQUt2QixJQUFMLENBQVU0QixhQUFWLENBQXdCUCxNQUFNLENBQUNyQixJQUFQLENBQVlrQixNQUFwQyxFQUE0Q0ssWUFBWSxHQUFHLENBQTNEO01BQ0FBLFlBQVksSUFBSSxDQUFoQjtNQUNBRixNQUFNLENBQUNyQixJQUFQLENBQVk2QixJQUFaLENBQWlCLEtBQUs3QixJQUF0QixFQUE0QndCLGdCQUE1QjtNQUNBQSxnQkFBZ0IsSUFBSUgsTUFBTSxDQUFDckIsSUFBUCxDQUFZa0IsTUFBaEM7SUFDRDs7SUFFRCxLQUFLbEIsSUFBTCxDQUFVMEIsVUFBVixDQUFxQnBELEtBQUssQ0FBQ08sVUFBM0IsRUFBdUMwQyxZQUF2QztFQUNEOztFQUVEWCxtQkFBbUIsR0FBRztJQUNwQixNQUFNa0IsTUFBTSxHQUFHLElBQUlDLCtCQUFKLENBQTJCMUQsZ0JBQTNCLENBQWY7SUFDQXlELE1BQU0sQ0FBQ0osVUFBUCxDQUFrQixLQUFLekIsT0FBTCxDQUFhTixPQUFiLENBQXFCQyxLQUF2QztJQUNBa0MsTUFBTSxDQUFDSixVQUFQLENBQWtCLEtBQUt6QixPQUFMLENBQWFOLE9BQWIsQ0FBcUJFLEtBQXZDO0lBQ0FpQyxNQUFNLENBQUNGLGFBQVAsQ0FBcUIsS0FBSzNCLE9BQUwsQ0FBYU4sT0FBYixDQUFxQkcsS0FBMUM7SUFDQWdDLE1BQU0sQ0FBQ0YsYUFBUCxDQUFxQixLQUFLM0IsT0FBTCxDQUFhTixPQUFiLENBQXFCSSxRQUExQztJQUNBLE9BQU87TUFDTDRCLEtBQUssRUFBRXJELEtBQUssQ0FBQ0MsT0FEUjtNQUVMeUIsSUFBSSxFQUFFOEIsTUFBTSxDQUFDOUI7SUFGUixDQUFQO0VBSUQ7O0VBRURhLHNCQUFzQixHQUFHO0lBQ3ZCLE1BQU1pQixNQUFNLEdBQUcsSUFBSUMsK0JBQUosQ0FBMkIxRCxnQkFBM0IsQ0FBZjs7SUFDQSxJQUFJLEtBQUs0QixPQUFMLENBQWFQLE9BQWpCLEVBQTBCO01BQ3hCb0MsTUFBTSxDQUFDSixVQUFQLENBQWtCNUMsT0FBTyxDQUFDRSxFQUExQjtJQUNELENBRkQsTUFFTztNQUNMOEMsTUFBTSxDQUFDSixVQUFQLENBQWtCNUMsT0FBTyxDQUFDRyxPQUExQjtJQUNEOztJQUNELE9BQU87TUFDTDBDLEtBQUssRUFBRXJELEtBQUssQ0FBQ0UsVUFEUjtNQUVMd0IsSUFBSSxFQUFFOEIsTUFBTSxDQUFDOUI7SUFGUixDQUFQO0VBSUQ7O0VBRURjLG9CQUFvQixHQUFHO0lBQ3JCLE1BQU1nQixNQUFNLEdBQUcsSUFBSUMsK0JBQUosQ0FBMkIxRCxnQkFBM0IsQ0FBZjtJQUNBeUQsTUFBTSxDQUFDSixVQUFQLENBQWtCLElBQWxCO0lBQ0EsT0FBTztNQUNMQyxLQUFLLEVBQUVyRCxLQUFLLENBQUNHLE9BRFI7TUFFTHVCLElBQUksRUFBRThCLE1BQU0sQ0FBQzlCO0lBRlIsQ0FBUDtFQUlEOztFQUVEZSxvQkFBb0IsR0FBRztJQUNyQixNQUFNZSxNQUFNLEdBQUcsSUFBSUMsK0JBQUosQ0FBMkIxRCxnQkFBM0IsQ0FBZjtJQUNBeUQsTUFBTSxDQUFDRSxhQUFQLENBQXFCLElBQXJCO0lBQ0EsT0FBTztNQUNMTCxLQUFLLEVBQUVyRCxLQUFLLENBQUNJLFFBRFI7TUFFTHNCLElBQUksRUFBRThCLE1BQU0sQ0FBQzlCO0lBRlIsQ0FBUDtFQUlEOztFQUVEZ0IsZ0JBQWdCLEdBQUc7SUFDakIsTUFBTWMsTUFBTSxHQUFHLElBQUlDLCtCQUFKLENBQTJCMUQsZ0JBQTNCLENBQWY7SUFDQXlELE1BQU0sQ0FBQ0osVUFBUCxDQUFrQi9DLElBQUksQ0FBQ0ksR0FBdkI7SUFDQSxPQUFPO01BQ0w0QyxLQUFLLEVBQUVyRCxLQUFLLENBQUNLLElBRFI7TUFFTHFCLElBQUksRUFBRThCLE1BQU0sQ0FBQzlCO0lBRlIsQ0FBUDtFQUlEOztFQUVEaUIsbUJBQW1CLEdBQUc7SUFDcEIsTUFBTWEsTUFBTSxHQUFHLElBQUlDLCtCQUFKLENBQTJCMUQsZ0JBQTNCLENBQWY7SUFDQXlELE1BQU0sQ0FBQ0osVUFBUCxDQUFrQixJQUFsQjtJQUNBLE9BQU87TUFDTEMsS0FBSyxFQUFFckQsS0FBSyxDQUFDTSxlQURSO01BRUxvQixJQUFJLEVBQUU4QixNQUFNLENBQUM5QjtJQUZSLENBQVA7RUFJRDs7RUFFRFcsY0FBYyxHQUFHO0lBQ2YsSUFBSXNCLE1BQU0sR0FBRyxDQUFiOztJQUNBLE9BQU8sS0FBS2pDLElBQUwsQ0FBVWlDLE1BQVYsTUFBc0IzRCxLQUFLLENBQUNPLFVBQW5DLEVBQStDO01BQzdDLElBQUlxRCxVQUFVLEdBQUcsS0FBS2xDLElBQUwsQ0FBVW1DLFlBQVYsQ0FBdUJGLE1BQU0sR0FBRyxDQUFoQyxDQUFqQjtNQUNBLE1BQU1HLFVBQVUsR0FBRyxLQUFLcEMsSUFBTCxDQUFVbUMsWUFBVixDQUF1QkYsTUFBTSxHQUFHLENBQWhDLENBQW5COztNQUNBLFFBQVEsS0FBS2pDLElBQUwsQ0FBVWlDLE1BQVYsQ0FBUjtRQUNFLEtBQUszRCxLQUFLLENBQUNDLE9BQVg7VUFDRSxLQUFLOEQsY0FBTCxDQUFvQkgsVUFBcEI7VUFDQTs7UUFDRixLQUFLNUQsS0FBSyxDQUFDRSxVQUFYO1VBQ0UsS0FBSzhELGlCQUFMLENBQXVCSixVQUF2QjtVQUNBOztRQUNGLEtBQUs1RCxLQUFLLENBQUNHLE9BQVg7VUFDRSxLQUFLOEQsZUFBTCxDQUFxQkwsVUFBckI7VUFDQTs7UUFDRixLQUFLNUQsS0FBSyxDQUFDSSxRQUFYO1VBQ0UsSUFBSTBELFVBQVUsR0FBRyxDQUFqQixFQUFvQjtZQUNsQixLQUFLSSxlQUFMLENBQXFCTixVQUFyQjtVQUNEOztVQUNEOztRQUNGLEtBQUs1RCxLQUFLLENBQUNLLElBQVg7VUFDRSxLQUFLOEQsV0FBTCxDQUFpQlAsVUFBakI7VUFDQTs7UUFDRixLQUFLNUQsS0FBSyxDQUFDTSxlQUFYO1VBQ0UsS0FBSzhELGNBQUwsQ0FBb0JSLFVBQXBCO1VBQ0E7TUFwQko7O01Bc0JBRCxNQUFNLElBQUksQ0FBVjtNQUNBQyxVQUFVLElBQUlFLFVBQWQ7SUFDRDtFQUNGOztFQUVEQyxjQUFjLENBQUNKLE1BQUQsRUFBaUI7SUFDN0IsS0FBS3RDLE9BQUwsR0FBZTtNQUNiQyxLQUFLLEVBQUUsS0FBS0ksSUFBTCxDQUFVMkMsU0FBVixDQUFvQlYsTUFBTSxHQUFHLENBQTdCLENBRE07TUFFYnBDLEtBQUssRUFBRSxLQUFLRyxJQUFMLENBQVUyQyxTQUFWLENBQW9CVixNQUFNLEdBQUcsQ0FBN0IsQ0FGTTtNQUdibkMsS0FBSyxFQUFFLEtBQUtFLElBQUwsQ0FBVW1DLFlBQVYsQ0FBdUJGLE1BQU0sR0FBRyxDQUFoQyxDQUhNO01BSWJsQyxRQUFRLEVBQUUsS0FBS0MsSUFBTCxDQUFVbUMsWUFBVixDQUF1QkYsTUFBTSxHQUFHLENBQWhDO0lBSkcsQ0FBZjtFQU1EOztFQUVESyxpQkFBaUIsQ0FBQ0wsTUFBRCxFQUFpQjtJQUNoQyxLQUFLL0IsVUFBTCxHQUFrQixLQUFLRixJQUFMLENBQVUyQyxTQUFWLENBQW9CVixNQUFwQixDQUFsQjtJQUNBLEtBQUs5QixnQkFBTCxHQUF3QmhCLGNBQWMsQ0FBQyxLQUFLZSxVQUFOLENBQXRDO0VBQ0Q7O0VBRURxQyxlQUFlLENBQUNOLE1BQUQsRUFBaUI7SUFDOUIsS0FBSzdCLFFBQUwsR0FBZ0IsS0FBS0osSUFBTCxDQUFVMkMsU0FBVixDQUFvQlYsTUFBcEIsQ0FBaEI7RUFDRDs7RUFFRE8sZUFBZSxDQUFDUCxNQUFELEVBQWlCO0lBQzlCLEtBQUs1QixRQUFMLEdBQWdCLEtBQUtMLElBQUwsQ0FBVTRDLFlBQVYsQ0FBdUJYLE1BQXZCLENBQWhCO0VBQ0Q7O0VBRURRLFdBQVcsQ0FBQ1IsTUFBRCxFQUFpQjtJQUMxQixLQUFLM0IsSUFBTCxHQUFZLEtBQUtOLElBQUwsQ0FBVTJDLFNBQVYsQ0FBb0JWLE1BQXBCLENBQVo7SUFDQSxLQUFLMUIsVUFBTCxHQUFrQmpCLFdBQVcsQ0FBQyxLQUFLZ0IsSUFBTixDQUE3QjtFQUNEOztFQUVEb0MsY0FBYyxDQUFDVCxNQUFELEVBQWlCO0lBQzdCLEtBQUt6QixlQUFMLEdBQXVCLEtBQUtSLElBQUwsQ0FBVTJDLFNBQVYsQ0FBb0JWLE1BQXBCLENBQXZCO0VBQ0Q7O0VBRURZLFFBQVEsQ0FBQ0MsTUFBTSxHQUFHLEVBQVYsRUFBYztJQUNwQixPQUFPQSxNQUFNLEdBQUcsYUFBVCxHQUF5Qix3QkFDOUIsOEZBRDhCLEVBRTlCLEtBQUtuRCxPQUFMLENBQWFDLEtBRmlCLEVBRVYsS0FBS0QsT0FBTCxDQUFhRSxLQUZILEVBRVUsS0FBS0YsT0FBTCxDQUFhRyxLQUZ2QixFQUU4QixLQUFLSCxPQUFMLENBQWFJLFFBRjNDLEVBRzlCLEtBQUtHLFVBQUwsR0FBa0IsS0FBS0EsVUFBdkIsR0FBb0MsQ0FITixFQUk5QixLQUFLQyxnQkFBTCxHQUF3QixLQUFLQSxnQkFBN0IsR0FBZ0QsRUFKbEIsRUFLOUIsS0FBS0MsUUFBTCxHQUFnQixLQUFLQSxRQUFyQixHQUFnQyxDQUxGLEVBTTlCLEtBQUtDLFFBQUwsR0FBZ0IsS0FBS0EsUUFBckIsR0FBZ0MsQ0FORixFQU85QixLQUFLQyxJQUFMLEdBQVksS0FBS0EsSUFBakIsR0FBd0IsQ0FQTSxFQVE5QixLQUFLQyxVQUFMLEdBQWtCLEtBQUtBLFVBQXZCLEdBQW9DLEVBUk4sQ0FBaEM7RUFVRDs7QUF6TW1COztlQTRNUGhCLGU7O0FBQ2Z3RCxNQUFNLENBQUNDLE9BQVAsR0FBaUJ6RCxlQUFqQiJ9
220
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc3ByaW50ZkpzIiwicmVxdWlyZSIsIl93cml0YWJsZVRyYWNraW5nQnVmZmVyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIm9iaiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0Iiwib3B0aW9uQnVmZmVyU2l6ZSIsIlRPS0VOIiwiVkVSU0lPTiIsIkVOQ1JZUFRJT04iLCJJTlNUT1BUIiwiVEhSRUFESUQiLCJNQVJTIiwiRkVEQVVUSFJFUVVJUkVEIiwiVEVSTUlOQVRPUiIsIkVOQ1JZUFQiLCJPRkYiLCJPTiIsIk5PVF9TVVAiLCJSRVEiLCJlbmNyeXB0QnlWYWx1ZSIsIm5hbWUiLCJ2YWx1ZSIsIm1hcnNCeVZhbHVlIiwiUHJlbG9naW5QYXlsb2FkIiwiZGF0YSIsIm9wdGlvbnMiLCJ2ZXJzaW9uIiwiZW5jcnlwdGlvbiIsImVuY3J5cHRpb25TdHJpbmciLCJpbnN0YW5jZSIsInRocmVhZElkIiwibWFycyIsIm1hcnNTdHJpbmciLCJmZWRBdXRoUmVxdWlyZWQiLCJjb25zdHJ1Y3RvciIsImJ1ZmZlck9yT3B0aW9ucyIsImVuY3J5cHQiLCJtYWpvciIsIm1pbm9yIiwiYnVpbGQiLCJzdWJidWlsZCIsIkJ1ZmZlciIsImNyZWF0ZU9wdGlvbnMiLCJleHRyYWN0T3B0aW9ucyIsImNyZWF0ZVZlcnNpb25PcHRpb24iLCJjcmVhdGVFbmNyeXB0aW9uT3B0aW9uIiwiY3JlYXRlSW5zdGFuY2VPcHRpb24iLCJjcmVhdGVUaHJlYWRJZE9wdGlvbiIsImNyZWF0ZU1hcnNPcHRpb24iLCJjcmVhdGVGZWRBdXRoT3B0aW9uIiwibGVuZ3RoIiwiaSIsImxlbiIsIm9wdGlvbiIsImFsbG9jIiwib3B0aW9uT2Zmc2V0Iiwib3B0aW9uRGF0YU9mZnNldCIsImoiLCJ3cml0ZVVJbnQ4IiwidG9rZW4iLCJ3cml0ZVVJbnQxNkJFIiwiY29weSIsImJ1ZmZlciIsIldyaXRhYmxlVHJhY2tpbmdCdWZmZXIiLCJ3cml0ZVVJbnQzMkJFIiwib2Zmc2V0IiwiZGF0YU9mZnNldCIsInJlYWRVSW50MTZCRSIsImRhdGFMZW5ndGgiLCJleHRyYWN0VmVyc2lvbiIsImV4dHJhY3RFbmNyeXB0aW9uIiwiZXh0cmFjdEluc3RhbmNlIiwiZXh0cmFjdFRocmVhZElkIiwiZXh0cmFjdE1hcnMiLCJleHRyYWN0RmVkQXV0aCIsInJlYWRVSW50OCIsInJlYWRVSW50MzJCRSIsInRvU3RyaW5nIiwiaW5kZW50Iiwic3ByaW50ZiIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsIm1vZHVsZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9wcmVsb2dpbi1wYXlsb2FkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNwcmludGYgfSBmcm9tICdzcHJpbnRmLWpzJztcblxuaW1wb3J0IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIgZnJvbSAnLi90cmFja2luZy1idWZmZXIvd3JpdGFibGUtdHJhY2tpbmctYnVmZmVyJztcblxuY29uc3Qgb3B0aW9uQnVmZmVyU2l6ZSA9IDIwO1xuXG5jb25zdCBUT0tFTiA9IHtcbiAgVkVSU0lPTjogMHgwMCxcbiAgRU5DUllQVElPTjogMHgwMSxcbiAgSU5TVE9QVDogMHgwMixcbiAgVEhSRUFESUQ6IDB4MDMsXG4gIE1BUlM6IDB4MDQsXG4gIEZFREFVVEhSRVFVSVJFRDogMHgwNixcbiAgVEVSTUlOQVRPUjogMHhGRlxufTtcblxuY29uc3QgRU5DUllQVDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHtcbiAgT0ZGOiAweDAwLFxuICBPTjogMHgwMSxcbiAgTk9UX1NVUDogMHgwMixcbiAgUkVROiAweDAzXG59O1xuXG5jb25zdCBlbmNyeXB0QnlWYWx1ZTogeyBba2V5OiBudW1iZXJdOiBzdHJpbmcgfSA9IHt9O1xuXG5mb3IgKGNvbnN0IG5hbWUgaW4gRU5DUllQVCkge1xuICBjb25zdCB2YWx1ZSA9IEVOQ1JZUFRbbmFtZV07XG4gIGVuY3J5cHRCeVZhbHVlW3ZhbHVlXSA9IG5hbWU7XG59XG5cbmNvbnN0IE1BUlM6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7XG4gIE9GRjogMHgwMCxcbiAgT046IDB4MDFcbn07XG5cbmNvbnN0IG1hcnNCeVZhbHVlOiB7IFtrZXk6IG51bWJlcl06IHN0cmluZyB9ID0ge307XG5cbmZvciAoY29uc3QgbmFtZSBpbiBNQVJTKSB7XG4gIGNvbnN0IHZhbHVlID0gTUFSU1tuYW1lXTtcbiAgbWFyc0J5VmFsdWVbdmFsdWVdID0gbmFtZTtcbn1cblxuaW50ZXJmYWNlIE9wdGlvbnMge1xuICBlbmNyeXB0OiBib29sZWFuO1xuICB2ZXJzaW9uOiB7XG4gICAgbWFqb3I6IG51bWJlcjtcbiAgICBtaW5vcjogbnVtYmVyO1xuICAgIGJ1aWxkOiBudW1iZXI7XG4gICAgc3ViYnVpbGQ6IG51bWJlcjtcbiAgfTtcbn1cblxuLypcbiAgczIuMi42LjRcbiAqL1xuY2xhc3MgUHJlbG9naW5QYXlsb2FkIHtcbiAgZGF0YSE6IEJ1ZmZlcjtcbiAgb3B0aW9uczogT3B0aW9ucztcblxuICB2ZXJzaW9uIToge1xuICAgIG1ham9yOiBudW1iZXI7XG4gICAgbWlub3I6IG51bWJlcjtcbiAgICBidWlsZDogbnVtYmVyO1xuICAgIHN1YmJ1aWxkOiBudW1iZXI7XG4gIH07XG5cbiAgZW5jcnlwdGlvbiE6IG51bWJlcjtcbiAgZW5jcnlwdGlvblN0cmluZyE6IHN0cmluZztcblxuICBpbnN0YW5jZSE6IG51bWJlcjtcblxuICB0aHJlYWRJZCE6IG51bWJlcjtcblxuICBtYXJzITogbnVtYmVyO1xuICBtYXJzU3RyaW5nITogc3RyaW5nO1xuICBmZWRBdXRoUmVxdWlyZWQhOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoYnVmZmVyT3JPcHRpb25zOiBCdWZmZXIgfCBPcHRpb25zID0geyBlbmNyeXB0OiBmYWxzZSwgdmVyc2lvbjogeyBtYWpvcjogMCwgbWlub3I6IDAsIGJ1aWxkOiAwLCBzdWJidWlsZDogMCB9IH0pIHtcbiAgICBpZiAoYnVmZmVyT3JPcHRpb25zIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICB0aGlzLmRhdGEgPSBidWZmZXJPck9wdGlvbnM7XG4gICAgICB0aGlzLm9wdGlvbnMgPSB7IGVuY3J5cHQ6IGZhbHNlLCB2ZXJzaW9uOiB7IG1ham9yOiAwLCBtaW5vcjogMCwgYnVpbGQ6IDAsIHN1YmJ1aWxkOiAwIH0gfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcHRpb25zID0gYnVmZmVyT3JPcHRpb25zO1xuICAgICAgdGhpcy5jcmVhdGVPcHRpb25zKCk7XG4gICAgfVxuICAgIHRoaXMuZXh0cmFjdE9wdGlvbnMoKTtcbiAgfVxuXG4gIGNyZWF0ZU9wdGlvbnMoKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IFtcbiAgICAgIHRoaXMuY3JlYXRlVmVyc2lvbk9wdGlvbigpLFxuICAgICAgdGhpcy5jcmVhdGVFbmNyeXB0aW9uT3B0aW9uKCksXG4gICAgICB0aGlzLmNyZWF0ZUluc3RhbmNlT3B0aW9uKCksXG4gICAgICB0aGlzLmNyZWF0ZVRocmVhZElkT3B0aW9uKCksXG4gICAgICB0aGlzLmNyZWF0ZU1hcnNPcHRpb24oKSxcbiAgICAgIHRoaXMuY3JlYXRlRmVkQXV0aE9wdGlvbigpXG4gICAgXTtcblxuICAgIGxldCBsZW5ndGggPSAwO1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBvcHRpb25zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSBvcHRpb25zW2ldO1xuICAgICAgbGVuZ3RoICs9IDUgKyBvcHRpb24uZGF0YS5sZW5ndGg7XG4gICAgfVxuICAgIGxlbmd0aCsrOyAvLyB0ZXJtaW5hdG9yXG4gICAgdGhpcy5kYXRhID0gQnVmZmVyLmFsbG9jKGxlbmd0aCwgMCk7XG4gICAgbGV0IG9wdGlvbk9mZnNldCA9IDA7XG4gICAgbGV0IG9wdGlvbkRhdGFPZmZzZXQgPSA1ICogb3B0aW9ucy5sZW5ndGggKyAxO1xuXG4gICAgZm9yIChsZXQgaiA9IDAsIGxlbiA9IG9wdGlvbnMubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IG9wdGlvbnNbal07XG4gICAgICB0aGlzLmRhdGEud3JpdGVVSW50OChvcHRpb24udG9rZW4sIG9wdGlvbk9mZnNldCArIDApO1xuICAgICAgdGhpcy5kYXRhLndyaXRlVUludDE2QkUob3B0aW9uRGF0YU9mZnNldCwgb3B0aW9uT2Zmc2V0ICsgMSk7XG4gICAgICB0aGlzLmRhdGEud3JpdGVVSW50MTZCRShvcHRpb24uZGF0YS5sZW5ndGgsIG9wdGlvbk9mZnNldCArIDMpO1xuICAgICAgb3B0aW9uT2Zmc2V0ICs9IDU7XG4gICAgICBvcHRpb24uZGF0YS5jb3B5KHRoaXMuZGF0YSwgb3B0aW9uRGF0YU9mZnNldCk7XG4gICAgICBvcHRpb25EYXRhT2Zmc2V0ICs9IG9wdGlvbi5kYXRhLmxlbmd0aDtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEud3JpdGVVSW50OChUT0tFTi5URVJNSU5BVE9SLCBvcHRpb25PZmZzZXQpO1xuICB9XG5cbiAgY3JlYXRlVmVyc2lvbk9wdGlvbigpIHtcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgV3JpdGFibGVUcmFja2luZ0J1ZmZlcihvcHRpb25CdWZmZXJTaXplKTtcbiAgICBidWZmZXIud3JpdGVVSW50OCh0aGlzLm9wdGlvbnMudmVyc2lvbi5tYWpvcik7XG4gICAgYnVmZmVyLndyaXRlVUludDgodGhpcy5vcHRpb25zLnZlcnNpb24ubWlub3IpO1xuICAgIGJ1ZmZlci53cml0ZVVJbnQxNkJFKHRoaXMub3B0aW9ucy52ZXJzaW9uLmJ1aWxkKTtcbiAgICBidWZmZXIud3JpdGVVSW50MTZCRSh0aGlzLm9wdGlvbnMudmVyc2lvbi5zdWJidWlsZCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRva2VuOiBUT0tFTi5WRVJTSU9OLFxuICAgICAgZGF0YTogYnVmZmVyLmRhdGFcbiAgICB9O1xuICB9XG5cbiAgY3JlYXRlRW5jcnlwdGlvbk9wdGlvbigpIHtcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgV3JpdGFibGVUcmFja2luZ0J1ZmZlcihvcHRpb25CdWZmZXJTaXplKTtcbiAgICBpZiAodGhpcy5vcHRpb25zLmVuY3J5cHQpIHtcbiAgICAgIGJ1ZmZlci53cml0ZVVJbnQ4KEVOQ1JZUFQuT04pO1xuICAgIH0gZWxzZSB7XG4gICAgICBidWZmZXIud3JpdGVVSW50OChFTkNSWVBULk5PVF9TVVApO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW46IFRPS0VOLkVOQ1JZUFRJT04sXG4gICAgICBkYXRhOiBidWZmZXIuZGF0YVxuICAgIH07XG4gIH1cblxuICBjcmVhdGVJbnN0YW5jZU9wdGlvbigpIHtcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgV3JpdGFibGVUcmFja2luZ0J1ZmZlcihvcHRpb25CdWZmZXJTaXplKTtcbiAgICBidWZmZXIud3JpdGVVSW50OCgweDAwKTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW46IFRPS0VOLklOU1RPUFQsXG4gICAgICBkYXRhOiBidWZmZXIuZGF0YVxuICAgIH07XG4gIH1cblxuICBjcmVhdGVUaHJlYWRJZE9wdGlvbigpIHtcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgV3JpdGFibGVUcmFja2luZ0J1ZmZlcihvcHRpb25CdWZmZXJTaXplKTtcbiAgICBidWZmZXIud3JpdGVVSW50MzJCRSgweDAwKTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW46IFRPS0VOLlRIUkVBRElELFxuICAgICAgZGF0YTogYnVmZmVyLmRhdGFcbiAgICB9O1xuICB9XG5cbiAgY3JlYXRlTWFyc09wdGlvbigpIHtcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgV3JpdGFibGVUcmFja2luZ0J1ZmZlcihvcHRpb25CdWZmZXJTaXplKTtcbiAgICBidWZmZXIud3JpdGVVSW50OChNQVJTLk9GRik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRva2VuOiBUT0tFTi5NQVJTLFxuICAgICAgZGF0YTogYnVmZmVyLmRhdGFcbiAgICB9O1xuICB9XG5cbiAgY3JlYXRlRmVkQXV0aE9wdGlvbigpIHtcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgV3JpdGFibGVUcmFja2luZ0J1ZmZlcihvcHRpb25CdWZmZXJTaXplKTtcbiAgICBidWZmZXIud3JpdGVVSW50OCgweDAxKTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW46IFRPS0VOLkZFREFVVEhSRVFVSVJFRCxcbiAgICAgIGRhdGE6IGJ1ZmZlci5kYXRhXG4gICAgfTtcbiAgfVxuXG4gIGV4dHJhY3RPcHRpb25zKCkge1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIHdoaWxlICh0aGlzLmRhdGFbb2Zmc2V0XSAhPT0gVE9LRU4uVEVSTUlOQVRPUikge1xuICAgICAgbGV0IGRhdGFPZmZzZXQgPSB0aGlzLmRhdGEucmVhZFVJbnQxNkJFKG9mZnNldCArIDEpO1xuICAgICAgY29uc3QgZGF0YUxlbmd0aCA9IHRoaXMuZGF0YS5yZWFkVUludDE2QkUob2Zmc2V0ICsgMyk7XG4gICAgICBzd2l0Y2ggKHRoaXMuZGF0YVtvZmZzZXRdKSB7XG4gICAgICAgIGNhc2UgVE9LRU4uVkVSU0lPTjpcbiAgICAgICAgICB0aGlzLmV4dHJhY3RWZXJzaW9uKGRhdGFPZmZzZXQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFRPS0VOLkVOQ1JZUFRJT046XG4gICAgICAgICAgdGhpcy5leHRyYWN0RW5jcnlwdGlvbihkYXRhT2Zmc2V0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBUT0tFTi5JTlNUT1BUOlxuICAgICAgICAgIHRoaXMuZXh0cmFjdEluc3RhbmNlKGRhdGFPZmZzZXQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFRPS0VOLlRIUkVBRElEOlxuICAgICAgICAgIGlmIChkYXRhTGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5leHRyYWN0VGhyZWFkSWQoZGF0YU9mZnNldCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFRPS0VOLk1BUlM6XG4gICAgICAgICAgdGhpcy5leHRyYWN0TWFycyhkYXRhT2Zmc2V0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBUT0tFTi5GRURBVVRIUkVRVUlSRUQ6XG4gICAgICAgICAgdGhpcy5leHRyYWN0RmVkQXV0aChkYXRhT2Zmc2V0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIG9mZnNldCArPSA1O1xuICAgICAgZGF0YU9mZnNldCArPSBkYXRhTGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIGV4dHJhY3RWZXJzaW9uKG9mZnNldDogbnVtYmVyKSB7XG4gICAgdGhpcy52ZXJzaW9uID0ge1xuICAgICAgbWFqb3I6IHRoaXMuZGF0YS5yZWFkVUludDgob2Zmc2V0ICsgMCksXG4gICAgICBtaW5vcjogdGhpcy5kYXRhLnJlYWRVSW50OChvZmZzZXQgKyAxKSxcbiAgICAgIGJ1aWxkOiB0aGlzLmRhdGEucmVhZFVJbnQxNkJFKG9mZnNldCArIDIpLFxuICAgICAgc3ViYnVpbGQ6IHRoaXMuZGF0YS5yZWFkVUludDE2QkUob2Zmc2V0ICsgNClcbiAgICB9O1xuICB9XG5cbiAgZXh0cmFjdEVuY3J5cHRpb24ob2Zmc2V0OiBudW1iZXIpIHtcbiAgICB0aGlzLmVuY3J5cHRpb24gPSB0aGlzLmRhdGEucmVhZFVJbnQ4KG9mZnNldCk7XG4gICAgdGhpcy5lbmNyeXB0aW9uU3RyaW5nID0gZW5jcnlwdEJ5VmFsdWVbdGhpcy5lbmNyeXB0aW9uXTtcbiAgfVxuXG4gIGV4dHJhY3RJbnN0YW5jZShvZmZzZXQ6IG51bWJlcikge1xuICAgIHRoaXMuaW5zdGFuY2UgPSB0aGlzLmRhdGEucmVhZFVJbnQ4KG9mZnNldCk7XG4gIH1cblxuICBleHRyYWN0VGhyZWFkSWQob2Zmc2V0OiBudW1iZXIpIHtcbiAgICB0aGlzLnRocmVhZElkID0gdGhpcy5kYXRhLnJlYWRVSW50MzJCRShvZmZzZXQpO1xuICB9XG5cbiAgZXh0cmFjdE1hcnMob2Zmc2V0OiBudW1iZXIpIHtcbiAgICB0aGlzLm1hcnMgPSB0aGlzLmRhdGEucmVhZFVJbnQ4KG9mZnNldCk7XG4gICAgdGhpcy5tYXJzU3RyaW5nID0gbWFyc0J5VmFsdWVbdGhpcy5tYXJzXTtcbiAgfVxuXG4gIGV4dHJhY3RGZWRBdXRoKG9mZnNldDogbnVtYmVyKSB7XG4gICAgdGhpcy5mZWRBdXRoUmVxdWlyZWQgPSB0aGlzLmRhdGEucmVhZFVJbnQ4KG9mZnNldCk7XG4gIH1cblxuICB0b1N0cmluZyhpbmRlbnQgPSAnJykge1xuICAgIHJldHVybiBpbmRlbnQgKyAnUHJlTG9naW4gLSAnICsgc3ByaW50ZihcbiAgICAgICd2ZXJzaW9uOiVkLiVkLiVkLiVkLCBlbmNyeXB0aW9uOjB4JTAyWCglcyksIGluc3RvcHQ6MHglMDJYLCB0aHJlYWRJZDoweCUwOFgsIG1hcnM6MHglMDJYKCVzKScsXG4gICAgICB0aGlzLnZlcnNpb24ubWFqb3IsIHRoaXMudmVyc2lvbi5taW5vciwgdGhpcy52ZXJzaW9uLmJ1aWxkLCB0aGlzLnZlcnNpb24uc3ViYnVpbGQsXG4gICAgICB0aGlzLmVuY3J5cHRpb24gPyB0aGlzLmVuY3J5cHRpb24gOiAwLFxuICAgICAgdGhpcy5lbmNyeXB0aW9uU3RyaW5nID8gdGhpcy5lbmNyeXB0aW9uU3RyaW5nIDogJycsXG4gICAgICB0aGlzLmluc3RhbmNlID8gdGhpcy5pbnN0YW5jZSA6IDAsXG4gICAgICB0aGlzLnRocmVhZElkID8gdGhpcy50aHJlYWRJZCA6IDAsXG4gICAgICB0aGlzLm1hcnMgPyB0aGlzLm1hcnMgOiAwLFxuICAgICAgdGhpcy5tYXJzU3RyaW5nID8gdGhpcy5tYXJzU3RyaW5nIDogJydcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFByZWxvZ2luUGF5bG9hZDtcbm1vZHVsZS5leHBvcnRzID0gUHJlbG9naW5QYXlsb2FkO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxVQUFBLEdBQUFDLE9BQUE7QUFFQSxJQUFBQyx1QkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQWdGLFNBQUFFLHVCQUFBQyxHQUFBLFdBQUFBLEdBQUEsSUFBQUEsR0FBQSxD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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prelogin-payload.js","names":["_sprintfJs","require","_writableTrackingBuffer","_interopRequireDefault","obj","__esModule","default","optionBufferSize","TOKEN","VERSION","ENCRYPTION","INSTOPT","THREADID","MARS","FEDAUTHREQUIRED","TERMINATOR","ENCRYPT","OFF","ON","NOT_SUP","REQ","encryptByValue","name","value","marsByValue","PreloginPayload","data","options","version","encryption","encryptionString","instance","threadId","mars","marsString","fedAuthRequired","constructor","bufferOrOptions","encrypt","major","minor","build","subbuild","Buffer","createOptions","extractOptions","createVersionOption","createEncryptionOption","createInstanceOption","createThreadIdOption","createMarsOption","createFedAuthOption","length","i","len","option","alloc","optionOffset","optionDataOffset","j","writeUInt8","token","writeUInt16BE","copy","buffer","WritableTrackingBuffer","writeUInt32BE","offset","dataOffset","readUInt16BE","dataLength","extractVersion","extractEncryption","extractInstance","extractThreadId","extractMars","extractFedAuth","readUInt8","readUInt32BE","toString","indent","sprintf","_default","exports","module"],"sources":["../src/prelogin-payload.ts"],"sourcesContent":["import { sprintf } from 'sprintf-js';\n\nimport WritableTrackingBuffer from './tracking-buffer/writable-tracking-buffer';\n\nconst optionBufferSize = 20;\n\nconst TOKEN = {\n VERSION: 0x00,\n ENCRYPTION: 0x01,\n INSTOPT: 0x02,\n THREADID: 0x03,\n MARS: 0x04,\n FEDAUTHREQUIRED: 0x06,\n TERMINATOR: 0xFF\n};\n\nconst ENCRYPT: { [key: string]: number } = {\n OFF: 0x00,\n ON: 0x01,\n NOT_SUP: 0x02,\n REQ: 0x03\n};\n\nconst encryptByValue: { [key: number]: string } = {};\n\nfor (const name in ENCRYPT) {\n const value = ENCRYPT[name];\n encryptByValue[value] = name;\n}\n\nconst MARS: { [key: string]: number } = {\n OFF: 0x00,\n ON: 0x01\n};\n\nconst marsByValue: { [key: number]: string } = {};\n\nfor (const name in MARS) {\n const value = MARS[name];\n marsByValue[value] = name;\n}\n\ninterface Options {\n encrypt: boolean;\n version: {\n major: number;\n minor: number;\n build: number;\n subbuild: number;\n };\n}\n\n/*\n s2.2.6.4\n */\nclass PreloginPayload {\n data!: Buffer;\n options: Options;\n\n version!: {\n major: number;\n minor: number;\n build: number;\n subbuild: number;\n };\n\n encryption!: number;\n encryptionString!: string;\n\n instance!: number;\n\n threadId!: number;\n\n mars!: number;\n marsString!: string;\n fedAuthRequired!: number;\n\n constructor(bufferOrOptions: Buffer | Options = { encrypt: false, version: { major: 0, minor: 0, build: 0, subbuild: 0 } }) {\n if (bufferOrOptions instanceof Buffer) {\n this.data = bufferOrOptions;\n this.options = { encrypt: false, version: { major: 0, minor: 0, build: 0, subbuild: 0 } };\n } else {\n this.options = bufferOrOptions;\n this.createOptions();\n }\n this.extractOptions();\n }\n\n createOptions() {\n const options = [\n this.createVersionOption(),\n this.createEncryptionOption(),\n this.createInstanceOption(),\n this.createThreadIdOption(),\n this.createMarsOption(),\n this.createFedAuthOption()\n ];\n\n let length = 0;\n for (let i = 0, len = options.length; i < len; i++) {\n const option = options[i];\n length += 5 + option.data.length;\n }\n length++; // terminator\n this.data = Buffer.alloc(length, 0);\n let optionOffset = 0;\n let optionDataOffset = 5 * options.length + 1;\n\n for (let j = 0, len = options.length; j < len; j++) {\n const option = options[j];\n this.data.writeUInt8(option.token, optionOffset + 0);\n this.data.writeUInt16BE(optionDataOffset, optionOffset + 1);\n this.data.writeUInt16BE(option.data.length, optionOffset + 3);\n optionOffset += 5;\n option.data.copy(this.data, optionDataOffset);\n optionDataOffset += option.data.length;\n }\n\n this.data.writeUInt8(TOKEN.TERMINATOR, optionOffset);\n }\n\n createVersionOption() {\n const buffer = new WritableTrackingBuffer(optionBufferSize);\n buffer.writeUInt8(this.options.version.major);\n buffer.writeUInt8(this.options.version.minor);\n buffer.writeUInt16BE(this.options.version.build);\n buffer.writeUInt16BE(this.options.version.subbuild);\n return {\n token: TOKEN.VERSION,\n data: buffer.data\n };\n }\n\n createEncryptionOption() {\n const buffer = new WritableTrackingBuffer(optionBufferSize);\n if (this.options.encrypt) {\n buffer.writeUInt8(ENCRYPT.ON);\n } else {\n buffer.writeUInt8(ENCRYPT.NOT_SUP);\n }\n return {\n token: TOKEN.ENCRYPTION,\n data: buffer.data\n };\n }\n\n createInstanceOption() {\n const buffer = new WritableTrackingBuffer(optionBufferSize);\n buffer.writeUInt8(0x00);\n return {\n token: TOKEN.INSTOPT,\n data: buffer.data\n };\n }\n\n createThreadIdOption() {\n const buffer = new WritableTrackingBuffer(optionBufferSize);\n buffer.writeUInt32BE(0x00);\n return {\n token: TOKEN.THREADID,\n data: buffer.data\n };\n }\n\n createMarsOption() {\n const buffer = new WritableTrackingBuffer(optionBufferSize);\n buffer.writeUInt8(MARS.OFF);\n return {\n token: TOKEN.MARS,\n data: buffer.data\n };\n }\n\n createFedAuthOption() {\n const buffer = new WritableTrackingBuffer(optionBufferSize);\n buffer.writeUInt8(0x01);\n return {\n token: TOKEN.FEDAUTHREQUIRED,\n data: buffer.data\n };\n }\n\n extractOptions() {\n let offset = 0;\n while (this.data[offset] !== TOKEN.TERMINATOR) {\n let dataOffset = this.data.readUInt16BE(offset + 1);\n const dataLength = this.data.readUInt16BE(offset + 3);\n switch (this.data[offset]) {\n case TOKEN.VERSION:\n this.extractVersion(dataOffset);\n break;\n case TOKEN.ENCRYPTION:\n this.extractEncryption(dataOffset);\n break;\n case TOKEN.INSTOPT:\n this.extractInstance(dataOffset);\n break;\n case TOKEN.THREADID:\n if (dataLength > 0) {\n this.extractThreadId(dataOffset);\n }\n break;\n case TOKEN.MARS:\n this.extractMars(dataOffset);\n break;\n case TOKEN.FEDAUTHREQUIRED:\n this.extractFedAuth(dataOffset);\n break;\n }\n offset += 5;\n dataOffset += dataLength;\n }\n }\n\n extractVersion(offset: number) {\n this.version = {\n major: this.data.readUInt8(offset + 0),\n minor: this.data.readUInt8(offset + 1),\n build: this.data.readUInt16BE(offset + 2),\n subbuild: this.data.readUInt16BE(offset + 4)\n };\n }\n\n extractEncryption(offset: number) {\n this.encryption = this.data.readUInt8(offset);\n this.encryptionString = encryptByValue[this.encryption];\n }\n\n extractInstance(offset: number) {\n this.instance = this.data.readUInt8(offset);\n }\n\n extractThreadId(offset: number) {\n this.threadId = this.data.readUInt32BE(offset);\n }\n\n extractMars(offset: number) {\n this.mars = this.data.readUInt8(offset);\n this.marsString = marsByValue[this.mars];\n }\n\n extractFedAuth(offset: number) {\n this.fedAuthRequired = this.data.readUInt8(offset);\n }\n\n toString(indent = '') {\n return indent + 'PreLogin - ' + sprintf(\n 'version:%d.%d.%d.%d, encryption:0x%02X(%s), instopt:0x%02X, threadId:0x%08X, mars:0x%02X(%s)',\n this.version.major, this.version.minor, this.version.build, this.version.subbuild,\n this.encryption ? this.encryption : 0,\n this.encryptionString ? this.encryptionString : '',\n this.instance ? this.instance : 0,\n this.threadId ? this.threadId : 0,\n this.mars ? this.mars : 0,\n this.marsString ? this.marsString : ''\n );\n }\n}\n\nexport default PreloginPayload;\nmodule.exports = PreloginPayload;\n"],"mappings":"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"}