mongodb-data-service 21.10.0 → 21.14.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 (51) hide show
  1. package/README.md +7 -22
  2. package/lib/connect-mongo-client.d.ts +11 -0
  3. package/lib/connect-mongo-client.js +88 -0
  4. package/lib/connect-mongo-client.js.map +1 -0
  5. package/lib/connect.js +2 -15
  6. package/lib/connect.js.map +1 -1
  7. package/lib/connection-info.d.ts +12 -0
  8. package/lib/connection-info.js +3 -0
  9. package/lib/connection-info.js.map +1 -0
  10. package/lib/connection-options.d.ts +2 -10
  11. package/lib/connection-secrets.d.ts +13 -0
  12. package/lib/connection-secrets.js +96 -0
  13. package/lib/connection-secrets.js.map +1 -0
  14. package/lib/connection-storage.d.ts +6 -0
  15. package/lib/connection-storage.js +45 -0
  16. package/lib/connection-storage.js.map +1 -0
  17. package/lib/connection-title.d.ts +2 -0
  18. package/lib/connection-title.js +25 -0
  19. package/lib/connection-title.js.map +1 -0
  20. package/lib/data-service.d.ts +62 -18
  21. package/lib/data-service.js +784 -75
  22. package/lib/data-service.js.map +1 -1
  23. package/lib/index.d.ts +8 -1
  24. package/lib/index.js +15 -1
  25. package/lib/index.js.map +1 -1
  26. package/lib/instance-detail-helper.d.ts +78 -32
  27. package/lib/instance-detail-helper.js +144 -433
  28. package/lib/instance-detail-helper.js.map +1 -1
  29. package/lib/{legacy-connection-model.d.ts → legacy/legacy-connection-model.d.ts} +25 -8
  30. package/lib/legacy/legacy-connection-model.js +203 -0
  31. package/lib/legacy/legacy-connection-model.js.map +1 -0
  32. package/lib/redact.d.ts +4 -1
  33. package/lib/redact.js +23 -11
  34. package/lib/redact.js.map +1 -1
  35. package/lib/run-command.d.ts +209 -0
  36. package/lib/run-command.js +11 -0
  37. package/lib/run-command.js.map +1 -0
  38. package/lib/ssh-tunnel.d.ts +5 -0
  39. package/lib/ssh-tunnel.js +73 -0
  40. package/lib/ssh-tunnel.js.map +1 -0
  41. package/lib/types.d.ts +2 -95
  42. package/package.json +26 -22
  43. package/lib/.esm-wrapper.mjs +0 -3
  44. package/lib/legacy-connect.d.ts +0 -7
  45. package/lib/legacy-connect.js +0 -97
  46. package/lib/legacy-connect.js.map +0 -1
  47. package/lib/legacy-connection-model.js +0 -62
  48. package/lib/legacy-connection-model.js.map +0 -1
  49. package/lib/native-client.d.ts +0 -92
  50. package/lib/native-client.js +0 -640
  51. package/lib/native-client.js.map +0 -1
