@dbx-tools/email 0.9.153 → 0.9.157

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.ts CHANGED
@@ -3,8 +3,7 @@
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
 
5
5
  export const PACKAGE_IDENTIFIER = "@dbx-tools/email";
6
- export const PACKAGE_VERSION = "0.9.153";
7
- export * as brand from "./src/brand.ts";
6
+ export const PACKAGE_VERSION = "0.9.157";
8
7
  export * as config from "./src/config.ts";
9
8
  export * as defaults from "./src/defaults.ts";
10
9
  export * as emailHtml from "./src/email-html.ts";
@@ -14,16 +13,17 @@ export * as plugin from "./src/plugin.ts";
14
13
  export * as sender from "./src/sender.ts";
15
14
  export * as tool from "./src/tool.ts";
16
15
  export * as transport from "./src/transport.ts";
17
- export { DEFAULT_SMTP_PORT, IMPLICIT_TLS_SMTP_PORT, EMAIL_CONFIG_SCHEMA } from "./src/config.ts";
16
+ export { DEFAULT_SMTP_PORT, IMPLICIT_TLS_SMTP_PORT, EMAIL_CONFIG_SCHEMA, resolveEmailConfig } from "./src/config.ts";
18
17
  export type { SenderPolicy, SmtpConfig, EmailPluginConfig, ResolvedSender, ResolvedSmtpConfig, ResolvedFileConfig, ResolvedEmailConfig } from "./src/config.ts";
19
18
  export { SEND_TIMEOUT_MS, VERIFY_TIMEOUT_MS, VERIFY_ATTEMPTS, MAX_ATTACHMENT_BYTES, MAX_ATTACHMENTS_TOTAL_BYTES, MAX_ATTACHMENT_COUNT, MAX_BODY_CHARS, EMAIL_SEND_SETTINGS, EMAIL_VERIFY_SETTINGS, EMAIL_SENDERS_SETTINGS } from "./src/defaults.ts";
20
19
  export type { EmailExecuteConfig, EmailExecutionSettings } from "./src/defaults.ts";
21
- export { escapeHtml } from "./src/email-html.ts";
20
+ export { renderEmailHtml, renderEmailText, renderEmail } from "./src/email-html.ts";
22
21
  export type { EmailHtmlOptions } from "./src/email-html.ts";
23
- export { normalizeMarkdown } from "./src/markdown.ts";
22
+ export { markdownToHtml } from "./src/markdown.ts";
23
+ export { writeOutboxEmail } from "./src/outbox.ts";
24
24
  export { EmailPlugin, email } from "./src/plugin.ts";
25
- export { SYSTEM_SENDER_LOCAL_PART } from "./src/sender.ts";
26
- export { SEND_EMAIL_DESCRIPTION } from "./src/tool.ts";
25
+ export { deriveSenderAddress, parseAllowedSenders, isSenderAllowed, assertSenderAllowed, SYSTEM_SENDER_LOCAL_PART, systemSenderAddress, resolveSystemSenderAddress, resolveSenderAddress, listSenderOptions } from "./src/sender.ts";
26
+ export { SEND_EMAIL_DESCRIPTION, emailTool } from "./src/tool.ts";
27
27
  export type { EmailToolOptions } from "./src/tool.ts";
28
+ export { getEmailRuntime, setEmailExecutor, resetEmailRuntime, executeWrite, verifyEmailTransport, sendEmail } from "./src/transport.ts";
28
29
  export type { EmailExecutor, EmailRuntime, SendEmailOptions } from "./src/transport.ts";
29
- export * from "./exports.ts";
package/lib/index.d.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  export declare const PACKAGE_IDENTIFIER = "@dbx-tools/email";
2
- export declare const PACKAGE_VERSION = "0.9.153";
3
- export * as brand from "./src/brand.ts";
2
+ export declare const PACKAGE_VERSION = "0.9.157";
4
3
  export * as config from "./src/config.ts";
5
4
  export * as defaults from "./src/defaults.ts";
6
5
  export * as emailHtml from "./src/email-html.ts";
@@ -10,16 +9,17 @@ export * as plugin from "./src/plugin.ts";
10
9
  export * as sender from "./src/sender.ts";
11
10
  export * as tool from "./src/tool.ts";
12
11
  export * as transport from "./src/transport.ts";
13
- export { DEFAULT_SMTP_PORT, IMPLICIT_TLS_SMTP_PORT, EMAIL_CONFIG_SCHEMA } from "./src/config.ts";
12
+ export { DEFAULT_SMTP_PORT, IMPLICIT_TLS_SMTP_PORT, EMAIL_CONFIG_SCHEMA, resolveEmailConfig } from "./src/config.ts";
14
13
  export type { SenderPolicy, SmtpConfig, EmailPluginConfig, ResolvedSender, ResolvedSmtpConfig, ResolvedFileConfig, ResolvedEmailConfig } from "./src/config.ts";
15
14
  export { SEND_TIMEOUT_MS, VERIFY_TIMEOUT_MS, VERIFY_ATTEMPTS, MAX_ATTACHMENT_BYTES, MAX_ATTACHMENTS_TOTAL_BYTES, MAX_ATTACHMENT_COUNT, MAX_BODY_CHARS, EMAIL_SEND_SETTINGS, EMAIL_VERIFY_SETTINGS, EMAIL_SENDERS_SETTINGS } from "./src/defaults.ts";
16
15
  export type { EmailExecuteConfig, EmailExecutionSettings } from "./src/defaults.ts";
17
- export { escapeHtml } from "./src/email-html.ts";
16
+ export { renderEmailHtml, renderEmailText, renderEmail } from "./src/email-html.ts";
18
17
  export type { EmailHtmlOptions } from "./src/email-html.ts";
19
- export { normalizeMarkdown } from "./src/markdown.ts";
18
+ export { markdownToHtml } from "./src/markdown.ts";
19
+ export { writeOutboxEmail } from "./src/outbox.ts";
20
20
  export { EmailPlugin, email } from "./src/plugin.ts";
21
- export { SYSTEM_SENDER_LOCAL_PART } from "./src/sender.ts";
22
- export { SEND_EMAIL_DESCRIPTION } from "./src/tool.ts";
21
+ export { deriveSenderAddress, parseAllowedSenders, isSenderAllowed, assertSenderAllowed, SYSTEM_SENDER_LOCAL_PART, systemSenderAddress, resolveSystemSenderAddress, resolveSenderAddress, listSenderOptions } from "./src/sender.ts";
22
+ export { SEND_EMAIL_DESCRIPTION, emailTool } from "./src/tool.ts";
23
23
  export type { EmailToolOptions } from "./src/tool.ts";
24
+ export { getEmailRuntime, setEmailExecutor, resetEmailRuntime, executeWrite, verifyEmailTransport, sendEmail } from "./src/transport.ts";
24
25
  export type { EmailExecutor, EmailRuntime, SendEmailOptions } from "./src/transport.ts";
25
- export * from "./exports.ts";
package/lib/index.js CHANGED
@@ -2,8 +2,7 @@
2
2
  // Regenerated from the exporting modules in ./src.
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
  export const PACKAGE_IDENTIFIER = "@dbx-tools/email";
5
- export const PACKAGE_VERSION = "0.9.153";
6
- export * as brand from "./src/brand.js";
5
+ export const PACKAGE_VERSION = "0.9.157";
7
6
  export * as config from "./src/config.js";
8
7
  export * as defaults from "./src/defaults.js";
9
8
  export * as emailHtml from "./src/email-html.js";
@@ -13,12 +12,13 @@ export * as plugin from "./src/plugin.js";
13
12
  export * as sender from "./src/sender.js";
14
13
  export * as tool from "./src/tool.js";
15
14
  export * as transport from "./src/transport.js";
16
- export { DEFAULT_SMTP_PORT, IMPLICIT_TLS_SMTP_PORT, EMAIL_CONFIG_SCHEMA } from "./src/config.js";
15
+ export { DEFAULT_SMTP_PORT, IMPLICIT_TLS_SMTP_PORT, EMAIL_CONFIG_SCHEMA, resolveEmailConfig } from "./src/config.js";
17
16
  export { SEND_TIMEOUT_MS, VERIFY_TIMEOUT_MS, VERIFY_ATTEMPTS, MAX_ATTACHMENT_BYTES, MAX_ATTACHMENTS_TOTAL_BYTES, MAX_ATTACHMENT_COUNT, MAX_BODY_CHARS, EMAIL_SEND_SETTINGS, EMAIL_VERIFY_SETTINGS, EMAIL_SENDERS_SETTINGS } from "./src/defaults.js";
18
- export { escapeHtml } from "./src/email-html.js";
19
- export { normalizeMarkdown } from "./src/markdown.js";
17
+ export { renderEmailHtml, renderEmailText, renderEmail } from "./src/email-html.js";
18
+ export { markdownToHtml } from "./src/markdown.js";
19
+ export { writeOutboxEmail } from "./src/outbox.js";
20
20
  export { EmailPlugin, email } from "./src/plugin.js";
21
- export { SYSTEM_SENDER_LOCAL_PART } from "./src/sender.js";
22
- export { SEND_EMAIL_DESCRIPTION } from "./src/tool.js";
23
- export * from "./exports.js";
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztBQUNyRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxLQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssUUFBUSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sS0FBSyxTQUFTLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpHLE9BQU8sRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLG9CQUFvQixFQUFFLDJCQUEyQixFQUFFLG9CQUFvQixFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXJQLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVqRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd2RCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvZW1haWxcIjtcbmV4cG9ydCBjb25zdCBQQUNLQUdFX1ZFUlNJT04gPSBcIjAuOS4xNTNcIjtcbmV4cG9ydCAqIGFzIGJyYW5kIGZyb20gXCIuL3NyYy9icmFuZC50c1wiO1xuZXhwb3J0ICogYXMgY29uZmlnIGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCAqIGFzIGRlZmF1bHRzIGZyb20gXCIuL3NyYy9kZWZhdWx0cy50c1wiO1xuZXhwb3J0ICogYXMgZW1haWxIdG1sIGZyb20gXCIuL3NyYy9lbWFpbC1odG1sLnRzXCI7XG5leHBvcnQgKiBhcyBtYXJrZG93biBmcm9tIFwiLi9zcmMvbWFya2Rvd24udHNcIjtcbmV4cG9ydCAqIGFzIG91dGJveCBmcm9tIFwiLi9zcmMvb3V0Ym94LnRzXCI7XG5leHBvcnQgKiBhcyBwbHVnaW4gZnJvbSBcIi4vc3JjL3BsdWdpbi50c1wiO1xuZXhwb3J0ICogYXMgc2VuZGVyIGZyb20gXCIuL3NyYy9zZW5kZXIudHNcIjtcbmV4cG9ydCAqIGFzIHRvb2wgZnJvbSBcIi4vc3JjL3Rvb2wudHNcIjtcbmV4cG9ydCAqIGFzIHRyYW5zcG9ydCBmcm9tIFwiLi9zcmMvdHJhbnNwb3J0LnRzXCI7XG5leHBvcnQgeyBERUZBVUxUX1NNVFBfUE9SVCwgSU1QTElDSVRfVExTX1NNVFBfUE9SVCwgRU1BSUxfQ09ORklHX1NDSEVNQSB9IGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCB0eXBlIHsgU2VuZGVyUG9saWN5LCBTbXRwQ29uZmlnLCBFbWFpbFBsdWdpbkNvbmZpZywgUmVzb2x2ZWRTZW5kZXIsIFJlc29sdmVkU210cENvbmZpZywgUmVzb2x2ZWRGaWxlQ29uZmlnLCBSZXNvbHZlZEVtYWlsQ29uZmlnIH0gZnJvbSBcIi4vc3JjL2NvbmZpZy50c1wiO1xuZXhwb3J0IHsgU0VORF9USU1FT1VUX01TLCBWRVJJRllfVElNRU9VVF9NUywgVkVSSUZZX0FUVEVNUFRTLCBNQVhfQVRUQUNITUVOVF9CWVRFUywgTUFYX0FUVEFDSE1FTlRTX1RPVEFMX0JZVEVTLCBNQVhfQVRUQUNITUVOVF9DT1VOVCwgTUFYX0JPRFlfQ0hBUlMsIEVNQUlMX1NFTkRfU0VUVElOR1MsIEVNQUlMX1ZFUklGWV9TRVRUSU5HUywgRU1BSUxfU0VOREVSU19TRVRUSU5HUyB9IGZyb20gXCIuL3NyYy9kZWZhdWx0cy50c1wiO1xuZXhwb3J0IHR5cGUgeyBFbWFpbEV4ZWN1dGVDb25maWcsIEVtYWlsRXhlY3V0aW9uU2V0dGluZ3MgfSBmcm9tIFwiLi9zcmMvZGVmYXVsdHMudHNcIjtcbmV4cG9ydCB7IGVzY2FwZUh0bWwgfSBmcm9tIFwiLi9zcmMvZW1haWwtaHRtbC50c1wiO1xuZXhwb3J0IHR5cGUgeyBFbWFpbEh0bWxPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2VtYWlsLWh0bWwudHNcIjtcbmV4cG9ydCB7IG5vcm1hbGl6ZU1hcmtkb3duIH0gZnJvbSBcIi4vc3JjL21hcmtkb3duLnRzXCI7XG5leHBvcnQgeyBFbWFpbFBsdWdpbiwgZW1haWwgfSBmcm9tIFwiLi9zcmMvcGx1Z2luLnRzXCI7XG5leHBvcnQgeyBTWVNURU1fU0VOREVSX0xPQ0FMX1BBUlQgfSBmcm9tIFwiLi9zcmMvc2VuZGVyLnRzXCI7XG5leHBvcnQgeyBTRU5EX0VNQUlMX0RFU0NSSVBUSU9OIH0gZnJvbSBcIi4vc3JjL3Rvb2wudHNcIjtcbmV4cG9ydCB0eXBlIHsgRW1haWxUb29sT3B0aW9ucyB9IGZyb20gXCIuL3NyYy90b29sLnRzXCI7XG5leHBvcnQgdHlwZSB7IEVtYWlsRXhlY3V0b3IsIEVtYWlsUnVudGltZSwgU2VuZEVtYWlsT3B0aW9ucyB9IGZyb20gXCIuL3NyYy90cmFuc3BvcnQudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2V4cG9ydHMudHNcIjtcbiJdfQ==
21
+ export { deriveSenderAddress, parseAllowedSenders, isSenderAllowed, assertSenderAllowed, SYSTEM_SENDER_LOCAL_PART, systemSenderAddress, resolveSystemSenderAddress, resolveSenderAddress, listSenderOptions } from "./src/sender.js";
22
+ export { SEND_EMAIL_DESCRIPTION, emailTool } from "./src/tool.js";
23
+ export { getEmailRuntime, setEmailExecutor, resetEmailRuntime, executeWrite, verifyEmailTransport, sendEmail } from "./src/transport.js";
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztBQUNyRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssU0FBUyxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLElBQUksTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxLQUFLLFNBQVMsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsc0JBQXNCLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVySCxPQUFPLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSwyQkFBMkIsRUFBRSxvQkFBb0IsRUFBRSxjQUFjLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVyUCxPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVwRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLHdCQUF3QixFQUFFLG1CQUFtQixFQUFFLDBCQUEwQixFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDck8sT0FBTyxFQUFFLHNCQUFzQixFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvZW1haWxcIjtcbmV4cG9ydCBjb25zdCBQQUNLQUdFX1ZFUlNJT04gPSBcIjAuOS4xNTdcIjtcbmV4cG9ydCAqIGFzIGNvbmZpZyBmcm9tIFwiLi9zcmMvY29uZmlnLnRzXCI7XG5leHBvcnQgKiBhcyBkZWZhdWx0cyBmcm9tIFwiLi9zcmMvZGVmYXVsdHMudHNcIjtcbmV4cG9ydCAqIGFzIGVtYWlsSHRtbCBmcm9tIFwiLi9zcmMvZW1haWwtaHRtbC50c1wiO1xuZXhwb3J0ICogYXMgbWFya2Rvd24gZnJvbSBcIi4vc3JjL21hcmtkb3duLnRzXCI7XG5leHBvcnQgKiBhcyBvdXRib3ggZnJvbSBcIi4vc3JjL291dGJveC50c1wiO1xuZXhwb3J0ICogYXMgcGx1Z2luIGZyb20gXCIuL3NyYy9wbHVnaW4udHNcIjtcbmV4cG9ydCAqIGFzIHNlbmRlciBmcm9tIFwiLi9zcmMvc2VuZGVyLnRzXCI7XG5leHBvcnQgKiBhcyB0b29sIGZyb20gXCIuL3NyYy90b29sLnRzXCI7XG5leHBvcnQgKiBhcyB0cmFuc3BvcnQgZnJvbSBcIi4vc3JjL3RyYW5zcG9ydC50c1wiO1xuZXhwb3J0IHsgREVGQVVMVF9TTVRQX1BPUlQsIElNUExJQ0lUX1RMU19TTVRQX1BPUlQsIEVNQUlMX0NPTkZJR19TQ0hFTUEsIHJlc29sdmVFbWFpbENvbmZpZyB9IGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCB0eXBlIHsgU2VuZGVyUG9saWN5LCBTbXRwQ29uZmlnLCBFbWFpbFBsdWdpbkNvbmZpZywgUmVzb2x2ZWRTZW5kZXIsIFJlc29sdmVkU210cENvbmZpZywgUmVzb2x2ZWRGaWxlQ29uZmlnLCBSZXNvbHZlZEVtYWlsQ29uZmlnIH0gZnJvbSBcIi4vc3JjL2NvbmZpZy50c1wiO1xuZXhwb3J0IHsgU0VORF9USU1FT1VUX01TLCBWRVJJRllfVElNRU9VVF9NUywgVkVSSUZZX0FUVEVNUFRTLCBNQVhfQVRUQUNITUVOVF9CWVRFUywgTUFYX0FUVEFDSE1FTlRTX1RPVEFMX0JZVEVTLCBNQVhfQVRUQUNITUVOVF9DT1VOVCwgTUFYX0JPRFlfQ0hBUlMsIEVNQUlMX1NFTkRfU0VUVElOR1MsIEVNQUlMX1ZFUklGWV9TRVRUSU5HUywgRU1BSUxfU0VOREVSU19TRVRUSU5HUyB9IGZyb20gXCIuL3NyYy9kZWZhdWx0cy50c1wiO1xuZXhwb3J0IHR5cGUgeyBFbWFpbEV4ZWN1dGVDb25maWcsIEVtYWlsRXhlY3V0aW9uU2V0dGluZ3MgfSBmcm9tIFwiLi9zcmMvZGVmYXVsdHMudHNcIjtcbmV4cG9ydCB7IHJlbmRlckVtYWlsSHRtbCwgcmVuZGVyRW1haWxUZXh0LCByZW5kZXJFbWFpbCB9IGZyb20gXCIuL3NyYy9lbWFpbC1odG1sLnRzXCI7XG5leHBvcnQgdHlwZSB7IEVtYWlsSHRtbE9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvZW1haWwtaHRtbC50c1wiO1xuZXhwb3J0IHsgbWFya2Rvd25Ub0h0bWwgfSBmcm9tIFwiLi9zcmMvbWFya2Rvd24udHNcIjtcbmV4cG9ydCB7IHdyaXRlT3V0Ym94RW1haWwgfSBmcm9tIFwiLi9zcmMvb3V0Ym94LnRzXCI7XG5leHBvcnQgeyBFbWFpbFBsdWdpbiwgZW1haWwgfSBmcm9tIFwiLi9zcmMvcGx1Z2luLnRzXCI7XG5leHBvcnQgeyBkZXJpdmVTZW5kZXJBZGRyZXNzLCBwYXJzZUFsbG93ZWRTZW5kZXJzLCBpc1NlbmRlckFsbG93ZWQsIGFzc2VydFNlbmRlckFsbG93ZWQsIFNZU1RFTV9TRU5ERVJfTE9DQUxfUEFSVCwgc3lzdGVtU2VuZGVyQWRkcmVzcywgcmVzb2x2ZVN5c3RlbVNlbmRlckFkZHJlc3MsIHJlc29sdmVTZW5kZXJBZGRyZXNzLCBsaXN0U2VuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9zZW5kZXIudHNcIjtcbmV4cG9ydCB7IFNFTkRfRU1BSUxfREVTQ1JJUFRJT04sIGVtYWlsVG9vbCB9IGZyb20gXCIuL3NyYy90b29sLnRzXCI7XG5leHBvcnQgdHlwZSB7IEVtYWlsVG9vbE9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvdG9vbC50c1wiO1xuZXhwb3J0IHsgZ2V0RW1haWxSdW50aW1lLCBzZXRFbWFpbEV4ZWN1dG9yLCByZXNldEVtYWlsUnVudGltZSwgZXhlY3V0ZVdyaXRlLCB2ZXJpZnlFbWFpbFRyYW5zcG9ydCwgc2VuZEVtYWlsIH0gZnJvbSBcIi4vc3JjL3RyYW5zcG9ydC50c1wiO1xuZXhwb3J0IHR5cGUgeyBFbWFpbEV4ZWN1dG9yLCBFbWFpbFJ1bnRpbWUsIFNlbmRFbWFpbE9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvdHJhbnNwb3J0LnRzXCI7XG4iXX0=
@@ -1,6 +1,6 @@
1
1
  import { type BasePluginConfig } from "@databricks/appkit";
