@fin.cx/opendata 4.6.0 → 4.8.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 (67) hide show
  1. package/.smartconfig.json +6 -2
  2. package/dist_ts/00_commitinfo_data.js +3 -3
  3. package/dist_ts/financialstatements/amounts.d.ts +58 -0
  4. package/dist_ts/financialstatements/amounts.js +130 -0
  5. package/dist_ts/financialstatements/classes.financialstatementerror.d.ts +24 -0
  6. package/dist_ts/financialstatements/classes.financialstatementerror.js +10 -0
  7. package/dist_ts/financialstatements/constants.d.ts +16 -0
  8. package/dist_ts/financialstatements/constants.js +20 -0
  9. package/dist_ts/financialstatements/dates.d.ts +16 -0
  10. package/dist_ts/financialstatements/dates.js +72 -0
  11. package/dist_ts/financialstatements/html.d.ts +21 -0
  12. package/dist_ts/financialstatements/html.js +92 -0
  13. package/dist_ts/financialstatements/index.d.ts +6 -0
  14. package/dist_ts/financialstatements/index.js +11 -0
  15. package/dist_ts/financialstatements/interfaces.d.ts +258 -0
  16. package/dist_ts/financialstatements/interfaces.js +2 -0
  17. package/dist_ts/financialstatements/layout.d.ts +20 -0
  18. package/dist_ts/financialstatements/layout.html.d.ts +8 -0
  19. package/dist_ts/financialstatements/layout.html.js +125 -0
  20. package/dist_ts/financialstatements/layout.js +2 -0
  21. package/dist_ts/financialstatements/layout.pdf.d.ts +6 -0
  22. package/dist_ts/financialstatements/layout.pdf.js +229 -0
  23. package/dist_ts/financialstatements/mediatypes.d.ts +3 -0
  24. package/dist_ts/financialstatements/mediatypes.js +11 -0
  25. package/dist_ts/financialstatements/outline.d.ts +22 -0
  26. package/dist_ts/financialstatements/outline.js +26 -0
  27. package/dist_ts/financialstatements/parse.esef.d.ts +13 -0
  28. package/dist_ts/financialstatements/parse.esef.js +349 -0
  29. package/dist_ts/financialstatements/parse.hgb.d.ts +9 -0
  30. package/dist_ts/financialstatements/parse.hgb.js +1014 -0
  31. package/dist_ts/financialstatements/parse.statement.d.ts +8 -0
  32. package/dist_ts/financialstatements/parse.statement.js +25 -0
  33. package/dist_ts/financialstatements/plugins.d.ts +10 -0
  34. package/dist_ts/financialstatements/plugins.js +15 -0
  35. package/dist_ts/financialstatements/read.d.ts +10 -0
  36. package/dist_ts/financialstatements/read.js +113 -0
  37. package/dist_ts/handelsregister/classes.handelsregisterclient.d.ts +8 -2
  38. package/dist_ts/handelsregister/classes.handelsregisterclient.js +14 -5
  39. package/dist_ts/handelsregister/classes.handelsregistererror.d.ts +3 -1
  40. package/dist_ts/handelsregister/classes.handelsregistererror.js +1 -1
  41. package/dist_ts/handelsregister/classes.portalsession.d.ts +19 -3
  42. package/dist_ts/handelsregister/classes.portalsession.js +67 -9
  43. package/dist_ts/handelsregister/interfaces.d.ts +9 -2
  44. package/package.json +16 -6
  45. package/readme.md +86 -5
  46. package/ts/00_commitinfo_data.ts +2 -2
  47. package/ts/financialstatements/amounts.ts +181 -0
  48. package/ts/financialstatements/classes.financialstatementerror.ts +35 -0
  49. package/ts/financialstatements/constants.ts +24 -0
  50. package/ts/financialstatements/dates.ts +89 -0
  51. package/ts/financialstatements/html.ts +107 -0
  52. package/ts/financialstatements/index.ts +17 -0
  53. package/ts/financialstatements/interfaces.ts +268 -0
  54. package/ts/financialstatements/layout.html.ts +130 -0
  55. package/ts/financialstatements/layout.pdf.ts +268 -0
  56. package/ts/financialstatements/layout.ts +16 -0
  57. package/ts/financialstatements/mediatypes.ts +14 -0
  58. package/ts/financialstatements/outline.ts +44 -0
  59. package/ts/financialstatements/parse.esef.ts +394 -0
  60. package/ts/financialstatements/parse.hgb.ts +1235 -0
  61. package/ts/financialstatements/parse.statement.ts +26 -0
  62. package/ts/financialstatements/plugins.ts +29 -0
  63. package/ts/financialstatements/read.ts +135 -0
  64. package/ts/handelsregister/classes.handelsregisterclient.ts +18 -4
  65. package/ts/handelsregister/classes.handelsregistererror.ts +3 -0
  66. package/ts/handelsregister/classes.portalsession.ts +78 -9
  67. package/ts/handelsregister/interfaces.ts +9 -2
