nmce-func 1.2.0 → 1.3.1

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 (37) hide show
  1. package/README.md +24 -24
  2. package/_func/addressFunc.d.ts +31 -31
  3. package/_func/authentication.service.d.ts +27 -27
  4. package/_func/currencyFunc.d.ts +20 -20
  5. package/_func/dateFunc.d.ts +121 -121
  6. package/_func/htmlPrintFunc.d.ts +18 -18
  7. package/_func/index.d.ts +10 -10
  8. package/_func/javascriptFunc.d.ts +10 -9
  9. package/_func/jsonFunc.d.ts +31 -31
  10. package/_func/stringAusFunc.d.ts +40 -40
  11. package/_func/stringFunc.d.ts +41 -41
  12. package/_func/uuidFunc.d.ts +7 -7
  13. package/{esm2020 → esm2022}/_func/addressFunc.mjs +49 -49
  14. package/esm2022/_func/authentication.service.mjs +48 -0
  15. package/esm2022/_func/currencyFunc.mjs +72 -0
  16. package/{esm2020 → esm2022}/_func/dateFunc.mjs +316 -316
  17. package/{esm2020 → esm2022}/_func/htmlPrintFunc.mjs +45 -45
  18. package/{esm2020 → esm2022}/_func/index.mjs +11 -11
  19. package/esm2022/_func/javascriptFunc.mjs +21 -0
  20. package/{esm2020 → esm2022}/_func/jsonFunc.mjs +67 -67
  21. package/esm2022/_func/stringAusFunc.mjs +200 -0
  22. package/{esm2020 → esm2022}/_func/stringFunc.mjs +93 -93
  23. package/{esm2020 → esm2022}/_func/uuidFunc.mjs +17 -17
  24. package/{esm2020 → esm2022}/nmce-func.mjs +4 -4
  25. package/{esm2020 → esm2022}/public-api.mjs +5 -5
  26. package/{fesm2020 → fesm2022}/nmce-func.mjs +907 -900
  27. package/fesm2022/nmce-func.mjs.map +1 -0
  28. package/index.d.ts +5 -5
  29. package/package.json +5 -11
  30. package/public-api.d.ts +1 -1
  31. package/esm2020/_func/authentication.service.mjs +0 -45
  32. package/esm2020/_func/currencyFunc.mjs +0 -72
  33. package/esm2020/_func/javascriptFunc.mjs +0 -17
  34. package/esm2020/_func/stringAusFunc.mjs +0 -200
  35. package/fesm2015/nmce-func.mjs +0 -933
  36. package/fesm2015/nmce-func.mjs.map +0 -1
  37. package/fesm2020/nmce-func.mjs.map +0 -1