@@ -1,640 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const async_1 = __importDefault(require("async"));
7
- const debug_1 = __importDefault(require("debug"));
8
- const events_1 = require("events");
9
- const lodash_1 = require("lodash");
10
- const { fetch: getIndexes } = require('mongodb-index-model');
11
- const parseNamespace = require('mongodb-ns');
12
- const instance_detail_helper_1 = require("./instance-detail-helper");
13
- const legacy_connect_1 = __importDefault(require("./legacy-connect"));
14
- const debug = debug_1.default('mongodb-data-service:native-client');
15
- const SHARDED = 'Sharded';
16
- const SINGLE = 'Single';
17
- const RS_WITH_PRIMARY = 'ReplicaSetWithPrimary';
18
- const RS_PRIMARY = 'RSPrimary';
19
- const STANDALONE = 'Standalone';
20
- const MONGOS = 'Mongos';
21
- const WRITABLE_SERVER_TYPES = [RS_PRIMARY, STANDALONE, MONGOS];
22
- const WRITABLE_TYPES = [SHARDED, SINGLE, RS_WITH_PRIMARY];
23
- const VIEW_ERROR = 'is a view, not a collection';
24
- const SYSTEM = 'system';
25
- const ADMIN = 'admin';
26
- const DEFAULT_SAMPLE_SIZE = 1000;
27
- class NativeClient extends events_1.EventEmitter {
28
- constructor(model) {
29
- super();
30
- this.isWritable = false;
31
- this.isMongos = false;
32
- this._isConnecting = false;
33
- this.model = model;
34
- }
35
- get database() {
36
- if (!this._database) {
37
- throw new Error('NativeClient not yet initialized');
38
- }
39
- return this._database;
40
- }
41
- get client() {
42
- if (!this._client) {
43
- throw new Error('NativeClient not yet initialized');
44
- }
45
- return this._client;
46
- }
47
- isConnected() {
48
- return !!this._client;
49
- }
50
- connect(done) {
51
- debug('connecting...');
52
- if (this._isConnecting) {
53
- setImmediate(() => {
54
- done(new Error('Connect method has been called more than once without disconnecting.'));
55
- });
56
- return this;
57
- }
58
- this._isConnecting = true;
59
- legacy_connect_1.default(this.model, this.setupListeners.bind(this), (err, client, tunnel, connectionOptions) => {
60
- if (err) {
61
- this._isConnecting = false;
62
- return done(this._translateMessage(err));
63
- }
64
- this.connectionOptions = connectionOptions;
65
- this.tunnel = tunnel;
66
- debug('connected!', {
67
- isWritable: this.isWritable,
68
- isMongos: this.isMongos,
69
- });
70
- this.client.on('status', (evt) => this.emit('status', evt));
71
- this._database = this.client.db(this.model.ns || ADMIN);
72
- done(null, this);
73
- });
74
- return this;
75
- }
76
- setupListeners(client) {
77
- this._client = client;
78
- if (client) {
79
- client.on('serverDescriptionChanged', (evt) => {
80
- debug('serverDescriptionChanged', evt);
81
- this.emit('serverDescriptionChanged', evt);
82
- });
83
- client.on('serverOpening', (...args) => {
84
- debug('serverOpening', args);
85
- this.emit('serverOpening', args[0]);
86
- });
87
- client.on('serverClosed', (...args) => {
88
- debug('serverClosed', args);
89
- this.emit('serverClosed', args[0]);
90
- });
91
- client.on('topologyOpening', (...args) => {
92
- debug('topologyOpening', args);
93
- this.emit('topologyOpening', args[0]);
94
- });
95
- client.on('topologyClosed', (...args) => {
96
- debug('topologyClosed', args);
97
- this.emit('topologyClosed', args[0]);
98
- });
99
- client.on('topologyDescriptionChanged', (...args) => {
100
- debug('topologyDescriptionChanged', args);
101
- this.isWritable = this._isWritable(args[0]);
102
- this.isMongos = this._isMongos(args[0]);
103
- debug('updated to', {
104
- isWritable: this.isWritable,
105
- isMongos: this.isMongos,
106
- });
107
- this.emit('topologyDescriptionChanged', args[0]);
108
- });
109
- client.on('serverHeartbeatSucceeded', (...args) => {
110
- debug('serverHeartbeatSucceeded', args);
111
- this.emit('serverHeartbeatSucceeded', args[0]);
112
- });
113
- client.on('serverHeartbeatFailed', (...args) => {
114
- debug('serverHeartbeatFailed', args);
115
- this.emit('serverHeartbeatFailed', args[0]);
116
- });
117
- }
118
- }
119
- command(databaseName, comm, callback) {
120
- const db = this.client.db(databaseName);
121
- db.command(comm, (error, result) => {
122
- if (error) {
123
- return callback(this._translateMessage(error));
124
- }
125
- callback(null, result);
126
- });
127
- }
128
- estimatedCount(ns, options, callback) {
129
- this._collection(ns).estimatedDocumentCount(options, (err, result) => callback(err, result));
130
- }
131
- count(ns, filter, options, callback) {
132
- this._collection(ns).countDocuments(filter, options, (err, result) => callback(err, result));
133
- }
134
- collectionDetail(ns, callback) {
135
- async_1.default.parallel({
136
- stats: this.collectionStats.bind(this, this._databaseName(ns), this._collectionName(ns)),
137
- indexes: this.indexes.bind(this, ns),
138
- }, (error, coll) => {
139
- if (error) {
140
- return callback(this._translateMessage(error));
141
- }
142
- callback(null, this._buildCollectionDetail(ns, coll));
143
- });
144
- }
145
- listCollections(databaseName, filter, callback) {
146
- const db = this.client.db(databaseName);
147
- db.listCollections(filter, {}).toArray((error, data) => {
148
- if (error) {
149
- return callback(this._translateMessage(error));
150
- }
151
- callback(null, data);
152
- });
153
- }
154
- listDatabases(callback) {
155
- this.database.admin().command({
156
- listDatabases: 1,
157
- }, {
158
- readPreference: this.model.readPreference,
159
- }, (error, result) => {
160
- if (error) {
161
- return callback(this._translateMessage(error));
162
- }
163
- callback(null, result === null || result === void 0 ? void 0 : result.databases);
164
- });
165
- }
166
- collections(databaseName, callback) {
167
- if (databaseName === SYSTEM) {
168
- return callback(null, []);
169
- }
170
- this.collectionNames(databaseName, (error, names) => {
171
- if (error) {
172
- return callback(this._translateMessage(error));
173
- }
174
- async_1.default.parallel((names || []).map((name) => {
175
- return (done) => {
176
- this.collectionStats(databaseName, name, done);
177
- };
178
- }), callback);
179
- });
180
- }
181
- collectionNames(databaseName, callback) {
182
- this.listCollections(databaseName, {}, (error, collections) => {
183
- if (error) {
184
- return callback(this._translateMessage(error));
185
- }
186
- const names = collections === null || collections === void 0 ? void 0 : collections.map((c) => c.name);
187
- callback(null, names);
188
- });
189
- }
190
- currentOp(includeAll, callback) {
191
- this.database
192
- .admin()
193
- .command({ currentOp: 1, $all: includeAll }, (error, result) => {
194
- if (error) {
195
- this.client
196
- .db('admin')
197
- .collection('$cmd.sys.inprog')
198
- .findOne({ $all: includeAll }, (error2, result2) => {
199
- if (error2) {
200
- return callback(this._translateMessage(error2));
201
- }
202
- callback(null, result2);
203
- });
204
- return;
205
- }
206
- callback(null, result);
207
- });
208
- }
209
- serverStats(callback) {
210
- this.database.admin().serverStatus((error, result) => {
211
- if (error) {
212
- return callback(this._translateMessage(error));
213
- }
214
- callback(null, result);
215
- });
216
- }
217
- top(callback) {
218
- this.database.admin().command({ top: 1 }, (error, result) => {
219
- if (error) {
220
- return callback(this._translateMessage(error));
221
- }
222
- callback(null, result);
223
- });
224
- }
225
- collectionStats(databaseName, collectionName, callback) {
226
- const db = this.client.db(databaseName);
227
- db.command({ collStats: collectionName, verbose: true }, (error, data) => {
228
- if (error && !error.message.includes(VIEW_ERROR)) {
229
- return callback(this._translateMessage(error));
230
- }
231
- callback(null, this._buildCollectionStats(databaseName, collectionName, data || {}));
232
- });
233
- }
234
- createCollection(ns, options, callback) {
235
- const collectionName = this._collectionName(ns);
236
- const db = this.client.db(this._databaseName(ns));
237
- db.createCollection(collectionName, options, (error, result) => {
238
- if (error) {
239
- return callback(this._translateMessage(error));
240
- }
241
- callback(null, result);
242
- });
243
- }
244
- createIndex(ns, spec, options, callback) {
245
- this._collection(ns).createIndex(spec, options, (error, result) => {
246
- if (error) {
247
- return callback(this._translateMessage(error));
248
- }
249
- callback(null, result);
250
- });
251
- }
252
- databaseDetail(name, callback) {
253
- async_1.default.parallel({
254
- stats: this.databaseStats.bind(this, name),
255
- collections: this.collections.bind(this, name),
256
- }, (error, db) => {
257
- if (error) {
258
- return callback(this._translateMessage(error));
259
- }
260
- callback(null, this._buildDatabaseDetail(name, db));
261
- });
262
- }
263
- databaseStats(name, callback) {
264
- const db = this.client.db(name);
265
- db.command({ dbStats: 1 }, (error, data) => {
266
- if (error) {
267
- return callback(this._translateMessage(error));
268
- }
269
- callback(null, this._buildDatabaseStats(data || {}));
270
- });
271
- }
272
- deleteOne(ns, filter, options, callback) {
273
- this._collection(ns).deleteOne(filter, options, (error, result) => {
274
- if (error) {
275
- return callback(this._translateMessage(error));
276
- }
277
- callback(null, result);
278
- });
279
- }
280
- deleteMany(ns, filter, options, callback) {
281
- this._collection(ns).deleteMany(filter, options, (error, result) => {
282
- if (error) {
283
- return callback(this._translateMessage(error));
284
- }
285
- callback(null, result);
286
- });
287
- }
288
- disconnect(callback) {
289
- if (!this._client) {
290
- setImmediate(() => {
291
- callback(null);
292
- });
293
- return;
294
- }
295
- this.client.close(true, (err) => {
296
- if (this.tunnel) {
297
- debug('mongo client closed. shutting down ssh tunnel');
298
- this.tunnel.close().finally(() => {
299
- this._cleanup();
300
- debug('ssh tunnel stopped');
301
- callback(err);
302
- });
303
- }
304
- else {
305
- this._cleanup();
306
- return callback(err);
307
- }
308
- });
309
- }
310
- dropCollection(ns, callback) {
311
- this._collection(ns).drop((error, result) => {
312
- if (error) {
313
- return callback(this._translateMessage(error));
314
- }
315
- callback(null, result);
316
- });
317
- }
318
- dropDatabase(name, callback) {
319
- this.client.db(this._databaseName(name)).dropDatabase((error, result) => {
320
- if (error) {
321
- return callback(this._translateMessage(error));
322
- }
323
- callback(null, result);
324
- });
325
- }
326
- dropIndex(ns, name, callback) {
327
- this._collection(ns).dropIndex(name, (error, result) => {
328
- if (error) {
329
- return callback(this._translateMessage(error));
330
- }
331
- callback(null, result);
332
- });
333
- }
334
- aggregate(ns, pipeline, options, callback) {
335
- if (typeof options === 'function') {
336
- callback = options;
337
- options = undefined;
338
- }
339
- const cursor = this._collection(ns).aggregate(pipeline, options);
340
- if (lodash_1.isFunction(callback)) {
341
- process.nextTick(callback, null, cursor);
342
- return;
343
- }
344
- return cursor;
345
- }
346
- find(ns, filter = {}, options = {}, callback) {
347
- const cursor = this._collection(ns).find(filter, options);
348
- cursor.toArray((error, documents) => {
349
- if (error) {
350
- return callback(this._translateMessage(error));
351
- }
352
- callback(null, documents);
353
- });
354
- }
355
- fetch(ns, filter, options) {
356
- return this._collection(ns).find(filter, options);
357
- }
358
- findOneAndReplace(ns, filter, replacement, options, callback) {
359
- this._collection(ns).findOneAndReplace(filter, replacement, options, (error, result) => {
360
- if (error) {
361
- return callback(this._translateMessage(error));
362
- }
363
- callback(null, result.value);
364
- });
365
- }
366
- findOneAndUpdate(ns, filter, update, options, callback) {
367
- this._collection(ns).findOneAndUpdate(filter, update, options, (error, result) => {
368
- if (error) {
369
- return callback(this._translateMessage(error));
370
- }
371
- callback(null, result.value);
372
- });
373
- }
374
- explain(ns, filter, options, callback) {
375
- this._collection(ns)
376
- .find(filter, options)
377
- .explain((error, explanation) => {
378
- if (error) {
379
- return callback(this._translateMessage(error));
380
- }
381
- callback(null, explanation);
382
- });
383
- }
384
- indexes(ns, callback) {
385
- getIndexes(this.client, ns, (error, data) => {
386
- if (error) {
387
- return callback(this._translateMessage(error));
388
- }
389
- callback(null, data);
390
- });
391
- }
392
- insertOne(ns, doc, options, callback) {
393
- this._collection(ns).insertOne(doc, options, (error, result) => {
394
- if (error) {
395
- return callback(this._translateMessage(error));
396
- }
397
- callback(null, result);
398
- });
399
- }
400
- insertMany(ns, docs, options, callback) {
401
- this._collection(ns).insertMany(docs, options, (error, result) => {
402
- if (error) {
403
- return callback(this._translateMessage(error));
404
- }
405
- callback(null, result);
406
- });
407
- }
408
- putMany(ns, docs, options) {
409
- return this._collection(ns).insertMany(docs, options);
410
- }
411
- instance(callback) {
412
- instance_detail_helper_1.getInstance(this.client, this.database, ((error, instanceData) => {
413
- if (error) {
414
- return callback(this._translateMessage(error));
415
- }
416
- const instance = {
417
- ...instanceData,
418
- _id: `${this.model.hostname}:${this.model.port}`,
419
- hostname: this.model.hostname,
420
- port: this.model.port,
421
- };
422
- callback(null, instance);
423
- }));
424
- }
425
- sample(ns, { query, size, fields, } = {}, options = {}) {
426
- const pipeline = [];
427
- if (query && Object.keys(query).length > 0) {
428
- pipeline.push({
429
- $match: query,
430
- });
431
- }
432
- pipeline.push({
433
- $sample: {
434
- size: size === 0 ? 0 : size || DEFAULT_SAMPLE_SIZE,
435
- },
436
- });
437
- if (fields && Object.keys(fields).length > 0) {
438
- pipeline.push({
439
- $project: fields,
440
- });
441
- }
442
- return this.aggregate(ns, pipeline, {
443
- allowDiskUse: true,
444
- ...options,
445
- });
446
- }
447
- startSession() {
448
- return this.client.startSession();
449
- }
450
- killSession(clientSession) {
451
- return this.database.admin().command({
452
- killSessions: [clientSession.id],
453
- });
454
- }
455
- updateCollection(ns, flags, callback) {
456
- const collectionName = this._collectionName(ns);
457
- const db = this.client.db(this._databaseName(ns));
458
- const command = {
459
- collMod: collectionName,
460
- ...flags,
461
- };
462
- db.command(command, (error, result) => {
463
- if (error) {
464
- return callback(this._translateMessage(error));
465
- }
466
- callback(null, result);
467
- });
468
- }
469
- updateOne(ns, filter, update, options, callback) {
470
- this._collection(ns).updateOne(filter, update, options, (error, result) => {
471
- if (error) {
472
- return callback(this._translateMessage(error));
473
- }
474
- callback(null, result);
475
- });
476
- }
477
- updateMany(ns, filter, update, options, callback) {
478
- this._collection(ns).updateMany(filter, update, options, (error, result) => {
479
- if (error) {
480
- return callback(this._translateMessage(error));
481
- }
482
- callback(null, result);
483
- });
484
- }
485
- createView(name, sourceNs, pipeline, options, callback) {
486
- options.viewOn = this._collectionName(sourceNs);
487
- options.pipeline = pipeline;
488
- this.client
489
- .db(this._databaseName(sourceNs))
490
- .createCollection(name, options, (error, result) => {
491
- if (error) {
492
- return callback(this._translateMessage(error));
493
- }
494
- callback(null, result);
495
- });
496
- }
497
- updateView(name, sourceNs, pipeline, options, callback) {
498
- options.viewOn = this._collectionName(sourceNs);
499
- options.pipeline = pipeline;
500
- const command = {
501
- collMod: name,
502
- ...options,
503
- };
504
- const db = this.client.db(this._databaseName(sourceNs));
505
- db.command(command, (error, result) => {
506
- if (error) {
507
- return callback(this._translateMessage(error));
508
- }
509
- callback(null, result);
510
- });
511
- }
512
- dropView(ns, callback) {
513
- this.dropCollection(ns, callback);
514
- }
515
- _buildCollectionDetail(ns, data) {
516
- return {
517
- ...data.stats,
518
- _id: ns,
519
- name: this._collectionName(ns),
520
- database: this._databaseName(ns),
521
- indexes: data.indexes,
522
- };
523
- }
524
- _buildCollectionStats(databaseName, collectionName, data) {
525
- return {
526
- ns: databaseName + '.' + collectionName,
527
- name: collectionName,
528
- database: databaseName,
529
- is_capped: data.capped,
530
- max: data.max,
531
- is_power_of_two: data.userFlags === 1,
532
- index_sizes: data.indexSizes,
533
- document_count: data.count,
534
- document_size: data.size,
535
- storage_size: data.storageSize,
536
- index_count: data.nindexes,
537
- index_size: data.totalIndexSize,
538
- padding_factor: data.paddingFactor,
539
- extent_count: data.numExtents,
540
- extent_last_size: data.lastExtentSize,
541
- flags_user: data.userFlags,
542
- max_document_size: data.maxSize,
543
- size: data.size,
544
- index_details: data.indexDetails || {},
545
- wired_tiger: data.wiredTiger || {},
546
- };
547
- }
548
- _buildDatabaseDetail(name, db) {
549
- return {
550
- _id: name,
551
- name: name,
552
- stats: db.stats,
553
- collections: db.collections,
554
- };
555
- }
556
- _buildDatabaseStats(data) {
557
- return {
558
- document_count: data.objects,
559
- document_size: data.dataSize,
560
- storage_size: data.storageSize,
561
- index_count: data.indexes,
562
- index_size: data.indexSize,
563
- extent_count: data.numExtents,
564
- file_size: data.fileSize,
565
- ns_size: data.nsSizeMB * 1024 * 1024,
566
- };
567
- }
568
- _collection(ns) {
569
- return this.client
570
- .db(this._databaseName(ns))
571
- .collection(this._collectionName(ns));
572
- }
573
- _collectionName(ns) {
574
- return parseNamespace(ns).collection;
575
- }
576
- _databaseName(ns) {
577
- return parseNamespace(ns).database;
578
- }
579
- _isWritable(evt) {
580
- const topologyType = evt.newDescription.type;
581
- if (topologyType === SINGLE) {
582
- const server = [...evt.newDescription.servers.values()][0];
583
- return server && WRITABLE_SERVER_TYPES.includes(server.type);
584
- }
585
- return WRITABLE_TYPES.includes(topologyType);
586
- }
587
- _isMongos(evt) {
588
- return evt.newDescription.type === SHARDED;
589
- }
590
- _translateMessage(error) {
591
- if (typeof error === 'string') {
592
- error = { message: error };
593
- }
594
- else {
595
- error.message = error.message || error.err || error.errmsg;
596
- }
597
- return error;
598
- }
599
- _cleanup() {
600
- this._client = undefined;
601
- this._database = undefined;
602
- this.connectionOptions = undefined;
603
- this.tunnel = undefined;
604
- this.isWritable = false;
605
- this.isMongos = false;
606
- this._isConnecting = false;
607
- }
608
- }
609
- function addDebugToClass(cls) {
610
- if (!debug.enabled) {
611
- return cls;
612
- }
613
- const proto = cls.prototype;
614
- for (const prop of Object.getOwnPropertyNames(proto)) {
615
- if (prop.startsWith('_')) {
616
- continue;
617
- }
618
- const descriptor = Object.getOwnPropertyDescriptor(proto, prop);
619
- if (typeof (descriptor === null || descriptor === void 0 ? void 0 : descriptor.value) !== 'function') {
620
- continue;
621
- }
622
- const orig = descriptor.value;
623
- descriptor.value = function (...args) {
624
- debug(`${prop}()`, args);
625
- if (args.length > 0 && typeof args[args.length - 1] === 'function') {
626
- const origCallback = args[args.length - 1];
627
- args[args.length - 1] = function (...callbackArgs) {
628
- debug(`${prop}()`, args, 'finished ->', callbackArgs);
629
- return origCallback.call(this, ...callbackArgs);
630
- };
631
- }
632
- return orig.call(this, ...args);
633
- };
634
- Object.defineProperty(proto, prop, descriptor);
635
- }
636
- return cls;
637
- }
638
- const WrappedClient = addDebugToClass(NativeClient);
639
- exports.default = WrappedClient;
640
- //# sourceMappingURL=native-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"native-client.js","sourceRoot":"","sources":["../src/native-client.ts"],"names":[],"mappings":"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"}