@@ -0,0 +1,8 @@
1
+ import type { IHgbStatement } from './interfaces.js';
2
+ /**
3
+ * Reads a statement under the HGB from the HTML or the PDF a register shows: the balance sheet
4
+ * (§ 266 HGB) and, where one is published, the income statement (§ 275 HGB). Everything it returns
5
+ * was printed and adds up; where the current year's balance sheet cannot be read with certainty it
6
+ * throws `unparseable` rather than guess. A PDF is read from its text layer only.
7
+ */
8
+ export declare const parseStatementDocument: (bytesArg: Uint8Array, mediaTypeArg: string) => Promise<IHgbStatement>;
@@ -0,0 +1,25 @@
1
+ import { FinancialStatementError } from './classes.financialstatementerror.js';
2
+ import { maxStatementBytes } from './constants.js';
3
+ import { decodeHtml } from './html.js';
4
+ import { htmlLayout } from './layout.html.js';
5
+ import { pdfLayout } from './layout.pdf.js';
6
+ import { statementMediaTypeOf } from './mediatypes.js';
7
+ import { readHgbStatement } from './parse.hgb.js';
8
+ /**
9
+ * Reads a statement under the HGB from the HTML or the PDF a register shows: the balance sheet
10
+ * (§ 266 HGB) and, where one is published, the income statement (§ 275 HGB). Everything it returns
11
+ * was printed and adds up; where the current year's balance sheet cannot be read with certainty it
12
+ * throws `unparseable` rather than guess. A PDF is read from its text layer only.
13
+ */
14
+ export const parseStatementDocument = async (bytesArg, mediaTypeArg) => {
15
+ const mediaType = statementMediaTypeOf(mediaTypeArg);
16
+ if (mediaType !== 'text/html' && mediaType !== 'application/xhtml+xml' && mediaType !== 'application/pdf') {
17
+ throw new FinancialStatementError('unsupported_media_type', `A statement in "${mediaTypeArg}" is not read here; HTML and PDF are.`);
18
+ }
19
+ if (bytesArg.byteLength > maxStatementBytes) {
20
+ throw new FinancialStatementError('too_large', `The document has ${bytesArg.byteLength} bytes, more than the ${maxStatementBytes} read here.`);
21
+ }
22
+ const blocks = mediaType === 'application/pdf' ? await pdfLayout(bytesArg) : htmlLayout(decodeHtml(bytesArg));
23
+ return readHgbStatement(blocks);
24
+ };
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2Uuc3RhdGVtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvZmluYW5jaWFsc3RhdGVtZW50cy9wYXJzZS5zdGF0ZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN2QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2xEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsS0FBSyxFQUFFLFFBQW9CLEVBQUUsWUFBb0IsRUFBMEIsRUFBRTtJQUNqSCxNQUFNLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNyRCxJQUFJLFNBQVMsS0FBSyxXQUFXLElBQUksU0FBUyxLQUFLLHVCQUF1QixJQUFJLFNBQVMsS0FBSyxpQkFBaUIsRUFBRSxDQUFDO1FBQzFHLE1BQU0sSUFBSSx1QkFBdUIsQ0FBQyx3QkFBd0IsRUFBRSxtQkFBbUIsWUFBWSx1Q0FBdUMsQ0FBQyxDQUFDO0lBQ3RJLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxVQUFVLEdBQUcsaUJBQWlCLEVBQUUsQ0FBQztRQUM1QyxNQUFNLElBQUksdUJBQXVCLENBQUMsV0FBVyxFQUFFLG9CQUFvQixRQUFRLENBQUMsVUFBVSx5QkFBeUIsaUJBQWlCLGFBQWEsQ0FBQyxDQUFDO0lBQ2pKLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxTQUFTLEtBQUssaUJBQWlCLENBQUMsQ0FBQyxDQUFDLE1BQU0sU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDOUcsT0FBTyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsQyxDQUFDLENBQUMifQ==
@@ -0,0 +1,10 @@
1
+ import * as path from 'node:path';
2
+ import { createRequire } from 'node:module';
3
+ export { path, createRequire, };
4
+ import * as smartarchiveZip from '@push.rocks/smartarchive/web/zip';
5
+ import * as smartxmlXpath from '@push.rocks/smartxml/xpath';
6
+ export { smartarchiveZip, smartxmlXpath, };
7
+ import * as parse5 from 'parse5';
8
+ export { parse5, };
9
+ /** PDF.js for Node.js (its legacy build), loaded when the first PDF is read */
10
+ export declare const loadPdfjs: () => Promise<typeof import("pdfjs-dist/legacy/build/pdf.mjs")>;
@@ -0,0 +1,15 @@
1
+ // This entry point stands alone: it imports nothing from the rest of the package and needs no storage.
2
+ // node native scope
3
+ import * as path from 'node:path';
4
+ import { createRequire } from 'node:module';
5
+ export { path, createRequire, };
6
+ // @push.rocks scope
7
+ import * as smartarchiveZip from '@push.rocks/smartarchive/web/zip';
8
+ import * as smartxmlXpath from '@push.rocks/smartxml/xpath';
9
+ export { smartarchiveZip, smartxmlXpath, };
10
+ // third party scope
11
+ import * as parse5 from 'parse5';
12
+ export { parse5, };
13
+ /** PDF.js for Node.js (its legacy build), loaded when the first PDF is read */
14
+ export const loadPdfjs = () => import('pdfjs-dist/legacy/build/pdf.mjs');
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2ZpbmFuY2lhbHN0YXRlbWVudHMvcGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1R0FBdUc7QUFFdkcsb0JBQW9CO0FBQ3BCLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFNUMsT0FBTyxFQUNMLElBQUksRUFDSixhQUFhLEdBQ2QsQ0FBQTtBQUVELG9CQUFvQjtBQUNwQixPQUFPLEtBQUssZUFBZSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BFLE9BQU8sS0FBSyxhQUFhLE1BQU0sNEJBQTRCLENBQUM7QUFFNUQsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEdBQ2QsQ0FBQTtBQUVELG9CQUFvQjtBQUNwQixPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUVqQyxPQUFPLEVBQ0wsTUFBTSxHQUNQLENBQUE7QUFFRCwrRUFBK0U7QUFDL0UsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDIn0=
@@ -0,0 +1,10 @@
1
+ import type { IFinancialStatement, IReadFinancialStatementOptions } from './interfaces.js';
2
+ /**
3
+ * Keeps a published statement as a caller stores it: the filing as the caller states it, the
4
+ * document byte for byte with its SHA-256, and what could be read from it: an ESEF report by
5
+ * `parseEsefPackage` or `parseEsefReport`, any other HTML or PDF by `parseStatementDocument`. A
6
+ * document that cannot be read with certainty is kept with `parsed` null and `parseFailure` saying
7
+ * why. Throws `invalid_input`, `unsupported_media_type` and, for a document larger than
8
+ * `maxStatementBytes`, `too_large`, as nothing would be kept.
9
+ */
10
+ export declare const readFinancialStatement: (optionsArg: IReadFinancialStatementOptions) => Promise<IFinancialStatement>;
@@ -0,0 +1,113 @@
1
+ import { FinancialStatementError } from './classes.financialstatementerror.js';
2
+ import { maxStatementBytes, unternehmensregisterNotice } from './constants.js';
3
+ import { statementMediaTypeOf } from './mediatypes.js';
4
+ import { parseEsefPackage, parseEsefReport } from './parse.esef.js';
5
+ import { parseStatementDocument } from './parse.statement.js';
6
+ const filingSources = ['unternehmensregister', 'bundesanzeiger', 'issuer', 'unknown'];
7
+ const filingKinds = ['annual_accounts', 'consolidated_accounts', 'deposited_balance_sheet', 'annual_financial_report'];
8
+ const sizeClasses = ['micro', 'small', 'medium', 'large'];
9
+ const parseFailureCodes = new Set(['invalid_package', 'unreadable', 'no_text', 'unparseable', 'too_large']);
10
+ /** the inline XBRL namespace, which marks an HTML document as an ESEF report */
11
+ const inlineXbrlNamespace = 'http://www.xbrl.org/2013/inlineXBRL';
12
+ const invalid = (messageArg) => {
13
+ throw new FinancialStatementError('invalid_input', messageArg);
14
+ };
15
+ const isIsoDate = (valueArg) => {
16
+ if (!/^\d{4}-\d{2}-\d{2}$/.test(valueArg)) {
17
+ return false;
18
+ }
19
+ const date = new Date(`${valueArg}T00:00:00Z`);
20
+ return !Number.isNaN(date.getTime()) && date.toISOString().slice(0, 10) === valueArg;
21
+ };
22
+ const filingOf = (inputArg) => {
23
+ if (!filingSources.includes(inputArg?.source)) {
24
+ invalid(`The filing's source "${inputArg?.source}" is not one of ${filingSources.join(', ')}.`);
25
+ }
26
+ if (!filingKinds.includes(inputArg.kind)) {
27
+ invalid(`The filing's kind "${inputArg.kind}" is not one of ${filingKinds.join(', ')}.`);
28
+ }
29
+ if (inputArg.sizeClass != null && !sizeClasses.includes(inputArg.sizeClass)) {
30
+ invalid(`The filing's size class "${inputArg.sizeClass}" is not one of ${sizeClasses.join(', ')}.`);
31
+ }
32
+ for (const field of ['fiscalYearStart', 'fiscalYearEnd', 'publishedOn']) {
33
+ const value = inputArg[field];
34
+ if (value != null && (typeof value !== 'string' || !isIsoDate(value))) {
35
+ invalid(`The filing's ${field} "${value}" is not an ISO date (YYYY-MM-DD).`);
36
+ }
37
+ }
38
+ if (inputArg.source === 'unternehmensregister' && inputArg.publishedOn == null) {
39
+ invalid('A filing from the Unternehmensregister needs publishedOn, the day it was posted or deposited, for its origin note.');
40
+ }
41
+ return {
42
+ source: inputArg.source,
43
+ kind: inputArg.kind,
44
+ companyName: inputArg.companyName ?? null,
45
+ registerReference: inputArg.registerReference ?? null,
46
+ lei: inputArg.lei ?? null,
47
+ fiscalYearStart: inputArg.fiscalYearStart ?? null,
48
+ fiscalYearEnd: inputArg.fiscalYearEnd ?? null,
49
+ publishedOn: inputArg.publishedOn ?? null,
50
+ title: inputArg.title ?? null,
51
+ sizeClass: inputArg.sizeClass ?? null,
52
+ documentId: inputArg.documentId ?? null,
53
+ sourceUrl: inputArg.sourceUrl ?? null,
54
+ };
55
+ };
56
+ const sha256Of = async (bytesArg) => {
57
+ const digest = new Uint8Array(await globalThis.crypto.subtle.digest('SHA-256', bytesArg));
58
+ return [...digest].map((byteArg) => byteArg.toString(16).padStart(2, '0')).join('');
59
+ };
60
+ /**
61
+ * Keeps a published statement as a caller stores it: the filing as the caller states it, the
62
+ * document byte for byte with its SHA-256, and what could be read from it: an ESEF report by
63
+ * `parseEsefPackage` or `parseEsefReport`, any other HTML or PDF by `parseStatementDocument`. A
64
+ * document that cannot be read with certainty is kept with `parsed` null and `parseFailure` saying
65
+ * why. Throws `invalid_input`, `unsupported_media_type` and, for a document larger than
66
+ * `maxStatementBytes`, `too_large`, as nothing would be kept.
67
+ */
68
+ export const readFinancialStatement = async (optionsArg) => {
69
+ if (!(optionsArg?.bytes instanceof Uint8Array)) {
70
+ invalid('bytes must be a Uint8Array.');
71
+ }
72
+ const filing = filingOf(optionsArg.filing);
73
+ if (optionsArg.bytes.byteLength > maxStatementBytes) {
74
+ throw new FinancialStatementError('too_large', `The document has ${optionsArg.bytes.byteLength} bytes, more than the ${maxStatementBytes} read here.`);
75
+ }
76
+ const mediaType = statementMediaTypeOf(String(optionsArg.mediaType));
77
+ if (!mediaType) {
78
+ throw new FinancialStatementError('unsupported_media_type', `A statement in "${optionsArg.mediaType}" is not read here; HTML, PDF, XHTML and ZIP packages are.`);
79
+ }
80
+ const bytes = new Uint8Array(optionsArg.bytes);
81
+ const sha256 = await sha256Of(bytes);
82
+ let parsed = null;
83
+ let parseFailure = null;
84
+ try {
85
+ if (mediaType === 'application/zip') {
86
+ parsed = await parseEsefPackage(bytes);
87
+ }
88
+ else if (mediaType === 'application/xhtml+xml' ||
89
+ (mediaType === 'text/html' && new TextDecoder('windows-1252').decode(bytes.subarray(0, 65536)).includes(inlineXbrlNamespace))) {
90
+ parsed = parseEsefReport(bytes);
91
+ }
92
+ else {
93
+ parsed = await parseStatementDocument(bytes, mediaType);
94
+ }
95
+ }
96
+ catch (error) {
97
+ if (!(error instanceof FinancialStatementError) || !parseFailureCodes.has(error.code)) {
98
+ throw error;
99
+ }
100
+ parseFailure = { code: error.code, message: error.message };
101
+ }
102
+ return {
103
+ filing,
104
+ raw: { bytes, mediaType, sha256 },
105
+ parsed,
106
+ parseFailure,
107
+ obtainedAt: (optionsArg.now ?? Date.now)(),
108
+ notice: filing.source === 'unternehmensregister'
109
+ ? unternehmensregisterNotice(filing.publishedOn, filing.kind === 'deposited_balance_sheet')
110
+ : null,
111
+ };
112
+ };
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2ZpbmFuY2lhbHN0YXRlbWVudHMvcmVhZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFZOUQsTUFBTSxhQUFhLEdBQW9CLENBQUMsc0JBQXNCLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZHLE1BQU0sV0FBVyxHQUFrQixDQUFDLGlCQUFpQixFQUFFLHVCQUF1QixFQUFFLHlCQUF5QixFQUFFLHlCQUF5QixDQUFDLENBQUM7QUFDdEksTUFBTSxXQUFXLEdBQWlCLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDeEUsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBUyxDQUFDLGlCQUFpQixFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFFcEgsZ0ZBQWdGO0FBQ2hGLE1BQU0sbUJBQW1CLEdBQUcscUNBQXFDLENBQUM7QUFFbEUsTUFBTSxPQUFPLEdBQUcsQ0FBQyxVQUFrQixFQUFTLEVBQUU7SUFDNUMsTUFBTSxJQUFJLHVCQUF1QixDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNqRSxDQUFDLENBQUM7QUFFRixNQUFNLFNBQVMsR0FBRyxDQUFDLFFBQWdCLEVBQVcsRUFBRTtJ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
@@ -5,14 +5,18 @@ import type { IHandelsregisterClientOptions, IRegisterCallOptions, IRegisterEntr
5
5
  * plain HTTP and without storage.
6
6
  *
7
7
  * Every call opens its own visit to the portal and forgets it afterwards: nothing is cached or
8
- * shared between calls. The client never repeats a request by itself, never logs, and asks its
9
- * gate before every request the portal's terms count:
8
+ * shared between calls. The client never logs, and asks its gate before every request the portal's
9
+ * terms count:
10
10
  * - `search()` makes one counted search;
11
11
  * - `getEntry()` makes one counted search and, when the portal offers structured content for the
12
12
  * entry, one counted retrieval.
13
13
  *
14
14
  * Each search also loads the search form and the result list, two pages the terms do not count.
15
15
  *
16
+ * The client repeats a request only when the portal closed the connection without answering it,
17
+ * and only once: the portal's front end does that to have the request sent again. A counted request
18
+ * sent once more asks the gate again and counts again.
19
+ *
16
20
  * The portal's terms allow single lookups for information only, at most 60 searches or
17
21
  * retrievals per hour, and no systematic retrieval to build or update a copy of the registers.
18
22
  */
@@ -49,6 +53,8 @@ export declare class HandelsregisterClient {
49
53
  * error of the gate reaches the caller unchanged.
50
54
  */
51
55
  private acquireSlot;
56
+ /** asks the gate for a counted request the portal dropped before it is sent once more, and counts it */
57
+ private countAgain;
52
58
  private runSearch;
53
59
  private pickRow;
54
60
  private retrieveStructuredContent;
@@ -72,14 +72,18 @@ const decodeUtf8 = (bytesArg) => new TextDecoder('utf-8').decode(bytesArg);
72
72
  * plain HTTP and without storage.
73
73
  *
74
74
  * Every call opens its own visit to the portal and forgets it afterwards: nothing is cached or
75
- * shared between calls. The client never repeats a request by itself, never logs, and asks its
76
- * gate before every request the portal's terms count:
75
+ * shared between calls. The client never logs, and asks its gate before every request the portal's
76
+ * terms count:
77
77
  * - `search()` makes one counted search;
78
78
  * - `getEntry()` makes one counted search and, when the portal offers structured content for the
79
79
  * entry, one counted retrieval.
80
80
  *
81
81
  * Each search also loads the search form and the result list, two pages the terms do not count.
82
82
  *
83
+ * The client repeats a request only when the portal closed the connection without answering it,
84
+ * and only once: the portal's front end does that to have the request sent again. A counted request
85
+ * sent once more asks the gate again and counts again.
86
+ *
83
87
  * The portal's terms allow single lookups for information only, at most 60 searches or
84
88
  * retrievals per hour, and no systematic retrieval to build or update a copy of the registers.
85
89
  */
@@ -226,6 +230,11 @@ export class HandelsregisterClient {
226
230
  throw error;
227
231
  }
228
232
  }
233
+ /** asks the gate for a counted request the portal dropped before it is sent once more, and counts it */
234
+ async countAgain(kindArg, stepArg, progressArg) {
235
+ await this.acquireSlot(kindArg, stepArg, progressArg);
236
+ progressArg.countedRequests += 1;
237
+ }
229
238
  async runSearch(planArg, progressArg, sessionArg) {
230
239
  await this.acquireSlot('search', 'search', progressArg);
231
240
  try {
@@ -270,7 +279,7 @@ export class HandelsregisterClient {
270
279
  forms.setField(fields, field.searchButton, '');
271
280
  progressArg.step = 'search';
272
281
  progressArg.countedRequests += 1;
273
- const resultPage = await sessionArg.post(sessionArg.resolve(form.action, formPage.url), fields);
282
+ const resultPage = await sessionArg.post(sessionArg.resolve(form.action, formPage.url), fields, () => this.countAgain('search', 'search', progressArg));
274
283
  progressArg.step = 'result_list';
275
284
  const resultText = decodeUtf8(resultPage.body);
276
285
  try {
@@ -333,7 +342,7 @@ export class HandelsregisterClient {
333
342
  forms.setField(fields, name, value);
334
343
  }
335
344
  progressArg.countedRequests += 1;
336
- const answer = await sessionArg.post(sessionArg.resolve(resultForm.action, outcomeArg.pageUrl), fields);
345
+ const answer = await sessionArg.post(sessionArg.resolve(resultForm.action, outcomeArg.pageUrl), fields, () => this.countAgain('retrieval', 'structured_content', progressArg));
337
346
  if (/html/i.test(answer.contentType)) {
338
347
  this.throwIfBlocked(decodeUtf8(answer.body));
339
348
  throw new HandelsregisterError('unexpected_response', 'The portal answered with a page instead of the structured content.');
@@ -394,4 +403,4 @@ export class HandelsregisterClient {
394
403
  return text ? text : undefined;
395
404
  }
396
405
  }
397
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5oYW5kZWxzcmVnaXN0ZXJjbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9oYW5kZWxzcmVnaXN0ZXIvY2xhc3Nlcy5oYW5kZWxzcmVnaXN0ZXJjbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUE2QixNQUFNLG1DQUFtQyxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxhQUFhLEVBQTRDLE1BQU0sNEJBQTRCLENBQUM7QUFDckcsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsdUJBQXVCLEdBQ3hCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sS0FBSyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBZWxDLE9BQU8sRUFBRSxjQUFjLEVBQTJDLE1BQU0sMEJBQTBCLENBQUM7QUFDbkcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdEUsT0FBTyxFQUFFLG1CQUFtQixFQUE2QixNQUFNLGlCQUFpQixDQUFDO0FBRWpGLE1BQU0sY0FBYyxHQUFHLHVDQUF1QyxDQUFDO0FBQy9ELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQztBQUM1QixNQUFNLEtBQUssR0FBRztJQUNaLFFBQVEsRUFBRSxvQkFBb0I7SUFDOUIsV0FBVyxFQUFFLHlCQUF5QjtJQUN0QyxJQUFJLEVBQUUsd0JBQXdCO0lBQzlCLFlBQVksRUFBRSx3QkFBd0I7SUFDdEMsY0FBYyxFQUFFLHFCQUFxQjtJQUNyQyxLQUFLLEVBQUUsNEJBQTRCO0lBQ25DLFFBQVEsRUFBRSwrQkFBK0I7SUFDekMsYUFBYSxFQUFFLDJCQUEyQjtJQUMxQyxZQUFZLEVBQUUsZUFB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
406
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5oYW5kZWxzcmVnaXN0ZXJjbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9oYW5kZWxzcmVnaXN0ZXIvY2xhc3Nlcy5oYW5kZWxzcmVnaXN0ZXJjbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUE2QixNQUFNLG1DQUFtQyxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxhQUFhLEVBQTRDLE1BQU0sNEJBQTRCLENBQUM7QUFDckcsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsdUJBQXVCLEdBQ3hCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sS0FBSyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBZWxDLE9BQU8sRUFBRSxjQUFjLEVBQTJDLE1BQU0sMEJBQTBCLENBQUM7QUFDbkcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdEUsT0FBTyxFQUFFLG1CQUFtQixFQUE2QixNQUFNLGlCQUFpQixDQUFDO0FBRWpGLE1BQU0sY0FBYyxHQUFHLHVDQUF1QyxDQUFDO0FBQy9ELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQztBQUM1QixNQUFNLEtBQUssR0FBRztJQUNaLFFBQVEsRUFBRSxvQkFBb0I7SUFDOUIsV0FBVyxFQUFFLHlCQUF5QjtJQUN0QyxJQUFJLEVBQUUsd0JBQXdCO0lBQzlCLFlBQVksRUFBRSx3QkFBd0I7SUFDdEMsY0FBYyxFQUFFLHFCQUFxQjtJQUNyQyxLQUFLLEVBQUUsNEJBQTRCO0lBQ25DLFFBQVEsRUFBRSwrQkFBK0I7SUFDekMsYUFBYSxFQUFFLDJCQUEyQjtJQUMxQyxZQUFZLEVBQUUsZUFBZTtDQUM5QixDQUFDO0FBQ0YsTUFBTSxvQkFBb0IsR0FBRyx3QkFBd0IsQ0FBQztBQUN0RDs7O0dBR0c7QUFDSCxNQUFNLHVCQUF1QixHQUFHLDhDQUE4QyxDQUFDO0FBQy9FLE1BQU0sWUFBWSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQVcsQ0FBQztBQUNqRSxNQUFNLGdCQUFnQixHQUFHLEdBQUcsQ0FBQztBQW1CN0IsTUFBTSxZQUFZLEdBQUcsQ0FBQyxVQUFrQixFQUF3QixFQUFFLENBQ2hFLElBQUksb0JBQW9CLENBQUMsZUFBZSxFQUFFLFVBQVUsRUFBRSxFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRWhGLDRFQUE0RTtBQUM1RSxNQUFNLE1BQU0sR0FBRyxDQUFDLFFBQThCLEVBQUUsV0FBMEIsRUFBd0IsRUFBRSxDQUNsRyxJQUFJLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLE9BQU8sRUFBRTtJQUN4RCxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07SUFDdkIsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPO0lBQ3pCLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQyxJQUFJO0lBQ3ZDLGVBQWUsRUFBRSxXQUFXLENBQUMsZUFBZTtJQUM1QyxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU87SUFDekIsYUFBYSxFQUFFLFFBQVEsQ0FBQyxhQUFhO0lBQ3JDLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSztDQUN0QixDQUFDLENBQUM7QUFFTCxNQUFNLFNBQVMsR0FBRyxDQUFDLE9BQTJCLEVBQTZCLEVBQUU7SUFDM0UsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDMUIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsS0FBSyxPQUFPLENBQUMsQ0FBQztJQUNwRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDVixNQUFNLFlBQVksQ0FBQyxxQ0FBcUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBRUYsTUFBTSxVQUFVLEdBQUcsQ0FBQyxZQUFnQyxFQUFVLEVBQUU7SUFDOUQsSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDL0IsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLEVBQUUsQ0FBQztRQUN2RSxNQUFNLFlBQVksQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFDRCxPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDLENBQUM7QUFFRixNQUFNLFdBQVcsR0FBRyxDQUFDLFNBQWlCLEVBQXdCLEVBQUU7SUFDOUQsTUFBTSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDN0MsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsTUFBTSxZQUFZLENBQUMsbUZBQW1GLENBQUMsQ0FBQztJQUMxRyxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUM7QUFFRixNQUFNLFVBQVUsR0FBRyxDQUFDLFFBQW9CLEVBQVUsRUFBRSxDQUFDLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUUvRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxNQUFNLE9BQU8scUJBQXFCO0lBQ3hCLElBQUksQ0FBdUI7SUFDM0IsU0FBUyxDQUFTO0lBQ2xCLFNBQVMsQ0FBUztJQUNsQixnQkFBZ0IsQ0FBUztJQUN6QixnQkFBZ0IsQ0FBUztJQUN6QixHQUFHLENBQWU7SUFFMUIsWUFBWSxVQUF5QztRQUNuRCxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxTQUFTLENBQUMsNERBQTRELENBQUMsQ0FBQztRQUNwRixDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLFNBQVMsSUFBSSxnQkFBZ0IsQ0FBQztRQUMxRCxJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLElBQUksZ0JBQWdCLENBQUM7UUFDMUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsSUFBSSx1QkFBdUIsQ0FBQztRQUMvRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLGdCQUFnQixJQUFJLHVCQUF1QixDQUFDO1FBQy9FLElBQUksQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ3RDLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDbEQsSUFBSSxRQUFRLEtBQUssUUFBUSxJQUFJLFFBQVEsS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUNsRCxNQUFNLElBQUksU0FBUyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7UUFDakUsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBOEIsRUFBRSxVQUFVLEdBQXlCLEVBQUU7UUFDdkYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2QyxNQUFNLFFBQVEsR0FBa0IsRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDdkQsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDOUYsTUFBTSxNQUFNLEdBQTBCO1lBQ3BDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNoRCxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDdkIsZUFBZSxFQUFFLFFBQVEsQ0FBQyxlQUFlO1lBQ3pDLE1BQU0sRUFBRSx1QkFBdUI7U0FDaEMsQ0FBQztRQUNGLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLE1BQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUMxQyxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ksS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFxQyxFQUFFLFVBQVUsR0FBeUIsRUFBRTtRQUNoRyxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE1BQU0sWUFBWSxDQUFDLG9DQUFvQyxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsTUFBTSxZQUFZLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoRCxNQUFNLFFBQVEsR0FBa0IsRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDdkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdkQsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUNsQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLEVBQ3BJLFFBQVEsRUFDUixPQUFPLENBQ1IsQ0FBQztRQUVGLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDOUUsSUFBSSxpQkFBaUIsR0FBc0MsSUFBSSxDQUFDO1FBQ2hFLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM3QixJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLGlCQUFpQixHQUFHLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzFGLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDM0IsQ0FBQztRQUNELE9BQU87WUFDTCxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7WUFDaEIsaUJBQWlCO1lBQ2pCLFdBQVc7WUFDWCxlQUFlLEVBQUUsUUFBUSxDQUFDLGVBQWU7WUFDekMsTUFBTSxFQUFFLHVCQUF1QjtTQUNoQyxDQUFDO0lBQ0osQ0FBQztJQUVPLFdBQVcsQ0FBQyxVQUFnQyxFQUFFLFdBQTBCO1FBQzlFLE9BQU8sSUFBSSxhQUFhLENBQ3RCO1lBQ0UsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQ3ZDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7WUFDdkMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNO1NBQzFCLEVBQ0QsV0FBVyxDQUNaLENBQUM7SUFDSixDQUFDO0lBRU8sVUFBVSxDQUFDLFFBQThCO1FBQy9DLElBQUksTUFBTSxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMzRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2QsTUFBTSxZQUFZLENBQUMsMkNBQTJDLENBQUMsQ0FBQztZQUNsRSxDQUFDO1lBQ0QsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3ZDLE1BQU0sWUFBWSxDQUFDLCtCQUErQixnQkFBZ0IsY0FBYyxDQUFDLENBQUM7WUFDcEYsQ0FBQztZQUNELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxZQUFZLENBQUMsRUFBRSxDQUFDO2dCQUM1QixNQUFNLFlBQVksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1lBQ3BELENBQUM7WUFDRCxPQUFPO2dCQUNMLFFBQVE7Z0JBQ1IsV0FBVyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQy9CLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3ZELFlBQVksRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQzVDLE1BQU0sRUFBRSxFQUFFO2dCQUNWLFNBQVMsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztnQkFDekMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxhQUFhLEtBQUssSUFBSTthQUMvQyxDQUFDO1FBQ0osQ0FBQztRQUNELE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsTUFBTSxZQUFZLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBQ0QsT0FBTztZQUNMLFFBQVEsRUFBRSxFQUFFO1lBQ1osV0FBVyxFQUFFLFlBQVksQ0FBQyxHQUFHO1lBQzdCLElBQUksRUFBRSxFQUFFO1lBQ1IsWUFBWSxFQUFFLElBQUk7WUFDbEIsTUFBTSxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTTtZQUMzQyxTQUFTLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7WUFDekMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxhQUFhLEtBQUssSUFBSTtTQUMvQyxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQW9DLEVBQUUsT0FBNkIsRUFBRSxXQUEwQjtRQUN2SCxJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLEtBQUssWUFBWSxvQkFBb0IsRUFBRSxDQUFDO2dCQUMxQyxNQUFNLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztZQUN2RixDQUFDO1lBQ0QsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVELHdHQUF3RztJQUNoRyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQW9DLEVBQUUsT0FBNkIsRUFBRSxXQUEwQjtRQUN0SCxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN0RCxXQUFXLENBQUMsZUFBZSxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFvQixFQUFFLFdBQTBCLEVBQUUsVUFBeUI7UUFDakcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDO1lBQ0gsV0FBVyxDQUFDLElBQUksR0FBRyxhQUFhLENBQUM7WUFDakMsTUFBTSxRQUFRLEdBQUcsTUFBTSxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUMxRSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxvQ0FBb0MsQ0FBQyxDQUFDO1lBQ3pGLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUNqRCxNQUFNLElBQUksb0JBQW9CLENBQUMscUJBQXFCLEVBQUUsbUNBQW1DLENBQUMsQ0FBQztZQUM3RixDQUFDO1lBQ0QsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNWLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxxQkFBcUIsRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO1lBQzFGLENBQUM7WUFDRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ3hGLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1osTUFBTSxJQUFJLG9CQUFvQixDQUFDLHFCQUFxQixFQUFFLG1EQUFtRCxDQUFDLENBQUM7WUFDN0csQ0FBQztZQUNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkMsSUFBSSxPQUFPLENBQUMsU0FBUyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDekYsTUFBTSxJQUFJLG9CQUFvQixDQUFDLGVBQWUsRUFBRSxnREFBZ0QsQ0FBQyxDQUFDO1lBQ3BHLENBQUM7WUFDRCxJQUFJLE9BQU8sQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7Z0JBQ3hJLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxxQkFBcUIsRUFBRSxvREFBb0QsQ0FBQyxDQUFDO1lBQzlHLENBQUM7WUFDRCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzdGLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxxQkFBcUIsRUFBRSxzREFBc0QsQ0FBQyxDQUFDO1lBQ2hILENBQUM7WUFFRCxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pELEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQy9ELEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pELEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2pFLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdELEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZELEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDOUMsSUFBSSxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzFCLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDcEQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNqRCxDQUFDO1lBQ0QsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUUvQyxXQUFXLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQztZQUM1QixXQUFXLENBQUMsZUFBZSxJQUFJLENBQUMsQ0FBQztZQUNqQyxNQUFNLFVBQVUsR0FBRyxNQUFNLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQ25HLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FDakQsQ0FBQztZQUVGLFdBQVcsQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO1lBQ2pDLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDO2dCQUNILE9BQU8sRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQy9FLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLElBQUksS0FBSyxZQUFZLG9CQUFvQixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUsscUJBQXFCLEVBQUUsQ0FBQztvQkFDbEYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDaEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUNuRCxJQUFJLE9BQU8sRUFBRSxDQUFDO3dCQUNaLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxxQkFBcUIsRUFBRSx5RUFBeUUsRUFBRTs0QkFDL0gsYUFBYSxFQUFFLE9BQU87eUJBQ3ZCLENBQUMsQ0FBQztvQkFDTCxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsTUFBTSxLQUFLLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLEtBQUssWUFBWSxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ25GLENBQUM7SUFDSCxDQUFDO0lBRU8sT0FBTyxDQUNiLE9BQTBCLEVBQzFCLFlBQXNGLEVBQ3RGLFdBQTBCO1FBRTFCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDaEQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7WUFDekMsTUFBTSxNQUFNLEdBQUcsbUJBQW1CLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JELE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxJQUFJLElBQUksTUFBTSxFQUFFLE1BQU0sS0FBSyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNsSixDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTTtZQUN4QyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxLQUFLLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQzFILENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDZixNQUFNLE9BQU8sR0FBcUIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNFLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksb0JBQW9CLENBQUMsV0FBVyxFQUFFLGtEQUFrRCxFQUFFO2dCQUM5RixJQUFJLEVBQUUsYUFBYTtnQkFDbkIsZUFBZSxFQUFFLFdBQVcsQ0FBQyxlQUFlO2dCQUM1QyxPQUFPO2FBQ1IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksb0JBQW9CLENBQUMsV0FBVyxFQUFFLHlEQUF5RCxFQUFFO2dCQUNyRyxJQUFJLEVBQUUsYUFBYTtnQkFDbkIsZUFBZSxFQUFFLFdBQVcsQ0FBQyxlQUFlO2dCQUM1QyxPQUFPO2FBQ1IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFTyxLQUFLLENBQUMseUJBQXlCLENBQ3JDLE1BQWtCLEVBQ2xCLFVBQTBCLEVBQzFCLFVBQXlCLEVBQ3pCLFdBQTBCO1FBRTFCLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDO1lBQ0gsV0FBVyxDQUFDLElBQUksR0FBRyxvQkFBb0IsQ0FBQztZQUN4QyxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN4QyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDL0IsTUFBTSxJQUFJLG9CQUFvQixDQUFDLHFCQUFxQixFQUFFLHlFQUF5RSxDQUFDLENBQUM7WUFDbkksQ0FBQztZQUNELE1BQU0sTUFBTSxHQUE0QixDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9ELEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDdkMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLENBQUM7WUFDRCxXQUFXLENBQUMsZUFBZSxJQUFJLENBQUMsQ0FBQztZQUNqQyxNQUFNLE1BQU0sR0FBRyxNQUFNLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQzNHLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLG9CQUFvQixFQUFFLFdBQVcsQ0FBQyxDQUNoRSxDQUFDO1lBQ0YsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO2dCQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDN0MsTUFBTSxJQUFJLG9CQUFvQixDQUFDLHFCQUFxQixFQUFFLG9FQUFvRSxDQUFDLENBQUM7WUFDOUgsQ0FBQztZQUNELElBQUksR0FBVyxDQUFDO1lBQ2hCLElBQUksQ0FBQztnQkFDSCxHQUFHLEdBQUcsSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0RSxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixNQUFNLElBQUksb0JBQW9CLENBQUMsNEJBQTRCLEVBQUUsNENBQTRDLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUMvSCxDQUFDO1lBQ0QsTUFBTSxPQUFPLEdBQUcsc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckQsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLEtBQUssWUFBWSxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ25GLENBQUM7SUFDSCxDQUFDO0lBRUQscUZBQXFGO0lBQzdFLHdCQUF3QixDQUFDLFVBQXNDLEVBQUUsUUFBd0I7UUFDL0YsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUNyQyxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQy9HLE1BQU0sU0FBUyxHQUFHLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4RCxJQUNFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ3ZHLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDdkYsQ0FBQyxhQUFhLEtBQUssU0FBUyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLE1BQU0sQ0FBQyxFQUMzRSxDQUFDO1lBQ0QsTUFBTSxJQUFJLG9CQUFvQixDQUFDLHFCQUFxQixFQUFFLDJEQUEyRCxDQUFDLENBQUM7UUFDckgsQ0FBQztJQUNILENBQUM7SUFFTyxjQUFjLENBQUMsT0FBd0IsRUFBRSxVQUFrQjtRQUNqRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUN2QyxNQUFNLElBQUksb0JBQW9CLENBQUMscUJBQXFCLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELGlEQUFpRDtJQUN6QyxRQUFRLENBQUMsT0FBMEI7UUFDekMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDNUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQzthQUM3QyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQseUZBQXlGO0lBQ2pGLGNBQWMsQ0FBQyxPQUFlO1FBQ3BDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekMsTUFBTSxNQUFNLEdBQUcsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNuRSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsTUFBTSxJQUFJLG9CQUFvQixDQUFDLFNBQVMsRUFBRSw4REFBOEQsRUFBRTtnQkFDeEcsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7YUFDekIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxzRkFBc0Y7SUFDOUUsaUJBQWlCLENBQUMsT0FBZTtRQUN2QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFDL0QsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbkQsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2pDLENBQUM7Q0FDRiJ9
@@ -6,6 +6,8 @@ import type { IRegisterMatch } from './interfaces.js';
6
6
  * - `aborted`: the caller's signal aborted the call;
7
7
  * - `timeout`: a request to the portal took longer than the client's limit;
8
8
  * - `unreachable`: the portal could not be reached (name resolution, connection, TLS);
9
+ * - `dropped`: the portal closed the connection without answering, also when the request was sent
10
+ * once more. Its front end does so when it lost its back end's answer;
9
11
  * - `refused`: the portal answered with an HTTP error, for example 403 when it blocks an address,
10
12
  * 429 or 503 when it is overloaded (`status` carries the code), or with its notice that it refuses
11
13
  * retrievals from this address (`portalMessage` carries its words);
@@ -16,7 +18,7 @@ import type { IRegisterMatch } from './interfaces.js';
16
18
  * - `ambiguous`: several register sheets match the reference; `matches` lists them;
17
19
  * - `invalid_structured_content`: the structured register content could not be read.
18
20
  */
19
- export type THandelsregisterErrorCode = 'invalid_query' | 'rate_limited' | 'aborted' | 'timeout' | 'unreachable' | 'refused' | 'too_large' | 'unexpected_response' | 'not_found' | 'ambiguous' | 'invalid_structured_content';
21
+ export type THandelsregisterErrorCode = 'invalid_query' | 'rate_limited' | 'aborted' | 'timeout' | 'unreachable' | 'dropped' | 'refused' | 'too_large' | 'unexpected_response' | 'not_found' | 'ambiguous' | 'invalid_structured_content';
20
22
  /** the step of a call that failed */
21
23
  export type THandelsregisterStep = 'search_form' | 'search' | 'result_list' | 'structured_content';
22
24
  export interface IHandelsregisterErrorDetails {
@@ -34,4 +34,4 @@ export class HandelsregisterError extends Error {
34
34
  this.portalMessage = detailsArg.portalMessage;
35
35
  }
36
36
  }
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5oYW5kZWxzcmVnaXN0ZXJlcnJvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2hhbmRlbHNyZWdpc3Rlci9jbGFzc2VzLmhhbmRlbHNyZWdpc3RlcmVycm9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTZDQTs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsS0FBSztJQUM3QixJQUFJLENBQTRCO0lBQ2hELG1DQUFtQztJQUNuQixNQUFNLENBQVU7SUFDaEMsNkRBQTZEO0lBQzdDLE9BQU8sQ0FBVTtJQUNqQywyQkFBMkI7SUFDWCxJQUFJLENBQXdCO0lBQzVDOzs7T0FHRztJQUNhLGVBQWUsQ0FBVTtJQUN6Qzs7O09BR0c7SUFDYSxPQUFPLENBQW9CO0lBQzNDLHVFQUF1RTtJQUN2RCxhQUFhLENBQVU7SUFFdkMsWUFBWSxPQUFrQyxFQUFFLFVBQWtCLEVBQUUsVUFBVSxHQUFpQyxFQUFFO1FBQy9HLEtBQUssQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDNUYsSUFBSSxDQUFDLElBQUksR0FBRyxzQkFBc0IsQ0FBQztRQUNuQyxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztRQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDaEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztRQUM1QixJQUFJLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUM7UUFDbEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQztJQUNoRCxDQUFDO0NBQ0YifQ==
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5oYW5kZWxzcmVnaXN0ZXJlcnJvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2hhbmRlbHNyZWdpc3Rlci9jbGFzc2VzLmhhbmRlbHNyZWdpc3RlcmVycm9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWdEQTs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsS0FBSztJQUM3QixJQUFJLENBQTRCO0lBQ2hELG1DQUFtQztJQUNuQixNQUFNLENBQVU7SUFDaEMsNkRBQTZEO0lBQzdDLE9BQU8sQ0FBVTtJQUNqQywyQkFBMkI7SUFDWCxJQUFJLENBQXdCO0lBQzVDOzs7T0FHRztJQUNhLGVBQWUsQ0FBVTtJQUN6Qzs7O09BR0c7SUFDYSxPQUFPLENBQW9CO0lBQzNDLHVFQUF1RTtJQUN2RCxhQUFhLENBQVU7SUFFdkMsWUFBWSxPQUFrQyxFQUFFLFVBQWtCLEVBQUUsVUFBVSxHQUFpQyxFQUFFO1FBQy9HLEtBQUssQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDNUYsSUFBSSxDQUFDLElBQUksR0FBRyxzQkFBc0IsQ0FBQztRQUNuQyxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztRQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDaEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztRQUM1QixJQUFJLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUM7UUFDbEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQztJQUNoRCxDQUFDO0NBQ0YifQ==
@@ -33,11 +33,27 @@ export declare class PortalSession {
33
33
  constructor(settings: IPortalSessionSettings, progress: ICallProgress);
34
34
  /** resolves a path or a relative action against the portal or a page */
35
35
  resolve(targetArg: string, baseArg?: string): string;
36
- get(urlArg: string): Promise<IPortalResponse>;
37
- /** submits a form as `application/x-www-form-urlencoded` */
38
- post(urlArg: string, fieldsArg: Array<[string, string]>): Promise<IPortalResponse>;
36
+ /**
37
+ * Loads a page. Like `post()`, it sends the request once more when the portal closes the
38
+ * connection without answering; `beforeRepeatArg` runs before that.
39
+ */
40
+ get(urlArg: string, beforeRepeatArg?: () => Promise<void>): Promise<IPortalResponse>;
41
+ /**
42
+ * Submits a form as `application/x-www-form-urlencoded`. When the portal closes the connection
43
+ * without answering, the form is sent once more after `beforeRepeatArg`; a redirect it answers
44
+ * with is followed the same way, without `beforeRepeatArg`.
45
+ */
46
+ post(urlArg: string, fieldsArg: Array<[string, string]>, beforeRepeatArg?: () => Promise<void>): Promise<IPortalResponse>;
39
47
  private fail;
40
48
  private request;
49
+ /**
50
+ * Sends a request, and once more when the portal closed the connection without answering it. The
51
+ * portal's front end, Apache httpd with mod_proxy_http before the application servers, closes a
52
+ * kept-alive connection without any answer when it could not read its back end's answer, so that
53
+ * the client sends the request again, as browsers do. Every request of this client reads; sending
54
+ * one again changes nothing at the portal. A second close without an answer ends in `dropped`.
55
+ */
56
+ private sendRepeating;
41
57
  private send;
42
58
  /** a signal for one request: the caller's signal and the request's own time limit */
43
59
  private requestSignal;
@@ -1,6 +1,24 @@
1
1
  import { HandelsregisterError } from './classes.handelsregistererror.js';
2
2
  const redirectStatuses = new Set([301, 302, 303]);
3
3
  const maxRedirects = 3;
4
+ /**
5
+ * error codes of a connection the other side closed or reset before it answered: undici's
6
+ * `UND_ERR_SOCKET` (the `fetch` of Node.js: "other side closed") and the system's `ECONNRESET` and
7
+ * `EPIPE`
8
+ */
9
+ const closedConnectionCodes = new Set(['UND_ERR_SOCKET', 'ECONNRESET', 'EPIPE']);
10
+ /** whether a failed `fetch` failed because the connection was closed before any answer arrived */
11
+ const closedWithoutAnswer = (errorArg) => {
12
+ let current = errorArg;
13
+ for (let depth = 0; depth < 4 && current instanceof Error; depth++) {
14
+ const code = current.code;
15
+ if (typeof code === 'string' && closedConnectionCodes.has(code)) {
16
+ return true;
17
+ }
18
+ current = current.cause;
19
+ }
20
+ return false;
21
+ };
4
22
  /**
5
23
  * One visit to the register portal: a cookie jar, the fixed language and a limit for every
6
24
  * request. It lives for one call of the client and is dropped afterwards, so nothing is shared
@@ -22,12 +40,20 @@ export class PortalSession {
22
40
  resolve(targetArg, baseArg = this.origin) {
23
41
  return new URL(targetArg, baseArg).toString();
24
42
  }
25
- async get(urlArg) {
26
- return this.request('GET', urlArg);
43
+ /**
44
+ * Loads a page. Like `post()`, it sends the request once more when the portal closes the
45
+ * connection without answering; `beforeRepeatArg` runs before that.
46
+ */
47
+ async get(urlArg, beforeRepeatArg) {
48
+ return this.request('GET', urlArg, undefined, beforeRepeatArg);
27
49
  }
28
- /** submits a form as `application/x-www-form-urlencoded` */
29
- async post(urlArg, fieldsArg) {
30
- return this.request('POST', urlArg, new URLSearchParams(fieldsArg).toString());
50
+ /**
51
+ * Submits a form as `application/x-www-form-urlencoded`. When the portal closes the connection
52
+ * without answering, the form is sent once more after `beforeRepeatArg`; a redirect it answers
53
+ * with is followed the same way, without `beforeRepeatArg`.
54
+ */
55
+ async post(urlArg, fieldsArg, beforeRepeatArg) {
56
+ return this.request('POST', urlArg, new URLSearchParams(fieldsArg).toString(), beforeRepeatArg);
31
57
  }
32
58
  fail(codeArg, messageArg, extraArg = {}) {
33
59
  return new HandelsregisterError(codeArg, messageArg, {
@@ -36,7 +62,7 @@ export class PortalSession {
36
62
  countedRequests: this.progress.countedRequests,
37
63
  });
38
64
  }
39
- async request(methodArg, urlArg, bodyArg) {
65
+ async request(methodArg, urlArg, bodyArg, beforeRepeatArg) {
40
66
  let method = methodArg;
41
67
  let url = urlArg;
42
68
  let body = bodyArg;
@@ -44,7 +70,7 @@ export class PortalSession {
44
70
  if (new URL(url).origin !== this.origin) {
45
71
  throw this.fail('unexpected_response', 'The portal pointed to another site.');
46
72
  }
47
- const response = await this.send(method, url, body);
73
+ const response = await this.sendRepeating(method, url, body, redirects === 0 ? beforeRepeatArg : undefined);
48
74
  if (redirectStatuses.has(response.status)) {
49
75
  const location = response.headers.get('location');
50
76
  await response.body?.cancel();
@@ -69,6 +95,35 @@ export class PortalSession {
69
95
  };
70
96
  }
71
97
  }
98
+ /**
99
+ * Sends a request, and once more when the portal closed the connection without answering it. The
100
+ * portal's front end, Apache httpd with mod_proxy_http before the application servers, closes a
101
+ * kept-alive connection without any answer when it could not read its back end's answer, so that
102
+ * the client sends the request again, as browsers do. Every request of this client reads; sending
103
+ * one again changes nothing at the portal. A second close without an answer ends in `dropped`.
104
+ */
105
+ async sendRepeating(methodArg, urlArg, bodyArg, beforeRepeatArg) {
106
+ try {
107
+ return await this.send(methodArg, urlArg, bodyArg);
108
+ }
109
+ catch (error) {
110
+ if (!(error instanceof HandelsregisterError) || error.code !== 'dropped') {
111
+ throw error;
112
+ }
113
+ }
114
+ await beforeRepeatArg?.();
115
+ try {
116
+ return await this.send(methodArg, urlArg, bodyArg);
117
+ }
118
+ catch (error) {
119
+ if (error instanceof HandelsregisterError && error.code === 'dropped') {
120
+ throw this.fail('dropped', 'The register portal closed the connection without answering, also when the request was sent once more.', {
121
+ cause: error.cause,
122
+ });
123
+ }
124
+ throw error;
125
+ }
126
+ }
72
127
  async send(methodArg, urlArg, bodyArg) {
73
128
  if (this.settings.signal?.aborted) {
74
129
  throw this.fail('aborted', 'The call was aborted.', { cause: this.settings.signal.reason });
@@ -95,7 +150,10 @@ export class PortalSession {
95
150
  });
96
151
  }
97
152
  catch (error) {
98
- throw this.failureOf(error);
153
+ const failure = this.failureOf(error);
154
+ throw failure.code === 'unreachable' && closedWithoutAnswer(error)
155
+ ? this.fail('dropped', 'The register portal closed the connection without answering.', { cause: error })
156
+ : failure;
99
157
  }
100
158
  for (const cookie of response.headers.getSetCookie()) {
101
159
  const pair = cookie.split(';', 1)[0];
@@ -157,4 +215,4 @@ export class PortalSession {
157
215
  return body;
158
216
  }
159
217
  }
160
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5wb3J0YWxzZXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvaGFuZGVsc3JlZ2lzdGVyL2NsYXNzZXMucG9ydGFsc2Vzc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQTZCLE1BQU0sbUNBQW1DLENBQUM7QUF3QnBHLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbEQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBRXZCOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sYUFBYTtJQU1KLFFBQVE7SUFBa0MsUUFBUTtJQUw5RCxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFDcEMsTUFBTSxDQUFTO0lBQ3ZCLDBDQUEwQztJQUNsQyxhQUFhLENBQWU7SUFFcEMsWUFBb0IsUUFBZ0MsRUFBVSxRQUF1Qjt3QkFBakUsUUFBUTt3QkFBa0MsUUFBUTtRQUNwRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDbkQsQ0FBQztJQUVELHdFQUF3RTtJQUNqRSxPQUFPLENBQUMsU0FBaUIsRUFBRSxPQUFPLEdBQVcsSUFBSSxDQUFDLE1BQU07UUFDN0QsT0FBTyxJQUFJLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVNLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBYztRQUM3QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCw0REFBNEQ7SUFDckQsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFjLEVBQUUsU0FBa0M7UUFDbEUsT0FBTyxJQUFJLENBQUMs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
218
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5wb3J0YWxzZXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvaGFuZGVsc3JlZ2lzdGVyL2NsYXNzZXMucG9ydGFsc2Vzc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQTZCLE1BQU0sbUNBQW1DLENBQUM7QUF3QnBHLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbEQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBRXZCOzs7O0dBSUc7QUFDSCxNQUFNLHFCQUFxQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFFakYsa0dBQWtHO0FBQ2xHLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxRQUFpQixFQUFXLEVBQUU7SUFDekQsSUFBSSxPQUFPLEdBQVksUUFBUSxDQUFDO0lBQ2hDLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLElBQUksT0FBTyxZQUFZLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ25FLE1BQU0sSUFBSSxHQUFJLE9BQXNDLENBQUMsSUFBSSxDQUFDO1FBQzFELElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2hFLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sYUFBYTtJQU1KLFFBQVE7SUFBa0MsUUFBUTtJQUw5RCxPQUFPLEdBQUcsSUFBSSxH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