@actual-app/api 26.4.0 → 26.5.0-nightly.20260406
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +10 -235
- package/dist/index.js.map +1 -1
- package/package.json +2 -3
- package/dist/from-Bl-Hslp4.js +0 -3842
- package/dist/from-Bl-Hslp4.js.map +0 -1
- package/dist/multipart-parser-BnDysoMr.js +0 -290
- package/dist/multipart-parser-BnDysoMr.js.map +0 -1
- package/dist/src-iMkUmuwR.js +0 -1265
- package/dist/src-iMkUmuwR.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -9949,7 +9949,7 @@ var _entityMap = {
|
|
|
9949
9949
|
"'": "'",
|
|
9950
9950
|
"/": "/"
|
|
9951
9951
|
};
|
|
9952
|
-
var escape
|
|
9952
|
+
var escape = (data) => {
|
|
9953
9953
|
if (isString$1(data)) return data.replace(/[&<>"'\/]/g, (s) => _entityMap[s]);
|
|
9954
9954
|
return data;
|
|
9955
9955
|
};
|
|
@@ -10793,7 +10793,7 @@ var Interpolator = class {
|
|
|
10793
10793
|
init(options = {}) {
|
|
10794
10794
|
if (!options.interpolation) options.interpolation = { escapeValue: true };
|
|
10795
10795
|
const { escape: escape$1, escapeValue, useRawValueToEscape, prefix, prefixEscaped, suffix, suffixEscaped, formatSeparator, unescapeSuffix, unescapePrefix, nestingPrefix, nestingPrefixEscaped, nestingSuffix, nestingSuffixEscaped, nestingOptionsSeparator, maxReplaces, alwaysFormat } = options.interpolation;
|
|
10796
|
-
this.escape = escape$1 !== void 0 ? escape$1 : escape
|
|
10796
|
+
this.escape = escape$1 !== void 0 ? escape$1 : escape;
|
|
10797
10797
|
this.escapeValue = escapeValue !== void 0 ? escapeValue : true;
|
|
10798
10798
|
this.useRawValueToEscape = useRawValueToEscape !== void 0 ? useRawValueToEscape : false;
|
|
10799
10799
|
this.prefix = prefix ? regexEscape(prefix) : prefixEscaped || "{{";
|
|
@@ -64365,7 +64365,10 @@ function addSplitTransaction(transactions, id) {
|
|
|
64365
64365
|
function updateTransaction$2(transactions, transaction) {
|
|
64366
64366
|
return replaceTransactions(transactions, transaction.id, (trans) => {
|
|
64367
64367
|
if (trans.is_parent) {
|
|
64368
|
-
const parent = trans.id === transaction.id ?
|
|
64368
|
+
const parent = trans.id === transaction.id ? {
|
|
64369
|
+
...trans,
|
|
64370
|
+
...transaction
|
|
64371
|
+
} : trans;
|
|
64369
64372
|
const sub = (parent.subtransactions ?? trans.subtransactions)?.map((t) => {
|
|
64370
64373
|
let child = t;
|
|
64371
64374
|
if (trans.id === transaction.id) {
|
|
@@ -117473,12 +117476,6 @@ async function importActual(_filepath, buffer) {
|
|
|
117473
117476
|
await upload().catch(() => {});
|
|
117474
117477
|
}
|
|
117475
117478
|
//#endregion
|
|
117476
|
-
//#region ../../node_modules/slash/index.js
|
|
117477
|
-
function slash(path) {
|
|
117478
|
-
if (path.startsWith("\\\\?\\")) return path;
|
|
117479
|
-
return path.replace(/\\/g, "/");
|
|
117480
|
-
}
|
|
117481
|
-
//#endregion
|
|
117482
117479
|
//#region ../loot-core/src/server/importers/ynab4.ts
|
|
117483
117480
|
var ynab4_exports = /* @__PURE__ */ __exportAll({
|
|
117484
117481
|
doImport: () => doImport$1,
|
|
@@ -117694,7 +117691,7 @@ async function doImport$1(data) {
|
|
|
117694
117691
|
logger.log("Setting up...");
|
|
117695
117692
|
}
|
|
117696
117693
|
function getBudgetName$1(filepath) {
|
|
117697
|
-
let unixFilepath =
|
|
117694
|
+
let unixFilepath = filepath.replace(/\\/g, "/");
|
|
117698
117695
|
if (!/\.zip/.test(unixFilepath)) return null;
|
|
117699
117696
|
unixFilepath = unixFilepath.replace(/\.zip$/, "").replace(/.ynab4$/, "");
|
|
117700
117697
|
const m = unixFilepath.match(/([^/~]+)[^/]*$/);
|
|
@@ -118471,225 +118468,7 @@ function unlisten() {
|
|
|
118471
118468
|
}
|
|
118472
118469
|
}
|
|
118473
118470
|
//#endregion
|
|
118474
|
-
//#region ../../node_modules/crypt/crypt.js
|
|
118475
|
-
var require_crypt = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
118476
|
-
(function() {
|
|
118477
|
-
var base64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", crypt = {
|
|
118478
|
-
rotl: function(n, b) {
|
|
118479
|
-
return n << b | n >>> 32 - b;
|
|
118480
|
-
},
|
|
118481
|
-
rotr: function(n, b) {
|
|
118482
|
-
return n << 32 - b | n >>> b;
|
|
118483
|
-
},
|
|
118484
|
-
endian: function(n) {
|
|
118485
|
-
if (n.constructor == Number) return crypt.rotl(n, 8) & 16711935 | crypt.rotl(n, 24) & 4278255360;
|
|
118486
|
-
for (var i = 0; i < n.length; i++) n[i] = crypt.endian(n[i]);
|
|
118487
|
-
return n;
|
|
118488
|
-
},
|
|
118489
|
-
randomBytes: function(n) {
|
|
118490
|
-
for (var bytes = []; n > 0; n--) bytes.push(Math.floor(Math.random() * 256));
|
|
118491
|
-
return bytes;
|
|
118492
|
-
},
|
|
118493
|
-
bytesToWords: function(bytes) {
|
|
118494
|
-
for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8) words[b >>> 5] |= bytes[i] << 24 - b % 32;
|
|
118495
|
-
return words;
|
|
118496
|
-
},
|
|
118497
|
-
wordsToBytes: function(words) {
|
|
118498
|
-
for (var bytes = [], b = 0; b < words.length * 32; b += 8) bytes.push(words[b >>> 5] >>> 24 - b % 32 & 255);
|
|
118499
|
-
return bytes;
|
|
118500
|
-
},
|
|
118501
|
-
bytesToHex: function(bytes) {
|
|
118502
|
-
for (var hex = [], i = 0; i < bytes.length; i++) {
|
|
118503
|
-
hex.push((bytes[i] >>> 4).toString(16));
|
|
118504
|
-
hex.push((bytes[i] & 15).toString(16));
|
|
118505
|
-
}
|
|
118506
|
-
return hex.join("");
|
|
118507
|
-
},
|
|
118508
|
-
hexToBytes: function(hex) {
|
|
118509
|
-
for (var bytes = [], c = 0; c < hex.length; c += 2) bytes.push(parseInt(hex.substr(c, 2), 16));
|
|
118510
|
-
return bytes;
|
|
118511
|
-
},
|
|
118512
|
-
bytesToBase64: function(bytes) {
|
|
118513
|
-
for (var base64 = [], i = 0; i < bytes.length; i += 3) {
|
|
118514
|
-
var triplet = bytes[i] << 16 | bytes[i + 1] << 8 | bytes[i + 2];
|
|
118515
|
-
for (var j = 0; j < 4; j++) if (i * 8 + j * 6 <= bytes.length * 8) base64.push(base64map.charAt(triplet >>> 6 * (3 - j) & 63));
|
|
118516
|
-
else base64.push("=");
|
|
118517
|
-
}
|
|
118518
|
-
return base64.join("");
|
|
118519
|
-
},
|
|
118520
|
-
base64ToBytes: function(base64) {
|
|
118521
|
-
base64 = base64.replace(/[^A-Z0-9+\/]/gi, "");
|
|
118522
|
-
for (var bytes = [], i = 0, imod4 = 0; i < base64.length; imod4 = ++i % 4) {
|
|
118523
|
-
if (imod4 == 0) continue;
|
|
118524
|
-
bytes.push((base64map.indexOf(base64.charAt(i - 1)) & Math.pow(2, -2 * imod4 + 8) - 1) << imod4 * 2 | base64map.indexOf(base64.charAt(i)) >>> 6 - imod4 * 2);
|
|
118525
|
-
}
|
|
118526
|
-
return bytes;
|
|
118527
|
-
}
|
|
118528
|
-
};
|
|
118529
|
-
module.exports = crypt;
|
|
118530
|
-
})();
|
|
118531
|
-
}));
|
|
118532
|
-
//#endregion
|
|
118533
|
-
//#region ../../node_modules/charenc/charenc.js
|
|
118534
|
-
var require_charenc = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
118535
|
-
var charenc = {
|
|
118536
|
-
utf8: {
|
|
118537
|
-
stringToBytes: function(str) {
|
|
118538
|
-
return charenc.bin.stringToBytes(unescape(encodeURIComponent(str)));
|
|
118539
|
-
},
|
|
118540
|
-
bytesToString: function(bytes) {
|
|
118541
|
-
return decodeURIComponent(escape(charenc.bin.bytesToString(bytes)));
|
|
118542
|
-
}
|
|
118543
|
-
},
|
|
118544
|
-
bin: {
|
|
118545
|
-
stringToBytes: function(str) {
|
|
118546
|
-
for (var bytes = [], i = 0; i < str.length; i++) bytes.push(str.charCodeAt(i) & 255);
|
|
118547
|
-
return bytes;
|
|
118548
|
-
},
|
|
118549
|
-
bytesToString: function(bytes) {
|
|
118550
|
-
for (var str = [], i = 0; i < bytes.length; i++) str.push(String.fromCharCode(bytes[i]));
|
|
118551
|
-
return str.join("");
|
|
118552
|
-
}
|
|
118553
|
-
}
|
|
118554
|
-
};
|
|
118555
|
-
module.exports = charenc;
|
|
118556
|
-
}));
|
|
118557
|
-
//#endregion
|
|
118558
|
-
//#region ../../node_modules/is-buffer/index.js
|
|
118559
|
-
var require_is_buffer = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
118560
|
-
/*!
|
|
118561
|
-
* Determine if an object is a Buffer
|
|
118562
|
-
*
|
|
118563
|
-
* @author Feross Aboukhadijeh <https://feross.org>
|
|
118564
|
-
* @license MIT
|
|
118565
|
-
*/
|
|
118566
|
-
module.exports = function(obj) {
|
|
118567
|
-
return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer);
|
|
118568
|
-
};
|
|
118569
|
-
function isBuffer(obj) {
|
|
118570
|
-
return !!obj.constructor && typeof obj.constructor.isBuffer === "function" && obj.constructor.isBuffer(obj);
|
|
118571
|
-
}
|
|
118572
|
-
function isSlowBuffer(obj) {
|
|
118573
|
-
return typeof obj.readFloatLE === "function" && typeof obj.slice === "function" && isBuffer(obj.slice(0, 0));
|
|
118574
|
-
}
|
|
118575
|
-
}));
|
|
118576
|
-
//#endregion
|
|
118577
118471
|
//#region ../loot-core/migrations/1632571489012_remove_cache.js
|
|
118578
|
-
var import_md5 = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
118579
|
-
(function() {
|
|
118580
|
-
var crypt = require_crypt(), utf8 = require_charenc().utf8, isBuffer = require_is_buffer(), bin = require_charenc().bin, md5 = function(message, options) {
|
|
118581
|
-
if (message.constructor == String) if (options && options.encoding === "binary") message = bin.stringToBytes(message);
|
|
118582
|
-
else message = utf8.stringToBytes(message);
|
|
118583
|
-
else if (isBuffer(message)) message = Array.prototype.slice.call(message, 0);
|
|
118584
|
-
else if (!Array.isArray(message) && message.constructor !== Uint8Array) message = message.toString();
|
|
118585
|
-
var m = crypt.bytesToWords(message), l = message.length * 8, a = 1732584193, b = -271733879, c = -1732584194, d = 271733878;
|
|
118586
|
-
for (var i = 0; i < m.length; i++) m[i] = (m[i] << 8 | m[i] >>> 24) & 16711935 | (m[i] << 24 | m[i] >>> 8) & 4278255360;
|
|
118587
|
-
m[l >>> 5] |= 128 << l % 32;
|
|
118588
|
-
m[(l + 64 >>> 9 << 4) + 14] = l;
|
|
118589
|
-
var FF = md5._ff, GG = md5._gg, HH = md5._hh, II = md5._ii;
|
|
118590
|
-
for (var i = 0; i < m.length; i += 16) {
|
|
118591
|
-
var aa = a, bb = b, cc = c, dd = d;
|
|
118592
|
-
a = FF(a, b, c, d, m[i + 0], 7, -680876936);
|
|
118593
|
-
d = FF(d, a, b, c, m[i + 1], 12, -389564586);
|
|
118594
|
-
c = FF(c, d, a, b, m[i + 2], 17, 606105819);
|
|
118595
|
-
b = FF(b, c, d, a, m[i + 3], 22, -1044525330);
|
|
118596
|
-
a = FF(a, b, c, d, m[i + 4], 7, -176418897);
|
|
118597
|
-
d = FF(d, a, b, c, m[i + 5], 12, 1200080426);
|
|
118598
|
-
c = FF(c, d, a, b, m[i + 6], 17, -1473231341);
|
|
118599
|
-
b = FF(b, c, d, a, m[i + 7], 22, -45705983);
|
|
118600
|
-
a = FF(a, b, c, d, m[i + 8], 7, 1770035416);
|
|
118601
|
-
d = FF(d, a, b, c, m[i + 9], 12, -1958414417);
|
|
118602
|
-
c = FF(c, d, a, b, m[i + 10], 17, -42063);
|
|
118603
|
-
b = FF(b, c, d, a, m[i + 11], 22, -1990404162);
|
|
118604
|
-
a = FF(a, b, c, d, m[i + 12], 7, 1804603682);
|
|
118605
|
-
d = FF(d, a, b, c, m[i + 13], 12, -40341101);
|
|
118606
|
-
c = FF(c, d, a, b, m[i + 14], 17, -1502002290);
|
|
118607
|
-
b = FF(b, c, d, a, m[i + 15], 22, 1236535329);
|
|
118608
|
-
a = GG(a, b, c, d, m[i + 1], 5, -165796510);
|
|
118609
|
-
d = GG(d, a, b, c, m[i + 6], 9, -1069501632);
|
|
118610
|
-
c = GG(c, d, a, b, m[i + 11], 14, 643717713);
|
|
118611
|
-
b = GG(b, c, d, a, m[i + 0], 20, -373897302);
|
|
118612
|
-
a = GG(a, b, c, d, m[i + 5], 5, -701558691);
|
|
118613
|
-
d = GG(d, a, b, c, m[i + 10], 9, 38016083);
|
|
118614
|
-
c = GG(c, d, a, b, m[i + 15], 14, -660478335);
|
|
118615
|
-
b = GG(b, c, d, a, m[i + 4], 20, -405537848);
|
|
118616
|
-
a = GG(a, b, c, d, m[i + 9], 5, 568446438);
|
|
118617
|
-
d = GG(d, a, b, c, m[i + 14], 9, -1019803690);
|
|
118618
|
-
c = GG(c, d, a, b, m[i + 3], 14, -187363961);
|
|
118619
|
-
b = GG(b, c, d, a, m[i + 8], 20, 1163531501);
|
|
118620
|
-
a = GG(a, b, c, d, m[i + 13], 5, -1444681467);
|
|
118621
|
-
d = GG(d, a, b, c, m[i + 2], 9, -51403784);
|
|
118622
|
-
c = GG(c, d, a, b, m[i + 7], 14, 1735328473);
|
|
118623
|
-
b = GG(b, c, d, a, m[i + 12], 20, -1926607734);
|
|
118624
|
-
a = HH(a, b, c, d, m[i + 5], 4, -378558);
|
|
118625
|
-
d = HH(d, a, b, c, m[i + 8], 11, -2022574463);
|
|
118626
|
-
c = HH(c, d, a, b, m[i + 11], 16, 1839030562);
|
|
118627
|
-
b = HH(b, c, d, a, m[i + 14], 23, -35309556);
|
|
118628
|
-
a = HH(a, b, c, d, m[i + 1], 4, -1530992060);
|
|
118629
|
-
d = HH(d, a, b, c, m[i + 4], 11, 1272893353);
|
|
118630
|
-
c = HH(c, d, a, b, m[i + 7], 16, -155497632);
|
|
118631
|
-
b = HH(b, c, d, a, m[i + 10], 23, -1094730640);
|
|
118632
|
-
a = HH(a, b, c, d, m[i + 13], 4, 681279174);
|
|
118633
|
-
d = HH(d, a, b, c, m[i + 0], 11, -358537222);
|
|
118634
|
-
c = HH(c, d, a, b, m[i + 3], 16, -722521979);
|
|
118635
|
-
b = HH(b, c, d, a, m[i + 6], 23, 76029189);
|
|
118636
|
-
a = HH(a, b, c, d, m[i + 9], 4, -640364487);
|
|
118637
|
-
d = HH(d, a, b, c, m[i + 12], 11, -421815835);
|
|
118638
|
-
c = HH(c, d, a, b, m[i + 15], 16, 530742520);
|
|
118639
|
-
b = HH(b, c, d, a, m[i + 2], 23, -995338651);
|
|
118640
|
-
a = II(a, b, c, d, m[i + 0], 6, -198630844);
|
|
118641
|
-
d = II(d, a, b, c, m[i + 7], 10, 1126891415);
|
|
118642
|
-
c = II(c, d, a, b, m[i + 14], 15, -1416354905);
|
|
118643
|
-
b = II(b, c, d, a, m[i + 5], 21, -57434055);
|
|
118644
|
-
a = II(a, b, c, d, m[i + 12], 6, 1700485571);
|
|
118645
|
-
d = II(d, a, b, c, m[i + 3], 10, -1894986606);
|
|
118646
|
-
c = II(c, d, a, b, m[i + 10], 15, -1051523);
|
|
118647
|
-
b = II(b, c, d, a, m[i + 1], 21, -2054922799);
|
|
118648
|
-
a = II(a, b, c, d, m[i + 8], 6, 1873313359);
|
|
118649
|
-
d = II(d, a, b, c, m[i + 15], 10, -30611744);
|
|
118650
|
-
c = II(c, d, a, b, m[i + 6], 15, -1560198380);
|
|
118651
|
-
b = II(b, c, d, a, m[i + 13], 21, 1309151649);
|
|
118652
|
-
a = II(a, b, c, d, m[i + 4], 6, -145523070);
|
|
118653
|
-
d = II(d, a, b, c, m[i + 11], 10, -1120210379);
|
|
118654
|
-
c = II(c, d, a, b, m[i + 2], 15, 718787259);
|
|
118655
|
-
b = II(b, c, d, a, m[i + 9], 21, -343485551);
|
|
118656
|
-
a = a + aa >>> 0;
|
|
118657
|
-
b = b + bb >>> 0;
|
|
118658
|
-
c = c + cc >>> 0;
|
|
118659
|
-
d = d + dd >>> 0;
|
|
118660
|
-
}
|
|
118661
|
-
return crypt.endian([
|
|
118662
|
-
a,
|
|
118663
|
-
b,
|
|
118664
|
-
c,
|
|
118665
|
-
d
|
|
118666
|
-
]);
|
|
118667
|
-
};
|
|
118668
|
-
md5._ff = function(a, b, c, d, x, s, t) {
|
|
118669
|
-
var n = a + (b & c | ~b & d) + (x >>> 0) + t;
|
|
118670
|
-
return (n << s | n >>> 32 - s) + b;
|
|
118671
|
-
};
|
|
118672
|
-
md5._gg = function(a, b, c, d, x, s, t) {
|
|
118673
|
-
var n = a + (b & d | c & ~d) + (x >>> 0) + t;
|
|
118674
|
-
return (n << s | n >>> 32 - s) + b;
|
|
118675
|
-
};
|
|
118676
|
-
md5._hh = function(a, b, c, d, x, s, t) {
|
|
118677
|
-
var n = a + (b ^ c ^ d) + (x >>> 0) + t;
|
|
118678
|
-
return (n << s | n >>> 32 - s) + b;
|
|
118679
|
-
};
|
|
118680
|
-
md5._ii = function(a, b, c, d, x, s, t) {
|
|
118681
|
-
var n = a + (c ^ (b | ~d)) + (x >>> 0) + t;
|
|
118682
|
-
return (n << s | n >>> 32 - s) + b;
|
|
118683
|
-
};
|
|
118684
|
-
md5._blocksize = 16;
|
|
118685
|
-
md5._digestsize = 16;
|
|
118686
|
-
module.exports = function(message, options) {
|
|
118687
|
-
if (message === void 0 || message === null) throw new Error("Illegal argument " + message);
|
|
118688
|
-
var digestbytes = crypt.wordsToBytes(md5(message, options));
|
|
118689
|
-
return options && options.asBytes ? digestbytes : options && options.asString ? bin.bytesToString(digestbytes) : crypt.bytesToHex(digestbytes);
|
|
118690
|
-
};
|
|
118691
|
-
})();
|
|
118692
|
-
})))());
|
|
118693
118472
|
async function runMigration$4(db) {
|
|
118694
118473
|
function getValue(node) {
|
|
118695
118474
|
return node.expr != null ? node.expr : node.cachedValue;
|
|
@@ -119257,7 +119036,7 @@ async function updateViews() {
|
|
|
119257
119036
|
const hashKey = "view-hash";
|
|
119258
119037
|
const { value: hash } = await first$2("SELECT value FROM __meta__ WHERE key = ?", [hashKey]) || {};
|
|
119259
119038
|
const views = makeViews(schema, schemaConfig);
|
|
119260
|
-
const currentHash = (0,
|
|
119039
|
+
const currentHash = (0, node_crypto.createHash)("md5").update(views).digest("hex");
|
|
119261
119040
|
if (hash !== currentHash) {
|
|
119262
119041
|
execQuery(views);
|
|
119263
119042
|
runQuery$1("INSERT OR REPLACE INTO __meta__ (key, value) VALUES (?, ?)", [hashKey, currentHash]);
|
|
@@ -121852,7 +121631,8 @@ function isWidgetType(type) {
|
|
|
121852
121631
|
"summary-card",
|
|
121853
121632
|
"calendar-card",
|
|
121854
121633
|
"formula-card",
|
|
121855
|
-
"custom-report"
|
|
121634
|
+
"custom-report",
|
|
121635
|
+
"sankey-card"
|
|
121856
121636
|
].includes(type);
|
|
121857
121637
|
}
|
|
121858
121638
|
var exportModel = { validate(dashboard) {
|
|
@@ -129976,9 +129756,6 @@ var integerToAmount = lib.integerToAmount;
|
|
|
129976
129756
|
var internal = null;
|
|
129977
129757
|
async function init(config = {}) {
|
|
129978
129758
|
validateNodeVersion();
|
|
129979
|
-
if (!globalThis.fetch) globalThis.fetch = (url, init) => {
|
|
129980
|
-
return Promise.resolve().then(() => require("./src-iMkUmuwR.js")).then(({ default: fetch }) => fetch(url, init));
|
|
129981
|
-
};
|
|
129982
129759
|
internal = await init$1(config);
|
|
129983
129760
|
return internal;
|
|
129984
129761
|
}
|
|
@@ -129992,8 +129769,6 @@ async function shutdown() {
|
|
|
129992
129769
|
}
|
|
129993
129770
|
}
|
|
129994
129771
|
//#endregion
|
|
129995
|
-
exports.__commonJSMin = __commonJSMin;
|
|
129996
|
-
exports.__toESM = __toESM;
|
|
129997
129772
|
exports.addTransactions = addTransactions;
|
|
129998
129773
|
exports.aqlQuery = aqlQuery;
|
|
129999
129774
|
exports.batchBudgetUpdates = batchBudgetUpdates;
|