2
+ import { type EmailBrand } from "@dbx-tools/shared-email-template";
2
3
  import type { JSONSchema7 } from "json-schema";
3
- import { type EmailBrand } from "./brand.ts";
4
4
  /** SMTP submission port used when none is configured. */
5
5
  export declare const DEFAULT_SMTP_PORT = 587;
6
6
  /** SMTP port that implies a TLS-on-connect socket rather than STARTTLS. */
package/lib/src/config.js CHANGED
@@ -26,9 +26,9 @@
26
26
  */
27
27
  import { resolve } from "node:path";
28
28
  import { ConfigurationError, ValidationError } from "@databricks/appkit";
29
- import { configUtils } from "@dbx-tools/core";
30
- import { object } from "@dbx-tools/shared-core";
31
- import { defaultEmailBrand } from "./brand.js";
29
+ import { configUtils, boolean, ENV_ONLY, text, string } from "@dbx-tools/core";
30
+ import { optional } from "@dbx-tools/shared-core";
31
+ import { defaultEmailBrand } from "@dbx-tools/shared-email-template";
32
32
  import { isSenderAllowed, parseAllowedSenders, systemSenderAddress } from "./sender.js";
33
33
  /** SMTP submission port used when none is configured. */
34
34
  export const DEFAULT_SMTP_PORT = 587;
@@ -122,12 +122,11 @@ export const EMAIL_CONFIG_SCHEMA = {
122
122
  };
123
123
  /** Parse the `SMTP_SECURE` env / config flag, defaulting by port. */
124
124
  function resolveSecure(flag, port) {
125
- return (configUtils.boolean(flag, "SMTP_SECURE", configUtils.ENV_ONLY) ??
126
- port === IMPLICIT_TLS_SMTP_PORT);
125
+ return boolean(flag, "SMTP_SECURE", ENV_ONLY) ?? port === IMPLICIT_TLS_SMTP_PORT;
127
126
  }
128
127
  /** Parse the `EMAIL_SENDER_POLICY` env / config value, defaulting to deny-by-default. */