@@ -1,45 +1,45 @@
1
- export class HtmlPrintFunc {
2
- /**
3
- * Print with CSS for internal reports
4
- * @param htmlTags
5
- * @param cssUrl
6
- */
7
- static printWithCSS(htmlTags, cssUrl) {
8
- if (window) {
9
- const htmlToPrint = `<html><head>
10
- <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
11
- <link rel="stylesheet" type="text/css" href="${cssUrl}" media="screen,print"/>
12
- </head><body onload="window.print()">${htmlTags}</body></html>`;
13
- const popup = window.open('', '_blank', 'width=1024,height=768');
14
- popup?.document.open();
15
- popup?.document.write(htmlToPrint);
16
- popup?.document.close();
17
- }
18
- return true;
19
- }
20
- /**
21
- * Print for external documents.
22
- * @param htmlTags
23
- */
24
- static print(htmlTags) {
25
- if (window) {
26
- const htmlToPrint = `<html><head>
27
- <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
28
- </head><body onload="window.print()">${htmlTags}</body></html>`;
29
- const popup = window.open('', '_blank', 'width=1024,height=768');
30
- popup?.document.open();
31
- popup?.document.write(htmlToPrint);
32
- popup?.document.close();
33
- }
34
- return true;
35
- }
36
- /**
37
- * Print image url through html img.
38
- * @param url
39
- */
40
- static printImage(url) {
41
- const imageTags = `<img src="${url}" alt="Image from URL"/>`;
42
- HtmlPrintFunc.print(imageTags);
43
- }
44
- }
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbFByaW50RnVuYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25tY2UtZnVuYy9zcmMvX2Z1bmMvaHRtbFByaW50RnVuYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sYUFBYTtJQUN6Qjs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFnQixFQUFFLE1BQWM7UUFDbkQsSUFBSSxNQUFNLEVBQUU7WUFDWCxNQUFNLFdBQVcsR0FBRzs7K0NBRXdCLE1BQU07dUNBQ2QsUUFBUSxnQkFBZ0IsQ0FBQztZQUU3RCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztZQUNqRSxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZCLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRW5DLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDeEI7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQWdCO1FBQzVCLElBQUksTUFBTSxFQUFFO1lBQ1gsTUFBTSxXQUFXLEdBQUc7O3VDQUVnQixRQUFRLGdCQUFnQixDQUFDO1lBRTdELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1lBQ2pFLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdkIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFbkMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUN4QjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBVztRQUM1QixNQUFNLFNBQVMsR0FBRyxhQUFhLEdBQUcsMEJBQTBCLENBQUM7UUFDN0QsYUFBYSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoQyxDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgSHRtbFByaW50RnVuYyB7XHJcblx0LyoqXHJcblx0ICogUHJpbnQgd2l0aCBDU1MgZm9yIGludGVybmFsIHJlcG9ydHNcclxuXHQgKiBAcGFyYW0gaHRtbFRhZ3NcclxuXHQgKiBAcGFyYW0gY3NzVXJsXHJcblx0ICovXHJcblx0c3RhdGljIHByaW50V2l0aENTUyhodG1sVGFnczogc3RyaW5nLCBjc3NVcmw6IHN0cmluZykge1xyXG5cdFx0aWYgKHdpbmRvdykge1xyXG5cdFx0XHRjb25zdCBodG1sVG9QcmludCA9IGA8aHRtbD48aGVhZD5cclxuPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLCBzaHJpbmstdG8tZml0PW5vXCIvPlxyXG48bGluayByZWw9XCJzdHlsZXNoZWV0XCIgdHlwZT1cInRleHQvY3NzXCIgaHJlZj1cIiR7Y3NzVXJsfVwiIG1lZGlhPVwic2NyZWVuLHByaW50XCIvPlxyXG48L2hlYWQ+PGJvZHkgb25sb2FkPVwid2luZG93LnByaW50KClcIj4ke2h0bWxUYWdzfTwvYm9keT48L2h0bWw+YDtcclxuXHJcblx0XHRcdGNvbnN0IHBvcHVwID0gd2luZG93Lm9wZW4oJycsICdfYmxhbmsnLCAnd2lkdGg9MTAyNCxoZWlnaHQ9NzY4Jyk7XHJcblx0XHRcdHBvcHVwPy5kb2N1bWVudC5vcGVuKCk7XHJcblx0XHRcdHBvcHVwPy5kb2N1bWVudC53cml0ZShodG1sVG9QcmludCk7XHJcblxyXG5cdFx0XHRwb3B1cD8uZG9jdW1lbnQuY2xvc2UoKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUHJpbnQgZm9yIGV4dGVybmFsIGRvY3VtZW50cy5cclxuXHQgKiBAcGFyYW0gaHRtbFRhZ3NcclxuXHQgKi9cclxuXHRzdGF0aWMgcHJpbnQoaHRtbFRhZ3M6IHN0cmluZykge1xyXG5cdFx0aWYgKHdpbmRvdykge1xyXG5cdFx0XHRjb25zdCBodG1sVG9QcmludCA9IGA8aHRtbD48aGVhZD5cclxuPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLCBzaHJpbmstdG8tZml0PW5vXCIvPlxyXG48L2hlYWQ+PGJvZHkgb25sb2FkPVwid2luZG93LnByaW50KClcIj4ke2h0bWxUYWdzfTwvYm9keT48L2h0bWw+YDtcclxuXHJcblx0XHRcdGNvbnN0IHBvcHVwID0gd2luZG93Lm9wZW4oJycsICdfYmxhbmsnLCAnd2lkdGg9MTAyNCxoZWlnaHQ9NzY4Jyk7XHJcblx0XHRcdHBvcHVwPy5kb2N1bWVudC5vcGVuKCk7XHJcblx0XHRcdHBvcHVwPy5kb2N1bWVudC53cml0ZShodG1sVG9QcmludCk7XHJcblxyXG5cdFx0XHRwb3B1cD8uZG9jdW1lbnQuY2xvc2UoKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUHJpbnQgaW1hZ2UgdXJsIHRocm91Z2ggaHRtbCBpbWcuXHJcblx0ICogQHBhcmFtIHVybCBcclxuXHQgKi9cclxuXHRzdGF0aWMgcHJpbnRJbWFnZSh1cmw6IHN0cmluZykge1xyXG5cdFx0Y29uc3QgaW1hZ2VUYWdzID0gYDxpbWcgc3JjPVwiJHt1cmx9XCIgYWx0PVwiSW1hZ2UgZnJvbSBVUkxcIi8+YDtcclxuXHRcdEh0bWxQcmludEZ1bmMucHJpbnQoaW1hZ2VUYWdzKTtcclxuXHR9XHJcbn1cclxuIl19
1
+ export class HtmlPrintFunc {
2
+ /**
3
+ * Print with CSS for internal reports
4
+ * @param htmlTags
5
+ * @param cssUrl
6
+ */
7
+ static printWithCSS(htmlTags, cssUrl) {
8
+ if (window) {
9
+ const htmlToPrint = `<html><head>
10
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
11
+ <link rel="stylesheet" type="text/css" href="${cssUrl}" media="screen,print"/>
12
+ </head><body onload="window.print()">${htmlTags}</body></html>`;
13
+ const popup = window.open('', '_blank', 'width=1024,height=768');
14
+ popup?.document.open();
15
+ popup?.document.write(htmlToPrint);
16
+ popup?.document.close();
17
+ }
18
+ return true;
19
+ }
20
+ /**
21
+ * Print for external documents.
22
+ * @param htmlTags
23
+ */
24
+ static print(htmlTags) {
25
+ if (window) {
26
+ const htmlToPrint = `<html><head>
27
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
28
+ </head><body onload="window.print()">${htmlTags}</body></html>`;
29
+ const popup = window.open('', '_blank', 'width=1024,height=768');
30
+ popup?.document.open();
31
+ popup?.document.write(htmlToPrint);
32
+ popup?.document.close();
33
+ }
34
+ return true;
35
+ }
36
+ /**
37
+ * Print image url through html img.
38
+ * @param url
39
+ */
40
+ static printImage(url) {
41
+ const imageTags = `<img src="${url}" alt="Image from URL"/>`;
42
+ HtmlPrintFunc.print(imageTags);
43
+ }
44
+ }
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbFByaW50RnVuYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25tY2UtZnVuYy9zcmMvX2Z1bmMvaHRtbFByaW50RnVuYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sYUFBYTtJQUN6Qjs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFnQixFQUFFLE1BQWM7UUFDbkQsSUFBSSxNQUFNLEVBQUU7WUFDWCxNQUFNLFdBQVcsR0FBRzs7K0NBRXdCLE1BQU07dUNBQ2QsUUFBUSxnQkFBZ0IsQ0FBQztZQUU3RCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztZQUNqRSxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZCLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRW5DLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDeEI7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQWdCO1FBQzVCLElBQUksTUFBTSxFQUFFO1lBQ1gsTUFBTSxXQUFXLEdBQUc7O3VDQUVnQixRQUFRLGdCQUFnQixDQUFDO1lBRTdELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1lBQ2pFLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdkIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFbkMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUN4QjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBVztRQUM1QixNQUFNLFNBQVMsR0FBRyxhQUFhLEdBQUcsMEJBQTBCLENBQUM7UUFDN0QsYUFBYSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoQyxDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgSHRtbFByaW50RnVuYyB7XG5cdC8qKlxuXHQgKiBQcmludCB3aXRoIENTUyBmb3IgaW50ZXJuYWwgcmVwb3J0c1xuXHQgKiBAcGFyYW0gaHRtbFRhZ3Ncblx0ICogQHBhcmFtIGNzc1VybFxuXHQgKi9cblx0c3RhdGljIHByaW50V2l0aENTUyhodG1sVGFnczogc3RyaW5nLCBjc3NVcmw6IHN0cmluZykge1xuXHRcdGlmICh3aW5kb3cpIHtcblx0XHRcdGNvbnN0IGh0bWxUb1ByaW50ID0gYDxodG1sPjxoZWFkPlxuPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLCBzaHJpbmstdG8tZml0PW5vXCIvPlxuPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIHR5cGU9XCJ0ZXh0L2Nzc1wiIGhyZWY9XCIke2Nzc1VybH1cIiBtZWRpYT1cInNjcmVlbixwcmludFwiLz5cbjwvaGVhZD48Ym9keSBvbmxvYWQ9XCJ3aW5kb3cucHJpbnQoKVwiPiR7aHRtbFRhZ3N9PC9ib2R5PjwvaHRtbD5gO1xuXG5cdFx0XHRjb25zdCBwb3B1cCA9IHdpbmRvdy5vcGVuKCcnLCAnX2JsYW5rJywgJ3dpZHRoPTEwMjQsaGVpZ2h0PTc2OCcpO1xuXHRcdFx0cG9wdXA/LmRvY3VtZW50Lm9wZW4oKTtcblx0XHRcdHBvcHVwPy5kb2N1bWVudC53cml0ZShodG1sVG9QcmludCk7XG5cblx0XHRcdHBvcHVwPy5kb2N1bWVudC5jbG9zZSgpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcmludCBmb3IgZXh0ZXJuYWwgZG9jdW1lbnRzLlxuXHQgKiBAcGFyYW0gaHRtbFRhZ3Ncblx0ICovXG5cdHN0YXRpYyBwcmludChodG1sVGFnczogc3RyaW5nKSB7XG5cdFx0aWYgKHdpbmRvdykge1xuXHRcdFx0Y29uc3QgaHRtbFRvUHJpbnQgPSBgPGh0bWw+PGhlYWQ+XG48bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIHNocmluay10by1maXQ9bm9cIi8+XG48L2hlYWQ+PGJvZHkgb25sb2FkPVwid2luZG93LnByaW50KClcIj4ke2h0bWxUYWdzfTwvYm9keT48L2h0bWw+YDtcblxuXHRcdFx0Y29uc3QgcG9wdXAgPSB3aW5kb3cub3BlbignJywgJ19ibGFuaycsICd3aWR0aD0xMDI0LGhlaWdodD03NjgnKTtcblx0XHRcdHBvcHVwPy5kb2N1bWVudC5vcGVuKCk7XG5cdFx0XHRwb3B1cD8uZG9jdW1lbnQud3JpdGUoaHRtbFRvUHJpbnQpO1xuXG5cdFx0XHRwb3B1cD8uZG9jdW1lbnQuY2xvc2UoKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogUHJpbnQgaW1hZ2UgdXJsIHRocm91Z2ggaHRtbCBpbWcuXG5cdCAqIEBwYXJhbSB1cmwgXG5cdCAqL1xuXHRzdGF0aWMgcHJpbnRJbWFnZSh1cmw6IHN0cmluZykge1xuXHRcdGNvbnN0IGltYWdlVGFncyA9IGA8aW1nIHNyYz1cIiR7dXJsfVwiIGFsdD1cIkltYWdlIGZyb20gVVJMXCIvPmA7XG5cdFx0SHRtbFByaW50RnVuYy5wcmludChpbWFnZVRhZ3MpO1xuXHR9XG59XG4iXX0=
@@ -1,11 +1,11 @@
1
- export * from './addressFunc';
2
- export * from './authentication.service';
3
- export * from './currencyFunc';
4
- export * from './dateFunc';
5
- export * from './htmlPrintFunc';
6
- export * from './javascriptFunc';
7
- export * from './jsonFunc';
8
- export * from './stringAusFunc';
9
- export * from './stringFunc';
10
- export * from './uuidFunc';
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ubWNlLWZ1bmMvc3JjL19mdW5jL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYWRkcmVzc0Z1bmMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2N1cnJlbmN5RnVuYyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZGF0ZUZ1bmMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2h0bWxQcmludEZ1bmMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2phdmFzY3JpcHRGdW5jJztcclxuZXhwb3J0ICogZnJvbSAnLi9qc29uRnVuYyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc3RyaW5nQXVzRnVuYyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc3RyaW5nRnVuYyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdXVpZEZ1bmMnO1xyXG5cclxuXHJcbiJdfQ==
1
+ export * from './addressFunc';
2
+ export * from './authentication.service';
3
+ export * from './currencyFunc';
4
+ export * from './dateFunc';
5
+ export * from './htmlPrintFunc';
6
+ export * from './javascriptFunc';
7
+ export * from './jsonFunc';
8
+ export * from './stringAusFunc';
9
+ export * from './stringFunc';
10
+ export * from './uuidFunc';
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ubWNlLWZ1bmMvc3JjL19mdW5jL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYWRkcmVzc0Z1bmMnO1xuZXhwb3J0ICogZnJvbSAnLi9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vY3VycmVuY3lGdW5jJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0ZUZ1bmMnO1xuZXhwb3J0ICogZnJvbSAnLi9odG1sUHJpbnRGdW5jJztcbmV4cG9ydCAqIGZyb20gJy4vamF2YXNjcmlwdEZ1bmMnO1xuZXhwb3J0ICogZnJvbSAnLi9qc29uRnVuYyc7XG5leHBvcnQgKiBmcm9tICcuL3N0cmluZ0F1c0Z1bmMnO1xuZXhwb3J0ICogZnJvbSAnLi9zdHJpbmdGdW5jJztcbmV4cG9ydCAqIGZyb20gJy4vdXVpZEZ1bmMnO1xuXG5cbiJdfQ==
@@ -0,0 +1,21 @@
1
+ export class JavaScriptFunc {
2
+ /**
3
+ * Some business functions depend on external JavaScript libraries. Lazy loading of respective business modules is good,
4
+ * and this function supports lazy loading of JS libraries.
5
+ * @param scriptUrl
6
+ * @param type things like module.
7
+ * @returns Promise for subsequent JS function calls.
8
+ */
9
+ static loadExternalScript(scriptUrl, type) {
10
+ return new Promise((resolve, reject) => {
11
+ const scriptElement = document.createElement('script');
12
+ if (type) {
13
+ scriptElement.type = type;
14
+ }
15
+ scriptElement.src = scriptUrl;
16
+ scriptElement.onload = resolve;
17
+ document.body.appendChild(scriptElement);
18
+ });
19
+ }
20
+ }
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdEZ1bmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ubWNlLWZ1bmMvc3JjL19mdW5jL2phdmFzY3JpcHRGdW5jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxjQUFjO0lBQzFCOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxTQUFpQixFQUFFLElBQWE7UUFDekQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUN0QyxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZELElBQUksSUFBSSxFQUFDO2dCQUNSLGFBQWEsQ0FBQyxJQUFJLEdBQUMsSUFBSSxDQUFDO2FBQ3hCO1lBRUQsYUFBYSxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUM7WUFDOUIsYUFBYSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7WUFDL0IsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgSmF2YVNjcmlwdEZ1bmMge1xyXG5cdC8qKlxyXG5cdCAqIFNvbWUgYnVzaW5lc3MgZnVuY3Rpb25zIGRlcGVuZCBvbiBleHRlcm5hbCBKYXZhU2NyaXB0IGxpYnJhcmllcy4gTGF6eSBsb2FkaW5nIG9mIHJlc3BlY3RpdmUgYnVzaW5lc3MgbW9kdWxlcyBpcyBnb29kLCBcclxuXHQgKiBhbmQgdGhpcyBmdW5jdGlvbiBzdXBwb3J0cyBsYXp5IGxvYWRpbmcgb2YgSlMgbGlicmFyaWVzLlxyXG5cdCAqIEBwYXJhbSBzY3JpcHRVcmwgXHJcblx0ICogQHBhcmFtIHR5cGUgdGhpbmdzIGxpa2UgbW9kdWxlLlxyXG5cdCAqIEByZXR1cm5zIFByb21pc2UgZm9yIHN1YnNlcXVlbnQgSlMgZnVuY3Rpb24gY2FsbHMuXHJcblx0ICovXHJcblx0c3RhdGljIGxvYWRFeHRlcm5hbFNjcmlwdChzY3JpcHRVcmw6IHN0cmluZywgdHlwZT86IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0Y29uc3Qgc2NyaXB0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xyXG5cdFx0XHRpZiAodHlwZSl7XHJcblx0XHRcdFx0c2NyaXB0RWxlbWVudC50eXBlPXR5cGU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHNjcmlwdEVsZW1lbnQuc3JjID0gc2NyaXB0VXJsO1xyXG5cdFx0XHRzY3JpcHRFbGVtZW50Lm9ubG9hZCA9IHJlc29sdmU7XHJcblx0XHRcdGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0RWxlbWVudCk7XHJcblx0XHR9KTtcclxuXHR9XHJcbn1cclxuIl19
@@ -1,67 +1,67 @@
1
- import { DateFunc } from './dateFunc';
2
- /**
3
- * Basic JSON functions
4
- */
5
- export class JsonFunc {
6
- /**
7
- *
8
- * @param array Group by a property of array element.
9
- * @param propertyName
10
- * @returns
11
- */
12
- static groupBy(array, propertyName) {
13
- return array.reduce(function (acc, obj) {
14
- const key = obj[propertyName];
15
- if (!acc[key]) {
16
- acc[key] = [];
17
- }
18
- acc[key].push(obj);
19
- return acc;
20
- }, {});
21
- }
22
- /**
23
- * Group by a date property. The key is always of string type and representing milliseconds.
24
- * The client should convert the string to number.
25
- * Angular date pipe could actually consume such string without explicitly converting to number.
26
- * @param array
27
- * @param propertyName
28
- */
29
- static groupByDate(array, propertyName) {
30
- return array.reduce(function (acc, obj) {
31
- const key = DateFunc.dateTimeUtcToLocalDateNumber(obj[propertyName]);
32
- if (!acc[key]) {
33
- acc[key] = [];
34
- }
35
- acc[key].push(obj);
36
- return acc;
37
- }, {});
38
- }
39
- /**
40
- * Remove null or empty fields including those in nested objects.
41
- * This is useful for reducing payload of AJAX serialization.
42
- * @param obj
43
- */
44
- static removeNullOrEmptyFields(obj) {
45
- for (const f in obj) {
46
- let p = obj[f];
47
- if (p === null || p === '') {
48
- delete obj[f];
49
- }
50
- else if (typeof p === 'object' && p !== null) {
51
- this.removeNullOrEmptyFields(p);
52
- }
53
- }
54
- }
55
- /**
56
- *
57
- * @param obj Remove null fields of object at only the 1st level.
58
- */
59
- static removeNullFields(obj) {
60
- for (const f in obj) {
61
- if (obj[f] === null) {
62
- delete obj[f];
63
- }
64
- }
65
- }
66
- }
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbkZ1bmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ubWNlLWZ1bmMvc3JjL19mdW5jL2pzb25GdW5jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFdEM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sUUFBUTtJQUNwQjs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxPQUFPLENBQUksS0FBZSxFQUFFLFlBQW9CO1FBQ3RELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFTLEdBQVEsRUFBRSxHQUFRO1lBQzlDLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNkLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7YUFDZDtZQUNELEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkIsT0FBTyxHQUFHLENBQUM7UUFDWixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDUixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLFdBQVcsQ0FBSSxLQUFlLEVBQUUsWUFBb0I7UUFDMUQsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVMsR0FBUSxFQUFFLEdBQVE7WUFDOUMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ3JFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUNkO1lBQ0QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuQixPQUFPLEdBQUcsQ0FBQztRQUNaLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLHVCQUF1QixDQUFDLEdBQVE7UUFDdEMsS0FBSyxNQUFNLENBQUMsSUFBSSxHQUFHLEVBQUU7WUFDcEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2YsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzNCLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2Q7aUJBQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtnQkFDL0MsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2hDO1NBQ0Q7SUFDRixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEdBQVE7UUFDL0IsS0FBSyxNQUFNLENBQUMsSUFBSSxHQUFHLEVBQUU7WUFDcEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO2dCQUNwQixPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNkO1NBQ0Q7SUFDRixDQUFDO0NBRUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlRnVuYyB9IGZyb20gJy4vZGF0ZUZ1bmMnO1xyXG5cclxuLyoqXHJcbiAqIEJhc2ljIEpTT04gZnVuY3Rpb25zXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgSnNvbkZ1bmMge1xyXG5cdC8qKlxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBhcnJheSBHcm91cCBieSBhIHByb3BlcnR5IG9mIGFycmF5IGVsZW1lbnQuXHJcblx0ICogQHBhcmFtIHByb3BlcnR5TmFtZSBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRzdGF0aWMgZ3JvdXBCeTxUPihhcnJheTogQXJyYXk8VD4sIHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gYXJyYXkucmVkdWNlKGZ1bmN0aW9uKGFjYzogYW55LCBvYmo6IGFueSkge1xyXG5cdFx0XHRjb25zdCBrZXkgPSBvYmpbcHJvcGVydHlOYW1lXTtcclxuXHRcdFx0aWYgKCFhY2Nba2V5XSkge1xyXG5cdFx0XHRcdGFjY1trZXldID0gW107XHJcblx0XHRcdH1cclxuXHRcdFx0YWNjW2tleV0ucHVzaChvYmopO1xyXG5cdFx0XHRyZXR1cm4gYWNjO1xyXG5cdFx0fSwge30pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR3JvdXAgYnkgYSBkYXRlIHByb3BlcnR5LiBUaGUga2V5IGlzIGFsd2F5cyBvZiBzdHJpbmcgdHlwZSBhbmQgcmVwcmVzZW50aW5nIG1pbGxpc2Vjb25kcy4gXHJcblx0ICogVGhlIGNsaWVudCBzaG91bGQgY29udmVydCB0aGUgc3RyaW5nIHRvIG51bWJlci5cclxuXHQgKiBBbmd1bGFyIGRhdGUgcGlwZSBjb3VsZCBhY3R1YWxseSBjb25zdW1lIHN1Y2ggc3RyaW5nIHdpdGhvdXQgZXhwbGljaXRseSBjb252ZXJ0aW5nIHRvIG51bWJlci5cclxuXHQgKiBAcGFyYW0gYXJyYXlcclxuXHQgKiBAcGFyYW0gcHJvcGVydHlOYW1lXHJcblx0ICovXHJcblx0c3RhdGljIGdyb3VwQnlEYXRlPFQ+KGFycmF5OiBBcnJheTxUPiwgcHJvcGVydHlOYW1lOiBzdHJpbmcpIHtcclxuXHRcdHJldHVybiBhcnJheS5yZWR1Y2UoZnVuY3Rpb24oYWNjOiBhbnksIG9iajogYW55KSB7XHJcblx0XHRcdGNvbnN0IGtleSA9IERhdGVGdW5jLmRhdGVUaW1lVXRjVG9Mb2NhbERhdGVOdW1iZXIob2JqW3Byb3BlcnR5TmFtZV0pO1xyXG5cdFx0XHRpZiAoIWFjY1trZXldKSB7XHJcblx0XHRcdFx0YWNjW2tleV0gPSBbXTtcclxuXHRcdFx0fVxyXG5cdFx0XHRhY2Nba2V5XS5wdXNoKG9iaik7XHJcblx0XHRcdHJldHVybiBhY2M7XHJcblx0XHR9LCB7fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZW1vdmUgbnVsbCBvciBlbXB0eSBmaWVsZHMgaW5jbHVkaW5nIHRob3NlIGluIG5lc3RlZCBvYmplY3RzLlxyXG5cdCAqIFRoaXMgaXMgdXNlZnVsIGZvciByZWR1Y2luZyBwYXlsb2FkIG9mIEFKQVggc2VyaWFsaXphdGlvbi5cclxuXHQgKiBAcGFyYW0gb2JqIFxyXG5cdCAqL1xyXG5cdHN0YXRpYyByZW1vdmVOdWxsT3JFbXB0eUZpZWxkcyhvYmo6IGFueSkge1xyXG5cdFx0Zm9yIChjb25zdCBmIGluIG9iaikge1xyXG5cdFx0XHRsZXQgcCA9IG9ialtmXTtcclxuXHRcdFx0aWYgKHAgPT09IG51bGwgfHwgcCA9PT0gJycpIHtcclxuXHRcdFx0XHRkZWxldGUgb2JqW2ZdO1xyXG5cdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBwID09PSAnb2JqZWN0JyAmJiBwICE9PSBudWxsKSB7XHJcblx0XHRcdFx0dGhpcy5yZW1vdmVOdWxsT3JFbXB0eUZpZWxkcyhwKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogXHJcblx0ICogQHBhcmFtIG9iaiBSZW1vdmUgbnVsbCBmaWVsZHMgb2Ygb2JqZWN0IGF0IG9ubHkgdGhlIDFzdCBsZXZlbC5cclxuXHQgKi9cclxuXHRzdGF0aWMgcmVtb3ZlTnVsbEZpZWxkcyhvYmo6IGFueSkge1xyXG5cdFx0Zm9yIChjb25zdCBmIGluIG9iaikge1xyXG5cdFx0XHRpZiAob2JqW2ZdID09PSBudWxsKSB7XHJcblx0XHRcdFx0ZGVsZXRlIG9ialtmXTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcbn1cclxuIl19
1
+ import { DateFunc } from './dateFunc';
2
+ /**
3
+ * Basic JSON functions
4
+ */
5
+ export class JsonFunc {
6
+ /**
7
+ *
8
+ * @param array Group by a property of array element.
9
+ * @param propertyName
10
+ * @returns
11
+ */
12
+ static groupBy(array, propertyName) {
13
+ return array.reduce(function (acc, obj) {
14
+ const key = obj[propertyName];
15
+ if (!acc[key]) {
16
+ acc[key] = [];
17
+ }
18
+ acc[key].push(obj);
19
+ return acc;
20
+ }, {});
21
+ }
22
+ /**
23
+ * Group by a date property. The key is always of string type and representing milliseconds.
24
+ * The client should convert the string to number.
25
+ * Angular date pipe could actually consume such string without explicitly converting to number.
26
+ * @param array
27
+ * @param propertyName
28
+ */
29
+ static groupByDate(array, propertyName) {
30
+ return array.reduce(function (acc, obj) {
31
+ const key = DateFunc.dateTimeUtcToLocalDateNumber(obj[propertyName]);
32
+ if (!acc[key]) {
33
+ acc[key] = [];
34
+ }
35
+ acc[key].push(obj);
36
+ return acc;
37
+ }, {});
38
+ }
39
+ /**
40
+ * Remove null or empty fields including those in nested objects.
41
+ * This is useful for reducing payload of AJAX serialization.
42
+ * @param obj
43
+ */
44
+ static removeNullOrEmptyFields(obj) {
45
+ for (const f in obj) {
46
+ let p = obj[f];
47
+ if (p === null || p === '') {
48
+ delete obj[f];
49
+ }
50
+ else if (typeof p === 'object' && p !== null) {
51
+ this.removeNullOrEmptyFields(p);
52
+ }
53
+ }
54
+ }
55
+ /**
56
+ *
57
+ * @param obj Remove null fields of object at only the 1st level.
58
+ */
59
+ static removeNullFields(obj) {
60
+ for (const f in obj) {
61
+ if (obj[f] === null) {
62
+ delete obj[f];
63
+ }
64
+ }
65
+ }
66
+ }
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbkZ1bmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ubWNlLWZ1bmMvc3JjL19mdW5jL2pzb25GdW5jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFdEM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sUUFBUTtJQUNwQjs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxPQUFPLENBQUksS0FBZSxFQUFFLFlBQW9CO1FBQ3RELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFTLEdBQVEsRUFBRSxHQUFRO1lBQzlDLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNkLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7YUFDZDtZQUNELEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkIsT0FBTyxHQUFHLENBQUM7UUFDWixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDUixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLFdBQVcsQ0FBSSxLQUFlLEVBQUUsWUFBb0I7UUFDMUQsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVMsR0FBUSxFQUFFLEdBQVE7WUFDOUMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ3JFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUNkO1lBQ0QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuQixPQUFPLEdBQUcsQ0FBQztRQUNaLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLHVCQUF1QixDQUFDLEdBQVE7UUFDdEMsS0FBSyxNQUFNLENBQUMsSUFBSSxHQUFHLEVBQUU7WUFDcEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2YsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzNCLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2Q7aUJBQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtnQkFDL0MsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2hDO1NBQ0Q7SUFDRixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEdBQVE7UUFDL0IsS0FBSyxNQUFNLENBQUMsSUFBSSxHQUFHLEVBQUU7WUFDcEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO2dCQUNwQixPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNkO1NBQ0Q7SUFDRixDQUFDO0NBRUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlRnVuYyB9IGZyb20gJy4vZGF0ZUZ1bmMnO1xuXG4vKipcbiAqIEJhc2ljIEpTT04gZnVuY3Rpb25zXG4gKi9cbmV4cG9ydCBjbGFzcyBKc29uRnVuYyB7XG5cdC8qKlxuXHQgKiBcblx0ICogQHBhcmFtIGFycmF5IEdyb3VwIGJ5IGEgcHJvcGVydHkgb2YgYXJyYXkgZWxlbWVudC5cblx0ICogQHBhcmFtIHByb3BlcnR5TmFtZSBcblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRzdGF0aWMgZ3JvdXBCeTxUPihhcnJheTogQXJyYXk8VD4sIHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIGFycmF5LnJlZHVjZShmdW5jdGlvbihhY2M6IGFueSwgb2JqOiBhbnkpIHtcblx0XHRcdGNvbnN0IGtleSA9IG9ialtwcm9wZXJ0eU5hbWVdO1xuXHRcdFx0aWYgKCFhY2Nba2V5XSkge1xuXHRcdFx0XHRhY2Nba2V5XSA9IFtdO1xuXHRcdFx0fVxuXHRcdFx0YWNjW2tleV0ucHVzaChvYmopO1xuXHRcdFx0cmV0dXJuIGFjYztcblx0XHR9LCB7fSk7XG5cdH1cblxuXHQvKipcblx0ICogR3JvdXAgYnkgYSBkYXRlIHByb3BlcnR5LiBUaGUga2V5IGlzIGFsd2F5cyBvZiBzdHJpbmcgdHlwZSBhbmQgcmVwcmVzZW50aW5nIG1pbGxpc2Vjb25kcy4gXG5cdCAqIFRoZSBjbGllbnQgc2hvdWxkIGNvbnZlcnQgdGhlIHN0cmluZyB0byBudW1iZXIuXG5cdCAqIEFuZ3VsYXIgZGF0ZSBwaXBlIGNvdWxkIGFjdHVhbGx5IGNvbnN1bWUgc3VjaCBzdHJpbmcgd2l0aG91dCBleHBsaWNpdGx5IGNvbnZlcnRpbmcgdG8gbnVtYmVyLlxuXHQgKiBAcGFyYW0gYXJyYXlcblx0ICogQHBhcmFtIHByb3BlcnR5TmFtZVxuXHQgKi9cblx0c3RhdGljIGdyb3VwQnlEYXRlPFQ+KGFycmF5OiBBcnJheTxUPiwgcHJvcGVydHlOYW1lOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gYXJyYXkucmVkdWNlKGZ1bmN0aW9uKGFjYzogYW55LCBvYmo6IGFueSkge1xuXHRcdFx0Y29uc3Qga2V5ID0gRGF0ZUZ1bmMuZGF0ZVRpbWVVdGNUb0xvY2FsRGF0ZU51bWJlcihvYmpbcHJvcGVydHlOYW1lXSk7XG5cdFx0XHRpZiAoIWFjY1trZXldKSB7XG5cdFx0XHRcdGFjY1trZXldID0gW107XG5cdFx0XHR9XG5cdFx0XHRhY2Nba2V5XS5wdXNoKG9iaik7XG5cdFx0XHRyZXR1cm4gYWNjO1xuXHRcdH0sIHt9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmUgbnVsbCBvciBlbXB0eSBmaWVsZHMgaW5jbHVkaW5nIHRob3NlIGluIG5lc3RlZCBvYmplY3RzLlxuXHQgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgcmVkdWNpbmcgcGF5bG9hZCBvZiBBSkFYIHNlcmlhbGl6YXRpb24uXG5cdCAqIEBwYXJhbSBvYmogXG5cdCAqL1xuXHRzdGF0aWMgcmVtb3ZlTnVsbE9yRW1wdHlGaWVsZHMob2JqOiBhbnkpIHtcblx0XHRmb3IgKGNvbnN0IGYgaW4gb2JqKSB7XG5cdFx0XHRsZXQgcCA9IG9ialtmXTtcblx0XHRcdGlmIChwID09PSBudWxsIHx8IHAgPT09ICcnKSB7XG5cdFx0XHRcdGRlbGV0ZSBvYmpbZl07XG5cdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBwID09PSAnb2JqZWN0JyAmJiBwICE9PSBudWxsKSB7XG5cdFx0XHRcdHRoaXMucmVtb3ZlTnVsbE9yRW1wdHlGaWVsZHMocCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFxuXHQgKiBAcGFyYW0gb2JqIFJlbW92ZSBudWxsIGZpZWxkcyBvZiBvYmplY3QgYXQgb25seSB0aGUgMXN0IGxldmVsLlxuXHQgKi9cblx0c3RhdGljIHJlbW92ZU51bGxGaWVsZHMob2JqOiBhbnkpIHtcblx0XHRmb3IgKGNvbnN0IGYgaW4gb2JqKSB7XG5cdFx0XHRpZiAob2JqW2ZdID09PSBudWxsKSB7XG5cdFx0XHRcdGRlbGV0ZSBvYmpbZl07XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cbn1cbiJdfQ==
@@ -0,0 +1,200 @@
1
+ /**
2
+ * String functions specific to Australia
3
+ */
4
+ export class StringAusFunc {
5
+ //thanks to https://github.com/sidorares/australian-business-number/blob/0591475f5978fd122b472edcdc7efe6d96d56f26/index.js
6
+ static acnWeights = [8, 7, 6, 5, 4, 3, 2, 1];
7
+ static weights = [10, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19];
8
+ static suggestLookup = StringAusFunc.generateLookup();
9
+ /**
10
+ * Validate medicare number
11
+ * @param n
12
+ * @returns validation error message
13
+ */
14
+ static validateMedicare(n) {
15
+ if (!n) {
16
+ return null;
17
+ }
18
+ if (n && n.length === 10) {
19
+ const matches = n.match(/^(\d{8})(\d)/);
20
+ if (!matches) {
21
+ return {
22
+ code: 2, message: 'Medicare number should be all digit.'
23
+ };
24
+ }
25
+ const base = matches[1];
26
+ const checkDigit = matches[2];
27
+ const weights = [1, 3, 7, 9, 1, 3, 7, 9];
28
+ let sum = 0;
29
+ for (let i = 0; i < weights.length; i++) {
30
+ sum += parseInt(base[i], 10) * weights[i];
31
+ }
32
+ //console.debug(`sum: ${sum} checkDigits: ${checkDigit}`);
33
+ const isValid = sum % 10 === parseInt(checkDigit, 10);
34
+ if (!isValid) {
35
+ return {
36
+ code: 3, message: 'Checksum is incorrect.'
37
+ };
38
+ }
39
+ }
40
+ else {
41
+ return { code: 1, message: 'Length should be 10.' };
42
+ }
43
+ return null;
44
+ }
45
+ static validateMedicareProviderNumber(providerNumber) {
46
+ if (!providerNumber) {
47
+ return null;
48
+ }
49
+ if (!/^[0-9]{6}[0-9ABCDEFGHJKLMNPQRTUVWXY][ABFHJKLTWXY]/.test(providerNumber)) {
50
+ return { code: 1, message: 'Not matching provider number format.' };
51
+ }
52
+ const practiceLocationValues = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'T', 'U', 'V', 'W', 'X', 'Y'];
53
+ const remainderValues = ['Y', 'X', 'W', 'T', 'L', 'K', 'J', 'H', 'F', 'B', 'A'];
54
+ const stemWeights = [3, 5, 8, 4, 2, 1];
55
+ const stemNumbers = providerNumber.substr(0, 6).split('').map((char) => parseInt(char));
56
+ const practiceLoc = practiceLocationValues.findIndex((e) => e === providerNumber[6]);
57
+ const checksum = providerNumber[7];
58
+ const zipped = stemWeights.map((x, i) => [x, stemNumbers[i]]);
59
+ const sumWeights = zipped.map((y) => y[1] * y[0]).reduce((total, num) => total + num);
60
+ const remainder = (sumWeights + practiceLoc * 6) % 11;
61
+ const result = remainderValues[remainder];
62
+ const valid = result === checksum;
63
+ if (!valid) {
64
+ return { code: 2, message: 'Checksum is incorrect.' };
65
+ }
66
+ return null;
67
+ }
68
+ static validateDVAFileNumber(dva) {
69
+ if (!dva) {
70
+ return null;
71
+ }
72
+ const states = ['N', 'V', 'Q', 'S', 'W', 'T'];
73
+ const warCodes = [' ', 'X', 'KM', 'SR', 'SS', 'SM', 'SWP', 'AGX', 'BW', 'GW', 'CGW',
74
+ 'P', 'PX', 'PAD', 'PAM', 'PCA', 'PCR', 'PCV', 'PMS', 'PSW', 'PWO', 'HKX', 'MAL',
75
+ 'CN', 'CNX', 'IV', 'NF', 'NG', 'RD', 'RDX', 'SA', 'SAX', 'A',
76
+ 'N', 'NX', 'NSW', 'NSM',
77
+ 'BUR', 'CNK', 'CNS', 'FIJ', 'GHA', 'HKS', 'IND', 'KYA', 'MAU', 'MLS', 'MTX', 'MWI', 'NK', 'NGR', 'NRD', 'NSS', 'PK']; //British Commonwealth Countries - SP Eligibility
78
+ if (!states.includes(dva.charAt(0))) {
79
+ return { code: 1, message: 'State incorrect.' };
80
+ }
81
+ const ns = dva.match(/\d+/);
82
+ if (!ns) {
83
+ return { code: 2, message: 'No number.' };
84
+ }
85
+ const n = ns[0];
86
+ const idxOfN = dva.indexOf(n);
87
+ const warCode = dva.substring(1, idxOfN);
88
+ if (!warCodes.includes(warCode)) {
89
+ return { code: 3, message: 'War code invalid.' };
90
+ }
91
+ const lenOfN = n.length;
92
+ const lenOfWc = warCode.length;
93
+ if (lenOfN + lenOfWc > 7) {
94
+ return { code: 4, message: 'File number length should not be greater 7.' };
95
+ }
96
+ return null;
97
+ }
98
+ static validateTFN(n) {
99
+ if (!n) {
100
+ return null;
101
+ }
102
+ const tfn = n.replace(/\s+/g, '').replace(/[-]/g, '');
103
+ const isNumber = /^[0-9]+$/.test(tfn);
104
+ if (!isNumber) {
105
+ return { code: 1, message: 'Invalid TFN, only numbers are allowed.' };
106
+ }
107
+ const length = tfn.length;
108
+ if (length !== 9) {
109
+ return {
110
+ code: 2, message: 'Invalid TFN, must have 9 digits.'
111
+ };
112
+ }
113
+ const digits = tfn.split('').map(d => parseInt(d));
114
+ const sum = (digits[0] * 1)
115
+ + (digits[1] * 4)
116
+ + (digits[2] * 3)
117
+ + (digits[3] * 7)
118
+ + (digits[4] * 5)
119
+ + (digits[5] * 8)
120
+ + (digits[6] * 6)
121
+ + (digits[7] * 9)
122
+ + (digits[8] * 10);
123
+ const remainder = sum % 11;
124
+ const valid = remainder === 0;
125
+ if (!valid) {
126
+ return { code: 3, message: 'Checksum is incorrect.' };
127
+ }
128
+ return null;
129
+ }
130
+ static addWeighted(p, v, i) {
131
+ return p + v * StringAusFunc.weights[i];
132
+ }
133
+ static addAcnWeighted(p, v, i) {
134
+ return p + v * StringAusFunc.acnWeights[i];
135
+ }
136
+ static generateLookup() {
137
+ const ns = [];
138
+ for (let i = 0; i < 10; ++i) {
139
+ ns[i * 19 % 89] = i;
140
+ }
141
+ return ns;
142
+ }
143
+ static validateABN(abn) {
144
+ if (!abn) {
145
+ return null;
146
+ }
147
+ const digits = abn.replace(/[^\d]/g, '').split('').map(Number);
148
+ if (digits.length !== 11) {
149
+ return { code: 1, message: 'Expect 11-digit.' };
150
+ }
151
+ digits[0] -= 1;
152
+ const sum = digits.reduce(StringAusFunc.addWeighted, 0);
153
+ if (sum % 89 === 0) {
154
+ return null;
155
+ }
156
+ digits[0] += 1;
157
+ let sum1 = sum - digits[10] * StringAusFunc.weights[10];
158
+ let digit = StringAusFunc.suggestLookup[89 - sum1 % 89];
159
+ if (digit !== undefined) {
160
+ return {
161
+ code: 2,
162
+ message: 'Checksum1 is incorrect.'
163
+ };
164
+ }
165
+ else {
166
+ const sum2 = sum1 - digits[9] * StringAusFunc.weights[9];
167
+ for (let i = 0; i < 10; ++i) {
168
+ sum1 = sum2 + i * StringAusFunc.weights[9];
169
+ digit = StringAusFunc.suggestLookup[89 - sum1 % 89];
170
+ if (digit !== undefined) {
171
+ return {
172
+ code: 3,
173
+ message: 'Checksum2 is incorrect.'
174
+ };
175
+ }
176
+ }
177
+ }
178
+ return null;
179
+ }
180
+ static validateACN(acn) {
181
+ if (!acn) {
182
+ return null;
183
+ }
184
+ const digits = acn.replace(/[^\d]/g, '').split('').map(Number);
185
+ console.log(digits);
186
+ if (digits.length !== 9) {
187
+ return { code: 1, message: 'Expect 9-digit.' };
188
+ }
189
+ const sum = digits.slice(0, 8).reduce(StringAusFunc.addAcnWeighted, 0);
190
+ const lastDigit = 10 - sum % 10;
191
+ if (lastDigit === digits[8]) {
192
+ return null;
193
+ }
194
+ return {
195
+ code: 2,
196
+ message: 'Checksum is incorrect.'
197
+ };
198
+ }
199
+ }
200
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nQXVzRnVuYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25tY2UtZnVuYy9zcmMvX2Z1bmMvc3RyaW5nQXVzRnVuYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBRXpCLDBIQUEwSDtJQUNsSCxNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFekQsTUFBTSxDQUFDLGFBQWEsR0FBYSxhQUFhLENBQUMsY0FBYyxFQUFFLENBQUM7SUFFeEU7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUE0QjtRQUNuRCxJQUFJLENBQUMsQ0FBQyxFQUFFO1lBQ1AsT0FBTyxJQUFJLENBQUM7U0FDWjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssRUFBRSxFQUFFO1lBQ3pCLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7WUFFeEMsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDYixPQUFPO29CQUNOLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLHNDQUFzQztpQkFDeEQsQ0FBQzthQUNGO1lBRUQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QixNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUV6QyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDWixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDeEMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzFDO1lBRUQsMkRBQTJEO1lBQzNELE1BQU0sT0FBTyxHQUFHLEdBQUcsR0FBRyxFQUFFLEtBQUssUUFBUSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNiLE9BQU87b0JBQ04sSUFBSSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsd0JBQXdCO2lCQUMxQyxDQUFDO2FBQ0Y7U0FDRDthQUFNO1lBQ04sT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLENBQUM7U0FDcEQ7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7SUFFRCxNQUFNLENBQUMsOEJBQThCLENBQUMsY0FBeUM7UUFDOUUsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNwQixPQUFPLElBQUksQ0FBQztTQUNaO1FBRUQsSUFBSSxDQUFDLG1EQUFtRCxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUM5RSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsQ0FBQztTQUNwRTtRQUVELE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaE0sTUFBTSxlQUFlLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXZDLE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLE1BQU0sV0FBVyxHQUFHLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JGLE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVuQyxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVB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SyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2RSxNQUFNLFNBQVMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNoQyxJQUFJLFNBQVMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDNUIsT0FBTyxJQUFJLENBQUM7U0FDWjtRQUVELE9BQU87WUFDTixJQUFJLEVBQUUsQ0FBQztZQUNQLE9BQU8sRUFBRSx3QkFBd0I7U0FDakMsQ0FBQztJQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN0cmluZyBmdW5jdGlvbnMgc3BlY2lmaWMgdG8gQXVzdHJhbGlhXG4gKi9cbmV4cG9ydCBjbGFzcyBTdHJpbmdBdXNGdW5jIHtcblxuXHQvL3RoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vc2lkb3JhcmVzL2F1c3RyYWxpYW4tYnVzaW5lc3MtbnVtYmVyL2Jsb2IvMDU5MTQ3NWY1OTc4ZmQxMjJiNDcyZWRjZGM3ZWZlNmQ5NmQ1NmYyNi9pbmRleC5qc1xuXHRwcml2YXRlIHN0YXRpYyBhY25XZWlnaHRzID0gWzgsIDcsIDYsIDUsIDQsIDMsIDIsIDFdO1xuXHRwcml2YXRlIHN0YXRpYyB3ZWlnaHRzID0gWzEwLCAxLCAzLCA1LCA3LCA5LCAxMSwgMTMsIDE1LCAxNywgMTldO1xuXG5cdHByaXZhdGUgc3RhdGljIHN1Z2dlc3RMb29rdXA6IG51bWJlcltdID0gU3RyaW5nQXVzRnVuYy5nZW5lcmF0ZUxvb2t1cCgpO1xuXG5cdC8qKlxuXHQgKiBWYWxpZGF0ZSBtZWRpY2FyZSBudW1iZXJcblx0ICogQHBhcmFtIG5cblx0ICogQHJldHVybnMgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlXG5cdCAqL1xuXHRzdGF0aWMgdmFsaWRhdGVNZWRpY2FyZShuOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogeyBjb2RlOiBudW1iZXIsIG1lc3NhZ2U6IHN0cmluZyB9IHwgbnVsbCB7XG5cdFx0aWYgKCFuKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRpZiAobiAmJiBuLmxlbmd0aCA9PT0gMTApIHtcblx0XHRcdGNvbnN0IG1hdGNoZXMgPSBuLm1hdGNoKC9eKFxcZHs4fSkoXFxkKS8pO1xuXG5cdFx0XHRpZiAoIW1hdGNoZXMpIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRjb2RlOiAyLCBtZXNzYWdlOiAnTWVkaWNhcmUgbnVtYmVyIHNob3VsZCBiZSBhbGwgZGlnaXQuJ1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBiYXNlID0gbWF0Y2hlc1sxXTtcblx0XHRcdGNvbnN0IGNoZWNrRGlnaXQgPSBtYXRjaGVzWzJdO1xuXHRcdFx0Y29uc3Qgd2VpZ2h0cyA9IFsxLCAzLCA3LCA5LCAxLCAzLCA3LCA5XTtcblxuXHRcdFx0bGV0IHN1bSA9IDA7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHdlaWdodHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0c3VtICs9IHBhcnNlSW50KGJhc2VbaV0sIDEwKSAqIHdlaWdodHNbaV07XG5cdFx0XHR9XG5cblx0XHRcdC8vY29uc29sZS5kZWJ1Zyhgc3VtOiAke3N1bX0gIGNoZWNrRGlnaXRzOiAke2NoZWNrRGlnaXR9YCk7XG5cdFx0XHRjb25zdCBpc1ZhbGlkID0gc3VtICUgMTAgPT09IHBhcnNlSW50KGNoZWNrRGlnaXQsIDEwKTtcblx0XHRcdGlmICghaXNWYWxpZCkge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGNvZGU6IDMsIG1lc3NhZ2U6ICdDaGVja3N1bSBpcyBpbmNvcnJlY3QuJ1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4geyBjb2RlOiAxLCBtZXNzYWdlOiAnTGVuZ3RoIHNob3VsZCBiZSAxMC4nIH07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRzdGF0aWMgdmFsaWRhdGVNZWRpY2FyZVByb3ZpZGVyTnVtYmVyKHByb3ZpZGVyTnVtYmVyOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogeyBjb2RlOiBudW1iZXIsIG1lc3NhZ2U6IHN0cmluZyB9IHwgbnVsbCB7XG5cdFx0aWYgKCFwcm92aWRlck51bWJlcikge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0aWYgKCEvXlswLTldezZ9WzAtOUFCQ0RFRkdISktMTU5QUVJUVVZXWFldW0FCRkhKS0xUV1hZXS8udGVzdChwcm92aWRlck51bWJlcikpIHtcblx0XHRcdHJldHVybiB7IGNvZGU6IDEsIG1lc3NhZ2U6ICdOb3QgbWF0Y2hpbmcgcHJvdmlkZXIgbnVtYmVyIGZvcm1hdC4nIH07XG5cdFx0fVxuXG5cdFx0Y29uc3QgcHJhY3RpY2VMb2NhdGlvblZhbHVlcyA9IFsnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsICdBJywgJ0InLCAnQycsICdEJywgJ0UnLCAnRicsICdHJywgJ0gnLCAnSicsICdLJywgJ0wnLCAnTScsICdOJywgJ1AnLCAnUScsICdSJywgJ1QnLCAnVScsICdWJywgJ1cnLCAnWCcsICdZJ107XG5cdFx0Y29uc3QgcmVtYWluZGVyVmFsdWVzID0gWydZJywgJ1gnLCAnVycsICdUJywgJ0wnLCAnSycsICdKJywgJ0gnLCAnRicsICdCJywgJ0EnXTtcblx0XHRjb25zdCBzdGVtV2VpZ2h0cyA9IFszLCA1LCA4LCA0LCAyLCAxXTtcblxuXHRcdGNvbnN0IHN0ZW1OdW1iZXJzID0gcHJvdmlkZXJOdW1iZXIuc3Vic3RyKDAsIDYpLnNwbGl0KCcnKS5tYXAoKGNoYXIpID0+IHBhcnNlSW50KGNoYXIpKTtcblx0XHRjb25zdCBwcmFjdGljZUxvYyA9IHByYWN0aWNlTG9jYXRpb25WYWx1ZXMuZmluZEluZGV4KChlKSA9PiBlID09PSBwcm92aWRlck51bWJlcls2XSk7XG5cdFx0Y29uc3QgY2hlY2tzdW0gPSBwcm92aWRlck51bWJlcls3XTtcblxuXHRcdGNvbnN0IHppcHBlZCA9IHN0ZW1XZWlnaHRzLm1hcCgoeCwgaSkgPT4gW3gsIHN0ZW1OdW1iZXJzW2ldXSk7XG5cdFx0Y29uc3Qgc3VtV2VpZ2h0cyA9IHppcHBlZC5tYXAoKHkpID0+IHlbMV0gKiB5WzBdKS5yZWR1Y2UoKHRvdGFsLCBudW0pID0+IHRvdGFsICsgbnVtKTtcblx0XHRjb25zdCByZW1haW5kZXIgPSAoc3VtV2VpZ2h0cyArIHByYWN0aWNlTG9jICogNikgJSAxMTtcblxuXHRcdGNvbnN0IHJlc3VsdCA9IHJlbWFpbmRlclZhbHVlc1tyZW1haW5kZXJdO1xuXG5cdFx0Y29uc3QgdmFsaWQgPSByZXN1bHQgPT09IGNoZWNrc3VtO1xuXHRcdGlmICghdmFsaWQpIHtcblx0XHRcdHJldHVybiB7IGNvZGU6IDIsIG1lc3NhZ2U6ICdDaGVja3N1bSBpcyBpbmNvcnJlY3QuJyB9O1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0c3RhdGljIHZhbGlkYXRlRFZBRmlsZU51bWJlcihkdmE6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiB7IGNvZGU6IG51bWJlciwgbWVzc2FnZTogc3RyaW5nIH0gfCBudWxsIHtcblx0XHRpZiAoIWR2YSkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc3RhdGVzID0gWydOJywgJ1YnLCAnUScsICdTJywgJ1cnLCAnVCddO1xuXHRcdGNvbnN0IHdhckNvZGVzID0gWycgJywgJ1gnLCAnS00nLCAnU1InLCAnU1MnLCAnU00nLCAnU1dQJywgJ0FHWCcsICdCVycsICdHVycsICdDR1cnLCAvL0F1c3RyYWxpYW4gRm9yY2VzXG5cdFx0XHQnUCcsICdQWCcsICdQQUQnLCAnUEFNJywgJ1BDQScsICdQQ1InLCAnUENWJywgJ1BNUycsICdQU1cnLCAnUFdPJywgJ0hLWCcsICdNQUwnLCAvL0JyaXRpc2ggQWRtaW5pc3RyYXRpb24gR3JvdXBcblx0XHRcdCdDTicsICdDTlgnLCAnSVYnLCAnTkYnLCAnTkcnLCAnUkQnLCAnUkRYJywgJ1NBJywgJ1NBWCcsICdBJywgLy9PdGhlciBPdmVyc2VhcyBGb3JjZXNcblx0XHRcdCdOJywgJ05YJywgJ05TVycsICdOU00nLCAvL05ldyBaZWFsYW5kIEFkbWluaXN0cmF0aW9uIEdyb3VwXG5cdFx0XHQnQlVSJywgJ0NOSycsICdDTlMnLCAnRklKJywgJ0dIQScsICdIS1MnLCAnSU5EJywgJ0tZQScsICdNQVUnLCAnTUxTJywgJ01UWCcsICdNV0knLCAnTksnLCAnTkdSJywgJ05SRCcsICdOU1MnLCAnUEsnXS8vQnJpdGlzaCBDb21tb253ZWFsdGggQ291bnRyaWVzIC0gU1AgRWxpZ2liaWxpdHlcblxuXHRcdGlmICghc3RhdGVzLmluY2x1ZGVzKGR2YS5jaGFyQXQoMCkpKSB7XG5cdFx0XHRyZXR1cm4geyBjb2RlOiAxLCBtZXNzYWdlOiAnU3RhdGUgaW5jb3JyZWN0LicgfTtcblx0XHR9XG5cblx0XHRjb25zdCBucyA9IGR2YS5tYXRjaCgvXFxkKy8pO1xuXHRcdGlmICghbnMpIHtcblx0XHRcdHJldHVybiB7IGNvZGU6IDIsIG1lc3NhZ2U6ICdObyBudW1iZXIuJyB9O1xuXHRcdH1cblxuXHRcdGNvbnN0IG4gPSBuc1swXTtcblx0XHRjb25zdCBpZHhPZk4gPSBkdmEuaW5kZXhPZihuKTtcblx0XHRjb25zdCB3YXJDb2RlID0gZHZhLnN1YnN0cmluZygxLCBpZHhPZk4pO1xuXHRcdGlmICghd2FyQ29kZXMuaW5jbHVkZXMod2FyQ29kZSkpIHtcblx0XHRcdHJldHVybiB7IGNvZGU6IDMsIG1lc3NhZ2U6ICdXYXIgY29kZSBpbnZhbGlkLicgfVxuXHRcdH1cblxuXHRcdGNvbnN0IGxlbk9mTiA9IG4ubGVuZ3RoO1xuXHRcdGNvbnN0IGxlbk9mV2MgPSB3YXJDb2RlLmxlbmd0aDtcblx0XHRpZiAobGVuT2ZOICsgbGVuT2ZXYyA+IDcpIHtcblx0XHRcdHJldHVybiB7IGNvZGU6IDQsIG1lc3NhZ2U6ICdGaWxlIG51bWJlciBsZW5ndGggc2hvdWxkIG5vdCBiZSBncmVhdGVyIDcuJyB9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRzdGF0aWMgdmFsaWRhdGVURk4objogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHsgY29kZTogbnVtYmVyLCBtZXNzYWdlOiBzdHJpbmcgfSB8IG51bGwge1xuXHRcdGlmICghbikge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGZuID0gbi5yZXBsYWNlKC9cXHMrL2csICcnKS5yZXBsYWNlKC9bLV0vZywgJycpO1xuXG5cdFx0Y29uc3QgaXNOdW1iZXIgPSAvXlswLTldKyQvLnRlc3QodGZuKTtcblx0XHRpZiAoIWlzTnVtYmVyKSB7XG5cdFx0XHRyZXR1cm4geyBjb2RlOiAxLCBtZXNzYWdlOiAnSW52YWxpZCBURk4sIG9ubHkgbnVtYmVycyBhcmUgYWxsb3dlZC4nIH07XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGVuZ3RoID0gdGZuLmxlbmd0aDtcblx0XHRpZiAobGVuZ3RoICE9PSA5KSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRjb2RlOiAyLCBtZXNzYWdlOiAnSW52YWxpZCBURk4sIG11c3QgaGF2ZSA5IGRpZ2l0cy4nXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGNvbnN0IGRpZ2l0cyA9IHRmbi5zcGxpdCgnJykubWFwKGQgPT4gcGFyc2VJbnQoZCkpO1xuXG5cdFx0Y29uc3Qgc3VtID0gKGRpZ2l0c1swXSAqIDEpXG5cdFx0XHQrIChkaWdpdHNbMV0gKiA0KVxuXHRcdFx0KyAoZGlnaXRzWzJdICogMylcblx0XHRcdCsgKGRpZ2l0c1szXSAqIDcpXG5cdFx0XHQrIChkaWdpdHNbNF0gKiA1KVxuXHRcdFx0KyAoZGlnaXRzWzVdICogOClcblx0XHRcdCsgKGRpZ2l0c1s2XSAqIDYpXG5cdFx0XHQrIChkaWdpdHNbN10gKiA5KVxuXHRcdFx0KyAoZGlnaXRzWzhdICogMTApO1xuXG5cdFx0Y29uc3QgcmVtYWluZGVyID0gc3VtICUgMTE7XG5cdFx0Y29uc3QgdmFsaWQgPSByZW1haW5kZXIgPT09IDA7XG5cdFx0aWYgKCF2YWxpZCkge1xuXHRcdFx0cmV0dXJuIHsgY29kZTogMywgbWVzc2FnZTogJ0NoZWNrc3VtIGlzIGluY29ycmVjdC4nIH07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRwcml2YXRlIHN0YXRpYyBhZGRXZWlnaHRlZChwOiBudW1iZXIsIHY6IG51bWJlciwgaTogbnVtYmVyKSB7XG5cdFx0cmV0dXJuIHAgKyB2ICogU3RyaW5nQXVzRnVuYy53ZWlnaHRzW2ldO1xuXHR9XG5cblx0cHJpdmF0ZSBzdGF0aWMgYWRkQWNuV2VpZ2h0ZWQocDogbnVtYmVyLCB2OiBudW1iZXIsIGk6IG51bWJlcikge1xuXHRcdHJldHVybiBwICsgdiAqIFN0cmluZ0F1c0Z1bmMuYWNuV2VpZ2h0c1tpXTtcblx0fVxuXG5cdHByaXZhdGUgc3RhdGljIGdlbmVyYXRlTG9va3VwKCk6IG51bWJlcltdIHtcblx0XHRjb25zdCBuczogbnVtYmVyW10gPSBbXTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IDEwOyArK2kpIHtcblx0XHRcdG5zW2kgKiAxOSAlIDg5XSA9IGk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5zO1xuXHR9XG5cblx0c3RhdGljIHZhbGlkYXRlQUJOKGFibjogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHsgY29kZTogbnVtYmVyLCBtZXNzYWdlOiBzdHJpbmcgfSB8IG51bGwge1xuXHRcdGlmICghYWJuKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRjb25zdCBkaWdpdHMgPSBhYm4ucmVwbGFjZSgvW15cXGRdL2csICcnKS5zcGxpdCgnJykubWFwKE51bWJlcik7XG5cdFx0aWYgKGRpZ2l0cy5sZW5ndGggIT09IDExKSB7XG5cdFx0XHRyZXR1cm4geyBjb2RlOiAxLCBtZXNzYWdlOiAnRXhwZWN0IDExLWRpZ2l0LicgfTtcblx0XHR9XG5cblx0XHRkaWdpdHNbMF0gLT0gMTtcblxuXHRcdGNvbnN0IHN1bSA9IGRpZ2l0cy5yZWR1Y2UoU3RyaW5nQXVzRnVuYy5hZGRXZWlnaHRlZCwgMCk7XG5cblx0XHRpZiAoc3VtICUgODkgPT09IDApIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGRpZ2l0c1swXSArPSAxO1xuXG5cdFx0bGV0IHN1bTEgPSBzdW0gLSBkaWdpdHNbMTBdICogU3RyaW5nQXVzRnVuYy53ZWlnaHRzWzEwXTtcblx0XHRsZXQgZGlnaXQgPSBTdHJpbmdBdXNGdW5jLnN1Z2dlc3RMb29rdXBbODkgLSBzdW0xICUgODldO1xuXHRcdGlmIChkaWdpdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRjb2RlOiAyLFxuXHRcdFx0XHRtZXNzYWdlOiAnQ2hlY2tzdW0xIGlzIGluY29ycmVjdC4nXG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHN1bTIgPSBzdW0xIC0gZGlnaXRzWzldICogU3RyaW5nQXVzRnVuYy53ZWlnaHRzWzldO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgKytpKSB7XG5cdFx0XHRcdHN1bTEgPSBzdW0yICsgaSAqIFN0cmluZ0F1c0Z1bmMud2VpZ2h0c1s5XTtcblx0XHRcdFx0ZGlnaXQgPSBTdHJpbmdBdXNGdW5jLnN1Z2dlc3RMb29rdXBbODkgLSBzdW0xICUgODldO1xuXHRcdFx0XHRpZiAoZGlnaXQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRjb2RlOiAzLFxuXHRcdFx0XHRcdFx0bWVzc2FnZTogJ0NoZWNrc3VtMiBpcyBpbmNvcnJlY3QuJ1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBudWxsXG5cdH1cblxuXHRzdGF0aWMgdmFsaWRhdGVBQ04oYWNuOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogeyBjb2RlOiBudW1iZXIsIG1lc3NhZ2U6IHN0cmluZyB9IHwgbnVsbCB7XG5cdFx0aWYgKCFhY24pIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGNvbnN0IGRpZ2l0cyA9IGFjbi5yZXBsYWNlKC9bXlxcZF0vZywgJycpLnNwbGl0KCcnKS5tYXAoTnVtYmVyKTtcblx0XHRjb25zb2xlLmxvZyhkaWdpdHMpO1xuXHRcdGlmIChkaWdpdHMubGVuZ3RoICE9PSA5KSB7XG5cdFx0XHRyZXR1cm4geyBjb2RlOiAxLCBtZXNzYWdlOiAnRXhwZWN0IDktZGlnaXQuJyB9O1xuXHRcdH1cblxuXG5cdFx0Y29uc3Qgc3VtID0gZGlnaXRzLnNsaWNlKDAsIDgpLnJlZHVjZShTdHJpbmdBdXNGdW5jLmFkZEFjbldlaWdodGVkLCAwKTtcblx0XHRjb25zdCBsYXN0RGlnaXQgPSAxMCAtIHN1bSAlIDEwO1xuXHRcdGlmIChsYXN0RGlnaXQgPT09IGRpZ2l0c1s4XSkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGNvZGU6IDIsXG5cdFx0XHRtZXNzYWdlOiAnQ2hlY2tzdW0gaXMgaW5jb3JyZWN0Lidcblx0XHR9O1xuXHR9XG59XG4iXX0=