129
128
  function resolveSenderPolicy(policy) {
130
- const raw = policy ?? configUtils.text("EMAIL_SENDER_POLICY", configUtils.ENV_ONLY)?.toLowerCase();
129
+ const raw = policy ?? text("EMAIL_SENDER_POLICY", ENV_ONLY)?.toLowerCase();
131
130
  if (raw === "unrestricted")
132
131
  return "unrestricted";
133
132
  if (raw === undefined || raw === "" || raw === "allowlist")
@@ -159,7 +158,7 @@ function impliedSenderPatterns(sender) {
159
158
  }
160
159
  /** Whether `EMAIL_OUTBOX_MODE` explicitly opts into the file/outbox fallback. */
161
160
  function isOutboxModeEnabled() {
162
- return configUtils.boolean(undefined, "EMAIL_OUTBOX_MODE", configUtils.ENV_ONLY) ?? false;
161
+ return boolean(undefined, "EMAIL_OUTBOX_MODE", ENV_ONLY) ?? false;
163
162
  }
164
163
  const SMTP_REQUIRED_FIELDS = ["SMTP_HOST", "SMTP_USER", "SMTP_PASSWORD"];
165
164
  /** List env keys for SMTP fields that are unset in the resolved credential set. */
@@ -188,21 +187,21 @@ function missingSmtpFields(host, user, pass) {
188
187
  */
189
188
  export function resolveEmailConfig(config = {}) {
190
189
  const smtp = config.smtp ?? {};
191
- const host = configUtils.string(smtp.host, "SMTP_HOST", configUtils.ENV_ONLY);
192
- const user = configUtils.string(smtp.user, "SMTP_USER", configUtils.ENV_ONLY);
193
- const pass = configUtils.string(smtp.password, "SMTP_PASSWORD", configUtils.ENV_ONLY);
194
- const domain = configUtils.string(config.domain, "EMAIL_DOMAIN", configUtils.ENV_ONLY);
195
- const from = configUtils.string(config.from, "EMAIL_FROM", configUtils.ENV_ONLY);
196
- const systemFrom = configUtils.string(config.systemFrom, "EMAIL_SYSTEM_FROM", configUtils.ENV_ONLY);
190
+ const host = string(smtp.host, "SMTP_HOST", ENV_ONLY);
191
+ const user = string(smtp.user, "SMTP_USER", ENV_ONLY);
192
+ const pass = string(smtp.password, "SMTP_PASSWORD", ENV_ONLY);
193
+ const domain = string(config.domain, "EMAIL_DOMAIN", ENV_ONLY);
194
+ const from = string(config.from, "EMAIL_FROM", ENV_ONLY);
195
+ const systemFrom = string(config.systemFrom, "EMAIL_SYSTEM_FROM", ENV_ONLY);
197
196
  const senderPolicy = resolveSenderPolicy(config.senderPolicy);
198
- const configuredSenders = parseAllowedSenders(config.allowedSenders ?? configUtils.text("EMAIL_ALLOWED_SENDERS", configUtils.ENV_ONLY));
197
+ const configuredSenders = parseAllowedSenders(config.allowedSenders ?? text("EMAIL_ALLOWED_SENDERS", ENV_ONLY));
199
198
  const allowedSenders = configuredSenders.length > 0 || senderPolicy === "unrestricted"
200
199
  ? configuredSenders
201
200
  : impliedSenderPatterns({ domain, from, systemFrom });
202
201
  const sender = {
203
- ...object.optional("domain", domain),
204
- ...object.optional("from", from),
205
- ...object.optional("systemFrom", systemFrom),
202
+ ...optional("domain", domain),
203
+ ...optional("from", from),
204
+ ...optional("systemFrom", systemFrom),
206
205
  allowedSenders,
207
206
  senderPolicy,
208
207
  brand: config.brand ?? defaultEmailBrand,
@@ -216,7 +215,7 @@ export function resolveEmailConfig(config = {}) {
216
215
  if (!domain && !from && !systemFrom) {
217
216
  throw ConfigurationError.resourceNotFound("Email sender source", "Set EMAIL_DOMAIN to derive <user-local-part>@<domain> (and no-reply@<domain> for system mail), or EMAIL_FROM for a fixed address.");
218
217
  }
219
- const port = configUtils.port(smtp.port, "SMTP_PORT", DEFAULT_SMTP_PORT, configUtils.ENV_ONLY);
218
+ const port = configUtils.port(smtp.port, "SMTP_PORT", DEFAULT_SMTP_PORT, ENV_ONLY);
220
219
  return {
221
220
  mode: "smtp",
222
221
  host: host,
@@ -229,8 +228,7 @@ export function resolveEmailConfig(config = {}) {
229
228
  if (!isOutboxModeEnabled()) {
230
229
  throw ConfigurationError.invalidConnection("SMTP", `Set ${SMTP_REQUIRED_FIELDS.join(", ")}, or EMAIL_OUTBOX_MODE=1 to write messages to a local outbox instead.`);
231
230
  }
232
- const outDir = resolve(configUtils.string(config.outDir, "EMAIL_OUTBOX_DIR", configUtils.ENV_ONLY) ??
233
- resolve(process.cwd(), "tmp"));
231
+ const outDir = resolve(string(config.outDir, "EMAIL_OUTBOX_DIR", ENV_ONLY) ?? resolve(process.cwd(), "tmp"));
234
232
  return { mode: "file", outDir, ...sender };
235
233
  }
236
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUNILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBeUIsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWhELE9BQU8sRUFBRSxpQkFBaUIsRUFBbUIsTUFBTSxZQUFZLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV4Rix5REFBeUQ7QUFDekQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxDQUFDO0FBRXJDLDJFQUEyRTtBQUMzRSxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLENBQUM7QUEwSTFDLCtEQUErRDtBQUMvRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBZ0I7SUFDOUMsSUFBSSxFQUFFLFFBQVE7SUFDZCxVQUFVLEVBQUU7UUFDVixJQUFJLEVBQUU7WUFDSixJQUFJLEVBQUUsUUFBUTtZQUNkLFdBQVcsRUFBRSwwREFBMEQ7WUFDdkUsVUFBVSxFQUFFO2dCQUNWLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLG1DQUFtQyxFQUFFO2dCQUMxRSxJQUFJLEVBQUU7b0JBQ0osSUFBSSxFQUFFLFFBQVE7b0JBQ2QsV0FBVyxFQUFFLDZDQUE2QyxpQkFBaUIsR0FBRztpQkFDL0U7Z0JBQ0QsTUFBTSxFQUFFO29CQUNOLElBQUksRUFBRSxTQUFTO29CQUNmLFdBQVcsRUFBRSw2REFB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QztJQUNGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQzdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNNVFAgY29uZmlndXJhdGlvbiBmb3IgdGhlIGVtYWlsIHBsdWdpbjogdGhlIHR5cGVkXG4gKiB7QGxpbmsgRW1haWxQbHVnaW5Db25maWd9ICh0aGUgcGx1Z2luJ3Mgc2xpY2Ugb2YgQXBwS2l0IGNvbmZpZyksIHRoZVxuICogSlNPTiBTY2hlbWEgdGhlIG1hbmlmZXN0IHB1Ymxpc2hlcyBmb3IgaXQsIGFuZCB7QGxpbmsgcmVzb2x2ZUVtYWlsQ29uZmlnfVxuICogd2hpY2ggbGF5ZXJzIHRoYXQgY29uZmlnIG92ZXIgZW52aXJvbm1lbnQgZGVmYXVsdHMgaW50byB0aGUgY29uY3JldGVcbiAqIHtAbGluayBSZXNvbHZlZEVtYWlsQ29uZmlnfSB0aGUgcnVudGltZSBuZWVkcy5cbiAqXG4gKiBUd28gbW9kZXMgZmFsbCBvdXQgb2YgdGhlIHJlc29sdXRpb24uIFdoZW4gU01UUCBjcmVkZW50aWFscyAoaG9zdCArXG4gKiB1c2VyICsgcGFzc3dvcmQpIGFyZSBhbGwgcHJlc2VudCBpdCByZXNvbHZlcyB0byBgbW9kZTogXCJzbXRwXCJgIGFuZFxuICogbWFpbCBpcyBzZW50IGZvciByZWFsLiBXaGVuIHRoZXkgYXJlIGFic2VudCBhbmQgYEVNQUlMX09VVEJPWF9NT0RFYFxuICogaXMgZXhwbGljaXRseSBlbmFibGVkIGl0IHJlc29sdmVzIHRvIGBtb2RlOiBcImZpbGVcImAgKGFuIFwib3V0Ym94XCIpXG4gKiBhbmQgZWFjaCBtZXNzYWdlIGlzIHdyaXR0ZW4gdG8gZGlzayBhcyBIVE1MIGluc3RlYWQgb2Ygc2VudC4gQW55XG4gKiBwYXJ0aWFsIFNNVFAgY29uZmlndXJhdGlvbiBvciBhIHNlbmQgYXR0ZW1wdCB3aXRoIG5vIGNyZWRlbnRpYWxzIGFuZFxuICogbm8gb3V0Ym94IG9wdC1pbiB0aHJvd3MuXG4gKlxuICogUHJlY2VkZW5jZSBwZXIgZmllbGQ6IGV4cGxpY2l0IHBsdWdpbiBjb25maWcgd2lucywgdGhlbiB0aGUgbWF0Y2hpbmdcbiAqIGVudmlyb25tZW50IHZhcmlhYmxlLiBFbnYgbmFtZXMgYXJlIHVucHJlZml4ZWQgYmVjYXVzZSB0aGUgYXBwIHRhbGtzXG4gKiB0byBhIHNpbmdsZSBTTVRQIHNlcnZlciAoZS5nLiBTTVRQMkdPKTogYFNNVFBfSE9TVGAsIGBTTVRQX1BPUlRgLFxuICogYFNNVFBfU0VDVVJFYCwgYFNNVFBfVVNFUmAsIGBTTVRQX1BBU1NXT1JEYCwgcGx1cyBgRU1BSUxfRE9NQUlOYCBmb3JcbiAqIHRoZSBkZXJpdmVkIHNlbmRlcidzIGRvbWFpbiwgYEVNQUlMX0ZST01gIGZvciBhbiBleHBsaWNpdCBvdmVycmlkZSxcbiAqIGBFTUFJTF9TWVNURU1fRlJPTWAgZm9yIHRoZSBkby1ub3QtcmVwbHkgYWRkcmVzcyBzeXN0ZW0gbWFpbCBzZW5kcyBmcm9tLFxuICogYEVNQUlMX1NFTkRFUl9QT0xJQ1lgIGZvciB0aGUgc2VuZGVyIHJlc3RyaWN0aW9uIG1vZGUsIGFuZFxuICogYEVNQUlMX09VVEJPWF9ESVJgIGZvciB0aGUgb3V0Ym94IGRpcmVjdG9yeS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uRXJyb3IsIFZhbGlkYXRpb25FcnJvciwgdHlwZSBCYXNlUGx1Z2luQ29uZmlnIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgY29uZmlnVXRpbHMgfSBmcm9tIFwiQGRieC10b29scy9jb3JlXCI7XG5pbXBvcnQgeyBvYmplY3QgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBKU09OU2NoZW1hNyB9IGZyb20gXCJqc29uLXNjaGVtYVwiO1xuaW1wb3J0IHsgZGVmYXVsdEVtYWlsQnJhbmQsIHR5cGUgRW1haWxCcmFuZCB9IGZyb20gXCIuL2JyYW5kLnRzXCI7XG5pbXBvcnQgeyBpc1NlbmRlckFsbG93ZWQsIHBhcnNlQWxsb3dlZFNlbmRlcnMsIHN5c3RlbVNlbmRlckFkZHJlc3MgfSBmcm9tIFwiLi9zZW5kZXIudHNcIjtcblxuLyoqIFNNVFAgc3VibWlzc2lvbiBwb3J0IHVzZWQgd2hlbiBub25lIGlzIGNvbmZpZ3VyZWQuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9TTVRQX1BPUlQgPSA1ODc7XG5cbi8qKiBTTVRQIHBvcnQgdGhhdCBpbXBsaWVzIGEgVExTLW9uLWNvbm5lY3Qgc29ja2V0IHJhdGhlciB0aGFuIFNUQVJUVExTLiAqL1xuZXhwb3J0IGNvbnN0IElNUExJQ0lUX1RMU19TTVRQX1BPUlQgPSA0NjU7XG5cbi8qKlxuICogSG93IHRoZSBzZW5kZXIgKGBGcm9tYCkgYWRkcmVzcyBpcyByZXN0cmljdGVkLlxuICpcbiAqIGBcImFsbG93bGlzdFwiYCBpcyB0aGUgZGVmYXVsdCBhbmQgdGhlIGRlbnktYnktZGVmYXVsdCBwb3N0dXJlOiBhIHNlbmQgaXNcbiAqIHBlcm1pdHRlZCBvbmx5IGZyb20gYW4gYWRkcmVzcyB0aGUgY29uZmlndXJhdGlvbiBuYW1lcywgZWl0aGVyIHRocm91Z2hcbiAqIHtAbGluayBFbWFpbFBsdWdpbkNvbmZpZy5hbGxvd2VkU2VuZGVyc30gb3IsIHdoZW4gdGhhdCBpcyBlbXB0eSwgdGhyb3VnaFxuICogdGhlIGNvbmZpZ3VyZWQgc2VuZGVyIHNvdXJjZSAoe0BsaW5rIEVtYWlsUGx1Z2luQ29uZmlnLmZyb219IGFzIGFuIGV4YWN0XG4gKiBhZGRyZXNzLCB7QGxpbmsgRW1haWxQbHVnaW5Db25maWcuZG9tYWlufSBhcyBhIGAqQGRvbWFpbmAgd2lsZGNhcmQpLlxuICpcbiAqIGBcInVucmVzdHJpY3RlZFwiYCBpcyB0aGUgZXhwbGljaXQgb3B0LW91dDogYW55IGBGcm9tYCBhIGNhbGxlciBzdXBwbGllcyBpc1xuICogYWNjZXB0ZWQuIE9ubHkgcmVhY2ggZm9yIGl0IHdoZW4gYW4gdXBzdHJlYW0gc3lzdGVtIGFscmVhZHkgdmV0cyB0aGVcbiAqIHNlbmRlci5cbiAqL1xuZXhwb3J0IHR5cGUgU2VuZGVyUG9saWN5ID0gXCJhbGxvd2xpc3RcIiB8IFwidW5yZXN0cmljdGVkXCI7XG5cbi8qKiBTTVRQIGNvbm5lY3Rpb24gKyBjcmVkZW50aWFscy4gQWxsIGZpZWxkcyBmYWxsIGJhY2sgdG8gZW52IHdoZW4gdW5zZXQuICovXG5leHBvcnQgaW50ZXJmYWNlIFNtdHBDb25maWcge1xuICAvKiogU01UUCBzZXJ2ZXIgaG9zdG5hbWUgKGBTTVRQX0hPU1RgKS4gKi9cbiAgaG9zdD86IHN0cmluZztcbiAgLyoqIFNNVFAgc2VydmVyIHBvcnQgKGBTTVRQX1BPUlRgKS4gRGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfU01UUF9QT1JUfS4gKi9cbiAgcG9ydD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFVzZSBhIFRMUy1vbi1jb25uZWN0IHNvY2tldCAoYFNNVFBfU0VDVVJFYCkuIERlZmF1bHRzIHRvXG4gICAqIGBwb3J0ID09PSBgIHtAbGluayBJTVBMSUNJVF9UTFNfU01UUF9QT1JUfS5cbiAgICovXG4gIHNlY3VyZT86IGJvb2xlYW47XG4gIC8qKiBTTVRQIGF1dGggdXNlcm5hbWUgKGBTTVRQX1VTRVJgKS4gKi9cbiAgdXNlcj86IHN0cmluZztcbiAgLyoqIFNNVFAgYXV0aCBwYXNzd29yZCAvIEFQSSBrZXkgKGBTTVRQX1BBU1NXT1JEYCkuICovXG4gIHBhc3N3b3JkPzogc3RyaW5nO1xufVxuXG4vKiogQXBwS2l0IGNvbmZpZyBhY2NlcHRlZCBieSB0aGUgZW1haWwgcGx1Z2luLiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbFBsdWdpbkNvbmZpZyBleHRlbmRzIEJhc2VQbHVnaW5Db25maWcge1xuICAvKiogU01UUCBjb25uZWN0aW9uICsgY3JlZGVudGlhbHMuIE9taXQgdG8gcnVuIGluIGZpbGUvb3V0Ym94IG1vZGUuICovXG4gIHNtdHA/OiBTbXRwQ29uZmlnO1xuICAvKipcbiAgICogRG9tYWluIHVzZWQgdG8gYnVpbGQgdGhlIHNlbmRlciBhZGRyZXNzIGZyb20gdGhlIG9uLWJlaGFsZi1vZiB1c2VyXG4gICAqIChgPGxvY2FsLXBhcnQ+QDxkb21haW4+YCkuIEZhbGxzIGJhY2sgdG8gYEVNQUlMX0RPTUFJTmAuIFJlcXVpcmVkIGluXG4gICAqIFNNVFAgbW9kZSB1bmxlc3Mge0BsaW5rIGZyb219IGlzIHNldDsgb3B0aW9uYWwgaW4gZmlsZSBtb2RlICh0aGVcbiAgICogb3V0Ym94IGZhbGxzIGJhY2sgdG8gdGhlIHVzZXIncyBvd24gZW1haWwgYWRkcmVzcykuXG4gICAqL1xuICBkb21haW4/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBFeHBsaWNpdCBgRnJvbWAgYWRkcmVzcywgT1BUSU9OQUwuIFdoZW4gc2V0LCB0aGUgc2VuZGVyIGlzIHVzZWQgdmVyYmF0aW1cbiAgICogYW5kIHRoZSBwZXItdXNlciBkZXJpdmF0aW9uIGlzIHNraXBwZWQuIEZhbGxzIGJhY2sgdG8gYEVNQUlMX0ZST01gLlxuICAgKlxuICAgKiBMZWF2ZSBpdCB1bnNldCBpbiBtb3N0IGRlcGxveW1lbnRzOiB7QGxpbmsgZG9tYWlufSBhbG9uZSBpcyBlbm91Z2gsIGFuZFxuICAgKiBtYWlsIHRoZW4gY29tZXMgZnJvbSB0aGUgYWRkcmVzcyBvZiB0aGUgcGVyc29uIHdobyBjYXVzZWQgaXQsIHdoaWNoIGlzIHdoYXRcbiAgICogYSByZWNpcGllbnQgZXhwZWN0cyB0byBiZSBhYmxlIHRvIHJlcGx5IHRvLlxuICAgKi9cbiAgZnJvbT86IHN0cmluZztcbiAgLyoqXG4gICAqIGBGcm9tYCBmb3IgU1lTVEVNIG1haWwgLSBhIHNlbmQgd2l0aCBubyBvbi1iZWhhbGYtb2YgdXNlciwgc3VjaCBhcyBhXG4gICAqIHNpZ24taW4gY29kZSBvciBhIHBhc3N3b3JkIHJlc2V0LiBGYWxscyBiYWNrIHRvIGBFTUFJTF9TWVNURU1fRlJPTWAsIHRoZW5cbiAgICogdG8gYG5vLXJlcGx5QDxkb21haW4+YCwgdGhlbiB0byB7QGxpbmsgZnJvbX0uXG4gICAqXG4gICAqIE1hY2hpbmUgbWFpbCBnZXRzIGEgZG8tbm90LXJlcGx5IGFkZHJlc3MgYnkgZGVmYXVsdCBiZWNhdXNlIGEgcmVwbHkgdG8gaXRcbiAgICogcmVhY2hlcyBub2JvZHkuIFNldCB0aGlzIHRvIHJvdXRlIHRob3NlIHJlcGxpZXMgc29tZXdoZXJlIHJlYWwgKGEgbW9uaXRvcmVkXG4gICAqIGBzdXBwb3J0QGApIG9yIHRvIHNwZWxsIHRoZSBsb2NhbCBwYXJ0IGRpZmZlcmVudGx5IChgZG9ub3RyZXBseUBgKS5cbiAgICovXG4gIHN5c3RlbUZyb20/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBEaXJlY3RvcnkgZm9yIHRoZSBmaWxlL291dGJveCBmYWxsYmFjay4gRmFsbHMgYmFjayB0b1xuICAgKiBgRU1BSUxfT1VUQk9YX0RJUmAsIHRoZW4gYDxjd2Q+L3RtcGAuIE9ubHkgdXNlZCB3aGVuIFNNVFBcbiAgICogY3JlZGVudGlhbHMgYXJlIGFic2VudC5cbiAgICovXG4gIG91dERpcj86IHN0cmluZztcbiAgLyoqXG4gICAqIEFsbG93LWxpc3QgcmVzdHJpY3RpbmcgdGhlIHNlbmRlciAoYEZyb21gKSBhZGRyZXNzLiBFYWNoIGVudHJ5IGlzIGFuXG4gICAqIGV4YWN0IGFkZHJlc3MgKGB1c2VyQGRvbWFpbi5jb21gKSwgYSBkb21haW4gd2lsZGNhcmQgKGAqQGRvbWFpbi5jb21gXG4gICAqIG9yIHRoZSBiYXJlIGBkb21haW4uY29tYCwgbWF0Y2hpbmcgYW55IGxvY2FsIHBhcnQgb24gdGhhdCBkb21haW4pLCBvclxuICAgKiBgKmAgKGFueSkuIEEgcmVzb2x2ZWQgLyBjaG9zZW4gc2VuZGVyIHRoYXQgbWF0Y2hlcyBubyBlbnRyeSBpc1xuICAgKiByZWplY3RlZCBhdCBzZW5kIHRpbWUuIEFjY2VwdHMgYSBgc3RyaW5nW11gIG9yIGEgc2luZ2xlIGNvbW1hLSAvXG4gICAqIHdoaXRlc3BhY2Utc2VwYXJhdGVkIHN0cmluZzsgZmFsbHMgYmFjayB0byBgRU1BSUxfQUxMT1dFRF9TRU5ERVJTYC5cbiAgICogV2hlbiBlbXB0eSwgdGhlIHtAbGluayBzZW5kZXJQb2xpY3l9IGRlY2lkZXMgd2hhdCBpcyBwZXJtaXR0ZWQuXG4gICAqL1xuICBhbGxvd2VkU2VuZGVycz86IHN0cmluZyB8IHN0cmluZ1tdO1xuICAvKipcbiAgICogSG93IHRoZSBzZW5kZXIgYWRkcmVzcyBpcyByZXN0cmljdGVkIHdoZW4ge0BsaW5rIGFsbG93ZWRTZW5kZXJzfSBpc1xuICAgKiBlbXB0eSAoYEVNQUlMX1NFTkRFUl9QT0xJQ1lgKS4gRGVmYXVsdHMgdG8gYFwiYWxsb3dsaXN0XCJgLCB3aGljaFxuICAgKiBuYXJyb3dzIHNlbmRzIHRvIHRoZSBjb25maWd1cmVkIHNlbmRlciBzb3VyY2UuIFNlZVxuICAgKiB7QGxpbmsgU2VuZGVyUG9saWN5fS5cbiAgICovXG4gIHNlbmRlclBvbGljeT86IFNlbmRlclBvbGljeTtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGJyYW5kIHN0eWxpbmcgYXBwbGllZCB0byBldmVyeSByZW5kZXJlZCBtZXNzYWdlLiBPbWl0IHRvIHVzZSB0aGVcbiAgICogcmVwb3NpdG9yeSdzIGRieC10b29scyBicmFuZC4gUGFzcyB7QGxpbmsgZW1haWxCcmFuZEZyb21Db250ZXh0fSB0byBkZXJpdmVcbiAgICogYSBjdXN0b20gdmFsdWUgZnJvbSBhIHNoYXJlZCBgQnJhbmRDb250ZXh0YC5cbiAgICovXG4gIGJyYW5kPzogRW1haWxCcmFuZDtcbn1cblxuLyoqIENvbmZpZyBzaGFyZWQgYnkgYm90aCByZXNvbHZlZCBtb2Rlcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRTZW5kZXIge1xuICAvKiogU2VuZGVyIGRvbWFpbjsgcHJlc2VudCB3aGVuZXZlciB7QGxpbmsgZnJvbX0gaXMgYWJzZW50LiAqL1xuICBkb21haW4/OiBzdHJpbmc7XG4gIC8qKiBFeHBsaWNpdCBzZW5kZXIgb3ZlcnJpZGU7IHByZXNlbnQgc2tpcHMgcGVyLXVzZXIgZGVyaXZhdGlvbi4gKi9cbiAgZnJvbT86IHN0cmluZztcbiAgLyoqXG4gICAqIEV4cGxpY2l0IGRvLW5vdC1yZXBseSBzZW5kZXIgZm9yIHN5c3RlbSBtYWlsLiBBYnNlbnQgbWVhbnMgaXQgaXMgZGVyaXZlZCAtXG4gICAqIHNlZSB7QGxpbmsgc3lzdGVtU2VuZGVyQWRkcmVzc30uXG4gICAqL1xuICBzeXN0ZW1Gcm9tPzogc3RyaW5nO1xuICAvKipcbiAgICogRWZmZWN0aXZlIHNlbmRlciBhbGxvdy1saXN0OiB0aGUgY29uZmlndXJlZCBwYXR0ZXJucyB3aGVuIGFueSB3ZXJlXG4gICAqIGdpdmVuLCBlbHNlIHRoZSBwYXR0ZXJucyBpbXBsaWVkIGJ5IHRoZSBzZW5kZXIgc291cmNlIHVuZGVyIGFuXG4gICAqIGBcImFsbG93bGlzdFwiYCBwb2xpY3kuIEVtcHR5IG1lYW5zIHVuZW5mb3JjZWFibGUgKGFuIGBcInVucmVzdHJpY3RlZFwiYFxuICAgKiBwb2xpY3ksIG9yIGFuIG91dGJveCB3aXRoIG5vIHNlbmRlciBzb3VyY2UgdG8gbmFycm93IHRvKS5cbiAgICovXG4gIGFsbG93ZWRTZW5kZXJzOiBzdHJpbmdbXTtcbiAgLyoqIFRoZSByZXN0cmljdGlvbiBtb2RlIHRoZSBhbGxvdy1saXN0IHdhcyByZXNvbHZlZCB1bmRlci4gKi9cbiAgc2VuZGVyUG9saWN5OiBTZW5kZXJQb2xpY3k7XG4gIC8qKiBCcmFuZCBzdHlsaW5nIGFwcGxpZWQgdG8gcmVuZGVyZWQgSFRNTC4gKi9cbiAgYnJhbmQ6IEVtYWlsQnJhbmQ7XG59XG5cbi8qKiBSZXNvbHZlZCBjb25maWcgZm9yIHJlYWwgU01UUCBkZWxpdmVyeS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRTbXRwQ29uZmlnIGV4dGVuZHMgUmVzb2x2ZWRTZW5kZXIge1xuICBtb2RlOiBcInNtdHBcIjtcbiAgaG9zdDogc3RyaW5nO1xuICBwb3J0OiBudW1iZXI7XG4gIHNlY3VyZTogYm9vbGVhbjtcbiAgYXV0aDogeyB1c2VyOiBzdHJpbmc7IHBhc3M6IHN0cmluZyB9O1xufVxuXG4vKiogUmVzb2x2ZWQgY29uZmlnIGZvciB0aGUgZmlsZS9vdXRib3ggZmFsbGJhY2sgKG5vIFNNVFAgY3JlZGVudGlhbHMpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZEZpbGVDb25maWcgZXh0ZW5kcyBSZXNvbHZlZFNlbmRlciB7XG4gIG1vZGU6IFwiZmlsZVwiO1xuICAvKiogQWJzb2x1dGUgZGlyZWN0b3J5IG1lc3NhZ2VzIGFyZSB3cml0dGVuIHVuZGVyLiAqL1xuICBvdXREaXI6IHN0cmluZztcbn1cblxuLyoqIENvbmNyZXRlLCB2YWxpZGF0ZWQgY29uZmlnIHRoZSBydW50aW1lIGRpc3BhdGNoZXMgdGhyb3VnaC4gKi9cbmV4cG9ydCB0eXBlIFJlc29sdmVkRW1haWxDb25maWcgPSBSZXNvbHZlZFNtdHBDb25maWcgfCBSZXNvbHZlZEZpbGVDb25maWc7XG5cbi8qKiBKU09OIFNjaGVtYSBwdWJsaXNoZWQgb24gdGhlIG1hbmlmZXN0J3MgYGNvbmZpZy5zY2hlbWFgLiAqL1xuZXhwb3J0IGNvbnN0IEVNQUlMX0NPTkZJR19TQ0hFTUE6IEpTT05TY2hlbWE3ID0ge1xuICB0eXBlOiBcIm9iamVjdFwiLFxuICBwcm9wZXJ0aWVzOiB7XG4gICAgc210cDoge1xuICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlNNVFAgY29ubmVjdGlvbiBhbmQgY3JlZGVudGlhbHMgKGVudiBmYWxsYmFja3M6IFNNVFBfKikuXCIsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGhvc3Q6IHsgdHlwZTogXCJzdHJpbmdcIiwgZGVzY3JpcHRpb246IFwiU01UUCBzZXJ2ZXIgaG9zdG5hbWUgKFNNVFBfSE9TVCkuXCIgfSxcbiAgICAgICAgcG9ydDoge1xuICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGBTTVRQIHNlcnZlciBwb3J0IChTTVRQX1BPUlQpLiBEZWZhdWx0cyB0byAke0RFRkFVTFRfU01UUF9QT1JUfS5gLFxuICAgICAgICB9LFxuICAgICAgICBzZWN1cmU6IHtcbiAgICAgICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBkZXNjcmlwdGlvbjogYFRMUy1vbi1jb25uZWN0IHNvY2tldCAoU01UUF9TRUNVUkUpLiBEZWZhdWx0cyB0byBwb3J0ID09PSAke0lNUExJQ0lUX1RMU19TTVRQX1BPUlR9LmAsXG4gICAgICAgIH0sXG4gICAgICAgIHVzZXI6IHsgdHlwZTogXCJzdHJpbmdcIiwgZGVzY3JpcHRpb246IFwiU01UUCBhdXRoIHVzZXJuYW1lIChTTVRQX1VTRVIpLlwiIH0sXG4gICAgICAgIHBhc3N3b3JkOiB7XG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJTTVRQIGF1dGggcGFzc3dvcmQgLyBBUEkga2V5IChTTVRQX1BBU1NXT1JEKS5cIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBkb21haW46IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJEb21haW4gZm9yIHRoZSBkZXJpdmVkIHNlbmRlciBhZGRyZXNzICg8dXNlci1sb2NhbC1wYXJ0PkA8ZG9tYWluPikuIEZhbGxzIGJhY2sgdG8gRU1BSUxfRE9NQUlOLlwiLFxuICAgIH0sXG4gICAgZnJvbToge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIk9wdGlvbmFsIGV4cGxpY2l0IEZyb20gYWRkcmVzczsgc2tpcHMgcGVyLXVzZXIgZGVyaXZhdGlvbi4gRmFsbHMgYmFjayB0byBFTUFJTF9GUk9NLlwiLFxuICAgIH0sXG4gICAgc3lzdGVtRnJvbToge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkZyb20gZm9yIHN5c3RlbSBtYWlsIChubyBvbi1iZWhhbGYtb2YgdXNlciwgZS5nLiBhIHNpZ24taW4gY29kZSkuIEZhbGxzIGJhY2sgdG8gRU1BSUxfU1lTVEVNX0ZST00sIHRoZW4gbm8tcmVwbHlAPGRvbWFpbj4sIHRoZW4gZnJvbS5cIixcbiAgICB9LFxuICAgIG91dERpcjoge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkRpcmVjdG9yeSBmb3IgdGhlIGZpbGUvb3V0Ym94IGZhbGxiYWNrIHdoZW4gU01UUCBpcyB1bmNvbmZpZ3VyZWQuIEZhbGxzIGJhY2sgdG8gRU1BSUxfT1VUQk9YX0RJUiwgdGhlbiA8Y3dkPi90bXAuXCIsXG4gICAgfSxcbiAgICBhbGxvd2VkU2VuZGVyczoge1xuICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgaXRlbXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdBbGxvdy1saXN0IG9mIHBlcm1pdHRlZCBzZW5kZXIgKEZyb20pIHBhdHRlcm5zOiBleGFjdCBhZGRyZXNzZXMgKFwidXNlckBkb21haW4uY29tXCIpLCBkb21haW4gd2lsZGNhcmRzIChcIipAZG9tYWluLmNvbVwiKSwgb3IgXCIqXCIuIEFsc28gYWNjZXB0cyBhIGNvbW1hL3NwYWNlLXNlcGFyYXRlZCBzdHJpbmcuIEZhbGxzIGJhY2sgdG8gRU1BSUxfQUxMT1dFRF9TRU5ERVJTLiBXaGVuIGVtcHR5LCBzZW5kZXJQb2xpY3kgZGVjaWRlcy4nLFxuICAgIH0sXG4gICAgc2VuZGVyUG9saWN5OiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZW51bTogW1wiYWxsb3dsaXN0XCIsIFwidW5yZXN0cmljdGVkXCJdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdIb3cgdGhlIHNlbmRlciBpcyByZXN0cmljdGVkIHdoZW4gYWxsb3dlZFNlbmRlcnMgaXMgZW1wdHkgKEVNQUlMX1NFTkRFUl9QT0xJQ1kpLiBcImFsbG93bGlzdFwiIChkZWZhdWx0KSBuYXJyb3dzIHNlbmRzIHRvIHRoZSBjb25maWd1cmVkIHNlbmRlciBzb3VyY2U7IFwidW5yZXN0cmljdGVkXCIgYWNjZXB0cyBhbnkgRnJvbS4nLFxuICAgIH0sXG4gICAgYnJhbmQ6IHtcbiAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJCcmFuZCBzdHlsaW5nIGFwcGxpZWQgdG8gZXZlcnkgUmVhY3QgRW1haWwgbWVzc2FnZS4gT21pdCB0byB1c2UgdGhlIGRieC10b29scyBicmFuZC5cIixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgYWNjZW50OiB7XG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ0hlYWRlci1iYW5kIGJhY2tncm91bmQgYW5kIGJvZHkgbGluayBjb2xvciAoZS5nLiBcIiNGRjM2MjFcIikuJyxcbiAgICAgICAgfSxcbiAgICAgICAgb25BY2NlbnQ6IHtcbiAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlRleHQgYW5kIGxvZ28gY29sb3IgcmVuZGVyZWQgb24gdGhlIGFjY2VudCBiYW5kLiBEZWZhdWx0cyB0byB3aGl0ZS5cIixcbiAgICAgICAgfSxcbiAgICAgICAgZm9udEZhbWlseToge1xuICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdCb2R5IGZvbnQgc3RhY2sgKGUuZy4gXCJJbnRlciwgdWktc2Fucy1zZXJpZiwgc3lzdGVtLXVpLCBzYW5zLXNlcmlmXCIpLicsXG4gICAgICAgIH0sXG4gICAgICAgIG5hbWU6IHtcbiAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlByb2R1Y3QgLyBkaXNwbGF5IG5hbWUgdXNlZCBhcyB0aGUgaGVhZGVyIHRleHQgYW5kIHRoZSBsb2dvIGFsdCB0ZXh0LlwiLFxuICAgICAgICB9LFxuICAgICAgICBsb2dvVXJsOiB7XG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgIFwiTG9nbyBpbWFnZSBmb3IgdGhlIGhlYWRlciBiYW5kLiBPbmx5IGFuIGh0dHAocyk6IG9yIGRhdGE6IFVSTCByZW5kZXJzOyBvdGhlciB2YWx1ZXMgYXJlIGRyb3BwZWQgYmVjYXVzZSBhIG1haWwgY2xpZW50IGNhbm5vdCBsb2FkIHRoZW0uXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGJhY2tncm91bmQ6IHsgdHlwZTogXCJzdHJpbmdcIiwgZGVzY3JpcHRpb246IFwiSW5ib3ggY2FudmFzIGNvbG9yLlwiIH0sXG4gICAgICAgIHN1cmZhY2U6IHsgdHlwZTogXCJzdHJpbmdcIiwgZGVzY3JpcHRpb246IFwiTWVzc2FnZS1jYXJkIGNvbG9yLlwiIH0sXG4gICAgICAgIGZvcmVncm91bmQ6IHsgdHlwZTogXCJzdHJpbmdcIiwgZGVzY3JpcHRpb246IFwiUHJpbWFyeSB0ZXh0IGNvbG9yLlwiIH0sXG4gICAgICAgIG11dGVkOiB7IHR5cGU6IFwic3RyaW5nXCIsIGRlc2NyaXB0aW9uOiBcIlNlY29uZGFyeSB0ZXh0IGNvbG9yLlwiIH0sXG4gICAgICAgIGJvcmRlcjogeyB0eXBlOiBcInN0cmluZ1wiLCBkZXNjcmlwdGlvbjogXCJCb3JkZXIgYW5kIGRpdmlkZXIgY29sb3IuXCIgfSxcbiAgICAgICAgdGFnbGluZTogeyB0eXBlOiBcInN0cmluZ1wiLCBkZXNjcmlwdGlvbjogXCJGb290ZXIgcHJvZHVjdCBsaW5lLlwiIH0sXG4gICAgICAgIHdlYnNpdGU6IHsgdHlwZTogXCJzdHJpbmdcIiwgZGVzY3JpcHRpb246IFwiT3B0aW9uYWwgZm9vdGVyIHdlYnNpdGUgVVJMLlwiIH0sXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IFtcImFjY2VudFwiLCBcImZvbnRGYW1pbHlcIl0sXG4gICAgfSxcbiAgfSxcbn07XG5cbi8qKiBQYXJzZSB0aGUgYFNNVFBfU0VDVVJFYCBlbnYgLyBjb25maWcgZmxhZywgZGVmYXVsdGluZyBieSBwb3J0LiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVNlY3VyZShmbGFnOiBib29sZWFuIHwgdW5kZWZpbmVkLCBwb3J0OiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBjb25maWdVdGlscy5ib29sZWFuKGZsYWcsIFwiU01UUF9TRUNVUkVcIiwgY29uZmlnVXRpbHMuRU5WX09OTFkpID8/XG4gICAgcG9ydCA9PT0gSU1QTElDSVRfVExTX1NNVFBfUE9SVFxuICApO1xufVxuXG4vKiogUGFyc2UgdGhlIGBFTUFJTF9TRU5ERVJfUE9MSUNZYCBlbnYgLyBjb25maWcgdmFsdWUsIGRlZmF1bHRpbmcgdG8gZGVueS1ieS1kZWZhdWx0LiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVNlbmRlclBvbGljeShwb2xpY3k6IFNlbmRlclBvbGljeSB8IHVuZGVmaW5lZCk6IFNlbmRlclBvbGljeSB7XG4gIGNvbnN0IHJhdyA9XG4gICAgcG9saWN5ID8/IGNvbmZpZ1V0aWxzLnRleHQoXCJFTUFJTF9TRU5ERVJfUE9MSUNZXCIsIGNvbmZpZ1V0aWxzLkVOVl9PTkxZKT8udG9Mb3dlckNhc2UoKTtcbiAgaWYgKHJhdyA9PT0gXCJ1bnJlc3RyaWN0ZWRcIikgcmV0dXJuIFwidW5yZXN0cmljdGVkXCI7XG4gIGlmIChyYXcgPT09IHVuZGVmaW5lZCB8fCByYXcgPT09IFwiXCIgfHwgcmF3ID09PSBcImFsbG93bGlzdFwiKSByZXR1cm4gXCJhbGxvd2xpc3RcIjtcbiAgdGhyb3cgVmFsaWRhdGlvbkVycm9yLmludmFsaWRWYWx1ZShcInNlbmRlclBvbGljeVwiLCByYXcsICdcImFsbG93bGlzdFwiIG9yIFwidW5yZXN0cmljdGVkXCInKTtcbn1cblxuLyoqXG4gKiBFZmZlY3RpdmUgYWxsb3ctbGlzdCBmb3IgYW4gYFwiYWxsb3dsaXN0XCJgIHBvbGljeSB3aXRoIG5vIGV4cGxpY2l0IHBhdHRlcm5zOlxuICogdGhlIHNlbmRlciBzb3VyY2UgaXRzZWxmLCBzbyBhIGNvbmZpZ3VyZWQgZG9tYWluIG9yIGZpeGVkIGFkZHJlc3MgaXMgdGhlXG4gKiBib3VuZGFyeSByYXRoZXIgdGhhbiBcImFueXRoaW5nIGdvZXNcIi4gWWllbGRzIG5vdGhpbmcgd2hlbiBuZWl0aGVyIGlzIHNldCxcbiAqIHdoaWNoIG9ubHkgaGFwcGVucyBpbiBvdXRib3ggbW9kZSAod2hlcmUgdGhlIHNlbmRlciBmYWxscyBiYWNrIHRvIHRoZVxuICogb24tYmVoYWxmLW9mIHVzZXIncyBvd24gYWRkcmVzcyBhbmQgY2Fubm90IGJlIGVudW1lcmF0ZWQgdXAgZnJvbnQpLlxuICovXG5mdW5jdGlvbiBpbXBsaWVkU2VuZGVyUGF0dGVybnMoc2VuZGVyOiB7XG4gIGRvbWFpbj86IHN0cmluZztcbiAgZnJvbT86IHN0cmluZztcbiAgc3lzdGVtRnJvbT86IHN0cmluZztcbn0pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHBhdHRlcm5zOiBzdHJpbmdbXSA9IFtdO1xuICBpZiAoc2VuZGVyLmZyb20pIHBhdHRlcm5zLnB1c2goc2VuZGVyLmZyb20udHJpbSgpLnRvTG93ZXJDYXNlKCkpO1xuICBpZiAoc2VuZGVyLmRvbWFpbikgcGF0dGVybnMucHVzaChgKkAke3NlbmRlci5kb21haW4udHJpbSgpLnRvTG93ZXJDYXNlKCl9YCk7XG4gIC8vIFRoZSBzeXN0ZW0gc2VuZGVyIHRvbywgd2hlbiB0aGUgcGF0dGVybnMgYWJvdmUgZG8gbm90IGFscmVhZHkgY292ZXIgaXQ6IGl0XG4gIC8vIGlzIGFuIGFkZHJlc3MgdGhpcyBhcHAgU0VORFMgZnJvbSwgc28gYSBsaXN0IGRlcml2ZWQgZnJvbSB0aGUgc2VuZGVyIHNvdXJjZVxuICAvLyBoYXMgdG8gcGVybWl0IGl0LCBvciB0aGUgdmVyeSBwb2xpY3kgbWVhbnQgdG8gZGVzY3JpYmUgdGhlIGFwcCdzIG93biBzZW5kZXJzXG4gIC8vIGRlbmllcyBpdHMgc2lnbi1pbiBtYWlsLiBVc3VhbGx5IHJlZHVuZGFudCAoYCpAZG9tYWluYCBhbHJlYWR5IG1hdGNoZXNcbiAgLy8gYG5vLXJlcGx5QGRvbWFpbmApIC0gaXQgbWF0dGVycyBmb3IgYSBgc3lzdGVtRnJvbWAgb24gYW5vdGhlciBkb21haW4uXG4gIGNvbnN0IHN5c3RlbSA9IHN5c3RlbVNlbmRlckFkZHJlc3Moc2VuZGVyKT8udG9Mb3dlckNhc2UoKTtcbiAgaWYgKHN5c3RlbSAmJiAhaXNTZW5kZXJBbGxvd2VkKHN5c3RlbSwgcGF0dGVybnMpKSBwYXR0ZXJucy5wdXNoKHN5c3RlbSk7XG4gIHJldHVybiBwYXR0ZXJucztcbn1cblxuLyoqIFdoZXRoZXIgYEVNQUlMX09VVEJPWF9NT0RFYCBleHBsaWNpdGx5IG9wdHMgaW50byB0aGUgZmlsZS9vdXRib3ggZmFsbGJhY2suICovXG5mdW5jdGlvbiBpc091dGJveE1vZGVFbmFibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gY29uZmlnVXRpbHMuYm9vbGVhbih1bmRlZmluZWQsIFwiRU1BSUxfT1VUQk9YX01PREVcIiwgY29uZmlnVXRpbHMuRU5WX09OTFkpID8/IGZhbHNlO1xufVxuXG5jb25zdCBTTVRQX1JFUVVJUkVEX0ZJRUxEUyA9IFtcIlNNVFBfSE9TVFwiLCBcIlNNVFBfVVNFUlwiLCBcIlNNVFBfUEFTU1dPUkRcIl0gYXMgY29uc3Q7XG5cbi8qKiBMaXN0IGVudiBrZXlzIGZvciBTTVRQIGZpZWxkcyB0aGF0IGFyZSB1bnNldCBpbiB0aGUgcmVzb2x2ZWQgY3JlZGVudGlhbCBzZXQuICovXG5mdW5jdGlvbiBtaXNzaW5nU210cEZpZWxkcyhcbiAgaG9zdDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICB1c2VyOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHBhc3M6IHN0cmluZyB8IHVuZGVmaW5lZCxcbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgdmFsdWVzID0gW2hvc3QsIHVzZXIsIHBhc3NdIGFzIGNvbnN0O1xuICByZXR1cm4gU01UUF9SRVFVSVJFRF9GSUVMRFMuZmlsdGVyKChfLCBpbmRleCkgPT4gIXZhbHVlc1tpbmRleF0pO1xufVxuXG4vKipcbiAqIFJlc29sdmUgcGx1Z2luIGNvbmZpZyBvdmVyIGVudmlyb25tZW50IGRlZmF1bHRzLlxuICpcbiAqIFdoZW4gU01UUCBob3N0ICsgdXNlciArIHBhc3N3b3JkIGFyZSBhbGwgcHJlc2VudCwgcmV0dXJucyBgbW9kZTpcbiAqIFwic210cFwiYCBmb3IgcmVhbCBkZWxpdmVyeSAoYW5kIHRocm93cyBpZiBubyBzZW5kZXIgc291cmNlIC0gZG9tYWluLFxuICogZnJvbSwgb3Igc3lzdGVtRnJvbSAtIGlzIGNvbmZpZ3VyZWQsIHNpbmNlIFNNVFAgY2FuJ3QgZGVyaXZlIG9uZSBmcm9tXG4gKiBub3RoaW5nOyBgZG9tYWluYCBhbG9uZSBpcyB0aGUgaW50ZW5kZWQgbWluaW11bSkuXG4gKiBXaGVuIGFsbCB0aHJlZSBhcmUgYWJzZW50IGFuZCBgRU1BSUxfT1VUQk9YX01PREVgIGlzIGVuYWJsZWQsIHJldHVybnNcbiAqIGBtb2RlOiBcImZpbGVcImAgc28gdGhlIHJ1bnRpbWUgd3JpdGVzIG1lc3NhZ2VzIHRvIHRoZSBvdXRib3ggZGlyZWN0b3J5XG4gKiBmb3IgbG9jYWwgdGVzdGluZzsgaW4gdGhhdCBtb2RlIGEgc2VuZGVyIHNvdXJjZSBpcyBvcHRpb25hbCAodGhlXG4gKiBvdXRib3ggZmFsbHMgYmFjayB0byB0aGUgT0JPIHVzZXIncyBvd24gYWRkcmVzcykuIFBhcnRpYWwgU01UUFxuICogY29uZmlndXJhdGlvbiBvciBhIHNlbmQgd2l0aCBubyBjcmVkZW50aWFscyBhbmQgbm8gb3V0Ym94IG9wdC1pblxuICogdGhyb3dzLlxuICpcbiAqIFRoZSBzZW5kZXIgYWxsb3ctbGlzdCBpcyByZXNvbHZlZCBoZXJlIHRvbzogdW5kZXIgdGhlIGRlZmF1bHRcbiAqIGBcImFsbG93bGlzdFwiYCBwb2xpY3kgYW4gZW1wdHkgbGlzdCBpcyBmaWxsZWQgaW4gZnJvbSB0aGUgc2VuZGVyIHNvdXJjZSxcbiAqIHNvIGEgZGVwbG95bWVudCB0aGF0IG9ubHkgc2V0cyBgRU1BSUxfRE9NQUlOYCBzdGlsbCByZWplY3RzIGEgYEZyb21gIG9uXG4gKiBhbnkgb3RoZXIgZG9tYWluLiBTZWUge0BsaW5rIFNlbmRlclBvbGljeX0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRW1haWxDb25maWcoY29uZmlnOiBFbWFpbFBsdWdpbkNvbmZpZyA9IHt9KTogUmVzb2x2ZWRFbWFpbENvbmZpZyB7XG4gIGNvbnN0IHNtdHAgPSBjb25maWcuc210cCA/PyB7fTtcbiAgY29uc3QgaG9zdCA9IGNvbmZpZ1V0aWxzLnN0cmluZyhzbXRwLmhvc3QsIFwiU01UUF9IT1NUXCIsIGNvbmZpZ1V0aWxzLkVOVl9PTkxZKTtcbiAgY29uc3QgdXNlciA9IGNvbmZpZ1V0aWxzLnN0cmluZyhzbXRwLnVzZXIsIFwiU01UUF9VU0VSXCIsIGNvbmZpZ1V0aWxzLkVOVl9PTkxZKTtcbiAgY29uc3QgcGFzcyA9IGNvbmZpZ1V0aWxzLnN0cmluZyhzbXRwLnBhc3N3b3JkLCBcIlNNVFBfUEFTU1dPUkRcIiwgY29uZmlnVXRpbHMuRU5WX09OTFkpO1xuICBjb25zdCBkb21haW4gPSBjb25maWdVdGlscy5zdHJpbmcoY29uZmlnLmRvbWFpbiwgXCJFTUFJTF9ET01BSU5cIiwgY29uZmlnVXRpbHMuRU5WX09OTFkpO1xuICBjb25zdCBmcm9tID0gY29uZmlnVXRpbHMuc3RyaW5nKGNvbmZpZy5mcm9tLCBcIkVNQUlMX0ZST01cIiwgY29uZmlnVXRpbHMuRU5WX09OTFkpO1xuICBjb25zdCBzeXN0ZW1Gcm9tID0gY29uZmlnVXRpbHMuc3RyaW5nKFxuICAgIGNvbmZpZy5zeXN0ZW1Gcm9tLFxuICAgIFwiRU1BSUxfU1lTVEVNX0ZST01cIixcbiAgICBjb25maWdVdGlscy5FTlZfT05MWSxcbiAgKTtcbiAgY29uc3Qgc2VuZGVyUG9saWN5ID0gcmVzb2x2ZVNlbmRlclBvbGljeShjb25maWcuc2VuZGVyUG9saWN5KTtcbiAgY29uc3QgY29uZmlndXJlZFNlbmRlcnMgPSBwYXJzZUFsbG93ZWRTZW5kZXJzKFxuICAgIGNvbmZpZy5hbGxvd2VkU2VuZGVycyA/PyBjb25maWdVdGlscy50ZXh0KFwiRU1BSUxfQUxMT1dFRF9TRU5ERVJTXCIsIGNvbmZpZ1V0aWxzLkVOVl9PTkxZKSxcbiAgKTtcbiAgY29uc3QgYWxsb3dlZFNlbmRlcnMgPVxuICAgIGNvbmZpZ3VyZWRTZW5kZXJzLmxlbmd0aCA+IDAgfHwgc2VuZGVyUG9saWN5ID09PSBcInVucmVzdHJpY3RlZFwiXG4gICAgICA/IGNvbmZpZ3VyZWRTZW5kZXJzXG4gICAgICA6IGltcGxpZWRTZW5kZXJQYXR0ZXJucyh7IGRvbWFpbiwgZnJvbSwgc3lzdGVtRnJvbSB9KTtcbiAgY29uc3Qgc2VuZGVyOiBSZXNvbHZlZFNlbmRlciA9IHtcbiAgICAuLi5vYmplY3Qub3B0aW9uYWwoXCJkb21haW5cIiwgZG9tYWluKSxcbiAgICAuLi5vYmplY3Qub3B0aW9uYWwoXCJmcm9tXCIsIGZyb20pLFxuICAgIC4uLm9iamVjdC5vcHRpb25hbChcInN5c3RlbUZyb21cIiwgc3lzdGVtRnJvbSksXG4gICAgYWxsb3dlZFNlbmRlcnMsXG4gICAgc2VuZGVyUG9saWN5LFxuICAgIGJyYW5kOiBjb25maWcuYnJhbmQgPz8gZGVmYXVsdEVtYWlsQnJhbmQsXG4gIH07XG5cbiAgY29uc3QgaGFzQWxsU210cCA9IEJvb2xlYW4oaG9zdCAmJiB1c2VyICYmIHBhc3MpO1xuICBjb25zdCBoYXNBbnlTbXRwID0gQm9vbGVhbihob3N0IHx8IHVzZXIgfHwgcGFzcyk7XG5cbiAgaWYgKGhhc0FueVNtdHAgJiYgIWhhc0FsbFNtdHApIHtcbiAgICB0aHJvdyBWYWxpZGF0aW9uRXJyb3IubWlzc2luZ0VudlZhcnMobWlzc2luZ1NtdHBGaWVsZHMoaG9zdCwgdXNlciwgcGFzcykpO1xuICB9XG5cbiAgaWYgKGhhc0FsbFNtdHApIHtcbiAgICBpZiAoIWRvbWFpbiAmJiAhZnJvbSAmJiAhc3lzdGVtRnJvbSkge1xuICAgICAgdGhyb3cgQ29uZmlndXJhdGlvbkVycm9yLnJlc291cmNlTm90Rm91bmQoXG4gICAgICAgIFwiRW1haWwgc2VuZGVyIHNvdXJjZVwiLFxuICAgICAgICBcIlNldCBFTUFJTF9ET01BSU4gdG8gZGVyaXZlIDx1c2VyLWxvY2FsLXBhcnQ+QDxkb21haW4+IChhbmQgbm8tcmVwbHlAPGRvbWFpbj4gZm9yIHN5c3RlbSBtYWlsKSwgb3IgRU1BSUxfRlJPTSBmb3IgYSBmaXhlZCBhZGRyZXNzLlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgcG9ydCA9IGNvbmZpZ1V0aWxzLnBvcnQoc210cC5wb3J0LCBcIlNNVFBfUE9SVFwiLCBERUZBVUxUX1NNVFBfUE9SVCwgY29uZmlnVXRpbHMuRU5WX09OTFkpO1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcInNtdHBcIixcbiAgICAgIGhvc3Q6IGhvc3QhLFxuICAgICAgcG9ydCxcbiAgICAgIHNlY3VyZTogcmVzb2x2ZVNlY3VyZShzbXRwLnNlY3VyZSwgcG9ydCksXG4gICAgICBhdXRoOiB7IHVzZXI6IHVzZXIhLCBwYXNzOiBwYXNzISB9LFxuICAgICAgLi4uc2VuZGVyLFxuICAgIH07XG4gIH1cblxuICBpZiAoIWlzT3V0Ym94TW9kZUVuYWJsZWQoKSkge1xuICAgIHRocm93IENvbmZpZ3VyYXRpb25FcnJvci5pbnZhbGlkQ29ubmVjdGlvbihcbiAgICAgIFwiU01UUFwiLFxuICAgICAgYFNldCAke1NNVFBfUkVRVUlSRURfRklFTERTLmpvaW4oXCIsIFwiKX0sIG9yIEVNQUlMX09VVEJPWF9NT0RFPTEgdG8gd3JpdGUgbWVzc2FnZXMgdG8gYSBsb2NhbCBvdXRib3ggaW5zdGVhZC5gLFxuICAgICk7XG4gIH1cblxuICBjb25zdCBvdXREaXIgPSByZXNvbHZlKFxuICAgIGNvbmZpZ1V0aWxzLnN0cmluZyhjb25maWcub3V0RGlyLCBcIkVNQUlMX09VVEJPWF9ESVJcIiwgY29uZmlnVXRpbHMuRU5WX09OTFkpID8/XG4gICAgICByZXNvbHZlKHByb2Nlc3MuY3dkKCksIFwidG1wXCIpLFxuICApO1xuICByZXR1cm4geyBtb2RlOiBcImZpbGVcIiwgb3V0RGlyLCAuLi5zZW5kZXIgfTtcbn1cbiJdfQ==
234
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUNILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBeUIsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRyxPQUFPLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsaUJBQWlCLEVBQW1CLE1BQU0sa0NBQWtDLENBQUM7QUFFdEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV4Rix5REFBeUQ7QUFDekQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxDQUFDO0FBRXJDLDJFQUEyRTtBQUMzRSxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLENBQUM7QUEwSTFDLCtEQUErRDtBQUMvRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBZ0I7SUFDOUMsSUFBSSxFQUFFLFFBQVE7SUFDZCxVQUFVLEVBQUU7UUFDVixJQUFJLEVBQUU7WUFDSixJQUFJLEVBQUUsUUFBUTtZQUNkLFdBQVcsRUFBRSwwREFBMEQ7WUFDdkUsVUFBVSxFQUFFO2dCQUNWLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLG1DQUFtQyxFQUFFO2dCQUMxRSxJQUFJLEVBQUU7b0JBQ0osSUFBSSxFQUFFLFFBQVE7b0JBQ2QsV0FBVyxFQUFFLDZDQUE2QyxpQkFBaUIsR0FBRztpQkFDL0U7Z0JBQ0QsTUFBTSxFQUFF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LGtCQUFrQixDQUFDLGdCQUFnQixDQUN2QyxxQkFBcUIsRUFDckIsbUlBQW1JLENBQ3BJLENBQUM7UUFDSixDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNuRixPQUFPO1lBQ0wsSUFBSSxFQUFFLE1BQU07WUFDWixJQUFJLEVBQUUsSUFBSztZQUNYLElBQUk7WUFDSixNQUFNLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO1lBQ3hDLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxJQUFLLEVBQUUsSUFBSSxFQUFFLElBQUssRUFBRTtZQUNsQyxHQUFHLE1BQU07U0FDVixDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUM7UUFDM0IsTUFBTSxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FDeEMsTUFBTSxFQUNOLE9BQU8sb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx1RUFBdUUsQ0FDOUcsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQ3BCLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQ3JGLENBQUM7SUFDRixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUM3QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTTVRQIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBlbWFpbCBwbHVnaW46IHRoZSB0eXBlZFxuICoge0BsaW5rIEVtYWlsUGx1Z2luQ29uZmlnfSAodGhlIHBsdWdpbidzIHNsaWNlIG9mIEFwcEtpdCBjb25maWcpLCB0aGVcbiAqIEpTT04gU2NoZW1hIHRoZSBtYW5pZmVzdCBwdWJsaXNoZXMgZm9yIGl0LCBhbmQge0BsaW5rIHJlc29sdmVFbWFpbENvbmZpZ31cbiAqIHdoaWNoIGxheWVycyB0aGF0IGNvbmZpZyBvdmVyIGVudmlyb25tZW50IGRlZmF1bHRzIGludG8gdGhlIGNvbmNyZXRlXG4gKiB7QGxpbmsgUmVzb2x2ZWRFbWFpbENvbmZpZ30gdGhlIHJ1bnRpbWUgbmVlZHMuXG4gKlxuICogVHdvIG1vZGVzIGZhbGwgb3V0IG9mIHRoZSByZXNvbHV0aW9uLiBXaGVuIFNNVFAgY3JlZGVudGlhbHMgKGhvc3QgK1xuICogdXNlciArIHBhc3N3b3JkKSBhcmUgYWxsIHByZXNlbnQgaXQgcmVzb2x2ZXMgdG8gYG1vZGU6IFwic210cFwiYCBhbmRcbiAqIG1haWwgaXMgc2VudCBmb3IgcmVhbC4gV2hlbiB0aGV5IGFyZSBhYnNlbnQgYW5kIGBFTUFJTF9PVVRCT1hfTU9ERWBcbiAqIGlzIGV4cGxpY2l0bHkgZW5hYmxlZCBpdCByZXNvbHZlcyB0byBgbW9kZTogXCJmaWxlXCJgIChhbiBcIm91dGJveFwiKVxuICogYW5kIGVhY2ggbWVzc2FnZSBpcyB3cml0dGVuIHRvIGRpc2sgYXMgSFRNTCBpbnN0ZWFkIG9mIHNlbnQuIEFueVxuICogcGFydGlhbCBTTVRQIGNvbmZpZ3VyYXRpb24gb3IgYSBzZW5kIGF0dGVtcHQgd2l0aCBubyBjcmVkZW50aWFscyBhbmRcbiAqIG5vIG91dGJveCBvcHQtaW4gdGhyb3dzLlxuICpcbiAqIFByZWNlZGVuY2UgcGVyIGZpZWxkOiBleHBsaWNpdCBwbHVnaW4gY29uZmlnIHdpbnMsIHRoZW4gdGhlIG1hdGNoaW5nXG4gKiBlbnZpcm9ubWVudCB2YXJpYWJsZS4gRW52IG5hbWVzIGFyZSB1bnByZWZpeGVkIGJlY2F1c2UgdGhlIGFwcCB0YWxrc1xuICogdG8gYSBzaW5nbGUgU01UUCBzZXJ2ZXIgKGUuZy4gU01UUDJHTyk6IGBTTVRQX0hPU1RgLCBgU01UUF9QT1JUYCxcbiAqIGBTTVRQX1NFQ1VSRWAsIGBTTVRQX1VTRVJgLCBgU01UUF9QQVNTV09SRGAsIHBsdXMgYEVNQUlMX0RPTUFJTmAgZm9yXG4gKiB0aGUgZGVyaXZlZCBzZW5kZXIncyBkb21haW4sIGBFTUFJTF9GUk9NYCBmb3IgYW4gZXhwbGljaXQgb3ZlcnJpZGUsXG4gKiBgRU1BSUxfU1lTVEVNX0ZST01gIGZvciB0aGUgZG8tbm90LXJlcGx5IGFkZHJlc3Mgc3lzdGVtIG1haWwgc2VuZHMgZnJvbSxcbiAqIGBFTUFJTF9TRU5ERVJfUE9MSUNZYCBmb3IgdGhlIHNlbmRlciByZXN0cmljdGlvbiBtb2RlLCBhbmRcbiAqIGBFTUFJTF9PVVRCT1hfRElSYCBmb3IgdGhlIG91dGJveCBkaXJlY3RvcnkuXG4gKlxuICogQG1vZHVsZVxuICovXG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbkVycm9yLCBWYWxpZGF0aW9uRXJyb3IsIHR5cGUgQmFzZVBsdWdpbkNvbmZpZyB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGNvbmZpZ1V0aWxzLCBib29sZWFuLCBFTlZfT05MWSwgdGV4dCwgc3RyaW5nIH0gZnJvbSBcIkBkYngtdG9vbHMvY29yZVwiO1xuaW1wb3J0IHsgb3B0aW9uYWwgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgZGVmYXVsdEVtYWlsQnJhbmQsIHR5cGUgRW1haWxCcmFuZCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1lbWFpbC10ZW1wbGF0ZVwiO1xuaW1wb3J0IHR5cGUgeyBKU09OU2NoZW1hNyB9IGZyb20gXCJqc29uLXNjaGVtYVwiO1xuaW1wb3J0IHsgaXNTZW5kZXJBbGxvd2VkLCBwYXJzZUFsbG93ZWRTZW5kZXJzLCBzeXN0ZW1TZW5kZXJBZGRyZXNzIH0gZnJvbSBcIi4vc2VuZGVyLnRzXCI7XG5cbi8qKiBTTVRQIHN1Ym1pc3Npb24gcG9ydCB1c2VkIHdoZW4gbm9uZSBpcyBjb25maWd1cmVkLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU01UUF9QT1JUID0gNTg3O1xuXG4vKiogU01UUCBwb3J0IHRoYXQgaW1wbGllcyBhIFRMUy1vbi1jb25uZWN0IHNvY2tldCByYXRoZXIgdGhhbiBTVEFSVFRMUy4gKi9cbmV4cG9ydCBjb25zdCBJTVBMSUNJVF9UTFNfU01UUF9QT1JUID0gNDY1O1xuXG4vKipcbiAqIEhvdyB0aGUgc2VuZGVyIChgRnJvbWApIGFkZHJlc3MgaXMgcmVzdHJpY3RlZC5cbiAqXG4gKiBgXCJhbGxvd2xpc3RcImAgaXMgdGhlIGRlZmF1bHQgYW5kIHRoZSBkZW55LWJ5LWRlZmF1bHQgcG9zdHVyZTogYSBzZW5kIGlzXG4gKiBwZXJtaXR0ZWQgb25seSBmcm9tIGFuIGFkZHJlc3MgdGhlIGNvbmZpZ3VyYXRpb24gbmFtZXMsIGVpdGhlciB0aHJvdWdoXG4gKiB7QGxpbmsgRW1haWxQbHVnaW5Db25maWcuYWxsb3dlZFNlbmRlcnN9IG9yLCB3aGVuIHRoYXQgaXMgZW1wdHksIHRocm91Z2hcbiAqIHRoZSBjb25maWd1cmVkIHNlbmRlciBzb3VyY2UgKHtAbGluayBFbWFpbFBsdWdpbkNvbmZpZy5mcm9tfSBhcyBhbiBleGFjdFxuICogYWRkcmVzcywge0BsaW5rIEVtYWlsUGx1Z2luQ29uZmlnLmRvbWFpbn0gYXMgYSBgKkBkb21haW5gIHdpbGRjYXJkKS5cbiAqXG4gKiBgXCJ1bnJlc3RyaWN0ZWRcImAgaXMgdGhlIGV4cGxpY2l0IG9wdC1vdXQ6IGFueSBgRnJvbWAgYSBjYWxsZXIgc3VwcGxpZXMgaXNcbiAqIGFjY2VwdGVkLiBPbmx5IHJlYWNoIGZvciBpdCB3aGVuIGFuIHVwc3RyZWFtIHN5c3RlbSBhbHJlYWR5IHZldHMgdGhlXG4gKiBzZW5kZXIuXG4gKi9cbmV4cG9ydCB0eXBlIFNlbmRlclBvbGljeSA9IFwiYWxsb3dsaXN0XCIgfCBcInVucmVzdHJpY3RlZFwiO1xuXG4vKiogU01UUCBjb25uZWN0aW9uICsgY3JlZGVudGlhbHMuIEFsbCBmaWVsZHMgZmFsbCBiYWNrIHRvIGVudiB3aGVuIHVuc2V0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBTbXRwQ29uZmlnIHtcbiAgLyoqIFNNVFAgc2VydmVyIGhvc3RuYW1lIChgU01UUF9IT1NUYCkuICovXG4gIGhvc3Q/OiBzdHJpbmc7XG4gIC8qKiBTTVRQIHNlcnZlciBwb3J0IChgU01UUF9QT1JUYCkuIERlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX1NNVFBfUE9SVH0uICovXG4gIHBvcnQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBVc2UgYSBUTFMtb24tY29ubmVjdCBzb2NrZXQgKGBTTVRQX1NFQ1VSRWApLiBEZWZhdWx0cyB0b1xuICAgKiBgcG9ydCA9PT0gYCB7QGxpbmsgSU1QTElDSVRfVExTX1NNVFBfUE9SVH0uXG4gICAqL1xuICBzZWN1cmU/OiBib29sZWFuO1xuICAvKiogU01UUCBhdXRoIHVzZXJuYW1lIChgU01UUF9VU0VSYCkuICovXG4gIHVzZXI/OiBzdHJpbmc7XG4gIC8qKiBTTVRQIGF1dGggcGFzc3dvcmQgLyBBUEkga2V5IChgU01UUF9QQVNTV09SRGApLiAqL1xuICBwYXNzd29yZD86IHN0cmluZztcbn1cblxuLyoqIEFwcEtpdCBjb25maWcgYWNjZXB0ZWQgYnkgdGhlIGVtYWlsIHBsdWdpbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxQbHVnaW5Db25maWcgZXh0ZW5kcyBCYXNlUGx1Z2luQ29uZmlnIHtcbiAgLyoqIFNNVFAgY29ubmVjdGlvbiArIGNyZWRlbnRpYWxzLiBPbWl0IHRvIHJ1biBpbiBmaWxlL291dGJveCBtb2RlLiAqL1xuICBzbXRwPzogU210cENvbmZpZztcbiAgLyoqXG4gICAqIERvbWFpbiB1c2VkIHRvIGJ1aWxkIHRoZSBzZW5kZXIgYWRkcmVzcyBmcm9tIHRoZSBvbi1iZWhhbGYtb2YgdXNlclxuICAgKiAoYDxsb2NhbC1wYXJ0PkA8ZG9tYWluPmApLiBGYWxscyBiYWNrIHRvIGBFTUFJTF9ET01BSU5gLiBSZXF1aXJlZCBpblxuICAgKiBTTVRQIG1vZGUgdW5sZXNzIHtAbGluayBmcm9tfSBpcyBzZXQ7IG9wdGlvbmFsIGluIGZpbGUgbW9kZSAodGhlXG4gICAqIG91dGJveCBmYWxscyBiYWNrIHRvIHRoZSB1c2VyJ3Mgb3duIGVtYWlsIGFkZHJlc3MpLlxuICAgKi9cbiAgZG9tYWluPzogc3RyaW5nO1xuICAvKipcbiAgICogRXhwbGljaXQgYEZyb21gIGFkZHJlc3MsIE9QVElPTkFMLiBXaGVuIHNldCwgdGhlIHNlbmRlciBpcyB1c2VkIHZlcmJhdGltXG4gICAqIGFuZCB0aGUgcGVyLXVzZXIgZGVyaXZhdGlvbiBpcyBza2lwcGVkLiBGYWxscyBiYWNrIHRvIGBFTUFJTF9GUk9NYC5cbiAgICpcbiAgICogTGVhdmUgaXQgdW5zZXQgaW4gbW9zdCBkZXBsb3ltZW50czoge0BsaW5rIGRvbWFpbn0gYWxvbmUgaXMgZW5vdWdoLCBhbmRcbiAgICogbWFpbCB0aGVuIGNvbWVzIGZyb20gdGhlIGFkZHJlc3Mgb2YgdGhlIHBlcnNvbiB3aG8gY2F1c2VkIGl0LCB3aGljaCBpcyB3aGF0XG4gICAqIGEgcmVjaXBpZW50IGV4cGVjdHMgdG8gYmUgYWJsZSB0byByZXBseSB0by5cbiAgICovXG4gIGZyb20/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBgRnJvbWAgZm9yIFNZU1RFTSBtYWlsIC0gYSBzZW5kIHdpdGggbm8gb24tYmVoYWxmLW9mIHVzZXIsIHN1Y2ggYXMgYVxuICAgKiBzaWduLWluIGNvZGUgb3IgYSBwYXNzd29yZCByZXNldC4gRmFsbHMgYmFjayB0byBgRU1BSUxfU1lTVEVNX0ZST01gLCB0aGVuXG4gICAqIHRvIGBuby1yZXBseUA8ZG9tYWluPmAsIHRoZW4gdG8ge0BsaW5rIGZyb219LlxuICAgKlxuICAgKiBNYWNoaW5lIG1haWwgZ2V0cyBhIGRvLW5vdC1yZXBseSBhZGRyZXNzIGJ5IGRlZmF1bHQgYmVjYXVzZSBhIHJlcGx5IHRvIGl0XG4gICAqIHJlYWNoZXMgbm9ib2R5LiBTZXQgdGhpcyB0byByb3V0ZSB0aG9zZSByZXBsaWVzIHNvbWV3aGVyZSByZWFsIChhIG1vbml0b3JlZFxuICAgKiBgc3VwcG9ydEBgKSBvciB0byBzcGVsbCB0aGUgbG9jYWwgcGFydCBkaWZmZXJlbnRseSAoYGRvbm90cmVwbHlAYCkuXG4gICAqL1xuICBzeXN0ZW1Gcm9tPzogc3RyaW5nO1xuICAvKipcbiAgICogRGlyZWN0b3J5IGZvciB0aGUgZmlsZS9vdXRib3ggZmFsbGJhY2suIEZhbGxzIGJhY2sgdG9cbiAgICogYEVNQUlMX09VVEJPWF9ESVJgLCB0aGVuIGA8Y3dkPi90bXBgLiBPbmx5IHVzZWQgd2hlbiBTTVRQXG4gICAqIGNyZWRlbnRpYWxzIGFyZSBhYnNlbnQuXG4gICAqL1xuICBvdXREaXI/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBbGxvdy1saXN0IHJlc3RyaWN0aW5nIHRoZSBzZW5kZXIgKGBGcm9tYCkgYWRkcmVzcy4gRWFjaCBlbnRyeSBpcyBhblxuICAgKiBleGFjdCBhZGRyZXNzIChgdXNlckBkb21haW4uY29tYCksIGEgZG9tYWluIHdpbGRjYXJkIChgKkBkb21haW4uY29tYFxuICAgKiBvciB0aGUgYmFyZSBgZG9tYWluLmNvbWAsIG1hdGNoaW5nIGFueSBsb2NhbCBwYXJ0IG9uIHRoYXQgZG9tYWluKSwgb3JcbiAgICogYCpgIChhbnkpLiBBIHJlc29sdmVkIC8gY2hvc2VuIHNlbmRlciB0aGF0IG1hdGNoZXMgbm8gZW50cnkgaXNcbiAgICogcmVqZWN0ZWQgYXQgc2VuZCB0aW1lLiBBY2NlcHRzIGEgYHN0cmluZ1tdYCBvciBhIHNpbmdsZSBjb21tYS0gL1xuICAgKiB3aGl0ZXNwYWNlLXNlcGFyYXRlZCBzdHJpbmc7IGZhbGxzIGJhY2sgdG8gYEVNQUlMX0FMTE9XRURfU0VOREVSU2AuXG4gICAqIFdoZW4gZW1wdHksIHRoZSB7QGxpbmsgc2VuZGVyUG9saWN5fSBkZWNpZGVzIHdoYXQgaXMgcGVybWl0dGVkLlxuICAgKi9cbiAgYWxsb3dlZFNlbmRlcnM/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIEhvdyB0aGUgc2VuZGVyIGFkZHJlc3MgaXMgcmVzdHJpY3RlZCB3aGVuIHtAbGluayBhbGxvd2VkU2VuZGVyc30gaXNcbiAgICogZW1wdHkgKGBFTUFJTF9TRU5ERVJfUE9MSUNZYCkuIERlZmF1bHRzIHRvIGBcImFsbG93bGlzdFwiYCwgd2hpY2hcbiAgICogbmFycm93cyBzZW5kcyB0byB0aGUgY29uZmlndXJlZCBzZW5kZXIgc291cmNlLiBTZWVcbiAgICoge0BsaW5rIFNlbmRlclBvbGljeX0uXG4gICAqL1xuICBzZW5kZXJQb2xpY3k/OiBTZW5kZXJQb2xpY3k7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBicmFuZCBzdHlsaW5nIGFwcGxpZWQgdG8gZXZlcnkgcmVuZGVyZWQgbWVzc2FnZS4gT21pdCB0byB1c2UgdGhlXG4gICAqIHJlcG9zaXRvcnkncyBkYngtdG9vbHMgYnJhbmQuIFBhc3Mge0BsaW5rIGVtYWlsQnJhbmRGcm9tQ29udGV4dH0gdG8gZGVyaXZlXG4gICAqIGEgY3VzdG9tIHZhbHVlIGZyb20gYSBzaGFyZWQgYEJyYW5kQ29udGV4dGAuXG4gICAqL1xuICBicmFuZD86IEVtYWlsQnJhbmQ7XG59XG5cbi8qKiBDb25maWcgc2hhcmVkIGJ5IGJvdGggcmVzb2x2ZWQgbW9kZXMuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkU2VuZGVyIHtcbiAgLyoqIFNlbmRlciBkb21haW47IHByZXNlbnQgd2hlbmV2ZXIge0BsaW5rIGZyb219IGlzIGFic2VudC4gKi9cbiAgZG9tYWluPzogc3RyaW5nO1xuICAvKiogRXhwbGljaXQgc2VuZGVyIG92ZXJyaWRlOyBwcmVzZW50IHNraXBzIHBlci11c2VyIGRlcml2YXRpb24uICovXG4gIGZyb20/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBFeHBsaWNpdCBkby1ub3QtcmVwbHkgc2VuZGVyIGZvciBzeXN0ZW0gbWFpbC4gQWJzZW50IG1lYW5zIGl0IGlzIGRlcml2ZWQgLVxuICAgKiBzZWUge0BsaW5rIHN5c3RlbVNlbmRlckFkZHJlc3N9LlxuICAgKi9cbiAgc3lzdGVtRnJvbT86IHN0cmluZztcbiAgLyoqXG4gICAqIEVmZmVjdGl2ZSBzZW5kZXIgYWxsb3ctbGlzdDogdGhlIGNvbmZpZ3VyZWQgcGF0dGVybnMgd2hlbiBhbnkgd2VyZVxuICAgKiBnaXZlbiwgZWxzZSB0aGUgcGF0dGVybnMgaW1wbGllZCBieSB0aGUgc2VuZGVyIHNvdXJjZSB1bmRlciBhblxuICAgKiBgXCJhbGxvd2xpc3RcImAgcG9saWN5LiBFbXB0eSBtZWFucyB1bmVuZm9yY2VhYmxlIChhbiBgXCJ1bnJlc3RyaWN0ZWRcImBcbiAgICogcG9saWN5LCBvciBhbiBvdXRib3ggd2l0aCBubyBzZW5kZXIgc291cmNlIHRvIG5hcnJvdyB0bykuXG4gICAqL1xuICBhbGxvd2VkU2VuZGVyczogc3RyaW5nW107XG4gIC8qKiBUaGUgcmVzdHJpY3Rpb24gbW9kZSB0aGUgYWxsb3ctbGlzdCB3YXMgcmVzb2x2ZWQgdW5kZXIuICovXG4gIHNlbmRlclBvbGljeTogU2VuZGVyUG9saWN5O1xuICAvKiogQnJhbmQgc3R5bGluZyBhcHBsaWVkIHRvIHJlbmRlcmVkIEhUTUwuICovXG4gIGJyYW5kOiBFbWFpbEJyYW5kO1xufVxuXG4vKiogUmVzb2x2ZWQgY29uZmlnIGZvciByZWFsIFNNVFAgZGVsaXZlcnkuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkU210cENvbmZpZyBleHRlbmRzIFJlc29sdmVkU2VuZGVyIHtcbiAgbW9kZTogXCJzbXRwXCI7XG4gIGhvc3Q6IHN0cmluZztcbiAgcG9ydDogbnVtYmVyO1xuICBzZWN1cmU6IGJvb2xlYW47XG4gIGF1dGg6IHsgdXNlcjogc3RyaW5nOyBwYXNzOiBzdHJpbmcgfTtcbn1cblxuLyoqIFJlc29sdmVkIGNvbmZpZyBmb3IgdGhlIGZpbGUvb3V0Ym94IGZhbGxiYWNrIChubyBTTVRQIGNyZWRlbnRpYWxzKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRGaWxlQ29uZmlnIGV4dGVuZHMgUmVzb2x2ZWRTZW5kZXIge1xuICBtb2RlOiBcImZpbGVcIjtcbiAgLyoqIEFic29sdXRlIGRpcmVjdG9yeSBtZXNzYWdlcyBhcmUgd3JpdHRlbiB1bmRlci4gKi9cbiAgb3V0RGlyOiBzdHJpbmc7XG59XG5cbi8qKiBDb25jcmV0ZSwgdmFsaWRhdGVkIGNvbmZpZyB0aGUgcnVudGltZSBkaXNwYXRjaGVzIHRocm91Z2guICovXG5leHBvcnQgdHlwZSBSZXNvbHZlZEVtYWlsQ29uZmlnID0gUmVzb2x2ZWRTbXRwQ29uZmlnIHwgUmVzb2x2ZWRGaWxlQ29uZmlnO1xuXG4vKiogSlNPTiBTY2hlbWEgcHVibGlzaGVkIG9uIHRoZSBtYW5pZmVzdCdzIGBjb25maWcuc2NoZW1hYC4gKi9cbmV4cG9ydCBjb25zdCBFTUFJTF9DT05GSUdfU0NIRU1BOiBKU09OU2NoZW1hNyA9IHtcbiAgdHlwZTogXCJvYmplY3RcIixcbiAgcHJvcGVydGllczoge1xuICAgIHNtdHA6IHtcbiAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJTTVRQIGNvbm5lY3Rpb24gYW5kIGNyZWRlbnRpYWxzIChlbnYgZmFsbGJhY2tzOiBTTVRQXyopLlwiLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBob3N0OiB7IHR5cGU6IFwic3RyaW5nXCIsIGRlc2NyaXB0aW9uOiBcIlNNVFAgc2VydmVyIGhvc3RuYW1lIChTTVRQX0hPU1QpLlwiIH0sXG4gICAgICAgIHBvcnQ6IHtcbiAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBgU01UUCBzZXJ2ZXIgcG9ydCAoU01UUF9QT1JUKS4gRGVmYXVsdHMgdG8gJHtERUZBVUxUX1NNVFBfUE9SVH0uYCxcbiAgICAgICAgfSxcbiAgICAgICAgc2VjdXJlOiB7XG4gICAgICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGBUTFMtb24tY29ubmVjdCBzb2NrZXQgKFNNVFBfU0VDVVJFKS4gRGVmYXVsdHMgdG8gcG9ydCA9PT0gJHtJTVBMSUNJVF9UTFNfU01UUF9QT1JUfS5gLFxuICAgICAgICB9LFxuICAgICAgICB1c2VyOiB7IHR5cGU6IFwic3RyaW5nXCIsIGRlc2NyaXB0aW9uOiBcIlNNVFAgYXV0aCB1c2VybmFtZSAoU01UUF9VU0VSKS5cIiB9LFxuICAgICAgICBwYXNzd29yZDoge1xuICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgZGVzY3JpcHRpb246IFwiU01UUCBhdXRoIHBhc3N3b3JkIC8gQVBJIGtleSAoU01UUF9QQVNTV09SRCkuXCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgZG9tYWluOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRG9tYWluIGZvciB0aGUgZGVyaXZlZCBzZW5kZXIgYWRkcmVzcyAoPHVzZXItbG9jYWwtcGFydD5APGRvbWFpbj4pLiBGYWxscyBiYWNrIHRvIEVNQUlMX0RPTUFJTi5cIixcbiAgICB9LFxuICAgIGZyb206IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJPcHRpb25hbCBleHBsaWNpdCBGcm9tIGFkZHJlc3M7IHNraXBzIHBlci11c2VyIGRlcml2YXRpb24uIEZhbGxzIGJhY2sgdG8gRU1BSUxfRlJPTS5cIixcbiAgICB9LFxuICAgIHN5c3RlbUZyb206IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJGcm9tIGZvciBzeXN0ZW0gbWFpbCAobm8gb24tYmVoYWxmLW9mIHVzZXIsIGUuZy4gYSBzaWduLWluIGNvZGUpLiBGYWxscyBiYWNrIHRvIEVNQUlMX1NZU1RFTV9GUk9NLCB0aGVuIG5vLXJlcGx5QDxkb21haW4+LCB0aGVuIGZyb20uXCIsXG4gICAgfSxcbiAgICBvdXREaXI6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJEaXJlY3RvcnkgZm9yIHRoZSBmaWxlL291dGJveCBmYWxsYmFjayB3aGVuIFNNVFAgaXMgdW5jb25maWd1cmVkLiBGYWxscyBiYWNrIHRvIEVNQUlMX09VVEJPWF9ESVIsIHRoZW4gPGN3ZD4vdG1wLlwiLFxuICAgIH0sXG4gICAgYWxsb3dlZFNlbmRlcnM6IHtcbiAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnQWxsb3ctbGlzdCBvZiBwZXJtaXR0ZWQgc2VuZGVyIChGcm9tKSBwYXR0ZXJuczogZXhhY3QgYWRkcmVzc2VzIChcInVzZXJAZG9tYWluLmNvbVwiKSwgZG9tYWluIHdpbGRjYXJkcyAoXCIqQGRvbWFpbi5jb21cIiksIG9yIFwiKlwiLiBBbHNvIGFjY2VwdHMgYSBjb21tYS9zcGFjZS1zZXBhcmF0ZWQgc3RyaW5nLiBGYWxscyBiYWNrIHRvIEVNQUlMX0FMTE9XRURfU0VOREVSUy4gV2hlbiBlbXB0eSwgc2VuZGVyUG9saWN5IGRlY2lkZXMuJyxcbiAgICB9LFxuICAgIHNlbmRlclBvbGljeToge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGVudW06IFtcImFsbG93bGlzdFwiLCBcInVucmVzdHJpY3RlZFwiXSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnSG93IHRoZSBzZW5kZXIgaXMgcmVzdHJpY3RlZCB3aGVuIGFsbG93ZWRTZW5kZXJzIGlzIGVtcHR5IChFTUFJTF9TRU5ERVJfUE9MSUNZKS4gXCJhbGxvd2xpc3RcIiAoZGVmYXVsdCkgbmFycm93cyBzZW5kcyB0byB0aGUgY29uZmlndXJlZCBzZW5kZXIgc291cmNlOyBcInVucmVzdHJpY3RlZFwiIGFjY2VwdHMgYW55IEZyb20uJyxcbiAgICB9LFxuICAgIGJyYW5kOiB7XG4gICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiQnJhbmQgc3R5bGluZyBhcHBsaWVkIHRvIGV2ZXJ5IFJlYWN0IEVtYWlsIG1lc3NhZ2UuIE9taXQgdG8gdXNlIHRoZSBkYngtdG9vbHMgYnJhbmQuXCIsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGFjY2VudDoge1xuICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdIZWFkZXItYmFuZCBiYWNrZ3JvdW5kIGFuZCBib2R5IGxpbmsgY29sb3IgKGUuZy4gXCIjRkYzNjIxXCIpLicsXG4gICAgICAgIH0sXG4gICAgICAgIG9uQWNjZW50OiB7XG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJUZXh0IGFuZCBsb2dvIGNvbG9yIHJlbmRlcmVkIG9uIHRoZSBhY2NlbnQgYmFuZC4gRGVmYXVsdHMgdG8gd2hpdGUuXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGZvbnRGYW1pbHk6IHtcbiAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQm9keSBmb250IHN0YWNrIChlLmcuIFwiSW50ZXIsIHVpLXNhbnMtc2VyaWYsIHN5c3RlbS11aSwgc2Fucy1zZXJpZlwiKS4nLFxuICAgICAgICB9LFxuICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJQcm9kdWN0IC8gZGlzcGxheSBuYW1lIHVzZWQgYXMgdGhlIGhlYWRlciB0ZXh0IGFuZCB0aGUgbG9nbyBhbHQgdGV4dC5cIixcbiAgICAgICAgfSxcbiAgICAgICAgbG9nb1VybDoge1xuICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICBcIkxvZ28gaW1hZ2UgZm9yIHRoZSBoZWFkZXIgYmFuZC4gT25seSBhbiBodHRwKHMpOiBvciBkYXRhOiBVUkwgcmVuZGVyczsgb3RoZXIgdmFsdWVzIGFyZSBkcm9wcGVkIGJlY2F1c2UgYSBtYWlsIGNsaWVudCBjYW5ub3QgbG9hZCB0aGVtLlwiLFxuICAgICAgICB9LFxuICAgICAgICBiYWNrZ3JvdW5kOiB7IHR5cGU6IFwic3RyaW5nXCIsIGRlc2NyaXB0aW9uOiBcIkluYm94IGNhbnZhcyBjb2xvci5cIiB9LFxuICAgICAgICBzdXJmYWNlOiB7IHR5cGU6IFwic3RyaW5nXCIsIGRlc2NyaXB0aW9uOiBcIk1lc3NhZ2UtY2FyZCBjb2xvci5cIiB9LFxuICAgICAgICBmb3JlZ3JvdW5kOiB7IHR5cGU6IFwic3RyaW5nXCIsIGRlc2NyaXB0aW9uOiBcIlByaW1hcnkgdGV4dCBjb2xvci5cIiB9LFxuICAgICAgICBtdXRlZDogeyB0eXBlOiBcInN0cmluZ1wiLCBkZXNjcmlwdGlvbjogXCJTZWNvbmRhcnkgdGV4dCBjb2xvci5cIiB9LFxuICAgICAgICBib3JkZXI6IHsgdHlwZTogXCJzdHJpbmdcIiwgZGVzY3JpcHRpb246IFwiQm9yZGVyIGFuZCBkaXZpZGVyIGNvbG9yLlwiIH0sXG4gICAgICAgIHRhZ2xpbmU6IHsgdHlwZTogXCJzdHJpbmdcIiwgZGVzY3JpcHRpb246IFwiRm9vdGVyIHByb2R1Y3QgbGluZS5cIiB9LFxuICAgICAgICB3ZWJzaXRlOiB7IHR5cGU6IFwic3RyaW5nXCIsIGRlc2NyaXB0aW9uOiBcIk9wdGlvbmFsIGZvb3RlciB3ZWJzaXRlIFVSTC5cIiB9LFxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBbXCJhY2NlbnRcIiwgXCJmb250RmFtaWx5XCJdLFxuICAgIH0sXG4gIH0sXG59O1xuXG4vKiogUGFyc2UgdGhlIGBTTVRQX1NFQ1VSRWAgZW52IC8gY29uZmlnIGZsYWcsIGRlZmF1bHRpbmcgYnkgcG9ydC4gKi9cbmZ1bmN0aW9uIHJlc29sdmVTZWN1cmUoZmxhZzogYm9vbGVhbiB8IHVuZGVmaW5lZCwgcG9ydDogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBib29sZWFuKGZsYWcsIFwiU01UUF9TRUNVUkVcIiwgRU5WX09OTFkpID8/IHBvcnQgPT09IElNUExJQ0lUX1RMU19TTVRQX1BPUlQ7XG59XG5cbi8qKiBQYXJzZSB0aGUgYEVNQUlMX1NFTkRFUl9QT0xJQ1lgIGVudiAvIGNvbmZpZyB2YWx1ZSwgZGVmYXVsdGluZyB0byBkZW55LWJ5LWRlZmF1bHQuICovXG5mdW5jdGlvbiByZXNvbHZlU2VuZGVyUG9saWN5KHBvbGljeTogU2VuZGVyUG9saWN5IHwgdW5kZWZpbmVkKTogU2VuZGVyUG9saWN5IHtcbiAgY29uc3QgcmF3ID0gcG9saWN5ID8/IHRleHQoXCJFTUFJTF9TRU5ERVJfUE9MSUNZXCIsIEVOVl9PTkxZKT8udG9Mb3dlckNhc2UoKTtcbiAgaWYgKHJhdyA9PT0gXCJ1bnJlc3RyaWN0ZWRcIikgcmV0dXJuIFwidW5yZXN0cmljdGVkXCI7XG4gIGlmIChyYXcgPT09IHVuZGVmaW5lZCB8fCByYXcgPT09IFwiXCIgfHwgcmF3ID09PSBcImFsbG93bGlzdFwiKSByZXR1cm4gXCJhbGxvd2xpc3RcIjtcbiAgdGhyb3cgVmFsaWRhdGlvbkVycm9yLmludmFsaWRWYWx1ZShcInNlbmRlclBvbGljeVwiLCByYXcsICdcImFsbG93bGlzdFwiIG9yIFwidW5yZXN0cmljdGVkXCInKTtcbn1cblxuLyoqXG4gKiBFZmZlY3RpdmUgYWxsb3ctbGlzdCBmb3IgYW4gYFwiYWxsb3dsaXN0XCJgIHBvbGljeSB3aXRoIG5vIGV4cGxpY2l0IHBhdHRlcm5zOlxuICogdGhlIHNlbmRlciBzb3VyY2UgaXRzZWxmLCBzbyBhIGNvbmZpZ3VyZWQgZG9tYWluIG9yIGZpeGVkIGFkZHJlc3MgaXMgdGhlXG4gKiBib3VuZGFyeSByYXRoZXIgdGhhbiBcImFueXRoaW5nIGdvZXNcIi4gWWllbGRzIG5vdGhpbmcgd2hlbiBuZWl0aGVyIGlzIHNldCxcbiAqIHdoaWNoIG9ubHkgaGFwcGVucyBpbiBvdXRib3ggbW9kZSAod2hlcmUgdGhlIHNlbmRlciBmYWxscyBiYWNrIHRvIHRoZVxuICogb24tYmVoYWxmLW9mIHVzZXIncyBvd24gYWRkcmVzcyBhbmQgY2Fubm90IGJlIGVudW1lcmF0ZWQgdXAgZnJvbnQpLlxuICovXG5mdW5jdGlvbiBpbXBsaWVkU2VuZGVyUGF0dGVybnMoc2VuZGVyOiB7XG4gIGRvbWFpbj86IHN0cmluZztcbiAgZnJvbT86IHN0cmluZztcbiAgc3lzdGVtRnJvbT86IHN0cmluZztcbn0pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHBhdHRlcm5zOiBzdHJpbmdbXSA9IFtdO1xuICBpZiAoc2VuZGVyLmZyb20pIHBhdHRlcm5zLnB1c2goc2VuZGVyLmZyb20udHJpbSgpLnRvTG93ZXJDYXNlKCkpO1xuICBpZiAoc2VuZGVyLmRvbWFpbikgcGF0dGVybnMucHVzaChgKkAke3NlbmRlci5kb21haW4udHJpbSgpLnRvTG93ZXJDYXNlKCl9YCk7XG4gIC8vIFRoZSBzeXN0ZW0gc2VuZGVyIHRvbywgd2hlbiB0aGUgcGF0dGVybnMgYWJvdmUgZG8gbm90IGFscmVhZHkgY292ZXIgaXQ6IGl0XG4gIC8vIGlzIGFuIGFkZHJlc3MgdGhpcyBhcHAgU0VORFMgZnJvbSwgc28gYSBsaXN0IGRlcml2ZWQgZnJvbSB0aGUgc2VuZGVyIHNvdXJjZVxuICAvLyBoYXMgdG8gcGVybWl0IGl0LCBvciB0aGUgdmVyeSBwb2xpY3kgbWVhbnQgdG8gZGVzY3JpYmUgdGhlIGFwcCdzIG93biBzZW5kZXJzXG4gIC8vIGRlbmllcyBpdHMgc2lnbi1pbiBtYWlsLiBVc3VhbGx5IHJlZHVuZGFudCAoYCpAZG9tYWluYCBhbHJlYWR5IG1hdGNoZXNcbiAgLy8gYG5vLXJlcGx5QGRvbWFpbmApIC0gaXQgbWF0dGVycyBmb3IgYSBgc3lzdGVtRnJvbWAgb24gYW5vdGhlciBkb21haW4uXG4gIGNvbnN0IHN5c3RlbSA9IHN5c3RlbVNlbmRlckFkZHJlc3Moc2VuZGVyKT8udG9Mb3dlckNhc2UoKTtcbiAgaWYgKHN5c3RlbSAmJiAhaXNTZW5kZXJBbGxvd2VkKHN5c3RlbSwgcGF0dGVybnMpKSBwYXR0ZXJucy5wdXNoKHN5c3RlbSk7XG4gIHJldHVybiBwYXR0ZXJucztcbn1cblxuLyoqIFdoZXRoZXIgYEVNQUlMX09VVEJPWF9NT0RFYCBleHBsaWNpdGx5IG9wdHMgaW50byB0aGUgZmlsZS9vdXRib3ggZmFsbGJhY2suICovXG5mdW5jdGlvbiBpc091dGJveE1vZGVFbmFibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gYm9vbGVhbih1bmRlZmluZWQsIFwiRU1BSUxfT1VUQk9YX01PREVcIiwgRU5WX09OTFkpID8/IGZhbHNlO1xufVxuXG5jb25zdCBTTVRQX1JFUVVJUkVEX0ZJRUxEUyA9IFtcIlNNVFBfSE9TVFwiLCBcIlNNVFBfVVNFUlwiLCBcIlNNVFBfUEFTU1dPUkRcIl0gYXMgY29uc3Q7XG5cbi8qKiBMaXN0IGVudiBrZXlzIGZvciBTTVRQIGZpZWxkcyB0aGF0IGFyZSB1bnNldCBpbiB0aGUgcmVzb2x2ZWQgY3JlZGVudGlhbCBzZXQuICovXG5mdW5jdGlvbiBtaXNzaW5nU210cEZpZWxkcyhcbiAgaG9zdDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICB1c2VyOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHBhc3M6IHN0cmluZyB8IHVuZGVmaW5lZCxcbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgdmFsdWVzID0gW2hvc3QsIHVzZXIsIHBhc3NdIGFzIGNvbnN0O1xuICByZXR1cm4gU01UUF9SRVFVSVJFRF9GSUVMRFMuZmlsdGVyKChfLCBpbmRleCkgPT4gIXZhbHVlc1tpbmRleF0pO1xufVxuXG4vKipcbiAqIFJlc29sdmUgcGx1Z2luIGNvbmZpZyBvdmVyIGVudmlyb25tZW50IGRlZmF1bHRzLlxuICpcbiAqIFdoZW4gU01UUCBob3N0ICsgdXNlciArIHBhc3N3b3JkIGFyZSBhbGwgcHJlc2VudCwgcmV0dXJucyBgbW9kZTpcbiAqIFwic210cFwiYCBmb3IgcmVhbCBkZWxpdmVyeSAoYW5kIHRocm93cyBpZiBubyBzZW5kZXIgc291cmNlIC0gZG9tYWluLFxuICogZnJvbSwgb3Igc3lzdGVtRnJvbSAtIGlzIGNvbmZpZ3VyZWQsIHNpbmNlIFNNVFAgY2FuJ3QgZGVyaXZlIG9uZSBmcm9tXG4gKiBub3RoaW5nOyBgZG9tYWluYCBhbG9uZSBpcyB0aGUgaW50ZW5kZWQgbWluaW11bSkuXG4gKiBXaGVuIGFsbCB0aHJlZSBhcmUgYWJzZW50IGFuZCBgRU1BSUxfT1VUQk9YX01PREVgIGlzIGVuYWJsZWQsIHJldHVybnNcbiAqIGBtb2RlOiBcImZpbGVcImAgc28gdGhlIHJ1bnRpbWUgd3JpdGVzIG1lc3NhZ2VzIHRvIHRoZSBvdXRib3ggZGlyZWN0b3J5XG4gKiBmb3IgbG9jYWwgdGVzdGluZzsgaW4gdGhhdCBtb2RlIGEgc2VuZGVyIHNvdXJjZSBpcyBvcHRpb25hbCAodGhlXG4gKiBvdXRib3ggZmFsbHMgYmFjayB0byB0aGUgT0JPIHVzZXIncyBvd24gYWRkcmVzcykuIFBhcnRpYWwgU01UUFxuICogY29uZmlndXJhdGlvbiBvciBhIHNlbmQgd2l0aCBubyBjcmVkZW50aWFscyBhbmQgbm8gb3V0Ym94IG9wdC1pblxuICogdGhyb3dzLlxuICpcbiAqIFRoZSBzZW5kZXIgYWxsb3ctbGlzdCBpcyByZXNvbHZlZCBoZXJlIHRvbzogdW5kZXIgdGhlIGRlZmF1bHRcbiAqIGBcImFsbG93bGlzdFwiYCBwb2xpY3kgYW4gZW1wdHkgbGlzdCBpcyBmaWxsZWQgaW4gZnJvbSB0aGUgc2VuZGVyIHNvdXJjZSxcbiAqIHNvIGEgZGVwbG95bWVudCB0aGF0IG9ubHkgc2V0cyBgRU1BSUxfRE9NQUlOYCBzdGlsbCByZWplY3RzIGEgYEZyb21gIG9uXG4gKiBhbnkgb3RoZXIgZG9tYWluLiBTZWUge0BsaW5rIFNlbmRlclBvbGljeX0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRW1haWxDb25maWcoY29uZmlnOiBFbWFpbFBsdWdpbkNvbmZpZyA9IHt9KTogUmVzb2x2ZWRFbWFpbENvbmZpZyB7XG4gIGNvbnN0IHNtdHAgPSBjb25maWcuc210cCA/PyB7fTtcbiAgY29uc3QgaG9zdCA9IHN0cmluZyhzbXRwLmhvc3QsIFwiU01UUF9IT1NUXCIsIEVOVl9PTkxZKTtcbiAgY29uc3QgdXNlciA9IHN0cmluZyhzbXRwLnVzZXIsIFwiU01UUF9VU0VSXCIsIEVOVl9PTkxZKTtcbiAgY29uc3QgcGFzcyA9IHN0cmluZyhzbXRwLnBhc3N3b3JkLCBcIlNNVFBfUEFTU1dPUkRcIiwgRU5WX09OTFkpO1xuICBjb25zdCBkb21haW4gPSBzdHJpbmcoY29uZmlnLmRvbWFpbiwgXCJFTUFJTF9ET01BSU5cIiwgRU5WX09OTFkpO1xuICBjb25zdCBmcm9tID0gc3RyaW5nKGNvbmZpZy5mcm9tLCBcIkVNQUlMX0ZST01cIiwgRU5WX09OTFkpO1xuICBjb25zdCBzeXN0ZW1Gcm9tID0gc3RyaW5nKGNvbmZpZy5zeXN0ZW1Gcm9tLCBcIkVNQUlMX1NZU1RFTV9GUk9NXCIsIEVOVl9PTkxZKTtcbiAgY29uc3Qgc2VuZGVyUG9saWN5ID0gcmVzb2x2ZVNlbmRlclBvbGljeShjb25maWcuc2VuZGVyUG9saWN5KTtcbiAgY29uc3QgY29uZmlndXJlZFNlbmRlcnMgPSBwYXJzZUFsbG93ZWRTZW5kZXJzKFxuICAgIGNvbmZpZy5hbGxvd2VkU2VuZGVycyA/PyB0ZXh0KFwiRU1BSUxfQUxMT1dFRF9TRU5ERVJTXCIsIEVOVl9PTkxZKSxcbiAgKTtcbiAgY29uc3QgYWxsb3dlZFNlbmRlcnMgPVxuICAgIGNvbmZpZ3VyZWRTZW5kZXJzLmxlbmd0aCA+IDAgfHwgc2VuZGVyUG9saWN5ID09PSBcInVucmVzdHJpY3RlZFwiXG4gICAgICA/IGNvbmZpZ3VyZWRTZW5kZXJzXG4gICAgICA6IGltcGxpZWRTZW5kZXJQYXR0ZXJucyh7IGRvbWFpbiwgZnJvbSwgc3lzdGVtRnJvbSB9KTtcbiAgY29uc3Qgc2VuZGVyOiBSZXNvbHZlZFNlbmRlciA9IHtcbiAgICAuLi5vcHRpb25hbChcImRvbWFpblwiLCBkb21haW4pLFxuICAgIC4uLm9wdGlvbmFsKFwiZnJvbVwiLCBmcm9tKSxcbiAgICAuLi5vcHRpb25hbChcInN5c3RlbUZyb21cIiwgc3lzdGVtRnJvbSksXG4gICAgYWxsb3dlZFNlbmRlcnMsXG4gICAgc2VuZGVyUG9saWN5LFxuICAgIGJyYW5kOiBjb25maWcuYnJhbmQgPz8gZGVmYXVsdEVtYWlsQnJhbmQsXG4gIH07XG5cbiAgY29uc3QgaGFzQWxsU210cCA9IEJvb2xlYW4oaG9zdCAmJiB1c2VyICYmIHBhc3MpO1xuICBjb25zdCBoYXNBbnlTbXRwID0gQm9vbGVhbihob3N0IHx8IHVzZXIgfHwgcGFzcyk7XG5cbiAgaWYgKGhhc0FueVNtdHAgJiYgIWhhc0FsbFNtdHApIHtcbiAgICB0aHJvdyBWYWxpZGF0aW9uRXJyb3IubWlzc2luZ0VudlZhcnMobWlzc2luZ1NtdHBGaWVsZHMoaG9zdCwgdXNlciwgcGFzcykpO1xuICB9XG5cbiAgaWYgKGhhc0FsbFNtdHApIHtcbiAgICBpZiAoIWRvbWFpbiAmJiAhZnJvbSAmJiAhc3lzdGVtRnJvbSkge1xuICAgICAgdGhyb3cgQ29uZmlndXJhdGlvbkVycm9yLnJlc291cmNlTm90Rm91bmQoXG4gICAgICAgIFwiRW1haWwgc2VuZGVyIHNvdXJjZVwiLFxuICAgICAgICBcIlNldCBFTUFJTF9ET01BSU4gdG8gZGVyaXZlIDx1c2VyLWxvY2FsLXBhcnQ+QDxkb21haW4+IChhbmQgbm8tcmVwbHlAPGRvbWFpbj4gZm9yIHN5c3RlbSBtYWlsKSwgb3IgRU1BSUxfRlJPTSBmb3IgYSBmaXhlZCBhZGRyZXNzLlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgcG9ydCA9IGNvbmZpZ1V0aWxzLnBvcnQoc210cC5wb3J0LCBcIlNNVFBfUE9SVFwiLCBERUZBVUxUX1NNVFBfUE9SVCwgRU5WX09OTFkpO1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcInNtdHBcIixcbiAgICAgIGhvc3Q6IGhvc3QhLFxuICAgICAgcG9ydCxcbiAgICAgIHNlY3VyZTogcmVzb2x2ZVNlY3VyZShzbXRwLnNlY3VyZSwgcG9ydCksXG4gICAgICBhdXRoOiB7IHVzZXI6IHVzZXIhLCBwYXNzOiBwYXNzISB9LFxuICAgICAgLi4uc2VuZGVyLFxuICAgIH07XG4gIH1cblxuICBpZiAoIWlzT3V0Ym94TW9kZUVuYWJsZWQoKSkge1xuICAgIHRocm93IENvbmZpZ3VyYXRpb25FcnJvci5pbnZhbGlkQ29ubmVjdGlvbihcbiAgICAgIFwiU01UUFwiLFxuICAgICAgYFNldCAke1NNVFBfUkVRVUlSRURfRklFTERTLmpvaW4oXCIsIFwiKX0sIG9yIEVNQUlMX09VVEJPWF9NT0RFPTEgdG8gd3JpdGUgbWVzc2FnZXMgdG8gYSBsb2NhbCBvdXRib3ggaW5zdGVhZC5gLFxuICAgICk7XG4gIH1cblxuICBjb25zdCBvdXREaXIgPSByZXNvbHZlKFxuICAgIHN0cmluZyhjb25maWcub3V0RGlyLCBcIkVNQUlMX09VVEJPWF9ESVJcIiwgRU5WX09OTFkpID8/IHJlc29sdmUocHJvY2Vzcy5jd2QoKSwgXCJ0bXBcIiksXG4gICk7XG4gIHJldHVybiB7IG1vZGU6IFwiZmlsZVwiLCBvdXREaXIsIC4uLnNlbmRlciB9O1xufVxuIl19
@@ -1,8 +1,5 @@
1
1
  /** Node rendering adapters for the shared React Email document. @module */
2
- import { stringUtils } from "@dbx-tools/shared-core";
3
2
  import { type EmailDocumentProps } from "@dbx-tools/shared-email-template";
4
- /** Escape HTML-significant characters (re-exported from shared-core). */
5
- export declare const escapeHtml: typeof stringUtils.escapeHtml;
6
3
  /** Options accepted by the shared React Email document. */
7
4
  export type EmailHtmlOptions = EmailDocumentProps;
8
5
  /** Render a complete responsive React Email document. */
@@ -1,10 +1,7 @@
1
1
  /** Node rendering adapters for the shared React Email document. @module */
2
- import { stringUtils } from "@dbx-tools/shared-core";
3
2
  import { EmailDocument } from "@dbx-tools/shared-email-template";
4
3
  import { render } from "@react-email/render";
5
4
  import { createElement } from "react";
6
- /** Escape HTML-significant characters (re-exported from shared-core). */
7
- export const escapeHtml = stringUtils.escapeHtml;
8
5
  /** Render a complete responsive React Email document. */
9
6
  export async function renderEmailHtml(options) {
10
7
  return render(createElement(EmailDocument, options), { pretty: true });
@@ -22,4 +19,4 @@ export async function renderEmail(options) {
22
19
  ]);
23
20
  return { html, text };
24
21
  }
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwtaHRtbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbWFpbC1odG1sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJFQUEyRTtBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBMkIsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUV0Qyx5RUFBeUU7QUFDekUsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUM7QUFLakQseURBQXlEO0FBQ3pELE1BQU0sQ0FBQyxLQUFLLFVBQVUsZUFBZSxDQUFDLE9BQXlCO0lBQzdELE9BQU8sTUFBTSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN6RSxDQUFDO0FBRUQsMEVBQTBFO0FBQzFFLE1BQU0sQ0FBQyxLQUFLLFVBQVUsZUFBZSxDQUFDLE9BQXlCO0lBQzdELE9BQU8sTUFBTSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM1RSxDQUFDO0FBRUQsZ0ZBQWdGO0FBQ2hGLE1BQU0sQ0FBQyxLQUFLLFVBQVUsV0FBVyxDQUMvQixPQUF5QjtJQUV6QixNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RELE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDakMsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztLQUNyQyxDQUFDLENBQUM7SUFDSCxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogTm9kZSByZW5kZXJpbmcgYWRhcHRlcnMgZm9yIHRoZSBzaGFyZWQgUmVhY3QgRW1haWwgZG9jdW1lbnQuIEBtb2R1bGUgKi9cbmltcG9ydCB7IHN0cmluZ1V0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IEVtYWlsRG9jdW1lbnQsIHR5cGUgRW1haWxEb2N1bWVudFByb3BzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWVtYWlsLXRlbXBsYXRlXCI7XG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiQHJlYWN0LWVtYWlsL3JlbmRlclwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG4vKiogRXNjYXBlIEhUTUwtc2lnbmlmaWNhbnQgY2hhcmFjdGVycyAocmUtZXhwb3J0ZWQgZnJvbSBzaGFyZWQtY29yZSkuICovXG5leHBvcnQgY29uc3QgZXNjYXBlSHRtbCA9IHN0cmluZ1V0aWxzLmVzY2FwZUh0bWw7XG5cbi8qKiBPcHRpb25zIGFjY2VwdGVkIGJ5IHRoZSBzaGFyZWQgUmVhY3QgRW1haWwgZG9jdW1lbnQuICovXG5leHBvcnQgdHlwZSBFbWFpbEh0bWxPcHRpb25zID0gRW1haWxEb2N1bWVudFByb3BzO1xuXG4vKiogUmVuZGVyIGEgY29tcGxldGUgcmVzcG9uc2l2ZSBSZWFjdCBFbWFpbCBkb2N1bWVudC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5kZXJFbWFpbEh0bWwob3B0aW9uczogRW1haWxIdG1sT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiByZW5kZXIoY3JlYXRlRWxlbWVudChFbWFpbERvY3VtZW50LCBvcHRpb25zKSwgeyBwcmV0dHk6IHRydWUgfSk7XG59XG5cbi8qKiBSZW5kZXIgdGhlIHNhbWUgUmVhY3QgRW1haWwgZG9jdW1lbnQgYXMgaXRzIHBsYWluLXRleHQgYWx0ZXJuYXRpdmUuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuZGVyRW1haWxUZXh0KG9wdGlvbnM6IEVtYWlsSHRtbE9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gcmVuZGVyKGNyZWF0ZUVsZW1lbnQoRW1haWxEb2N1bWVudCwgb3B0aW9ucyksIHsgcGxhaW5UZXh0OiB0cnVlIH0pO1xufVxuXG4vKiogUmVuZGVyIGJvdGggTUlNRSBhbHRlcm5hdGl2ZXMgZnJvbSBvbmUgc2hhcmVkIFJlYWN0IEVtYWlsIGNvbXBvbmVudCB0cmVlLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlckVtYWlsKFxuICBvcHRpb25zOiBFbWFpbEh0bWxPcHRpb25zLFxuKTogUHJvbWlzZTx7IGh0bWw6IHN0cmluZzsgdGV4dDogc3RyaW5nIH0+IHtcbiAgY29uc3QgZWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoRW1haWxEb2N1bWVudCwgb3B0aW9ucyk7XG4gIGNvbnN0IFtodG1sLCB0ZXh0XSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICByZW5kZXIoZWxlbWVudCwgeyBwcmV0dHk6IHRydWUgfSksXG4gICAgcmVuZGVyKGVsZW1lbnQsIHsgcGxhaW5UZXh0OiB0cnVlIH0pLFxuICBdKTtcbiAgcmV0dXJuIHsgaHRtbCwgdGV4dCB9O1xufVxuIl19
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwtaHRtbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbWFpbC1odG1sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJFQUEyRTtBQUMzRSxPQUFPLEVBQUUsYUFBYSxFQUEyQixNQUFNLGtDQUFrQyxDQUFDO0FBQzFGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBS3RDLHlEQUF5RDtBQUN6RCxNQUFNLENBQUMsS0FBSyxVQUFVLGVBQWUsQ0FBQyxPQUF5QjtJQUM3RCxPQUFPLE1BQU0sQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDekUsQ0FBQztBQUVELDBFQUEwRTtBQUMxRSxNQUFNLENBQUMsS0FBSyxVQUFVLGVBQWUsQ0FBQyxPQUF5QjtJQUM3RCxPQUFPLE1BQU0sQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDNUUsQ0FBQztBQUVELGdGQUFnRjtBQUNoRixNQUFNLENBQUMsS0FBSyxVQUFVLFdBQVcsQ0FDL0IsT0FBeUI7SUFFekIsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN0RCxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUNyQyxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7S0FDckMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUN4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIE5vZGUgcmVuZGVyaW5nIGFkYXB0ZXJzIGZvciB0aGUgc2hhcmVkIFJlYWN0IEVtYWlsIGRvY3VtZW50LiBAbW9kdWxlICovXG5pbXBvcnQgeyBFbWFpbERvY3VtZW50LCB0eXBlIEVtYWlsRG9jdW1lbnRQcm9wcyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1lbWFpbC10ZW1wbGF0ZVwiO1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIkByZWFjdC1lbWFpbC9yZW5kZXJcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuLyoqIE9wdGlvbnMgYWNjZXB0ZWQgYnkgdGhlIHNoYXJlZCBSZWFjdCBFbWFpbCBkb2N1bWVudC4gKi9cbmV4cG9ydCB0eXBlIEVtYWlsSHRtbE9wdGlvbnMgPSBFbWFpbERvY3VtZW50UHJvcHM7XG5cbi8qKiBSZW5kZXIgYSBjb21wbGV0ZSByZXNwb25zaXZlIFJlYWN0IEVtYWlsIGRvY3VtZW50LiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlckVtYWlsSHRtbChvcHRpb25zOiBFbWFpbEh0bWxPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIHJlbmRlcihjcmVhdGVFbGVtZW50KEVtYWlsRG9jdW1lbnQsIG9wdGlvbnMpLCB7IHByZXR0eTogdHJ1ZSB9KTtcbn1cblxuLyoqIFJlbmRlciB0aGUgc2FtZSBSZWFjdCBFbWFpbCBkb2N1bWVudCBhcyBpdHMgcGxhaW4tdGV4dCBhbHRlcm5hdGl2ZS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5kZXJFbWFpbFRleHQob3B0aW9uczogRW1haWxIdG1sT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiByZW5kZXIoY3JlYXRlRWxlbWVudChFbWFpbERvY3VtZW50LCBvcHRpb25zKSwgeyBwbGFpblRleHQ6IHRydWUgfSk7XG59XG5cbi8qKiBSZW5kZXIgYm90aCBNSU1FIGFsdGVybmF0aXZlcyBmcm9tIG9uZSBzaGFyZWQgUmVhY3QgRW1haWwgY29tcG9uZW50IHRyZWUuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuZGVyRW1haWwoXG4gIG9wdGlvbnM6IEVtYWlsSHRtbE9wdGlvbnMsXG4pOiBQcm9taXNlPHsgaHRtbDogc3RyaW5nOyB0ZXh0OiBzdHJpbmcgfT4ge1xuICBjb25zdCBlbGVtZW50ID0gY3JlYXRlRWxlbWVudChFbWFpbERvY3VtZW50LCBvcHRpb25zKTtcbiAgY29uc3QgW2h0bWwsIHRleHRdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIHJlbmRlcihlbGVtZW50LCB7IHByZXR0eTogdHJ1ZSB9KSxcbiAgICByZW5kZXIoZWxlbWVudCwgeyBwbGFpblRleHQ6IHRydWUgfSksXG4gIF0pO1xuICByZXR1cm4geyBodG1sLCB0ZXh0IH07XG59XG4iXX0=
@@ -1,4 +1,2 @@
1
- /** Normalize indentation in authored content. */
2
- export declare const normalizeMarkdown: (value: string) => string;
3
1
  /** Render a standalone message body through React Email. */
4
2
  export declare function markdownToHtml(body: string): Promise<string>;
@@ -1,13 +1,11 @@
1
- /** Compatibility helpers backed by the shared React Email body. @module */
1
+ /** Node rendering helper backed by the shared React Email body. @module */
2
2
  import { EmailBody, normalizeEmailMarkdown } from "@dbx-tools/shared-email-template";
3
3
  import { render } from "@react-email/render";
4
4
  import { createElement } from "react";
5
- /** Normalize indentation in authored content. */
6
- export const normalizeMarkdown = normalizeEmailMarkdown;
7
5
  /** Render a standalone message body through React Email. */
8
6
  export async function markdownToHtml(body) {
9
7
  return render(createElement(EmailBody, { body: normalizeEmailMarkdown(body) }), {
10
8
  pretty: true,
11
9
  });
12
10
  }
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWFya2Rvd24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMkVBQTJFO0FBQzNFLE9BQU8sRUFBRSxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUV0QyxpREFBaUQ7QUFDakQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsc0JBQXNCLENBQUM7QUFFeEQsNERBQTREO0FBQzVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsY0FBYyxDQUFDLElBQVk7SUFDL0MsT0FBTyxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDOUUsTUFBTSxFQUFFLElBQUk7S0FDYixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIENvbXBhdGliaWxpdHkgaGVscGVycyBiYWNrZWQgYnkgdGhlIHNoYXJlZCBSZWFjdCBFbWFpbCBib2R5LiBAbW9kdWxlICovXG5pbXBvcnQgeyBFbWFpbEJvZHksIG5vcm1hbGl6ZUVtYWlsTWFya2Rvd24gfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtZW1haWwtdGVtcGxhdGVcIjtcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gXCJAcmVhY3QtZW1haWwvcmVuZGVyXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbi8qKiBOb3JtYWxpemUgaW5kZW50YXRpb24gaW4gYXV0aG9yZWQgY29udGVudC4gKi9cbmV4cG9ydCBjb25zdCBub3JtYWxpemVNYXJrZG93biA9IG5vcm1hbGl6ZUVtYWlsTWFya2Rvd247XG5cbi8qKiBSZW5kZXIgYSBzdGFuZGFsb25lIG1lc3NhZ2UgYm9keSB0aHJvdWdoIFJlYWN0IEVtYWlsLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1hcmtkb3duVG9IdG1sKGJvZHk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiByZW5kZXIoY3JlYXRlRWxlbWVudChFbWFpbEJvZHksIHsgYm9keTogbm9ybWFsaXplRW1haWxNYXJrZG93bihib2R5KSB9KSwge1xuICAgIHByZXR0eTogdHJ1ZSxcbiAgfSk7XG59XG4iXX0=
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWFya2Rvd24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMkVBQTJFO0FBQzNFLE9BQU8sRUFBRSxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUV0Qyw0REFBNEQ7QUFDNUQsTUFBTSxDQUFDLEtBQUssVUFBVSxjQUFjLENBQUMsSUFBWTtJQUMvQyxPQUFPLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUM5RSxNQUFNLEVBQUUsSUFBSTtLQUNiLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogTm9kZSByZW5kZXJpbmcgaGVscGVyIGJhY2tlZCBieSB0aGUgc2hhcmVkIFJlYWN0IEVtYWlsIGJvZHkuIEBtb2R1bGUgKi9cbmltcG9ydCB7IEVtYWlsQm9keSwgbm9ybWFsaXplRW1haWxNYXJrZG93biB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1lbWFpbC10ZW1wbGF0ZVwiO1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIkByZWFjdC1lbWFpbC9yZW5kZXJcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuLyoqIFJlbmRlciBhIHN0YW5kYWxvbmUgbWVzc2FnZSBib2R5IHRocm91Z2ggUmVhY3QgRW1haWwuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFya2Rvd25Ub0h0bWwoYm9keTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIHJlbmRlcihjcmVhdGVFbGVtZW50KEVtYWlsQm9keSwgeyBib2R5OiBub3JtYWxpemVFbWFpbE1hcmtkb3duKGJvZHkpIH0pLCB7XG4gICAgcHJldHR5OiB0cnVlLFxuICB9KTtcbn1cbiJdfQ==
@@ -13,11 +13,11 @@
13
13
  * @module
14
14
  */
15
15
  import type { EmailMessage } from "@dbx-tools/shared-email";
16
- import type { EmailBrand } from "./brand.ts";
16
+ import type { EmailBrand } from "@dbx-tools/shared-email-template";
17
17
  import { type EmailHtmlOptions } from "./email-html.ts";
18
18
  /**
19
19
  * Write one message as HTML under `<dir>/<from>/` and return the
20
20
  * absolute path. The per-sender folder mirrors the SMTP `From`, so test
21
21
  * output groups by who the message would have been sent as.
22
22
  */
23
- export declare function writeOutboxEmail(message: EmailMessage, from: string, dir: string, brand?: EmailBrand, presentation?: Pick<EmailHtmlOptions, "heading" | "preview">): Promise<string>;
23
+ export declare function writeOutboxEmail(message: EmailMessage, from: string, dir: string, brand?: EmailBrand, presentation?: Partial<Pick<EmailHtmlOptions, "heading" | "preview">>): Promise<string>;
package/lib/src/outbox.js CHANGED
@@ -14,7 +14,7 @@
14
14
  */
15
15
  import { mkdir, writeFile } from "node:fs/promises";
16
16
  import { join, resolve } from "node:path";
17
- import { stringUtils } from "@dbx-tools/shared-core";
17
+ import { toSlugWithOptions } from "@dbx-tools/shared-core";
18
18
  import { renderEmailHtml } from "./email-html.js";
19
19
  /**
20
20
  * Longest subject slug kept in an outbox file name, leaving room for the
@@ -23,7 +23,7 @@ import { renderEmailHtml } from "./email-html.js";
23
23
  const SUBJECT_SLUG_MAX_LENGTH = 48;
24
24
  /** Filesystem-safe slug of the subject for the file name. */
25
25
  function subjectSlug(subject) {
26
- return stringUtils.toSlugWithOptions({ maxLength: SUBJECT_SLUG_MAX_LENGTH }, subject) || "email";
26
+ return toSlugWithOptions({ maxLength: SUBJECT_SLUG_MAX_LENGTH }, subject) || "email";
27
27
  }
28
28
  /** The envelope rows shown above the body in the preview file. */
29
29
  function headerRows(message, from) {
@@ -59,4 +59,4 @@ export async function writeOutboxEmail(message, from, dir, brand, presentation)
59
59
  await writeFile(path, html, "utf8");
60
60
  return path;
61
61
  }
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0Ym94LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL291dGJveC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUgsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMxQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHckQsT0FBTyxFQUFFLGVBQWUsRUFBeUIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6RTs7O0dBR0c7QUFDSCxNQUFNLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztBQUVuQyw2REFBNkQ7QUFDN0QsU0FBUyxXQUFXLENBQUMsT0FBZTtJQUNsQyxPQUFPLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFNBQVMsRUFBRSx1QkFBdUIsRUFBRSxFQUFFLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQztBQUNuRyxDQUFDO0FBRUQsa0VBQWtFO0FBQ2xFLFNBQVMsVUFBVSxDQUFDLE9BQXFCLEVBQUUsSUFBWTtJQUNyRCxNQUFNLElBQUksR0FBaUQ7UUFDekQsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO1FBQ2QsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUM1QixDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzRSxDQUFDLE1BQU0sRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0tBQ25DLENBQUM7SUFDRixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQTJCLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RSxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsZ0JBQWdCLENBQ3BDLE9BQXFCLEVBQ3JCLElBQVksRUFDWixHQUFXLEVBQ1gsS0FBa0IsRUFDbEIsWUFBNEQ7SUFFNUQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsQyxNQUFNLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN6QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hGLE1BQU0sSUFBSSxHQUFHLE1BQU0sZUFBZSxDQUFDO1FBQ2pDLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztRQUN4QixPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUM7UUFDbEMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1FBQ2xCLE1BQU0sRUFBRSxvRkFBb0Y7UUFDNUYsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzNCLEdBQUcsQ0FBQyxZQUFZLEVBQUUsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDakYsR0FBRyxDQUFDLFlBQVksRUFBRSxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNsRixDQUFDLENBQUM7SUFDSCxNQUFNLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRmlsZXN5c3RlbSBvdXRib3ggZm9yIHRoZSBuby1TTVRQIGZhbGxiYWNrOiB7QGxpbmsgd3JpdGVPdXRib3hFbWFpbH1cbiAqIHBlcnNpc3RzIG9uZSBkcmFmdGVkIG1lc3NhZ2UgYXMgYSBzdGFuZGFsb25lIEhUTUwgZmlsZSB1bmRlclxuICogYDxkaXI+Lzxmcm9tPi88dGltZXN0YW1wPi08c3ViamVjdC1zbHVnPi5odG1sYCBpbnN0ZWFkIG9mIHNlbmRpbmcgaXQuXG4gKiBUaGlzIGxldHMgdGhlIGFwcHJvdmFsIGZsb3cgYW5kIGFnZW50cyBiZSBleGVyY2lzZWQgZW5kLXRvLWVuZCB3aXRoXG4gKiB6ZXJvIGVtYWlsIGNvbmZpZ3VyYXRpb24gLSBvcGVuIHRoZSBmaWxlIGluIGEgYnJvd3NlciB0byBzZWUgZXhhY3RseVxuICogd2hhdCB3b3VsZCBoYXZlIGdvbmUgb3V0ICh0aGUgSFRNTCBtYXRjaGVzIHRoZSBTTVRQIHNlbmQsIGhlYWRlcnNcbiAqIHRhYmxlIGFzaWRlKS4gVGhlIGJvZHkgaXMgcmVuZGVyZWQgKyBzdHlsZS1pbmxpbmVkIGJ5XG4gKiB7QGxpbmsgcmVuZGVyRW1haWxIdG1sfS4gQXR0YWNobWVudHMgYXJlIGxpc3RlZCBieSBmaWxlbmFtZSBpbiB0aGVcbiAqIGhlYWRlciB0YWJsZSBidXQgbm90IHdyaXR0ZW4gdG8gZGlzayAtIHRoZSBvdXRib3ggcHJldmlld3MgdGhlXG4gKiBlbnZlbG9wZSwgaXQgZG9lc24ndCByZXByb2R1Y2UgdGhlIHdpcmUgcGF5bG9hZC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgbWtkaXIsIHdyaXRlRmlsZSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBqb2luLCByZXNvbHZlIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgc3RyaW5nVXRpbHMgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBFbWFpbE1lc3NhZ2UgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtZW1haWxcIjtcbmltcG9ydCB0eXBlIHsgRW1haWxCcmFuZCB9IGZyb20gXCIuL2JyYW5kLnRzXCI7XG5pbXBvcnQgeyByZW5kZXJFbWFpbEh0bWwsIHR5cGUgRW1haWxIdG1sT3B0aW9ucyB9IGZyb20gXCIuL2VtYWlsLWh0bWwudHNcIjtcblxuLyoqXG4gKiBMb25nZXN0IHN1YmplY3Qgc2x1ZyBrZXB0IGluIGFuIG91dGJveCBmaWxlIG5hbWUsIGxlYXZpbmcgcm9vbSBmb3IgdGhlXG4gKiB0aW1lc3RhbXAgcHJlZml4IGFuZCBleHRlbnNpb24gaW5zaWRlIGNvbW1vbiBmaWxlc3lzdGVtIG5hbWUgbGltaXRzLlxuICovXG5jb25zdCBTVUJKRUNUX1NMVUdfTUFYX0xFTkdUSCA9IDQ4O1xuXG4vKiogRmlsZXN5c3RlbS1zYWZlIHNsdWcgb2YgdGhlIHN1YmplY3QgZm9yIHRoZSBmaWxlIG5hbWUuICovXG5mdW5jdGlvbiBzdWJqZWN0U2x1ZyhzdWJqZWN0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc3RyaW5nVXRpbHMudG9TbHVnV2l0aE9wdGlvbnMoeyBtYXhMZW5ndGg6IFNVQkpFQ1RfU0xVR19NQVhfTEVOR1RIIH0sIHN1YmplY3QpIHx8IFwiZW1haWxcIjtcbn1cblxuLyoqIFRoZSBlbnZlbG9wZSByb3dzIHNob3duIGFib3ZlIHRoZSBib2R5IGluIHRoZSBwcmV2aWV3IGZpbGUuICovXG5mdW5jdGlvbiBoZWFkZXJSb3dzKG1lc3NhZ2U6IEVtYWlsTWVzc2FnZSwgZnJvbTogc3RyaW5nKTogQXJyYXk8cmVhZG9ubHkgW3N0cmluZywgc3RyaW5nXT4ge1xuICBjb25zdCByb3dzOiBBcnJheTxyZWFkb25seSBbc3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWRdPiA9IFtcbiAgICBbXCJGcm9tXCIsIGZyb21dLFxuICAgIFtcIlRvXCIsIG1lc3NhZ2UudG8uam9pbihcIiwgXCIpXSxcbiAgICBbXCJDY1wiLCBtZXNzYWdlLmNjPy5qb2luKFwiLCBcIildLFxuICAgIFtcIkJjY1wiLCBtZXNzYWdlLmJjYz8uam9pbihcIiwgXCIpXSxcbiAgICBbXCJTdWJqZWN0XCIsIG1lc3NhZ2Uuc3ViamVjdF0sXG4gICAgW1wiQXR0YWNobWVudHNcIiwgbWVzc2FnZS5hdHRhY2htZW50cz8ubWFwKChhdHQpID0+IGF0dC5maWxlbmFtZSkuam9pbihcIiwgXCIpXSxcbiAgICBbXCJEYXRlXCIsIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKV0sXG4gIF07XG4gIHJldHVybiByb3dzLmZpbHRlcigocm93KTogcm93IGlzIFtzdHJpbmcsIHN0cmluZ10gPT4gQm9vbGVhbihyb3dbMV0pKTtcbn1cblxuLyoqXG4gKiBXcml0ZSBvbmUgbWVzc2FnZSBhcyBIVE1MIHVuZGVyIGA8ZGlyPi88ZnJvbT4vYCBhbmQgcmV0dXJuIHRoZVxuICogYWJzb2x1dGUgcGF0aC4gVGhlIHBlci1zZW5kZXIgZm9sZGVyIG1pcnJvcnMgdGhlIFNNVFAgYEZyb21gLCBzbyB0ZXN0XG4gKiBvdXRwdXQgZ3JvdXBzIGJ5IHdobyB0aGUgbWVzc2FnZSB3b3VsZCBoYXZlIGJlZW4gc2VudCBhcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlT3V0Ym94RW1haWwoXG4gIG1lc3NhZ2U6IEVtYWlsTWVzc2FnZSxcbiAgZnJvbTogc3RyaW5nLFxuICBkaXI6IHN0cmluZyxcbiAgYnJhbmQ/OiBFbWFpbEJyYW5kLFxuICBwcmVzZW50YXRpb24/OiBQaWNrPEVtYWlsSHRtbE9wdGlvbnMsIFwiaGVhZGluZ1wiIHwgXCJwcmV2aWV3XCI+LFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZm9sZGVyID0gcmVzb2x2ZShkaXIsIGZyb20pO1xuICBhd2FpdCBta2Rpcihmb2xkZXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBjb25zdCBwYXRoID0gam9pbihmb2xkZXIsIGAke0RhdGUubm93KCl9LSR7c3ViamVjdFNsdWcobWVzc2FnZS5zdWJqZWN0KX0uaHRtbGApO1xuICBjb25zdCBodG1sID0gYXdhaXQgcmVuZGVyRW1haWxIdG1sKHtcbiAgICBzdWJqZWN0OiBtZXNzYWdlLnN1YmplY3QsXG4gICAgaGVhZGVyczogaGVhZGVyUm93cyhtZXNzYWdlLCBmcm9tKSxcbiAgICBib2R5OiBtZXNzYWdlLmJvZHksXG4gICAgZm9vdGVyOiBcIkxvY2FsIG91dGJveCBwcmV2aWV3IC0gd3JpdHRlbiB0byBkaXNrLCBub3Qgc2VudCAobm8gU01UUCBjcmVkZW50aWFscyBjb25maWd1cmVkKS5cIixcbiAgICAuLi4oYnJhbmQgPyB7IGJyYW5kIH0gOiB7fSksXG4gICAgLi4uKHByZXNlbnRhdGlvbj8uaGVhZGluZyAhPT0gdW5kZWZpbmVkID8geyBoZWFkaW5nOiBwcmVzZW50YXRpb24uaGVhZGluZyB9IDoge30pLFxuICAgIC4uLihwcmVzZW50YXRpb24/LnByZXZpZXcgIT09IHVuZGVmaW5lZCA/IHsgcHJldmlldzogcHJlc2VudGF0aW9uLnByZXZpZXcgfSA6IHt9KSxcbiAgfSk7XG4gIGF3YWl0IHdyaXRlRmlsZShwYXRoLCBodG1sLCBcInV0ZjhcIik7XG4gIHJldHVybiBwYXRoO1xufVxuIl19
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0Ym94LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL291dGJveC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUgsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUczRCxPQUFPLEVBQUUsZUFBZSxFQUF5QixNQUFNLGlCQUFpQixDQUFDO0FBRXpFOzs7R0FHRztBQUNILE1BQU0sdUJBQXVCLEdBQUcsRUFBRSxDQUFDO0FBRW5DLDZEQUE2RDtBQUM3RCxTQUFTLFdBQVcsQ0FBQyxPQUFlO0lBQ2xDLE9BQU8saUJBQWlCLENBQUMsRUFBRSxTQUFTLEVBQUUsdUJBQXVCLEVBQUUsRUFBRSxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUM7QUFDdkYsQ0FBQztBQUVELGtFQUFrRTtBQUNsRSxTQUFTLFVBQVUsQ0FBQyxPQUFxQixFQUFFLElBQVk7SUFDckQsTUFBTSxJQUFJLEdBQWlEO1FBQ3pELENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztRQUNkLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDNUIsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0UsQ0FBQyxNQUFNLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztLQUNuQyxDQUFDO0lBQ0YsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUEyQixFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEUsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGdCQUFnQixDQUNwQyxPQUFxQixFQUNyQixJQUFZLEVBQ1osR0FBVyxFQUNYLEtBQWtCLEVBQ2xCLFlBQXFFO0lBRXJFLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbEMsTUFBTSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDekMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoRixNQUFNLElBQUksR0FBRyxNQUFNLGVBQWUsQ0FBQztRQUNqQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87UUFDeEIsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDO1FBQ2xDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtRQUNsQixNQUFNLEVBQUUsb0ZBQW9GO1FBQzVGLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMzQixHQUFHLENBQUMsWUFBWSxFQUFFLE9BQU8sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2pGLEdBQUcsQ0FBQyxZQUFZLEVBQUUsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDbEYsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNwQyxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZpbGVzeXN0ZW0gb3V0Ym94IGZvciB0aGUgbm8tU01UUCBmYWxsYmFjazoge0BsaW5rIHdyaXRlT3V0Ym94RW1haWx9XG4gKiBwZXJzaXN0cyBvbmUgZHJhZnRlZCBtZXNzYWdlIGFzIGEgc3RhbmRhbG9uZSBIVE1MIGZpbGUgdW5kZXJcbiAqIGA8ZGlyPi88ZnJvbT4vPHRpbWVzdGFtcD4tPHN1YmplY3Qtc2x1Zz4uaHRtbGAgaW5zdGVhZCBvZiBzZW5kaW5nIGl0LlxuICogVGhpcyBsZXRzIHRoZSBhcHByb3ZhbCBmbG93IGFuZCBhZ2VudHMgYmUgZXhlcmNpc2VkIGVuZC10by1lbmQgd2l0aFxuICogemVybyBlbWFpbCBjb25maWd1cmF0aW9uIC0gb3BlbiB0aGUgZmlsZSBpbiBhIGJyb3dzZXIgdG8gc2VlIGV4YWN0bHlcbiAqIHdoYXQgd291bGQgaGF2ZSBnb25lIG91dCAodGhlIEhUTUwgbWF0Y2hlcyB0aGUgU01UUCBzZW5kLCBoZWFkZXJzXG4gKiB0YWJsZSBhc2lkZSkuIFRoZSBib2R5IGlzIHJlbmRlcmVkICsgc3R5bGUtaW5saW5lZCBieVxuICoge0BsaW5rIHJlbmRlckVtYWlsSHRtbH0uIEF0dGFjaG1lbnRzIGFyZSBsaXN0ZWQgYnkgZmlsZW5hbWUgaW4gdGhlXG4gKiBoZWFkZXIgdGFibGUgYnV0IG5vdCB3cml0dGVuIHRvIGRpc2sgLSB0aGUgb3V0Ym94IHByZXZpZXdzIHRoZVxuICogZW52ZWxvcGUsIGl0IGRvZXNuJ3QgcmVwcm9kdWNlIHRoZSB3aXJlIHBheWxvYWQuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IG1rZGlyLCB3cml0ZUZpbGUgfSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgam9pbiwgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IHRvU2x1Z1dpdGhPcHRpb25zIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHsgRW1haWxNZXNzYWdlIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWVtYWlsXCI7XG5pbXBvcnQgdHlwZSB7IEVtYWlsQnJhbmQgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtZW1haWwtdGVtcGxhdGVcIjtcbmltcG9ydCB7IHJlbmRlckVtYWlsSHRtbCwgdHlwZSBFbWFpbEh0bWxPcHRpb25zIH0gZnJvbSBcIi4vZW1haWwtaHRtbC50c1wiO1xuXG4vKipcbiAqIExvbmdlc3Qgc3ViamVjdCBzbHVnIGtlcHQgaW4gYW4gb3V0Ym94IGZpbGUgbmFtZSwgbGVhdmluZyByb29tIGZvciB0aGVcbiAqIHRpbWVzdGFtcCBwcmVmaXggYW5kIGV4dGVuc2lvbiBpbnNpZGUgY29tbW9uIGZpbGVzeXN0ZW0gbmFtZSBsaW1pdHMuXG4gKi9cbmNvbnN0IFNVQkpFQ1RfU0xVR19NQVhfTEVOR1RIID0gNDg7XG5cbi8qKiBGaWxlc3lzdGVtLXNhZmUgc2x1ZyBvZiB0aGUgc3ViamVjdCBmb3IgdGhlIGZpbGUgbmFtZS4gKi9cbmZ1bmN0aW9uIHN1YmplY3RTbHVnKHN1YmplY3Q6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0b1NsdWdXaXRoT3B0aW9ucyh7IG1heExlbmd0aDogU1VCSkVDVF9TTFVHX01BWF9MRU5HVEggfSwgc3ViamVjdCkgfHwgXCJlbWFpbFwiO1xufVxuXG4vKiogVGhlIGVudmVsb3BlIHJvd3Mgc2hvd24gYWJvdmUgdGhlIGJvZHkgaW4gdGhlIHByZXZpZXcgZmlsZS4gKi9cbmZ1bmN0aW9uIGhlYWRlclJvd3MobWVzc2FnZTogRW1haWxNZXNzYWdlLCBmcm9tOiBzdHJpbmcpOiBBcnJheTxyZWFkb25seSBbc3RyaW5nLCBzdHJpbmddPiB7XG4gIGNvbnN0IHJvd3M6IEFycmF5PHJlYWRvbmx5IFtzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZF0+ID0gW1xuICAgIFtcIkZyb21cIiwgZnJvbV0sXG4gICAgW1wiVG9cIiwgbWVzc2FnZS50by5qb2luKFwiLCBcIildLFxuICAgIFtcIkNjXCIsIG1lc3NhZ2UuY2M/LmpvaW4oXCIsIFwiKV0sXG4gICAgW1wiQmNjXCIsIG1lc3NhZ2UuYmNjPy5qb2luKFwiLCBcIildLFxuICAgIFtcIlN1YmplY3RcIiwgbWVzc2FnZS5zdWJqZWN0XSxcbiAgICBbXCJBdHRhY2htZW50c1wiLCBtZXNzYWdlLmF0dGFjaG1lbnRzPy5tYXAoKGF0dCkgPT4gYXR0LmZpbGVuYW1lKS5qb2luKFwiLCBcIildLFxuICAgIFtcIkRhdGVcIiwgbmV3IERhdGUoKS50b0lTT1N0cmluZygpXSxcbiAgXTtcbiAgcmV0dXJuIHJvd3MuZmlsdGVyKChyb3cpOiByb3cgaXMgW3N0cmluZywgc3RyaW5nXSA9PiBCb29sZWFuKHJvd1sxXSkpO1xufVxuXG4vKipcbiAqIFdyaXRlIG9uZSBtZXNzYWdlIGFzIEhUTUwgdW5kZXIgYDxkaXI+Lzxmcm9tPi9gIGFuZCByZXR1cm4gdGhlXG4gKiBhYnNvbHV0ZSBwYXRoLiBUaGUgcGVyLXNlbmRlciBmb2xkZXIgbWlycm9ycyB0aGUgU01UUCBgRnJvbWAsIHNvIHRlc3RcbiAqIG91dHB1dCBncm91cHMgYnkgd2hvIHRoZSBtZXNzYWdlIHdvdWxkIGhhdmUgYmVlbiBzZW50IGFzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVPdXRib3hFbWFpbChcbiAgbWVzc2FnZTogRW1haWxNZXNzYWdlLFxuICBmcm9tOiBzdHJpbmcsXG4gIGRpcjogc3RyaW5nLFxuICBicmFuZD86IEVtYWlsQnJhbmQsXG4gIHByZXNlbnRhdGlvbj86IFBhcnRpYWw8UGljazxFbWFpbEh0bWxPcHRpb25zLCBcImhlYWRpbmdcIiB8IFwicHJldmlld1wiPj4sXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBmb2xkZXIgPSByZXNvbHZlKGRpciwgZnJvbSk7XG4gIGF3YWl0IG1rZGlyKGZvbGRlciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGNvbnN0IHBhdGggPSBqb2luKGZvbGRlciwgYCR7RGF0ZS5ub3coKX0tJHtzdWJqZWN0U2x1ZyhtZXNzYWdlLnN1YmplY3QpfS5odG1sYCk7XG4gIGNvbnN0IGh0bWwgPSBhd2FpdCByZW5kZXJFbWFpbEh0bWwoe1xuICAgIHN1YmplY3Q6IG1lc3NhZ2Uuc3ViamVjdCxcbiAgICBoZWFkZXJzOiBoZWFkZXJSb3dzKG1lc3NhZ2UsIGZyb20pLFxuICAgIGJvZHk6IG1lc3NhZ2UuYm9keSxcbiAgICBmb290ZXI6IFwiTG9jYWwgb3V0Ym94IHByZXZpZXcgLSB3cml0dGVuIHRvIGRpc2ssIG5vdCBzZW50IChubyBTTVRQIGNyZWRlbnRpYWxzIGNvbmZpZ3VyZWQpLlwiLFxuICAgIC4uLihicmFuZCA/IHsgYnJhbmQgfSA6IHt9KSxcbiAgICAuLi4ocHJlc2VudGF0aW9uPy5oZWFkaW5nICE9PSB1bmRlZmluZWQgPyB7IGhlYWRpbmc6IHByZXNlbnRhdGlvbi5oZWFkaW5nIH0gOiB7fSksXG4gICAgLi4uKHByZXNlbnRhdGlvbj8ucHJldmlldyAhPT0gdW5kZWZpbmVkID8geyBwcmV2aWV3OiBwcmVzZW50YXRpb24ucHJldmlldyB9IDoge30pLFxuICB9KTtcbiAgYXdhaXQgd3JpdGVGaWxlKHBhdGgsIGh0bWwsIFwidXRmOFwiKTtcbiAgcmV0dXJuIHBhdGg7XG59XG4iXX0=