@dbx-tools/email 0.9.154 → 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 +8 -8
- package/lib/index.d.ts +8 -8
- package/lib/index.js +9 -9
- package/lib/src/config.d.ts +1 -1
- package/lib/src/config.js +19 -21
- package/lib/src/email-html.d.ts +0 -3
- package/lib/src/email-html.js +1 -4
- package/lib/src/markdown.d.ts +0 -2
- package/lib/src/markdown.js +2 -4
- package/lib/src/outbox.d.ts +2 -2
- package/lib/src/outbox.js +3 -3
- package/lib/src/plugin.js +10 -10
- package/lib/src/sender.js +7 -7
- package/lib/src/tool.d.ts +2 -2
- package/lib/src/tool.js +7 -7
- package/lib/src/transport.js +5 -5
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -96
- package/src/config.ts +18 -27
- package/src/email-html.ts +0 -4
- package/src/markdown.ts +1 -4
- package/src/outbox.ts +4 -4
- package/src/plugin.ts +9 -10
- package/src/sender.ts +6 -6
- package/src/tool.ts +12 -7
- package/src/transport.ts +5 -5
- package/exports.ts +0 -2
- package/lib/exports.d.ts +0 -2
- package/lib/exports.js +0 -3
- package/lib/src/brand.d.ts +0 -10
- package/lib/src/brand.js +0 -10
- package/src/brand.ts +0 -14
package/lib/src/plugin.js
CHANGED
|
@@ -24,10 +24,10 @@
|
|
|
24
24
|
*/
|
|
25
25
|
import { AuthenticationError, ConfigurationError, ConnectionError, ExecutionError, getExecutionContext, toPlugin, ValidationError, } from "@databricks/appkit";
|
|
26
26
|
import { defineTool } from "@databricks/appkit/beta";
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
30
|
-
import { emailBrandFromContext } from "
|
|
27
|
+
import { ToolRegistryPlugin, getBrandContext } from "@dbx-tools/appkit";
|
|
28
|
+
import { log, toError, trimToNull, ACCESS_TOKEN_HEADER } from "@dbx-tools/shared-core";
|
|
29
|
+
import { emailMessageSchema, } from "@dbx-tools/shared-email";
|
|
30
|
+
import { emailBrandFromContext } from "@dbx-tools/shared-email-template";
|
|
31
31
|
import { EMAIL_CONFIG_SCHEMA } from "./config.js";
|
|
32
32
|
import { EMAIL_SENDERS_SETTINGS, EMAIL_VERIFY_SETTINGS } from "./defaults.js";
|
|
33
33
|
import { isSenderAllowed, listSenderOptions, resolveSenderAddress } from "./sender.js";
|
|
@@ -85,10 +85,10 @@ export class EmailPlugin extends ToolRegistryPlugin {
|
|
|
85
85
|
toolRegistry = {
|
|
86
86
|
[SEND_TOOL]: defineTool({
|
|
87
87
|
description: SEND_EMAIL_DESCRIPTION,
|
|
88
|
-
schema:
|
|
88
|
+
schema: emailMessageSchema,
|
|
89
89
|
annotations: { effect: "write", requiresUserContext: true },
|
|
90
90
|
autoInheritable: false,
|
|
91
|
-
execute: async (args, signal) => this.send(
|
|
91
|
+
execute: async (args, signal) => this.send(emailMessageSchema.parse(args), undefined, signal),
|
|
92
92
|
}),
|
|
93
93
|
};
|
|
94
94
|
/**
|
|
@@ -105,7 +105,7 @@ export class EmailPlugin extends ToolRegistryPlugin {
|
|
|
105
105
|
async setup() {
|
|
106
106
|
const { transporter, config } = getEmailRuntime({
|
|
107
107
|
...this.config,
|
|
108
|
-
brand: this.config.brand ?? emailBrandFromContext(
|
|
108
|
+
brand: this.config.brand ?? emailBrandFromContext(getBrandContext()),
|
|
109
109
|
});
|
|
110
110
|
setEmailExecutor((fn, settings) => this.execute(fn, settings));
|
|
111
111
|
const policy = {
|
|
@@ -128,7 +128,7 @@ export class EmailPlugin extends ToolRegistryPlugin {
|
|
|
128
128
|
host: config.host,
|
|
129
129
|
port: config.port,
|
|
130
130
|
status: verified.status,
|
|
131
|
-
error:
|
|
131
|
+
error: toError(verified.message),
|
|
132
132
|
});
|
|
133
133
|
throw ConfigurationError.invalidConnection("SMTP", `Could not verify ${config.host}:${config.port}. Check SMTP_HOST, SMTP_PORT, SMTP_SECURE, and the credentials, or set EMAIL_OUTBOX_MODE=1 for local outbox testing.`);
|
|
134
134
|
}
|
|
@@ -180,7 +180,7 @@ export class EmailPlugin extends ToolRegistryPlugin {
|
|
|
180
180
|
method: "get",
|
|
181
181
|
path: SENDERS_ROUTE,
|
|
182
182
|
handler: async (req, res) => {
|
|
183
|
-
const oboToken =
|
|
183
|
+
const oboToken = trimToNull(req.header(ACCESS_TOKEN_HEADER));
|
|
184
184
|
const scoped = oboToken === null ? this : this.asUser(req);
|
|
185
185
|
const result = await scoped.executeListSenders();
|
|
186
186
|
if (!result.ok) {
|
|
@@ -300,4 +300,4 @@ function unwrap(result) {
|
|
|
300
300
|
* ```
|
|
301
301
|
*/
|
|
302
302
|
export const email = toPlugin(EmailPlugin);
|
|
303
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFFSCxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsY0FBYyxFQUNkLG1CQUFtQixFQUNuQixRQUFRLEVBQ1IsZUFBZSxHQUtoQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxVQUFVLEVBQXFCLE1BQU0seUJBQXlCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RSxPQUFPLEVBQ0wsS0FBSyxJQUFJLFdBQVcsR0FJckIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbkQsT0FBTyxFQUFFLG1CQUFtQixFQUEwQixNQUFNLGFBQWEsQ0FBQztBQUMxRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkQsT0FBTyxFQUNMLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsU0FBUyxFQUVULGdCQUFnQixFQUNoQixvQkFBb0IsR0FDckIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QiwrRUFBK0U7QUFDL0UsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDO0FBRWpDLDRFQUE0RTtBQUM1RSxNQUFNLFNBQVMsR0FBRyxNQUFN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QUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQzVELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxhQUFhLENBQUMsTUFBYyxFQUFFLE9BQWU7SUFDcEQsSUFBSSxNQUFNLEtBQUssR0FBRztRQUFFLE9BQU8sSUFBSSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEQsSUFBSSxNQUFNLEtBQUssR0FBRztRQUFFLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1RCxJQUFJLE1BQU0sS0FBSyxHQUFHO1FBQUUsT0FBTyxJQUFJLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4RCxPQUFPLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLE1BQU0sQ0FBSSxNQUEwQjtJQUMzQyxJQUFJLE1BQU0sQ0FBQyxFQUFFO1FBQUUsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2xDLE1BQU0sYUFBYSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3JELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFwcEtpdCBwbHVnaW4gKHJlZ2lzdGVyZWQgbmFtZTogYGVtYWlsYCkgdGhhdCBvd25zIHRoZSBTTVRQIHJ1bnRpbWVcbiAqIGZvciBvdXRib3VuZCBtYWlsLiBSZWdpc3RlcmluZyBpdCB2YWxpZGF0ZXMgdGhlIFNNVFAgY29uZmlndXJhdGlvblxuICogYW5kIHZlcmlmaWVzIGNvbm5lY3Rpdml0eSBhdCBzdGFydHVwLCBzbyBhIGJhZCBob3N0IC8gY3JlZGVudGlhbFxuICogc3VyZmFjZXMgaW4gdGhlIGJvb3QgbG9ncyBpbnN0ZWFkIG9mIG9uIHRoZSBmaXJzdCBhcHByb3ZlZCBzZW5kLCBhbmRcbiAqIGluc3RhbGxzIHRoaXMgcGx1Z2luJ3MgYGV4ZWN1dGUoKWAgYXMgdGhlIHJ1bnRpbWUncyBleGVjdXRvciBzbyBldmVyeVxuICogc2VuZCBwaWNrcyB1cCBBcHBLaXQncyByZXRyeSAvIHRpbWVvdXQgLyB0ZWxlbWV0cnkgY2hhaW4uXG4gKlxuICogVGhlIHBsdWdpbiBpcyBhbHNvIGEgYFRvb2xQcm92aWRlcmAsIHNvIGFuIEFwcEtpdCBhZ2VudCBjYW4gcmVhY2ggYW5cbiAqIGBlbWFpbC5zZW5kYCB0b29sIGRpcmVjdGx5OyB0aGUge0BsaW5rIGVtYWlsVG9vbH0gZXhwb3J0IGlzIHRoZSBzYW1lXG4gKiBjYXBhYmlsaXR5IGZvciBhIE1hc3RyYSBhZ2VudC4gQm90aCBzaGFyZSB0aGUgdHJhbnNwb3J0IHByaW1lZCBoZXJlLFxuICogYW5kIHtAbGluayBzZW5kRW1haWx9IGlzIGF2YWlsYWJsZSB0byBub24tYWdlbnQgY2FsbGVycy5cbiAqXG4gKiBDb25maWd1cmF0aW9uIGlzIHRoZSBtYW5pZmVzdC1wdWJsaXNoZWQge0BsaW5rIEVtYWlsUGx1Z2luQ29uZmlnfVxuICogKFNNVFAgaG9zdC9wb3J0L2NyZWRlbnRpYWxzLCBzZW5kZXIgZG9tYWluIG9yIGV4cGxpY2l0IGBmcm9tYCwgdGhlXG4gKiBzZW5kZXIgcG9saWN5LCBhbmQgYW4gb3B0aW9uYWwgYGFsbG93ZWRTZW5kZXJzYCByZXN0cmljdGlvbiksIHdpdGhcbiAqIHVucHJlZml4ZWQgYFNNVFBfKmAgLyBgRU1BSUxfKmAgZW52aXJvbm1lbnQgZmFsbGJhY2tzLlxuICpcbiAqIFRoZSBwbHVnaW4gbW91bnRzIG9uZSByb3V0ZSB1bmRlciBpdHMgYmFzZSBwYXRoIChgL2FwaS9lbWFpbGApOlxuICogYEdFVCAvc2VuZGVyc2AgcmV0dXJucyB0aGUgcGVybWl0dGVkIGBGcm9tYCBvcHRpb25zIGZvciB0aGUgY2FsbGluZ1xuICogdXNlciwgc28gYSBjb21wb3NlIFVJIGNhbiBvZmZlciB0aGVtIGluIGEgZHJvcGRvd24uXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7XG4gIEF1dGhlbnRpY2F0aW9uRXJyb3IsXG4gIENvbmZpZ3VyYXRpb25FcnJvcixcbiAgQ29ubmVjdGlvbkVycm9yLFxuICBFeGVjdXRpb25FcnJvcixcbiAgZ2V0RXhlY3V0aW9uQ29udGV4dCxcbiAgdG9QbHVnaW4sXG4gIFZhbGlkYXRpb25FcnJvcixcbiAgdHlwZSBBcHBLaXRFcnJvcixcbiAgdHlwZSBFeGVjdXRpb25SZXN1bHQsXG4gIHR5cGUgSUFwcFJvdXRlcixcbiAgdHlwZSBQbHVnaW5NYW5pZmVzdCxcbn0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgZGVmaW5lVG9vbCwgdHlwZSBUb29sUmVnaXN0cnkgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0L2JldGFcIjtcbmltcG9ydCB7IGJyYW5kQ29udGV4dCwgVG9vbFJlZ2lzdHJ5UGx1Z2luIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgeyBlcnJvclV0aWxzLCBsb2csIHN0cmluZ1V0aWxzLCB0b2tlbiB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQge1xuICBlbWFpbCBhcyBzaGFyZWRFbWFpbCxcbiAgdHlwZSBFbWFpbE1lc3NhZ2UsXG4gIHR5cGUgRW1haWxSZXN1bHQsXG4gIHR5cGUgRW1haWxTZW5kZXJzLFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtZW1haWxcIjtcbmltcG9ydCB7IGVtYWlsQnJhbmRGcm9tQ29udGV4dCB9IGZyb20gXCIuL2JyYW5kLnRzXCI7XG5pbXBvcnQgeyBFTUFJTF9DT05GSUdfU0NIRU1BLCB0eXBlIEVtYWlsUGx1Z2luQ29uZmlnIH0gZnJvbSBcIi4vY29uZmlnLnRzXCI7XG5pbXBvcnQgeyBFTUFJTF9TRU5ERVJTX1NFVFRJTkdTLCBFTUFJTF9WRVJJRllfU0VUVElOR1MgfSBmcm9tIFwiLi9kZWZhdWx0cy50c1wiO1xuaW1wb3J0IHsgaXNTZW5kZXJBbGxvd2VkLCBsaXN0U2VuZGVyT3B0aW9ucywgcmVzb2x2ZVNlbmRlckFkZHJlc3MgfSBmcm9tIFwiLi9zZW5kZXIudHNcIjtcbmltcG9ydCB7IFNFTkRfRU1BSUxfREVTQ1JJUFRJT04gfSBmcm9tIFwiLi90b29sLnRzXCI7XG5pbXBvcnQge1xuICBnZXRFbWFpbFJ1bnRpbWUsXG4gIHJlc2V0RW1haWxSdW50aW1lLFxuICBzZW5kRW1haWwsXG4gIHR5cGUgU2VuZEVtYWlsT3B0aW9ucyxcbiAgc2V0RW1haWxFeGVjdXRvcixcbiAgdmVyaWZ5RW1haWxUcmFuc3BvcnQsXG59IGZyb20gXCIuL3RyYW5zcG9ydC50c1wiO1xuXG4vKiogTW91bnQtcmVsYXRpdmUgcm91dGUgKHVuZGVyIGAvYXBpL2VtYWlsYCkgZm9yIHRoZSBzZW5kZXItb3B0aW9ucyBsb29rdXAuICovXG5jb25zdCBTRU5ERVJTX1JPVVRFID0gXCIvc2VuZGVyc1wiO1xuXG4vKiogUmVnaXN0cnkga2V5IG9mIHRoZSBhZ2VudCB0b29sLCB3aGljaCBhZ2VudHMgYWRkcmVzcyBhcyBgZW1haWwuc2VuZGAuICovXG5jb25zdCBTRU5EX1RPT0wgPSBcInNlbmRcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcImVtYWlsXCIpO1xuXG4vKipcbiAqIEFwcEtpdCBwbHVnaW4gdGhhdCBjb25maWd1cmVzIGFuZCB2ZXJpZmllcyB0aGUgU01UUCB0cmFuc3BvcnQgdXNlZCBieVxuICogdGhlIGBzZW5kX2VtYWlsYCB0b29sLCBhbmQgZXhwb3NlcyBzZW5kaW5nIGFzIGFuIEFwcEtpdCBhZ2VudCB0b29sLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgY3JlYXRlQXBwLCBzZXJ2ZXIgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG4gKiBpbXBvcnQgeyBlbWFpbCB9IGZyb20gXCJAZGJ4LXRvb2xzL2VtYWlsXCI7XG4gKlxuICogYXdhaXQgY3JlYXRlQXBwKHtcbiAqICAgcGx1Z2luczogW1xuICogICAgIHNlcnZlcigpLFxuICogICAgIGVtYWlsKHtcbiAqICAgICAgIHNtdHA6IHsgaG9zdDogXCJzbXRwLmV4YW1wbGUuY29tXCIsIHVzZXI6IFwiYXBpa2V5XCIsIHBhc3N3b3JkOiBwcm9jZXNzLmVudi5TTVRQX0tFWSB9LFxuICogICAgICAgZG9tYWluOiBcIm1haWwuZXhhbXBsZS5jb21cIixcbiAqICAgICB9KSxcbiAqICAgXSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBFbWFpbFBsdWdpbiBleHRlbmRzIFRvb2xSZWdpc3RyeVBsdWdpbjxFbWFpbFBsdWdpbkNvbmZpZz4ge1xuICBzdGF0aWMgbWFuaWZlc3QgPSB7XG4gICAgbmFtZTogXCJlbWFpbFwiLFxuICAgIGRpc3BsYXlOYW1lOiBcIkVtYWlsXCIsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIlNlbmRzIGFwcHJvdmFsLWdhdGVkIGVtYWlsIG92ZXIgU01UUCwgd2l0aCB0aGUgc2VuZGVyIGRlcml2ZWQgZnJvbSBcIiArXG4gICAgICBcInRoZSBvbi1iZWhhbGYtb2YgdXNlcidzIGFkZHJlc3Mgb24gYSBjb25maWd1cmVkIGRvbWFpbi5cIixcbiAgICBzdGFiaWxpdHk6IFwiYmV0YVwiLFxuICAgIHJlc291cmNlczoge1xuICAgICAgcmVxdWlyZWQ6IFtdLFxuICAgICAgb3B0aW9uYWw6IFtdLFxuICAgIH0sXG4gICAgY29uZmlnOiB7IHNjaGVtYTogRU1BSUxfQ09ORklHX1NDSEVNQSB9LFxuICB9IHNhdGlzZmllcyBQbHVnaW5NYW5pZmVzdDxcImVtYWlsXCI+O1xuXG4gIC8qKlxuICAgKiBUaGUgdG9vbCB0aGlzIHBsdWdpbiBvZmZlcnMgdG8gYW4gQXBwS2l0IGFnZW50LlxuICAgKlxuICAgKiBOb3QgYGF1dG9Jbmhlcml0YWJsZWA6IGEgc2VuZCBpcyBpcnJldmVyc2libGUgYW5kIGxlYXZlcyB0aGUgd29ya3NwYWNlLFxuICAgKiBzbyBpdCBtdXN0IG9ubHkgYXBwZWFyIGluIGFuIGFnZW50IHRoYXQgYXNrZWQgZm9yIGl0IGFuZCBhY2NlcHRlZCB0aGVcbiAgICogc2VuZGVyIHBvbGljeSB0aGF0IGNvbWVzIHdpdGggaXQuXG4gICAqXG4gICAqIGBleGVjdXRlYCByZS1wYXJzZXMgaXRzIGFyZ3VtZW50cyB3aXRoIHRoZSBsb2NhbCBzY2hlbWE6IEFwcEtpdCB2YWxpZGF0ZXNcbiAgICogYWdhaW5zdCB0aGUgc2FtZSBzY2hlbWEgZmlyc3QsIGJ1dCByZS1wYXJzaW5nIGlzIHdoYXQgZ2l2ZXMgdGhlIGJvZHkgdHlwZWRcbiAgICogYXJndW1lbnRzIGluc3RlYWQgb2YgYHVua25vd25gLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRvb2xSZWdpc3RyeTogVG9vbFJlZ2lzdHJ5ID0ge1xuICAgIFtTRU5EX1RPT0xdOiBkZWZpbmVUb29sKHtcbiAgICAgIGRlc2NyaXB0aW9uOiBTRU5EX0VNQUlMX0RFU0NSSVBUSU9OLFxuICAgICAgc2NoZW1hOiBzaGFyZWRFbWFpbC5lbWFpbE1lc3NhZ2VTY2hlbWEsXG4gICAgICBhbm5vdGF0aW9uczogeyBlZmZlY3Q6IFwid3JpdGVcIiwgcmVxdWlyZXNVc2VyQ29udGV4dDogdHJ1ZSB9LFxuICAgICAgYXV0b0luaGVyaXRhYmxlOiBmYWxzZSxcbiAgICAgIGV4ZWN1dGU6IGFzeW5jIChhcmdzLCBzaWduYWwpID0+XG4gICAgICAgIHRoaXMuc2VuZChzaGFyZWRFbWFpbC5lbWFpbE1lc3NhZ2VTY2hlbWEucGFyc2UoYXJncyksIHVuZGVmaW5lZCwgc2lnbmFsKSxcbiAgICB9KSxcbiAgfTtcblxuICAvKipcbiAgICogUHJpbWUgdGhlIHNoYXJlZCBydW50aW1lIGZyb20gdGhpcyBwbHVnaW4ncyBjb25maWcgKG92ZXIgZW52KSwgcm91dGUgdGhlXG4gICAqIHRvb2xzJyBzZW5kcyB0aHJvdWdoIHRoaXMgcGx1Z2luJ3MgaW50ZXJjZXB0b3IgY2hhaW4sIGFuZCBsb2cgdGhlXG4gICAqIGVmZmVjdGl2ZSBzZW5kZXIgcG9saWN5IHNvIGFuIGFjdGl2ZSByZXN0cmljdGlvbiBpcyBvYnZpb3VzIGF0IGJvb3QuIEluXG4gICAqIFNNVFAgbW9kZSwgZmFpbCBzZXR1cCB3aGVuIHRoZSB0cmFuc3BvcnQgY2Fubm90IGJlIHZlcmlmaWVkOiBhIGJhZCBob3N0XG4gICAqIG9yIGNyZWRlbnRpYWwgaXMgYSBkZXBsb3ktdGltZSBtaXN0YWtlIGFuZCBzaG91bGQgc3RvcCB0aGUgYXBwIHJhdGhlclxuICAgKiB0aGFuIHdhaXQgZm9yIGEgdXNlciB0byBhcHByb3ZlIGEgc2VuZCB0aGF0IGNhbm5vdCB3b3JrLiBXaXRoIG5vIFNNVFBcbiAgICogY3JlZGVudGlhbHMgdGhlIHJ1bnRpbWUgaXMgaW4gZmlsZS9vdXRib3ggbW9kZSAob25seSB3aGVuXG4gICAqIGBFTUFJTF9PVVRCT1hfTU9ERWAgaXMgc2V0KSwgbG9nZ2VkIGxvdWRseSBoZXJlIHNvIGl0IGlzIG9idmlvdXMgbWFpbFxuICAgKiBpcyBiZWluZyB3cml0dGVuIHRvIGRpc2sgcmF0aGVyIHRoYW4gc2VudC5cbiAgICovXG4gIG92ZXJyaWRlIGFzeW5jIHNldHVwKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgdHJhbnNwb3J0ZXIsIGNvbmZpZyB9ID0gZ2V0RW1haWxSdW50aW1lKHtcbiAgICAgIC4uLnRoaXMuY29uZmlnLFxuICAgICAgYnJhbmQ6IHRoaXMuY29uZmlnLmJyYW5kID8/IGVtYWlsQnJhbmRGcm9tQ29udGV4dChicmFuZENvbnRleHQuZ2V0QnJhbmRDb250ZXh0KCkpLFxuICAgIH0pO1xuICAgIHNldEVtYWlsRXhlY3V0b3IoKGZuLCBzZXR0aW5ncykgPT4gdGhpcy5leGVjdXRlKGZuLCBzZXR0aW5ncykpO1xuICAgIGNvbnN0IHBvbGljeSA9IHtcbiAgICAgIG1vZGU6IGNvbmZpZy5tb2RlLFxuICAgICAgc2VuZGVyUG9saWN5OiBjb25maWcuc2VuZGVyUG9saWN5LFxuICAgICAgcmVzdHJpY3RlZDogY29uZmlnLmFsbG93ZWRTZW5kZXJzLmxlbmd0aCA+IDAsXG4gICAgICAuLi4oY29uZmlnLmFsbG93ZWRTZW5kZXJzLmxlbmd0aCA+IDAgPyB7IGFsbG93ZWRTZW5kZXJzOiBjb25maWcuYWxsb3dlZFNlbmRlcnMgfSA6IHt9KSxcbiAgICB9O1xuICAgIGlmIChjb25maWcubW9kZSA9PT0gXCJmaWxlXCIpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwib3V0Ym94OmVuYWJsZWRcIiwge1xuICAgICAgICBkaXI6IGNvbmZpZy5vdXREaXIsXG4gICAgICAgIHJlYXNvbjogXCJubyBTTVRQIGNyZWRlbnRpYWxzIGNvbmZpZ3VyZWQ7IGVtYWlscyBhcmUgd3JpdHRlbiB0byBkaXNrIGluc3RlYWQgb2Ygc2VudFwiLFxuICAgICAgfSk7XG4gICAgICBsb2dnZXIuaW5mbyhcInJlYWR5XCIsIHBvbGljeSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHZlcmlmaWVkID0gYXdhaXQgdGhpcy5leGVjdXRlKFxuICAgICAgYXN5bmMgKHNpZ25hbCkgPT4gdmVyaWZ5RW1haWxUcmFuc3BvcnQodHJhbnNwb3J0ZXIsIHNpZ25hbCksXG4gICAgICBFTUFJTF9WRVJJRllfU0VUVElOR1MsXG4gICAgKTtcbiAgICBpZiAoIXZlcmlmaWVkLm9rKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoXCJzbXRwOnVudmVyaWZpZWRcIiwge1xuICAgICAgICBob3N0OiBjb25maWcuaG9zdCxcbiAgICAgICAgcG9ydDogY29uZmlnLnBvcnQsXG4gICAgICAgIHN0YXR1czogdmVyaWZpZWQuc3RhdHVzLFxuICAgICAgICBlcnJvcjogZXJyb3JVdGlscy50b0Vycm9yKHZlcmlmaWVkLm1lc3NhZ2UpLFxuICAgICAgfSk7XG4gICAgICB0aHJvdyBDb25maWd1cmF0aW9uRXJyb3IuaW52YWxpZENvbm5lY3Rpb24oXG4gICAgICAgIFwiU01UUFwiLFxuICAgICAgICBgQ291bGQgbm90IHZlcmlmeSAke2NvbmZpZy5ob3N0fToke2NvbmZpZy5wb3J0fS4gQ2hlY2sgU01UUF9IT1NULCBTTVRQX1BPUlQsIFNNVFBfU0VDVVJFLCBhbmQgdGhlIGNyZWRlbnRpYWxzLCBvciBzZXQgRU1BSUxfT1VUQk9YX01PREU9MSBmb3IgbG9jYWwgb3V0Ym94IHRlc3RpbmcuYCxcbiAgICAgICk7XG4gICAgfVxuICAgIGxvZ2dlci5pbmZvKFwicmVhZHlcIiwge1xuICAgICAgLi4ucG9saWN5LFxuICAgICAgaG9zdDogY29uZmlnLmhvc3QsXG4gICAgICBwb3J0OiBjb25maWcucG9ydCxcbiAgICAgIHNlY3VyZTogY29uZmlnLnNlY3VyZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBDbG9zZSB0aGUgU01UUCBjb25uZWN0aW9uIHBvb2wuIElkZW1wb3RlbnQuICovXG4gIGFzeW5jIHNodXRkb3duKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJlc2V0RW1haWxSdW50aW1lKCk7XG4gIH1cblxuICAvKipcbiAgICogQWJvcnQgaW4tZmxpZ2h0IHdvcmsuIEFwcEtpdCdzIGdyYWNlZnVsIHNodXRkb3duIG9ubHkgaW52b2tlcyB0aGlzIGhvb2sgLVxuICAgKiBpdCBuZXZlciBjYWxscyB7QGxpbmsgc2h1dGRvd259IC0gc28gdGhlIFNNVFAgcG9vbCBpcyBjbG9zZWQgZnJvbSBoZXJlIG9yXG4gICAqIGl0IGxlYWtzIGF0IFNJR1RFUk0uIFRoZSB0ZWFyZG93biBpcyBzeW5jaHJvbm91cyBhbmQgaWRlbXBvdGVudCwgc28gdGhlXG4gICAqIHVuLWF3YWl0ZWQgY2FsbCBjb3N0cyBub3RoaW5nLlxuICAgKi9cbiAgb3ZlcnJpZGUgYWJvcnRBY3RpdmVPcGVyYXRpb25zKCk6IHZvaWQge1xuICAgIHN1cGVyLmFib3J0QWN0aXZlT3BlcmF0aW9ucygpO1xuICAgIHZvaWQgdGhpcy5zaHV0ZG93bigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9zZSB0aGUgc2VuZGVyLW9wdGlvbnMgbG9va3VwIHNvIFVJIGNvbXBvc2Ugdmlld3MgY2FuIHBvcHVsYXRlIGFcbiAgICogYEZyb21gIGRyb3Bkb3duIGZyb20gdGhlIGNvbmZpZ3VyZWQgYWxsb3ctbGlzdC4gTW91bnRlZCB1bmRlciB0aGVcbiAgICogcGx1Z2luIGJhc2UgcGF0aCwgaS5lLiBgR0VUIC9hcGkvZW1haWwvc2VuZGVyc2AuIFJ1bnMgaW4gdGhlIE9CT1xuICAgKiB1c2VyIHNjb3BlIHNvIGRvbWFpbiB3aWxkY2FyZHMgcmVzb2x2ZSBhZ2FpbnN0IHRoZSBjYWxsZXIncyBvd25cbiAgICogbG9jYWwgcGFydC5cbiAgICpcbiAgICogT0JPIGlzIHVzZWQgb25seSBXSEVOIHRoZSByZXF1ZXN0IGNhbiBzdXBwb3J0IGl0LiBgYXNVc2VyKHJlcSlgIHRocm93c1xuICAgKiBgQXV0aGVudGljYXRpb25FcnJvcmAgb3V0c2lkZSBgTk9ERV9FTlY9ZGV2ZWxvcG1lbnRgIGlmIHRoZSByZXF1ZXN0IGNhcnJpZXNcbiAgICogbm8gZm9yd2FyZGVkIE9CTyB0b2tlbiwgYW5kIEFwcEtpdCBkb2VzIG5vdCBjYXRjaCBhIHJlamVjdGlvbiByYWlzZWQgaW5zaWRlXG4gICAqIGEgaGFuZGxlciAtIHNvIHVuY29uZGl0aW9uYWxseSB3cmFwcGluZyB0aGlzIHJvdXRlIHRha2VzIHRoZSBwcm9jZXNzIGRvd25cbiAgICogZm9yIGEgY2FsbGVyIHRoYXQgYXV0aGVudGljYXRlZCBzb21lIG90aGVyIHdheSAoYSBgQGRieC10b29scy90dW5uZWxgXG4gICAqIE9UUCBzZXNzaW9uLCBhIGhlYWx0aCBwcm9iZSwgYSBsb2NhbCBgY3VybGApLiBUaGUgdXNlciBjb250ZXh0IGlzIG9ubHkgZXZlclxuICAgKiBhbiBFTlJJQ0hNRU5UIGhlcmU6IHdpdGhvdXQgaXQsIHdpbGRjYXJkIHNlbmRlcnMgc2ltcGx5IGV4cGFuZCBhZ2FpbnN0IG5vXG4gICAqIGxvY2FsIHBhcnQuIERlZ3JhZGluZyB0byB0aGUgc2VydmljZSBjb250ZXh0IHRoZXJlZm9yZSBhbnN3ZXJzIGNvcnJlY3RseVxuICAgKiBpbnN0ZWFkIG9mIGZhaWxpbmcsIGFuZCBhIGZyb250LWRvb3IgcmVxdWVzdCBpcyB1bmNoYW5nZWQuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIHNhbWUgcnVsZSBgQGRieC10b29scy9hcHBraXRgJ3MgYGlkZW50aXR5YCBtb2R1bGUgYXBwbGllcyBpblxuICAgKiBgXCJhdXRvXCJgIG1vZGU7IHRoZSBoZWFkZXIgY2hlY2sgaXMgaW5saW5lZCByYXRoZXIgdGhhbiB0YWtpbmcgYSBkZXBlbmRlbmN5XG4gICAqIG9uIHRoYXQgcGFja2FnZSBmb3Igb25lIHByZWRpY2F0ZS5cbiAgICovXG4gIG92ZXJyaWRlIGluamVjdFJvdXRlcyhyb3V0ZXI6IElBcHBSb3V0ZXIpOiB2b2lkIHtcbiAgICB0aGlzLnJvdXRlKHJvdXRlciwge1xuICAgICAgbmFtZTogXCJsaXN0U2VuZGVyc1wiLFxuICAgICAgbWV0aG9kOiBcImdldFwiLFxuICAgICAgcGF0aDogU0VOREVSU19ST1VURSxcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgICAgICBjb25zdCBvYm9Ub2tlbiA9IHN0cmluZ1V0aWxzLnRyaW1Ub051bGwocmVxLmhlYWRlcih0b2tlbi5BQ0NFU1NfVE9LRU5fSEVBREVSKSk7XG4gICAgICAgIGNvbnN0IHNjb3BlZCA9IG9ib1Rva2VuID09PSBudWxsID8gdGhpcyA6IHRoaXMuYXNVc2VyKHJlcSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNjb3BlZC5leGVjdXRlTGlzdFNlbmRlcnMoKTtcbiAgICAgICAgaWYgKCFyZXN1bHQub2spIHtcbiAgICAgICAgICByZXMuc3RhdHVzKHJlc3VsdC5zdGF0dXMpLmpzb24oeyBlcnJvcjogcmVzdWx0Lm1lc3NhZ2UgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlcy5qc29uKHJlc3VsdC5kYXRhKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBvdmVycmlkZSBleHBvcnRzKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvKipcbiAgICAgICAqIFNlbmQgYSBtZXNzYWdlIGltbWVkaWF0ZWx5IGZyb20gYGZyb21gIHRocm91Z2ggdGhlIHNoYXJlZFxuICAgICAgICogdHJhbnNwb3J0LCBieXBhc3NpbmcgdGhlIGFwcHJvdmFsIGZsb3cuIEZvciBhZ2VudC1kcml2ZW4gc2VuZHNcbiAgICAgICAqIHVzZSB7QGxpbmsgZW1haWxUb29sfSBpbnN0ZWFkLlxuICAgICAgICovXG4gICAgICBzZW5kRW1haWw6IChcbiAgICAgICAgbWVzc2FnZTogRW1haWxNZXNzYWdlLFxuICAgICAgICBmcm9tOiBzdHJpbmcsXG4gICAgICAgIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICAgICAgICBvcHRpb25zPzogU2VuZEVtYWlsT3B0aW9ucyxcbiAgICAgICk6IFByb21pc2U8RW1haWxSZXN1bHQ+ID0+IHRoaXMuc2VuZChtZXNzYWdlLCBmcm9tLCBzaWduYWwsIG9wdGlvbnMpLFxuICAgICAgLyoqXG4gICAgICAgKiBTZW5kZXIgb3B0aW9ucyBmb3IgdGhlIGN1cnJlbnQgdXNlciAodGhlIGBHRVQgL3NlbmRlcnNgIHBheWxvYWQpLlxuICAgICAgICogQXBwS2l0IHdyYXBzIHRoaXMgd2l0aCBgYXNVc2VyKHJlcSlgIGZvciBPQk8gc2NvcGluZy5cbiAgICAgICAqL1xuICAgICAgbGlzdFNlbmRlcnM6IGFzeW5jICgpOiBQcm9taXNlPEVtYWlsU2VuZGVycz4gPT4gdW53cmFwKGF3YWl0IHRoaXMuZXhlY3V0ZUxpc3RTZW5kZXJzKCkpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBvbmUgbWVzc2FnZSwgcmVzb2x2aW5nIHRoZSBzZW5kZXIgZm9yIHRoZSBjYWxsZXIgaW4gc2NvcGUgd2hlblxuICAgKiBgZnJvbWAgaXMgbm90IHBpbm5lZC4gVGhlIGludGVyY2VwdG9yIGNoYWluIGlzIGFwcGxpZWQgaW5zaWRlXG4gICAqIHtAbGluayBzZW5kRW1haWx9IHRocm91Z2ggdGhlIGV4ZWN1dG9yIGluc3RhbGxlZCBhdCBzZXR1cCwgc28gdGhpcyBtdXN0XG4gICAqIG5vdCB3cmFwIGl0IGFnYWluLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzZW5kKFxuICAgIG1lc3NhZ2U6IEVtYWlsTWVzc2FnZSxcbiAgICBmcm9tOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICAgb3B0aW9ucz86IFNlbmRFbWFpbE9wdGlvbnMsXG4gICk6IFByb21pc2U8RW1haWxSZXN1bHQ+IHtcbiAgICByZXR1cm4gc2VuZEVtYWlsKG1lc3NhZ2UsIGZyb20gPz8gdGhpcy5yZXNvbHZlU2VuZGVyKCksIHNpZ25hbCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKiogUnVuIHRoZSBzZW5kZXItb3B0aW9ucyBsb29rdXAgdGhyb3VnaCB0aGUgcGx1Z2luJ3MgaW50ZXJjZXB0b3IgY2hhaW4uICovXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZUxpc3RTZW5kZXJzKCk6IFByb21pc2U8RXhlY3V0aW9uUmVzdWx0PEVtYWlsU2VuZGVycz4+IHtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKGFzeW5jICgpID0+IHRoaXMubGlzdFNlbmRlcnMoKSwgRU1BSUxfU0VOREVSU19TRVRUSU5HUyk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgYEZyb21gIG9wdGlvbnMgb2ZmZXJlZCB0byB0aGUgY3VycmVudCB1c2VyOiB0aGUgY29uY3JldGVcbiAgICogYWRkcmVzc2VzIHRoZSBlZmZlY3RpdmUgYWxsb3ctbGlzdCBwZXJtaXRzIChkb21haW4gd2lsZGNhcmRzIGV4cGFuZGVkXG4gICAqIGFnYWluc3QgdGhlIE9CTyB1c2VyJ3MgbG9jYWwgcGFydCksIHRoZSBkZWZhdWx0IGFtb25nIHRoZW0sIGFuZFxuICAgKiB3aGV0aGVyIHRoZSBsaXN0IGlzIGFuIGVuZm9yY2VkIHJlc3RyaWN0aW9uLiBTZWVcbiAgICoge0BsaW5rIGxpc3RTZW5kZXJPcHRpb25zfS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbGlzdFNlbmRlcnMoKTogUHJvbWlzZTxFbWFpbFNlbmRlcnM+IHtcbiAgICBjb25zdCB7IGNvbmZpZyB9ID0gZ2V0RW1haWxSdW50aW1lKCk7XG4gICAgY29uc3Qgc2VuZGVycyA9IGxpc3RTZW5kZXJPcHRpb25zKGNvbmZpZywgY3VycmVudFVzZXJFbWFpbCgpKTtcbiAgICAvLyBQcmVmZXIgdGhlIGFkZHJlc3MgYSBzZW5kIHdvdWxkIGFjdHVhbGx5IGRlZmF1bHQgdG87IGZhbGwgYmFjayB0b1xuICAgIC8vIHRoZSBmaXJzdCBvZmZlcmVkIG9wdGlvbiB3aGVuIHRoYXQgY2FuJ3QgYmUgcmVzb2x2ZWQgLyBwZXJtaXR0ZWQuXG4gICAgbGV0IGRlZmF1bHRTZW5kZXIgPSBzZW5kZXJzWzBdO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNvbHZlZCA9IHRoaXMucmVzb2x2ZVNlbmRlcigpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoaXNTZW5kZXJBbGxvd2VkKHJlc29sdmVkLCBjb25maWcuYWxsb3dlZFNlbmRlcnMpKSBkZWZhdWx0U2VuZGVyID0gcmVzb2x2ZWQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBLZWVwIHRoZSBmaXJzdCBvZmZlcmVkIG9wdGlvbiAob3Igbm9uZSkgYXMgdGhlIGRlZmF1bHQuXG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBzZW5kZXJzLFxuICAgICAgLi4uKGRlZmF1bHRTZW5kZXIgPyB7IGRlZmF1bHRTZW5kZXIgfSA6IHt9KSxcbiAgICAgIHJlc3RyaWN0ZWQ6IGNvbmZpZy5hbGxvd2VkU2VuZGVycy5sZW5ndGggPiAwLFxuICAgIH07XG4gIH1cblxuICAvKiogVGhlIGBGcm9tYCBhIHNlbmQgZGVmYXVsdHMgdG8gZm9yIHRoZSBjYWxsZXIgaW4gc2NvcGUuICovXG4gIHByaXZhdGUgcmVzb2x2ZVNlbmRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXNvbHZlU2VuZGVyQWRkcmVzcyhnZXRFbWFpbFJ1bnRpbWUoKS5jb25maWcsIGN1cnJlbnRVc2VyRW1haWwoKSk7XG4gIH1cbn1cblxuLyoqIFRoZSBPQk8gdXNlcidzIGFkZHJlc3MsIG9yIHVuZGVmaW5lZCBvdXRzaWRlIGEgdXNlciBjb250ZXh0LiAqL1xuZnVuY3Rpb24gY3VycmVudFVzZXJFbWFpbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBjdHggPSBnZXRFeGVjdXRpb25Db250ZXh0KCk7XG4gIHJldHVybiBcImlzVXNlckNvbnRleHRcIiBpbiBjdHggPyBjdHgudXNlckVtYWlsIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJlLXJhaXNlIGEgZmFpbGVkIGV4ZWN1dGlvbiBhcyB0aGUgQXBwS2l0IGVycm9yIGNsYXNzIHRoYXQgYWxyZWFkeSBjYXJyaWVzXG4gKiB0aGUgc3RhdHVzIEFwcEtpdCByZXNvbHZlZCwgc28gYSBwcm9ncmFtbWF0aWMgY2FsbGVyIHNlZXMgdGhlIHNhbWUgNDAwIC9cbiAqIDQwMSAvIDUwMyBhbiBIVFRQIGNhbGxlciB3b3VsZC5cbiAqL1xuZnVuY3Rpb24gdG9BcHBLaXRFcnJvcihzdGF0dXM6IG51bWJlciwgbWVzc2FnZTogc3RyaW5nKTogQXBwS2l0RXJyb3Ige1xuICBpZiAoc3RhdHVzID09PSA0MDApIHJldHVybiBuZXcgVmFsaWRhdGlvbkVycm9yKG1lc3NhZ2UpO1xuICBpZiAoc3RhdHVzID09PSA0MDEpIHJldHVybiBuZXcgQXV0aGVudGljYXRpb25FcnJvcihtZXNzYWdlKTtcbiAgaWYgKHN0YXR1cyA9PT0gNTAzKSByZXR1cm4gbmV3IENvbm5lY3Rpb25FcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIG5ldyBFeGVjdXRpb25FcnJvcihtZXNzYWdlKTtcbn1cblxuLyoqXG4gKiBTdXJmYWNlIGEgZmFpbGVkIHtAbGluayBFeGVjdXRpb25SZXN1bHR9IHRvIGEgcHJvZ3JhbW1hdGljIGNhbGxlciBhcyBhXG4gKiB0aHJvdy4gSFRUUCBoYW5kbGVycyBtYXAgYHN0YXR1c2Agb250byB0aGUgcmVzcG9uc2UgaW5zdGVhZC5cbiAqL1xuZnVuY3Rpb24gdW53cmFwPFQ+KHJlc3VsdDogRXhlY3V0aW9uUmVzdWx0PFQ+KTogVCB7XG4gIGlmIChyZXN1bHQub2spIHJldHVybiByZXN1bHQuZGF0YTtcbiAgdGhyb3cgdG9BcHBLaXRFcnJvcihyZXN1bHQuc3RhdHVzLCByZXN1bHQubWVzc2FnZSk7XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgdGhlIGVtYWlsIHBsdWdpbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGNyZWF0ZUFwcCwgc2VydmVyIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuICogaW1wb3J0IHsgZGVmYXVsdEVtYWlsQnJhbmQsIGVtYWlsIH0gZnJvbSBcIkBkYngtdG9vbHMvZW1haWxcIjtcbiAqXG4gKiBhd2FpdCBjcmVhdGVBcHAoe1xuICogICBwbHVnaW5zOiBbXG4gKiAgICAgc2VydmVyKCksXG4gKiAgICAgZW1haWwoe1xuICogICAgICAgZG9tYWluOiBcIm1haWwuZXhhbXBsZS5jb21cIixcbiAqICAgICAgIGFsbG93ZWRTZW5kZXJzOiBbXCIqQG1haWwuZXhhbXBsZS5jb21cIl0sXG4gKiAgICAgICBicmFuZDogZGVmYXVsdEVtYWlsQnJhbmQsXG4gKiAgICAgfSksXG4gKiAgIF0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgZW1haWwgPSB0b1BsdWdpbihFbWFpbFBsdWdpbik7XG4iXX0=
|
|
303
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFFSCxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsY0FBYyxFQUNkLG1CQUFtQixFQUNuQixRQUFRLEVBQ1IsZUFBZSxHQUtoQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxVQUFVLEVBQXFCLE1BQU0seUJBQXlCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZGLE9BQU8sRUFJTCxrQkFBa0IsR0FDbkIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQTBCLE1BQU0sYUFBYSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsZ0JBQWdCLEVBQ2hCLG9CQUFvQixHQUNyQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLCtFQUErRTtBQUMvRSxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUM7QUFFakMsNEVBQTRFO0FBQzVFLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FB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RztBQUNILFNBQVMsYUFBYSxDQUFDLE1BQWMsRUFBRSxPQUFlO0lBQ3BELElBQUksTUFBTSxLQUFLLEdBQUc7UUFBRSxPQUFPLElBQUksZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hELElBQUksTUFBTSxLQUFLLEdBQUc7UUFBRSxPQUFPLElBQUksbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUQsSUFBSSxNQUFNLEtBQUssR0FBRztRQUFFLE9BQU8sSUFBSSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEQsT0FBTyxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNyQyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxNQUFNLENBQUksTUFBMEI7SUFDM0MsSUFBSSxNQUFNLENBQUMsRUFBRTtRQUFFLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQztJQUNsQyxNQUFNLGFBQWEsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNyRCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBcHBLaXQgcGx1Z2luIChyZWdpc3RlcmVkIG5hbWU6IGBlbWFpbGApIHRoYXQgb3ducyB0aGUgU01UUCBydW50aW1lXG4gKiBmb3Igb3V0Ym91bmQgbWFpbC4gUmVnaXN0ZXJpbmcgaXQgdmFsaWRhdGVzIHRoZSBTTVRQIGNvbmZpZ3VyYXRpb25cbiAqIGFuZCB2ZXJpZmllcyBjb25uZWN0aXZpdHkgYXQgc3RhcnR1cCwgc28gYSBiYWQgaG9zdCAvIGNyZWRlbnRpYWxcbiAqIHN1cmZhY2VzIGluIHRoZSBib290IGxvZ3MgaW5zdGVhZCBvZiBvbiB0aGUgZmlyc3QgYXBwcm92ZWQgc2VuZCwgYW5kXG4gKiBpbnN0YWxscyB0aGlzIHBsdWdpbidzIGBleGVjdXRlKClgIGFzIHRoZSBydW50aW1lJ3MgZXhlY3V0b3Igc28gZXZlcnlcbiAqIHNlbmQgcGlja3MgdXAgQXBwS2l0J3MgcmV0cnkgLyB0aW1lb3V0IC8gdGVsZW1ldHJ5IGNoYWluLlxuICpcbiAqIFRoZSBwbHVnaW4gaXMgYWxzbyBhIGBUb29sUHJvdmlkZXJgLCBzbyBhbiBBcHBLaXQgYWdlbnQgY2FuIHJlYWNoIGFuXG4gKiBgZW1haWwuc2VuZGAgdG9vbCBkaXJlY3RseTsgdGhlIHtAbGluayBlbWFpbFRvb2x9IGV4cG9ydCBpcyB0aGUgc2FtZVxuICogY2FwYWJpbGl0eSBmb3IgYSBNYXN0cmEgYWdlbnQuIEJvdGggc2hhcmUgdGhlIHRyYW5zcG9ydCBwcmltZWQgaGVyZSxcbiAqIGFuZCB7QGxpbmsgc2VuZEVtYWlsfSBpcyBhdmFpbGFibGUgdG8gbm9uLWFnZW50IGNhbGxlcnMuXG4gKlxuICogQ29uZmlndXJhdGlvbiBpcyB0aGUgbWFuaWZlc3QtcHVibGlzaGVkIHtAbGluayBFbWFpbFBsdWdpbkNvbmZpZ31cbiAqIChTTVRQIGhvc3QvcG9ydC9jcmVkZW50aWFscywgc2VuZGVyIGRvbWFpbiBvciBleHBsaWNpdCBgZnJvbWAsIHRoZVxuICogc2VuZGVyIHBvbGljeSwgYW5kIGFuIG9wdGlvbmFsIGBhbGxvd2VkU2VuZGVyc2AgcmVzdHJpY3Rpb24pLCB3aXRoXG4gKiB1bnByZWZpeGVkIGBTTVRQXypgIC8gYEVNQUlMXypgIGVudmlyb25tZW50IGZhbGxiYWNrcy5cbiAqXG4gKiBUaGUgcGx1Z2luIG1vdW50cyBvbmUgcm91dGUgdW5kZXIgaXRzIGJhc2UgcGF0aCAoYC9hcGkvZW1haWxgKTpcbiAqIGBHRVQgL3NlbmRlcnNgIHJldHVybnMgdGhlIHBlcm1pdHRlZCBgRnJvbWAgb3B0aW9ucyBmb3IgdGhlIGNhbGxpbmdcbiAqIHVzZXIsIHNvIGEgY29tcG9zZSBVSSBjYW4gb2ZmZXIgdGhlbSBpbiBhIGRyb3Bkb3duLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQge1xuICBBdXRoZW50aWNhdGlvbkVycm9yLFxuICBDb25maWd1cmF0aW9uRXJyb3IsXG4gIENvbm5lY3Rpb25FcnJvcixcbiAgRXhlY3V0aW9uRXJyb3IsXG4gIGdldEV4ZWN1dGlvbkNvbnRleHQsXG4gIHRvUGx1Z2luLFxuICBWYWxpZGF0aW9uRXJyb3IsXG4gIHR5cGUgQXBwS2l0RXJyb3IsXG4gIHR5cGUgRXhlY3V0aW9uUmVzdWx0LFxuICB0eXBlIElBcHBSb3V0ZXIsXG4gIHR5cGUgUGx1Z2luTWFuaWZlc3QsXG59IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGRlZmluZVRvb2wsIHR5cGUgVG9vbFJlZ2lzdHJ5IH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdC9iZXRhXCI7XG5pbXBvcnQgeyBUb29sUmVnaXN0cnlQbHVnaW4sIGdldEJyYW5kQ29udGV4dCB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuaW1wb3J0IHsgbG9nLCB0b0Vycm9yLCB0cmltVG9OdWxsLCBBQ0NFU1NfVE9LRU5fSEVBREVSIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7XG4gIHR5cGUgRW1haWxNZXNzYWdlLFxuICB0eXBlIEVtYWlsUmVzdWx0LFxuICB0eXBlIEVtYWlsU2VuZGVycyxcbiAgZW1haWxNZXNzYWdlU2NoZW1hLFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtZW1haWxcIjtcbmltcG9ydCB7IGVtYWlsQnJhbmRGcm9tQ29udGV4dCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1lbWFpbC10ZW1wbGF0ZVwiO1xuaW1wb3J0IHsgRU1BSUxfQ09ORklHX1NDSEVNQSwgdHlwZSBFbWFpbFBsdWdpbkNvbmZpZyB9IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuaW1wb3J0IHsgRU1BSUxfU0VOREVSU19TRVRUSU5HUywgRU1BSUxfVkVSSUZZX1NFVFRJTkdTIH0gZnJvbSBcIi4vZGVmYXVsdHMudHNcIjtcbmltcG9ydCB7IGlzU2VuZGVyQWxsb3dlZCwgbGlzdFNlbmRlck9wdGlvbnMsIHJlc29sdmVTZW5kZXJBZGRyZXNzIH0gZnJvbSBcIi4vc2VuZGVyLnRzXCI7XG5pbXBvcnQgeyBTRU5EX0VNQUlMX0RFU0NSSVBUSU9OIH0gZnJvbSBcIi4vdG9vbC50c1wiO1xuaW1wb3J0IHtcbiAgZ2V0RW1haWxSdW50aW1lLFxuICByZXNldEVtYWlsUnVudGltZSxcbiAgc2VuZEVtYWlsLFxuICB0eXBlIFNlbmRFbWFpbE9wdGlvbnMsXG4gIHNldEVtYWlsRXhlY3V0b3IsXG4gIHZlcmlmeUVtYWlsVHJhbnNwb3J0LFxufSBmcm9tIFwiLi90cmFuc3BvcnQudHNcIjtcblxuLyoqIE1vdW50LXJlbGF0aXZlIHJvdXRlICh1bmRlciBgL2FwaS9lbWFpbGApIGZvciB0aGUgc2VuZGVyLW9wdGlvbnMgbG9va3VwLiAqL1xuY29uc3QgU0VOREVSU19ST1VURSA9IFwiL3NlbmRlcnNcIjtcblxuLyoqIFJlZ2lzdHJ5IGtleSBvZiB0aGUgYWdlbnQgdG9vbCwgd2hpY2ggYWdlbnRzIGFkZHJlc3MgYXMgYGVtYWlsLnNlbmRgLiAqL1xuY29uc3QgU0VORF9UT09MID0gXCJzZW5kXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJlbWFpbFwiKTtcblxuLyoqXG4gKiBBcHBLaXQgcGx1Z2luIHRoYXQgY29uZmlndXJlcyBhbmQgdmVyaWZpZXMgdGhlIFNNVFAgdHJhbnNwb3J0IHVzZWQgYnlcbiAqIHRoZSBgc2VuZF9lbWFpbGAgdG9vbCwgYW5kIGV4cG9zZXMgc2VuZGluZyBhcyBhbiBBcHBLaXQgYWdlbnQgdG9vbC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGNyZWF0ZUFwcCwgc2VydmVyIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuICogaW1wb3J0IHsgZW1haWwgfSBmcm9tIFwiQGRieC10b29scy9lbWFpbFwiO1xuICpcbiAqIGF3YWl0IGNyZWF0ZUFwcCh7XG4gKiAgIHBsdWdpbnM6IFtcbiAqICAgICBzZXJ2ZXIoKSxcbiAqICAgICBlbWFpbCh7XG4gKiAgICAgICBzbXRwOiB7IGhvc3Q6IFwic210cC5leGFtcGxlLmNvbVwiLCB1c2VyOiBcImFwaWtleVwiLCBwYXNzd29yZDogcHJvY2Vzcy5lbnYuU01UUF9LRVkgfSxcbiAqICAgICAgIGRvbWFpbjogXCJtYWlsLmV4YW1wbGUuY29tXCIsXG4gKiAgICAgfSksXG4gKiAgIF0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgRW1haWxQbHVnaW4gZXh0ZW5kcyBUb29sUmVnaXN0cnlQbHVnaW48RW1haWxQbHVnaW5Db25maWc+IHtcbiAgc3RhdGljIG1hbmlmZXN0ID0ge1xuICAgIG5hbWU6IFwiZW1haWxcIixcbiAgICBkaXNwbGF5TmFtZTogXCJFbWFpbFwiLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJTZW5kcyBhcHByb3ZhbC1nYXRlZCBlbWFpbCBvdmVyIFNNVFAsIHdpdGggdGhlIHNlbmRlciBkZXJpdmVkIGZyb20gXCIgK1xuICAgICAgXCJ0aGUgb24tYmVoYWxmLW9mIHVzZXIncyBhZGRyZXNzIG9uIGEgY29uZmlndXJlZCBkb21haW4uXCIsXG4gICAgc3RhYmlsaXR5OiBcImJldGFcIixcbiAgICByZXNvdXJjZXM6IHtcbiAgICAgIHJlcXVpcmVkOiBbXSxcbiAgICAgIG9wdGlvbmFsOiBbXSxcbiAgICB9LFxuICAgIGNvbmZpZzogeyBzY2hlbWE6IEVNQUlMX0NPTkZJR19TQ0hFTUEgfSxcbiAgfSBzYXRpc2ZpZXMgUGx1Z2luTWFuaWZlc3Q8XCJlbWFpbFwiPjtcblxuICAvKipcbiAgICogVGhlIHRvb2wgdGhpcyBwbHVnaW4gb2ZmZXJzIHRvIGFuIEFwcEtpdCBhZ2VudC5cbiAgICpcbiAgICogTm90IGBhdXRvSW5oZXJpdGFibGVgOiBhIHNlbmQgaXMgaXJyZXZlcnNpYmxlIGFuZCBsZWF2ZXMgdGhlIHdvcmtzcGFjZSxcbiAgICogc28gaXQgbXVzdCBvbmx5IGFwcGVhciBpbiBhbiBhZ2VudCB0aGF0IGFza2VkIGZvciBpdCBhbmQgYWNjZXB0ZWQgdGhlXG4gICAqIHNlbmRlciBwb2xpY3kgdGhhdCBjb21lcyB3aXRoIGl0LlxuICAgKlxuICAgKiBgZXhlY3V0ZWAgcmUtcGFyc2VzIGl0cyBhcmd1bWVudHMgd2l0aCB0aGUgbG9jYWwgc2NoZW1hOiBBcHBLaXQgdmFsaWRhdGVzXG4gICAqIGFnYWluc3QgdGhlIHNhbWUgc2NoZW1hIGZpcnN0LCBidXQgcmUtcGFyc2luZyBpcyB3aGF0IGdpdmVzIHRoZSBib2R5IHR5cGVkXG4gICAqIGFyZ3VtZW50cyBpbnN0ZWFkIG9mIGB1bmtub3duYC5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSB0b29sUmVnaXN0cnk6IFRvb2xSZWdpc3RyeSA9IHtcbiAgICBbU0VORF9UT09MXTogZGVmaW5lVG9vbCh7XG4gICAgICBkZXNjcmlwdGlvbjogU0VORF9FTUFJTF9ERVNDUklQVElPTixcbiAgICAgIHNjaGVtYTogZW1haWxNZXNzYWdlU2NoZW1hLFxuICAgICAgYW5ub3RhdGlvbnM6IHsgZWZmZWN0OiBcIndyaXRlXCIsIHJlcXVpcmVzVXNlckNvbnRleHQ6IHRydWUgfSxcbiAgICAgIGF1dG9Jbmhlcml0YWJsZTogZmFsc2UsXG4gICAgICBleGVjdXRlOiBhc3luYyAoYXJncywgc2lnbmFsKSA9PiB0aGlzLnNlbmQoZW1haWxNZXNzYWdlU2NoZW1hLnBhcnNlKGFyZ3MpLCB1bmRlZmluZWQsIHNpZ25hbCksXG4gICAgfSksXG4gIH07XG5cbiAgLyoqXG4gICAqIFByaW1lIHRoZSBzaGFyZWQgcnVudGltZSBmcm9tIHRoaXMgcGx1Z2luJ3MgY29uZmlnIChvdmVyIGVudiksIHJvdXRlIHRoZVxuICAgKiB0b29scycgc2VuZHMgdGhyb3VnaCB0aGlzIHBsdWdpbidzIGludGVyY2VwdG9yIGNoYWluLCBhbmQgbG9nIHRoZVxuICAgKiBlZmZlY3RpdmUgc2VuZGVyIHBvbGljeSBzbyBhbiBhY3RpdmUgcmVzdHJpY3Rpb24gaXMgb2J2aW91cyBhdCBib290LiBJblxuICAgKiBTTVRQIG1vZGUsIGZhaWwgc2V0dXAgd2hlbiB0aGUgdHJhbnNwb3J0IGNhbm5vdCBiZSB2ZXJpZmllZDogYSBiYWQgaG9zdFxuICAgKiBvciBjcmVkZW50aWFsIGlzIGEgZGVwbG95LXRpbWUgbWlzdGFrZSBhbmQgc2hvdWxkIHN0b3AgdGhlIGFwcCByYXRoZXJcbiAgICogdGhhbiB3YWl0IGZvciBhIHVzZXIgdG8gYXBwcm92ZSBhIHNlbmQgdGhhdCBjYW5ub3Qgd29yay4gV2l0aCBubyBTTVRQXG4gICAqIGNyZWRlbnRpYWxzIHRoZSBydW50aW1lIGlzIGluIGZpbGUvb3V0Ym94IG1vZGUgKG9ubHkgd2hlblxuICAgKiBgRU1BSUxfT1VUQk9YX01PREVgIGlzIHNldCksIGxvZ2dlZCBsb3VkbHkgaGVyZSBzbyBpdCBpcyBvYnZpb3VzIG1haWxcbiAgICogaXMgYmVpbmcgd3JpdHRlbiB0byBkaXNrIHJhdGhlciB0aGFuIHNlbnQuXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBzZXR1cCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHRyYW5zcG9ydGVyLCBjb25maWcgfSA9IGdldEVtYWlsUnVudGltZSh7XG4gICAgICAuLi50aGlzLmNvbmZpZyxcbiAgICAgIGJyYW5kOiB0aGlzLmNvbmZpZy5icmFuZCA/PyBlbWFpbEJyYW5kRnJvbUNvbnRleHQoZ2V0QnJhbmRDb250ZXh0KCkpLFxuICAgIH0pO1xuICAgIHNldEVtYWlsRXhlY3V0b3IoKGZuLCBzZXR0aW5ncykgPT4gdGhpcy5leGVjdXRlKGZuLCBzZXR0aW5ncykpO1xuICAgIGNvbnN0IHBvbGljeSA9IHtcbiAgICAgIG1vZGU6IGNvbmZpZy5tb2RlLFxuICAgICAgc2VuZGVyUG9saWN5OiBjb25maWcuc2VuZGVyUG9saWN5LFxuICAgICAgcmVzdHJpY3RlZDogY29uZmlnLmFsbG93ZWRTZW5kZXJzLmxlbmd0aCA+IDAsXG4gICAgICAuLi4oY29uZmlnLmFsbG93ZWRTZW5kZXJzLmxlbmd0aCA+IDAgPyB7IGFsbG93ZWRTZW5kZXJzOiBjb25maWcuYWxsb3dlZFNlbmRlcnMgfSA6IHt9KSxcbiAgICB9O1xuICAgIGlmIChjb25maWcubW9kZSA9PT0gXCJmaWxlXCIpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwib3V0Ym94OmVuYWJsZWRcIiwge1xuICAgICAgICBkaXI6IGNvbmZpZy5vdXREaXIsXG4gICAgICAgIHJlYXNvbjogXCJubyBTTVRQIGNyZWRlbnRpYWxzIGNvbmZpZ3VyZWQ7IGVtYWlscyBhcmUgd3JpdHRlbiB0byBkaXNrIGluc3RlYWQgb2Ygc2VudFwiLFxuICAgICAgfSk7XG4gICAgICBsb2dnZXIuaW5mbyhcInJlYWR5XCIsIHBvbGljeSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHZlcmlmaWVkID0gYXdhaXQgdGhpcy5leGVjdXRlKFxuICAgICAgYXN5bmMgKHNpZ25hbCkgPT4gdmVyaWZ5RW1haWxUcmFuc3BvcnQodHJhbnNwb3J0ZXIsIHNpZ25hbCksXG4gICAgICBFTUFJTF9WRVJJRllfU0VUVElOR1MsXG4gICAgKTtcbiAgICBpZiAoIXZlcmlmaWVkLm9rKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoXCJzbXRwOnVudmVyaWZpZWRcIiwge1xuICAgICAgICBob3N0OiBjb25maWcuaG9zdCxcbiAgICAgICAgcG9ydDogY29uZmlnLnBvcnQsXG4gICAgICAgIHN0YXR1czogdmVyaWZpZWQuc3RhdHVzLFxuICAgICAgICBlcnJvcjogdG9FcnJvcih2ZXJpZmllZC5tZXNzYWdlKSxcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgQ29uZmlndXJhdGlvbkVycm9yLmludmFsaWRDb25uZWN0aW9uKFxuICAgICAgICBcIlNNVFBcIixcbiAgICAgICAgYENvdWxkIG5vdCB2ZXJpZnkgJHtjb25maWcuaG9zdH06JHtjb25maWcucG9ydH0uIENoZWNrIFNNVFBfSE9TVCwgU01UUF9QT1JULCBTTVRQX1NFQ1VSRSwgYW5kIHRoZSBjcmVkZW50aWFscywgb3Igc2V0IEVNQUlMX09VVEJPWF9NT0RFPTEgZm9yIGxvY2FsIG91dGJveCB0ZXN0aW5nLmAsXG4gICAgICApO1xuICAgIH1cbiAgICBsb2dnZXIuaW5mbyhcInJlYWR5XCIsIHtcbiAgICAgIC4uLnBvbGljeSxcbiAgICAgIGhvc3Q6IGNvbmZpZy5ob3N0LFxuICAgICAgcG9ydDogY29uZmlnLnBvcnQsXG4gICAgICBzZWN1cmU6IGNvbmZpZy5zZWN1cmUsXG4gICAgfSk7XG4gIH1cblxuICAvKiogQ2xvc2UgdGhlIFNNVFAgY29ubmVjdGlvbiBwb29sLiBJZGVtcG90ZW50LiAqL1xuICBhc3luYyBzaHV0ZG93bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXNldEVtYWlsUnVudGltZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFib3J0IGluLWZsaWdodCB3b3JrLiBBcHBLaXQncyBncmFjZWZ1bCBzaHV0ZG93biBvbmx5IGludm9rZXMgdGhpcyBob29rIC1cbiAgICogaXQgbmV2ZXIgY2FsbHMge0BsaW5rIHNodXRkb3dufSAtIHNvIHRoZSBTTVRQIHBvb2wgaXMgY2xvc2VkIGZyb20gaGVyZSBvclxuICAgKiBpdCBsZWFrcyBhdCBTSUdURVJNLiBUaGUgdGVhcmRvd24gaXMgc3luY2hyb25vdXMgYW5kIGlkZW1wb3RlbnQsIHNvIHRoZVxuICAgKiB1bi1hd2FpdGVkIGNhbGwgY29zdHMgbm90aGluZy5cbiAgICovXG4gIG92ZXJyaWRlIGFib3J0QWN0aXZlT3BlcmF0aW9ucygpOiB2b2lkIHtcbiAgICBzdXBlci5hYm9ydEFjdGl2ZU9wZXJhdGlvbnMoKTtcbiAgICB2b2lkIHRoaXMuc2h1dGRvd24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvc2UgdGhlIHNlbmRlci1vcHRpb25zIGxvb2t1cCBzbyBVSSBjb21wb3NlIHZpZXdzIGNhbiBwb3B1bGF0ZSBhXG4gICAqIGBGcm9tYCBkcm9wZG93biBmcm9tIHRoZSBjb25maWd1cmVkIGFsbG93LWxpc3QuIE1vdW50ZWQgdW5kZXIgdGhlXG4gICAqIHBsdWdpbiBiYXNlIHBhdGgsIGkuZS4gYEdFVCAvYXBpL2VtYWlsL3NlbmRlcnNgLiBSdW5zIGluIHRoZSBPQk9cbiAgICogdXNlciBzY29wZSBzbyBkb21haW4gd2lsZGNhcmRzIHJlc29sdmUgYWdhaW5zdCB0aGUgY2FsbGVyJ3Mgb3duXG4gICAqIGxvY2FsIHBhcnQuXG4gICAqXG4gICAqIE9CTyBpcyB1c2VkIG9ubHkgV0hFTiB0aGUgcmVxdWVzdCBjYW4gc3VwcG9ydCBpdC4gYGFzVXNlcihyZXEpYCB0aHJvd3NcbiAgICogYEF1dGhlbnRpY2F0aW9uRXJyb3JgIG91dHNpZGUgYE5PREVfRU5WPWRldmVsb3BtZW50YCBpZiB0aGUgcmVxdWVzdCBjYXJyaWVzXG4gICAqIG5vIGZvcndhcmRlZCBPQk8gdG9rZW4sIGFuZCBBcHBLaXQgZG9lcyBub3QgY2F0Y2ggYSByZWplY3Rpb24gcmFpc2VkIGluc2lkZVxuICAgKiBhIGhhbmRsZXIgLSBzbyB1bmNvbmRpdGlvbmFsbHkgd3JhcHBpbmcgdGhpcyByb3V0ZSB0YWtlcyB0aGUgcHJvY2VzcyBkb3duXG4gICAqIGZvciBhIGNhbGxlciB0aGF0IGF1dGhlbnRpY2F0ZWQgc29tZSBvdGhlciB3YXkgKGEgYEBkYngtdG9vbHMvdHVubmVsYFxuICAgKiBPVFAgc2Vzc2lvbiwgYSBoZWFsdGggcHJvYmUsIGEgbG9jYWwgYGN1cmxgKS4gVGhlIHVzZXIgY29udGV4dCBpcyBvbmx5IGV2ZXJcbiAgICogYW4gRU5SSUNITUVOVCBoZXJlOiB3aXRob3V0IGl0LCB3aWxkY2FyZCBzZW5kZXJzIHNpbXBseSBleHBhbmQgYWdhaW5zdCBub1xuICAgKiBsb2NhbCBwYXJ0LiBEZWdyYWRpbmcgdG8gdGhlIHNlcnZpY2UgY29udGV4dCB0aGVyZWZvcmUgYW5zd2VycyBjb3JyZWN0bHlcbiAgICogaW5zdGVhZCBvZiBmYWlsaW5nLCBhbmQgYSBmcm9udC1kb29yIHJlcXVlc3QgaXMgdW5jaGFuZ2VkLlxuICAgKlxuICAgKiBUaGlzIGlzIHRoZSBzYW1lIHJ1bGUgYEBkYngtdG9vbHMvYXBwa2l0YCdzIGBpZGVudGl0eWAgbW9kdWxlIGFwcGxpZXMgaW5cbiAgICogYFwiYXV0b1wiYCBtb2RlOyB0aGUgaGVhZGVyIGNoZWNrIGlzIGlubGluZWQgcmF0aGVyIHRoYW4gdGFraW5nIGEgZGVwZW5kZW5jeVxuICAgKiBvbiB0aGF0IHBhY2thZ2UgZm9yIG9uZSBwcmVkaWNhdGUuXG4gICAqL1xuICBvdmVycmlkZSBpbmplY3RSb3V0ZXMocm91dGVyOiBJQXBwUm91dGVyKTogdm9pZCB7XG4gICAgdGhpcy5yb3V0ZShyb3V0ZXIsIHtcbiAgICAgIG5hbWU6IFwibGlzdFNlbmRlcnNcIixcbiAgICAgIG1ldGhvZDogXCJnZXRcIixcbiAgICAgIHBhdGg6IFNFTkRFUlNfUk9VVEUsXG4gICAgICBoYW5kbGVyOiBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICAgICAgY29uc3Qgb2JvVG9rZW4gPSB0cmltVG9OdWxsKHJlcS5oZWFkZXIoQUNDRVNTX1RPS0VOX0hFQURFUikpO1xuICAgICAgICBjb25zdCBzY29wZWQgPSBvYm9Ub2tlbiA9PT0gbnVsbCA/IHRoaXMgOiB0aGlzLmFzVXNlcihyZXEpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzY29wZWQuZXhlY3V0ZUxpc3RTZW5kZXJzKCk7XG4gICAgICAgIGlmICghcmVzdWx0Lm9rKSB7XG4gICAgICAgICAgcmVzLnN0YXR1cyhyZXN1bHQuc3RhdHVzKS5qc29uKHsgZXJyb3I6IHJlc3VsdC5tZXNzYWdlIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXMuanNvbihyZXN1bHQuZGF0YSk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgZXhwb3J0cygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLyoqXG4gICAgICAgKiBTZW5kIGEgbWVzc2FnZSBpbW1lZGlhdGVseSBmcm9tIGBmcm9tYCB0aHJvdWdoIHRoZSBzaGFyZWRcbiAgICAgICAqIHRyYW5zcG9ydCwgYnlwYXNzaW5nIHRoZSBhcHByb3ZhbCBmbG93LiBGb3IgYWdlbnQtZHJpdmVuIHNlbmRzXG4gICAgICAgKiB1c2Uge0BsaW5rIGVtYWlsVG9vbH0gaW5zdGVhZC5cbiAgICAgICAqL1xuICAgICAgc2VuZEVtYWlsOiAoXG4gICAgICAgIG1lc3NhZ2U6IEVtYWlsTWVzc2FnZSxcbiAgICAgICAgZnJvbTogc3RyaW5nLFxuICAgICAgICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgICAgICAgb3B0aW9ucz86IFNlbmRFbWFpbE9wdGlvbnMsXG4gICAgICApOiBQcm9taXNlPEVtYWlsUmVzdWx0PiA9PiB0aGlzLnNlbmQobWVzc2FnZSwgZnJvbSwgc2lnbmFsLCBvcHRpb25zKSxcbiAgICAgIC8qKlxuICAgICAgICogU2VuZGVyIG9wdGlvbnMgZm9yIHRoZSBjdXJyZW50IHVzZXIgKHRoZSBgR0VUIC9zZW5kZXJzYCBwYXlsb2FkKS5cbiAgICAgICAqIEFwcEtpdCB3cmFwcyB0aGlzIHdpdGggYGFzVXNlcihyZXEpYCBmb3IgT0JPIHNjb3BpbmcuXG4gICAgICAgKi9cbiAgICAgIGxpc3RTZW5kZXJzOiBhc3luYyAoKTogUHJvbWlzZTxFbWFpbFNlbmRlcnM+ID0+IHVud3JhcChhd2FpdCB0aGlzLmV4ZWN1dGVMaXN0U2VuZGVycygpKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgb25lIG1lc3NhZ2UsIHJlc29sdmluZyB0aGUgc2VuZGVyIGZvciB0aGUgY2FsbGVyIGluIHNjb3BlIHdoZW5cbiAgICogYGZyb21gIGlzIG5vdCBwaW5uZWQuIFRoZSBpbnRlcmNlcHRvciBjaGFpbiBpcyBhcHBsaWVkIGluc2lkZVxuICAgKiB7QGxpbmsgc2VuZEVtYWlsfSB0aHJvdWdoIHRoZSBleGVjdXRvciBpbnN0YWxsZWQgYXQgc2V0dXAsIHNvIHRoaXMgbXVzdFxuICAgKiBub3Qgd3JhcCBpdCBhZ2Fpbi5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2VuZChcbiAgICBtZXNzYWdlOiBFbWFpbE1lc3NhZ2UsXG4gICAgZnJvbTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICAgIG9wdGlvbnM/OiBTZW5kRW1haWxPcHRpb25zLFxuICApOiBQcm9taXNlPEVtYWlsUmVzdWx0PiB7XG4gICAgcmV0dXJuIHNlbmRFbWFpbChtZXNzYWdlLCBmcm9tID8/IHRoaXMucmVzb2x2ZVNlbmRlcigpLCBzaWduYWwsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqIFJ1biB0aGUgc2VuZGVyLW9wdGlvbnMgbG9va3VwIHRocm91Z2ggdGhlIHBsdWdpbidzIGludGVyY2VwdG9yIGNoYWluLiAqL1xuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGVMaXN0U2VuZGVycygpOiBQcm9taXNlPEV4ZWN1dGlvblJlc3VsdDxFbWFpbFNlbmRlcnM+PiB7XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShhc3luYyAoKSA9PiB0aGlzLmxpc3RTZW5kZXJzKCksIEVNQUlMX1NFTkRFUlNfU0VUVElOR1MpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIGBGcm9tYCBvcHRpb25zIG9mZmVyZWQgdG8gdGhlIGN1cnJlbnQgdXNlcjogdGhlIGNvbmNyZXRlXG4gICAqIGFkZHJlc3NlcyB0aGUgZWZmZWN0aXZlIGFsbG93LWxpc3QgcGVybWl0cyAoZG9tYWluIHdpbGRjYXJkcyBleHBhbmRlZFxuICAgKiBhZ2FpbnN0IHRoZSBPQk8gdXNlcidzIGxvY2FsIHBhcnQpLCB0aGUgZGVmYXVsdCBhbW9uZyB0aGVtLCBhbmRcbiAgICogd2hldGhlciB0aGUgbGlzdCBpcyBhbiBlbmZvcmNlZCByZXN0cmljdGlvbi4gU2VlXG4gICAqIHtAbGluayBsaXN0U2VuZGVyT3B0aW9uc30uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGxpc3RTZW5kZXJzKCk6IFByb21pc2U8RW1haWxTZW5kZXJzPiB7XG4gICAgY29uc3QgeyBjb25maWcgfSA9IGdldEVtYWlsUnVudGltZSgpO1xuICAgIGNvbnN0IHNlbmRlcnMgPSBsaXN0U2VuZGVyT3B0aW9ucyhjb25maWcsIGN1cnJlbnRVc2VyRW1haWwoKSk7XG4gICAgLy8gUHJlZmVyIHRoZSBhZGRyZXNzIGEgc2VuZCB3b3VsZCBhY3R1YWxseSBkZWZhdWx0IHRvOyBmYWxsIGJhY2sgdG9cbiAgICAvLyB0aGUgZmlyc3Qgb2ZmZXJlZCBvcHRpb24gd2hlbiB0aGF0IGNhbid0IGJlIHJlc29sdmVkIC8gcGVybWl0dGVkLlxuICAgIGxldCBkZWZhdWx0U2VuZGVyID0gc2VuZGVyc1swXTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmVTZW5kZXIoKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGlzU2VuZGVyQWxsb3dlZChyZXNvbHZlZCwgY29uZmlnLmFsbG93ZWRTZW5kZXJzKSkgZGVmYXVsdFNlbmRlciA9IHJlc29sdmVkO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gS2VlcCB0aGUgZmlyc3Qgb2ZmZXJlZCBvcHRpb24gKG9yIG5vbmUpIGFzIHRoZSBkZWZhdWx0LlxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgc2VuZGVycyxcbiAgICAgIC4uLihkZWZhdWx0U2VuZGVyID8geyBkZWZhdWx0U2VuZGVyIH0gOiB7fSksXG4gICAgICByZXN0cmljdGVkOiBjb25maWcuYWxsb3dlZFNlbmRlcnMubGVuZ3RoID4gMCxcbiAgICB9O1xuICB9XG5cbiAgLyoqIFRoZSBgRnJvbWAgYSBzZW5kIGRlZmF1bHRzIHRvIGZvciB0aGUgY2FsbGVyIGluIHNjb3BlLiAqL1xuICBwcml2YXRlIHJlc29sdmVTZW5kZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVzb2x2ZVNlbmRlckFkZHJlc3MoZ2V0RW1haWxSdW50aW1lKCkuY29uZmlnLCBjdXJyZW50VXNlckVtYWlsKCkpO1xuICB9XG59XG5cbi8qKiBUaGUgT0JPIHVzZXIncyBhZGRyZXNzLCBvciB1bmRlZmluZWQgb3V0c2lkZSBhIHVzZXIgY29udGV4dC4gKi9cbmZ1bmN0aW9uIGN1cnJlbnRVc2VyRW1haWwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgY3R4ID0gZ2V0RXhlY3V0aW9uQ29udGV4dCgpO1xuICByZXR1cm4gXCJpc1VzZXJDb250ZXh0XCIgaW4gY3R4ID8gY3R4LnVzZXJFbWFpbCA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZS1yYWlzZSBhIGZhaWxlZCBleGVjdXRpb24gYXMgdGhlIEFwcEtpdCBlcnJvciBjbGFzcyB0aGF0IGFscmVhZHkgY2Fycmllc1xuICogdGhlIHN0YXR1cyBBcHBLaXQgcmVzb2x2ZWQsIHNvIGEgcHJvZ3JhbW1hdGljIGNhbGxlciBzZWVzIHRoZSBzYW1lIDQwMCAvXG4gKiA0MDEgLyA1MDMgYW4gSFRUUCBjYWxsZXIgd291bGQuXG4gKi9cbmZ1bmN0aW9uIHRvQXBwS2l0RXJyb3Ioc3RhdHVzOiBudW1iZXIsIG1lc3NhZ2U6IHN0cmluZyk6IEFwcEtpdEVycm9yIHtcbiAgaWYgKHN0YXR1cyA9PT0gNDAwKSByZXR1cm4gbmV3IFZhbGlkYXRpb25FcnJvcihtZXNzYWdlKTtcbiAgaWYgKHN0YXR1cyA9PT0gNDAxKSByZXR1cm4gbmV3IEF1dGhlbnRpY2F0aW9uRXJyb3IobWVzc2FnZSk7XG4gIGlmIChzdGF0dXMgPT09IDUwMykgcmV0dXJuIG5ldyBDb25uZWN0aW9uRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBuZXcgRXhlY3V0aW9uRXJyb3IobWVzc2FnZSk7XG59XG5cbi8qKlxuICogU3VyZmFjZSBhIGZhaWxlZCB7QGxpbmsgRXhlY3V0aW9uUmVzdWx0fSB0byBhIHByb2dyYW1tYXRpYyBjYWxsZXIgYXMgYVxuICogdGhyb3cuIEhUVFAgaGFuZGxlcnMgbWFwIGBzdGF0dXNgIG9udG8gdGhlIHJlc3BvbnNlIGluc3RlYWQuXG4gKi9cbmZ1bmN0aW9uIHVud3JhcDxUPihyZXN1bHQ6IEV4ZWN1dGlvblJlc3VsdDxUPik6IFQge1xuICBpZiAocmVzdWx0Lm9rKSByZXR1cm4gcmVzdWx0LmRhdGE7XG4gIHRocm93IHRvQXBwS2l0RXJyb3IocmVzdWx0LnN0YXR1cywgcmVzdWx0Lm1lc3NhZ2UpO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVyIHRoZSBlbWFpbCBwbHVnaW4uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBjcmVhdGVBcHAsIHNlcnZlciB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbiAqIGltcG9ydCB7IGRlZmF1bHRFbWFpbEJyYW5kLCBlbWFpbCB9IGZyb20gXCJAZGJ4LXRvb2xzL2VtYWlsXCI7XG4gKlxuICogYXdhaXQgY3JlYXRlQXBwKHtcbiAqICAgcGx1Z2luczogW1xuICogICAgIHNlcnZlcigpLFxuICogICAgIGVtYWlsKHtcbiAqICAgICAgIGRvbWFpbjogXCJtYWlsLmV4YW1wbGUuY29tXCIsXG4gKiAgICAgICBhbGxvd2VkU2VuZGVyczogW1wiKkBtYWlsLmV4YW1wbGUuY29tXCJdLFxuICogICAgICAgYnJhbmQ6IGRlZmF1bHRFbWFpbEJyYW5kLFxuICogICAgIH0pLFxuICogICBdLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IGVtYWlsID0gdG9QbHVnaW4oRW1haWxQbHVnaW4pO1xuIl19
|
package/lib/src/sender.js
CHANGED
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
* @module
|
|
28
28
|
*/
|
|
29
29
|
import { ConfigurationError, ValidationError } from "@databricks/appkit";
|
|
30
|
-
import { log,
|
|
30
|
+
import { log, parseEmails, trimToNull } from "@dbx-tools/shared-core";
|
|
31
31
|
const logger = log.logger("email/sender");
|
|
32
32
|
/**
|
|
33
33
|
* Re-home a user's local part on `domain`. Throws when no usable local part is
|
|
@@ -51,7 +51,7 @@ export function deriveSenderAddress(userEmail, domain) {
|
|
|
51
51
|
* restriction".
|
|
52
52
|
*/
|
|
53
53
|
export function parseAllowedSenders(raw) {
|
|
54
|
-
return
|
|
54
|
+
return parseEmails(raw, { lowercase: true });
|
|
55
55
|
}
|
|
56
56
|
/** The `@domain` suffix a wildcard / bare-domain pattern matches, else null. */
|
|
57
57
|
function patternDomainSuffix(pattern) {
|
|
@@ -116,13 +116,13 @@ export const SYSTEM_SENDER_LOCAL_PART = "no-reply";
|
|
|
116
116
|
* result into the sender allow-list before any send happens.
|
|
117
117
|
*/
|
|
118
118
|
export function systemSenderAddress(source) {
|
|
119
|
-
const explicit =
|
|
119
|
+
const explicit = trimToNull(source.systemFrom);
|
|
120
120
|
if (explicit)
|
|
121
121
|
return explicit;
|
|
122
|
-
const domain =
|
|
122
|
+
const domain = trimToNull(source.domain);
|
|
123
123
|
if (domain)
|
|
124
124
|
return `${SYSTEM_SENDER_LOCAL_PART}@${domain}`;
|
|
125
|
-
return
|
|
125
|
+
return trimToNull(source.from) ?? undefined;
|
|
126
126
|
}
|
|
127
127
|
/**
|
|
128
128
|
* The `From` for a send with no user in scope. Throws when no sender source is
|
|
@@ -145,7 +145,7 @@ export function resolveSystemSenderAddress(config) {
|
|
|
145
145
|
* none of those yield an address.
|
|
146
146
|
*/
|
|
147
147
|
export function resolveSenderAddress(config, userEmail) {
|
|
148
|
-
const email =
|
|
148
|
+
const email = trimToNull(userEmail);
|
|
149
149
|
if (!email)
|
|
150
150
|
return resolveSystemSenderAddress(config);
|
|
151
151
|
if (config.from)
|
|
@@ -197,4 +197,4 @@ export function listSenderOptions(config, userEmail) {
|
|
|
197
197
|
}
|
|
198
198
|
return options;
|
|
199
199
|
}
|
|
200
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlbmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBRUgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSS9ELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7QUFFMUM7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxTQUE2QixFQUFFLE1BQWM7SUFDL0UsTUFBTSxLQUFLLEdBQUcsU0FBUyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUMvQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxNQUFNLGtCQUFrQixDQUFDLGdCQUFnQixDQUN2Qyx5QkFBeUIsRUFDekIsK0VBQStFLENBQ2hGLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxHQUFHLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUM5QixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsR0FBa0M7SUFDcEUsT0FBTyxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFFRCxnRkFBZ0Y7QUFDaEYsU0FBUyxtQkFBbUIsQ0FBQyxPQUFlO0lBQzFDLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFBRSxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzVELElBQUks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LENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ3JFLElBQUksS0FBSztnQkFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN2QyxDQUFDO2FBQU0sQ0FBQztZQUNOLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtRQUNoQyxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlbmRlci1hZGRyZXNzIHBvbGljeTogdHVybiB0aGUgb24tYmVoYWxmLW9mIHVzZXIncyBlbWFpbCBpbnRvIGFuXG4gKiBvdXRib3VuZCBgRnJvbWAsIGFuZCAob3B0aW9uYWxseSkgcmVzdHJpY3Qgd2hpY2ggYWRkcmVzc2VzIG1heSBzZW5kLlxuICpcbiAqIFRoZSBkZWZhdWx0IGBGcm9tYCByZS1ob21lcyB0aGUgbG9jYWwgcGFydCAoZXZlcnl0aGluZyBiZWZvcmUgYEBgKSBvZlxuICogdGhlIE9CTyBlbWFpbCBvbiB0aGUgY29uZmlndXJlZCBzZW5kaW5nIGRvbWFpbiwgc28gYGFsaWNlQGRhdGFicmlja3MuY29tYFxuICogdGhyb3VnaCBhIGRvbWFpbiBvZiBgbWFpbC5leGFtcGxlLmNvbWAgZ29lcyBvdXQgYXNcbiAqIGBhbGljZUBtYWlsLmV4YW1wbGUuY29tYC4gTm90aGluZyBoYXMgdG8gYmUgY29uZmlndXJlZCBmb3IgdGhhdCBiZXlvbmQgdGhlXG4gKiBkb21haW46IGEgZml4ZWQgYGZyb21gIGlzIGFuIE9WRVJSSURFLCBub3QgYSByZXF1aXJlbWVudC4gVGhlIGZpbGUvb3V0Ym94XG4gKiBmYWxsYmFjayAobm8gZG9tYWluKSBrZWVwcyB0aGUgdXNlcidzIGFkZHJlc3MgdmVyYmF0aW0gc28gdGVzdCBhcnRpZmFjdHMgbGFuZFxuICogdW5kZXIgYSByZWNvZ25pemFibGUgZm9sZGVyLlxuICpcbiAqIEEgc2VuZCB3aXRoIE5PIHVzZXIgaW4gc2NvcGUgaXMgU1lTVEVNIG1haWwgLSBhIHNpZ24taW4gY29kZSwgYSBwYXNzd29yZFxuICogcmVzZXQsIGFuIGFsZXJ0IC0gYW5kIGdvZXMgZnJvbSB0aGUgZG8tbm90LXJlcGx5IGFkZHJlc3MgaW5zdGVhZFxuICogKHtAbGluayByZXNvbHZlU3lzdGVtU2VuZGVyQWRkcmVzc30pLCBiZWNhdXNlIGEgcmVjaXBpZW50IGNhbm5vdCB1c2VmdWxseVxuICogcmVwbHkgdG8gYSBtYWNoaW5lIGFuZCBhIGh1bWFuJ3MgYWRkcmVzcyBvbiBtYWNoaW5lIG1haWwgaW52aXRlcyB0aGVtIHRvIHRyeS5cbiAqXG4gKiBUaGUgcmVzb2x2ZWQgYEZyb21gIGlzIHRoZW4gY29uc3RyYWluZWQgdG8gdGhlIGVmZmVjdGl2ZSBhbGxvdy1saXN0OiBhXG4gKiBwYXR0ZXJuIGlzIGVpdGhlciBhbiBleGFjdCBhZGRyZXNzIChgdXNlckBkb21haW4uY29tYCksIGEgZG9tYWluIHdpbGRjYXJkXG4gKiAoYCpAZG9tYWluLmNvbWAgb3IgdGhlIGJhcmUgYGRvbWFpbi5jb21gLCBtYXRjaGluZyBhbnkgbG9jYWwgcGFydCBvbiB0aGF0XG4gKiBkb21haW4pLCBvciBgKmAgKGFueSkuIFRoaXMgbW9kdWxlIG9ubHkgbWF0Y2hlcyBwYXR0ZXJuczsgd2hpY2ggcGF0dGVybnNcbiAqIGFwcGx5IGlzIGRlY2lkZWQgYnkgdGhlIGNvbmZpZ3VyZWQgc2VuZGVyIHBvbGljeSBpbiBgLi9jb25maWdgLCB3aGljaFxuICogdW5kZXIgdGhlIGRlZmF1bHQgYFwiYWxsb3dsaXN0XCJgIG1vZGUgZmlsbHMgYW4gZW1wdHkgbGlzdCBpbiBmcm9tIHRoZVxuICogc2VuZGVyIHNvdXJjZS4ge0BsaW5rIGxpc3RTZW5kZXJPcHRpb25zfSBleHBhbmRzIHRoZSBlZmZlY3RpdmUgbGlzdCBpbnRvXG4gKiB0aGUgY29uY3JldGUgYWRkcmVzc2VzIGEgVUkgZHJvcGRvd24gY2FuIG9mZmVyIGZvciB0aGUgY3VycmVudCB1c2VyLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uRXJyb3IsIFZhbGlkYXRpb25FcnJvciB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGxvZywgbmV0LCBzdHJpbmdVdGlscyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5cbmltcG9ydCB0eXBlIHsgUmVzb2x2ZWRFbWFpbENvbmZpZywgUmVzb2x2ZWRTZW5kZXIgfSBmcm9tIFwiLi9jb25maWcudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcImVtYWlsL3NlbmRlclwiKTtcblxuLyoqXG4gKiBSZS1ob21lIGEgdXNlcidzIGxvY2FsIHBhcnQgb24gYGRvbWFpbmAuIFRocm93cyB3aGVuIG5vIHVzYWJsZSBsb2NhbCBwYXJ0IGlzXG4gKiBhdmFpbGFibGU7IGNhbGxlcnMgd2l0aCBubyB1c2VyIGluIHNjb3BlIHdhbnRcbiAqIHtAbGluayByZXNvbHZlU3lzdGVtU2VuZGVyQWRkcmVzc30gaW5zdGVhZCBvZiBhIGZpeGVkIGBmcm9tYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlcml2ZVNlbmRlckFkZHJlc3ModXNlckVtYWlsOiBzdHJpbmcgfCB1bmRlZmluZWQsIGRvbWFpbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbG9jYWwgPSB1c2VyRW1haWw/LnNwbGl0KFwiQFwiKVswXT8udHJpbSgpO1xuICBpZiAoIWxvY2FsKSB7XG4gICAgdGhyb3cgQ29uZmlndXJhdGlvbkVycm9yLnJlc291cmNlTm90Rm91bmQoXG4gICAgICBcIk9uLWJlaGFsZi1vZiB1c2VyIGVtYWlsXCIsXG4gICAgICBcIlNldCBgZnJvbWAgLyBFTUFJTF9GUk9NIHRvIHNlbmQgZnJvbSBhIGZpeGVkIGFkZHJlc3MgaW5zdGVhZCBvZiBkZXJpdmluZyBvbmUuXCIsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gYCR7bG9jYWx9QCR7ZG9tYWlufWA7XG59XG5cbi8qKlxuICogTm9ybWFsaXplIGEgc2VuZGVyIGFsbG93LWxpc3QgZnJvbSBjb25maWcgKGEgYHN0cmluZ1tdYCkgb3IgYW4gZW52IHZhclxuICogKGEgQ1NWIC8gd2hpdGVzcGFjZS1zZXBhcmF0ZWQgc3RyaW5nKS4gRGVsZWdhdGVzIHRvIHRoZSBzaGFyZWRcbiAqIHtAbGluayBuZXQucGFyc2VFbWFpbHN9IHNvIGFsbG93LWxpc3QgcGF0dGVybnMgYXJlIHJlYWQgZXhhY3RseVxuICogbGlrZSByZWNpcGllbnQgbGlzdHMgZWxzZXdoZXJlOiBlbnRyaWVzIGFyZSB0cmltbWVkLCBsb3dlci1jYXNlZCAoc29cbiAqIG1hdGNoaW5nIGluIHtAbGluayBpc1NlbmRlckFsbG93ZWR9IGlzIGNhc2UtaW5zZW5zaXRpdmUpLCBhbmRcbiAqIGRlLWR1cGxpY2F0ZWQ7IGVtcHRpZXMgYXJlIGRyb3BwZWQuIEFuIGVtcHR5IHJlc3VsdCBtZWFucyBcIm5vXG4gKiByZXN0cmljdGlvblwiLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBbGxvd2VkU2VuZGVycyhyYXc6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkKTogc3RyaW5nW10ge1xuICByZXR1cm4gbmV0LnBhcnNlRW1haWxzKHJhdywgeyBsb3dlcmNhc2U6IHRydWUgfSk7XG59XG5cbi8qKiBUaGUgYEBkb21haW5gIHN1ZmZpeCBhIHdpbGRjYXJkIC8gYmFyZS1kb21haW4gcGF0dGVybiBtYXRjaGVzLCBlbHNlIG51bGwuICovXG5mdW5jdGlvbiBwYXR0ZXJuRG9tYWluU3VmZml4KHBhdHRlcm46IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBpZiAocGF0dGVybi5zdGFydHNXaXRoKFwiKkBcIikpIHJldHVybiBgQCR7cGF0dGVybi5zbGljZSgyKX1gO1xuICBpZiAoIXBhdHRlcm4uaW5jbHVkZXMoXCJAXCIpKSByZXR1cm4gYEAke3BhdHRlcm59YDtcbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKiBXaGV0aGVyIGBhZGRyZXNzYCAoYWxyZWFkeSBsb3dlci1jYXNlZCkgc2F0aXNmaWVzIGEgc2luZ2xlIHBhdHRlcm4uICovXG5mdW5jdGlvbiBtYXRjaGVzUGF0dGVybihhZGRyZXNzOiBzdHJpbmcsIHBhdHRlcm46IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAocGF0dGVybiA9PT0gXCIqXCIpIHJldHVybiB0cnVlO1xuICBjb25zdCBzdWZmaXggPSBwYXR0ZXJuRG9tYWluU3VmZml4KHBhdHRlcm4pO1xuICBpZiAoc3VmZml4KSByZXR1cm4gYWRkcmVzcy5sZW5ndGggPiBzdWZmaXgubGVuZ3RoICYmIGFkZHJlc3MuZW5kc1dpdGgoc3VmZml4KTtcbiAgcmV0dXJuIGFkZHJlc3MgPT09IHBhdHRlcm47XG59XG5cbi8qKlxuICogV2hldGhlciBgZnJvbWAgaXMgcGVybWl0dGVkIGJ5IHRoZSBhbGxvdy1saXN0LiBBbiBlbXB0eSAob3IgYWJzZW50KVxuICogYWxsb3ctbGlzdCBwZXJtaXRzIGV2ZXJ5dGhpbmc6IHtAbGluayByZXNvbHZlRW1haWxDb25maWd9IGlzIHdoYXQgdHVybnNcbiAqIHRoZSBjb25maWd1cmVkIHtAbGluayBTZW5kZXJQb2xpY3l9IGludG8gY29uY3JldGUgcGF0dGVybnMsIHNvIGFuIGVtcHR5XG4gKiBsaXN0IGhlcmUgbWVhbnMgdGhlIHBvbGljeSBoYWQgbm90aGluZyB0byBuYXJyb3cgdG8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NlbmRlckFsbG93ZWQoZnJvbTogc3RyaW5nLCBwYXR0ZXJuczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgaWYgKHBhdHRlcm5zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IGFkZHJlc3MgPSBmcm9tLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gcGF0dGVybnMuc29tZSgocGF0dGVybikgPT4gbWF0Y2hlc1BhdHRlcm4oYWRkcmVzcywgcGF0dGVybikpO1xufVxuXG4vKipcbiAqIFRocm93IHdoZW4gYGZyb21gIGlzIG5vdCBwZXJtaXR0ZWQgYnkgdGhlIGFsbG93LWxpc3QuIE5vLW9wIHdoZW4gdGhlXG4gKiBhbGxvdy1saXN0IGlzIGVtcHR5LiBUaGUgc2luZ2xlIGVuZm9yY2VtZW50IHBvaW50IGZvciB0aGUgcmVzdHJpY3Rpb25cbiAqIChjYWxsZWQgZnJvbSB7QGxpbmsgc2VuZEVtYWlsfSksIHNvIGV2ZXJ5IHNlbmQgcGF0aCBpcyBjb3ZlcmVkIHdoZXRoZXJcbiAqIHRoZSBhZGRyZXNzIHdhcyBkZXJpdmVkIHNlcnZlci1zaWRlIG9yIGNob3NlbiBpbiBhIFVJLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0U2VuZGVyQWxsb3dlZChmcm9tOiBzdHJpbmcsIHBhdHRlcm5zOiBzdHJpbmdbXSk6IHZvaWQge1xuICBpZiAoaXNTZW5kZXJBbGxvd2VkKGZyb20sIHBhdHRlcm5zKSkgcmV0dXJuO1xuICAvLyBUaGUgdGhyb3duIG1lc3NhZ2UgbmFtZXMgdGhlIGZpZWxkIG9ubHk7IHRoZSBwYXR0ZXJucyBhcmUgcG9saWN5IGRldGFpbFxuICAvLyB0aGF0IGJlbG9uZ3MgaW4gdGhlIG9wZXJhdG9yJ3MgbG9ncywgbm90IGluIGEgY2xpZW50IG9yIG1vZGVsIHJlc3BvbnNlLlxuICBsb2dnZXIud2FybihcInNlbmRlcjpkZW5pZWRcIiwgeyBmcm9tLCBhbGxvd2VkU2VuZGVyczogcGF0dGVybnMgfSk7XG4gIHRocm93IFZhbGlkYXRpb25FcnJvci5pbnZhbGlkVmFsdWUoXG4gICAgXCJmcm9tXCIsXG4gICAgZnJvbSxcbiAgICBcImFuIGFkZHJlc3MgcGVybWl0dGVkIGJ5IHRoZSBjb25maWd1cmVkIHNlbmRlciBhbGxvdy1saXN0XCIsXG4gICk7XG59XG5cbi8qKlxuICogTG9jYWwgcGFydCBvZiB0aGUgZGVmYXVsdCBkby1ub3QtcmVwbHkgc2VuZGVyLCB1c2VkIGZvciBtYWlsIHRoYXQgbm8gdXNlclxuICogYXNrZWQgZm9yIGFuZCBub2JvZHkgY2FuIHJlcGx5IHRvLlxuICovXG5leHBvcnQgY29uc3QgU1lTVEVNX1NFTkRFUl9MT0NBTF9QQVJUID0gXCJuby1yZXBseVwiO1xuXG4vKiogVGhlIHNlbmRlciBmaWVsZHMge0BsaW5rIHN5c3RlbVNlbmRlckFkZHJlc3N9IHJlYWRzLCByZXNvbHZlZCBvciByYXcuICovXG50eXBlIFNlbmRlclNvdXJjZSA9IFBpY2s8UmVzb2x2ZWRTZW5kZXIsIFwic3lzdGVtRnJvbVwiIHwgXCJkb21haW5cIiB8IFwiZnJvbVwiPjtcblxuLyoqXG4gKiBUaGUgYWRkcmVzcyBTWVNURU0gbWFpbCBzZW5kcyBmcm9tLCBvciB1bmRlZmluZWQgd2hlbiBub3RoaW5nIGNvbmZpZ3VyZWRcbiAqIHlpZWxkcyBvbmU6IGFuIGV4cGxpY2l0IHtAbGluayBSZXNvbHZlZFNlbmRlci5zeXN0ZW1Gcm9tfSB3aW5zLCBlbHNlXG4gKiBgbm8tcmVwbHlAPGRvbWFpbj5gLCBlbHNlIHRoZSBmaXhlZCBgZnJvbWAuXG4gKlxuICogYG5vLXJlcGx5QDxkb21haW4+YCBvdXRyYW5rcyBhIGNvbmZpZ3VyZWQgYGZyb21gIG9uIHB1cnBvc2UuIEEgZml4ZWQgYGZyb21gIGlzXG4gKiB0eXBpY2FsbHkgYSBwZXJzb24gb3IgYSB0ZWFtIGFkZHJlc3MgY2hvc2VuIGZvciBtYWlsIGEgSFVNQU4gc2VudCwgYW5kIGFcbiAqIHZlcmlmaWNhdGlvbiBjb2RlIGFycml2aW5nIGZyb20gaXQgaW52aXRlcyBhIHJlcGx5IG5vYm9keSByZWFkcy4gU2V0XG4gKiBgc3lzdGVtRnJvbWAgLyBFTUFJTF9TWVNURU1fRlJPTSB0byBuYW1lIHRoZSBhZGRyZXNzIGV4cGxpY2l0bHkgKGEgbW9uaXRvcmVkXG4gKiBgc3VwcG9ydEBgLCBhIGRpZmZlcmVudGx5LXNwZWxsZWQgYGRvbm90cmVwbHlAYCkuXG4gKlxuICogUmV0dXJucyB1bmRlZmluZWQgcmF0aGVyIHRoYW4gdGhyb3dpbmcgc28gY29uZmlnIHJlc29sdXRpb24gY2FuIGZvbGQgdGhlXG4gKiByZXN1bHQgaW50byB0aGUgc2VuZGVyIGFsbG93LWxpc3QgYmVmb3JlIGFueSBzZW5kIGhhcHBlbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzeXN0ZW1TZW5kZXJBZGRyZXNzKHNvdXJjZTogU2VuZGVyU291cmNlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZXhwbGljaXQgPSBzdHJpbmdVdGlscy50cmltVG9OdWxsKHNvdXJjZS5zeXN0ZW1Gcm9tKTtcbiAgaWYgKGV4cGxpY2l0KSByZXR1cm4gZXhwbGljaXQ7XG4gIGNvbnN0IGRvbWFpbiA9IHN0cmluZ1V0aWxzLnRyaW1Ub051bGwoc291cmNlLmRvbWFpbik7XG4gIGlmIChkb21haW4pIHJldHVybiBgJHtTWVNURU1fU0VOREVSX0xPQ0FMX1BBUlR9QCR7ZG9tYWlufWA7XG4gIHJldHVybiBzdHJpbmdVdGlscy50cmltVG9OdWxsKHNvdXJjZS5mcm9tKSA/PyB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVGhlIGBGcm9tYCBmb3IgYSBzZW5kIHdpdGggbm8gdXNlciBpbiBzY29wZS4gVGhyb3dzIHdoZW4gbm8gc2VuZGVyIHNvdXJjZSBpc1xuICogY29uZmlndXJlZCBhdCBhbGwsIHdoaWNoIGluIFNNVFAgbW9kZSB7QGxpbmsgcmVzb2x2ZUVtYWlsQ29uZmlnfSBoYXMgYWxyZWFkeVxuICogcnVsZWQgb3V0IC0gc28gdGhpcyBvbmx5IGZpcmVzIGZvciBhbiBvdXRib3ggd2l0aCBub3RoaW5nIGNvbmZpZ3VyZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU3lzdGVtU2VuZGVyQWRkcmVzcyhjb25maWc6IFJlc29sdmVkRW1haWxDb25maWcpOiBzdHJpbmcge1xuICBjb25zdCBhZGRyZXNzID0gc3lzdGVtU2VuZGVyQWRkcmVzcyhjb25maWcpO1xuICBpZiAoYWRkcmVzcykgcmV0dXJuIGFkZHJlc3M7XG4gIHRocm93IENvbmZpZ3VyYXRpb25FcnJvci5yZXNvdXJjZU5vdEZvdW5kKFxuICAgIFwiRW1haWwgc2VuZGVyIGFkZHJlc3NcIixcbiAgICBcIlNldCBgZG9tYWluYCAvIEVNQUlMX0RPTUFJTiB0byBzZW5kIHN5c3RlbSBtYWlsIGFzIG5vLXJlcGx5QDxkb21haW4+LCBvciBgc3lzdGVtRnJvbWAgLyBFTUFJTF9TWVNURU1fRlJPTSB0byBuYW1lIHRoZSBhZGRyZXNzLlwiLFxuICApO1xufVxuXG4vKipcbiAqIFJlc29sdmUgdGhlIGBGcm9tYCBhZGRyZXNzIGZvciBhIHNlbmQgZnJvbSB0aGUgcmVzb2x2ZWQgY29uZmlnIGFuZCB0aGVcbiAqIGN1cnJlbnQgT0JPIHVzZXIuXG4gKlxuICogV2l0aCBhIHVzZXIgaW4gc2NvcGU6IGFuIGV4cGxpY2l0IGBmcm9tYCB3aW5zLCB0aGVuIGA8bG9jYWw+QDxkb21haW4+YCwgdGhlblxuICogKGZpbGUvb3V0Ym94IG1vZGUgb25seSkgdGhlIHVzZXIncyBlbWFpbCB2ZXJiYXRpbS4gV2l0aCBOTyB1c2VyIHRoZSBzZW5kIGlzXG4gKiBzeXN0ZW0gbWFpbCwgc28gaXQgZ29lcyBmcm9tIHtAbGluayByZXNvbHZlU3lzdGVtU2VuZGVyQWRkcmVzc30uIFRocm93cyB3aGVuXG4gKiBub25lIG9mIHRob3NlIHlpZWxkIGFuIGFkZHJlc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU2VuZGVyQWRkcmVzcyhcbiAgY29uZmlnOiBSZXNvbHZlZEVtYWlsQ29uZmlnLFxuICB1c2VyRW1haWw6IHN0cmluZyB8IHVuZGVmaW5lZCxcbik6IHN0cmluZyB7XG4gIGNvbnN0IGVtYWlsID0gc3RyaW5nVXRpbHMudHJpbVRvTnVsbCh1c2VyRW1haWwpO1xuICBpZiAoIWVtYWlsKSByZXR1cm4gcmVzb2x2ZVN5c3RlbVNlbmRlckFkZHJlc3MoY29uZmlnKTtcbiAgaWYgKGNvbmZpZy5mcm9tKSByZXR1cm4gY29uZmlnLmZyb207XG4gIGlmIChjb25maWcuZG9tYWluKSByZXR1cm4gZGVyaXZlU2VuZGVyQWRkcmVzcyhlbWFpbCwgY29uZmlnLmRvbWFpbik7XG4gIHJldHVybiBlbWFpbDtcbn1cblxuLyoqXG4gKiBFeHBhbmQgdGhlIHJlc29sdmVkIGNvbmZpZydzIGFsbG93LWxpc3QgaW50byB0aGUgY29uY3JldGUgYEZyb21gXG4gKiBhZGRyZXNzZXMgb2ZmZXJlZCB0byB0aGUgY3VycmVudCB1c2VyIC0gdGhlIGRhdGEgYSBVSSBzZW5kZXIgZHJvcGRvd25cbiAqIHJlbmRlcnMuIEV4YWN0LWFkZHJlc3MgcGF0dGVybnMgcGFzcyB0aHJvdWdoOyBkb21haW4gd2lsZGNhcmRzXG4gKiAoYCpAZG9tYWluLmNvbWAgLyBiYXJlIGBkb21haW4uY29tYCkgYXJlIGNvbmNyZXRpemVkIGFzXG4gKiBgPHVzZXItbG9jYWw+QDxkb21haW4+YCBhbmQgZHJvcHBlZCB3aGVuIG5vIE9CTyB1c2VyIGxvY2FsIHBhcnQgaXNcbiAqIGF2YWlsYWJsZS4gV2hlbiBubyBhbGxvdy1saXN0IGlzIGNvbmZpZ3VyZWQsIHRoZSBzaW5nbGUgZGVmYXVsdCBzZW5kZXJcbiAqICh7QGxpbmsgcmVzb2x2ZVNlbmRlckFkZHJlc3N9KSBpcyByZXR1cm5lZCB3aGVuIGl0IGNhbiBiZSByZXNvbHZlZCxcbiAqIGVsc2UgYW4gZW1wdHkgbGlzdC4gVGhlIGRlZmF1bHQgcmVzb2x2ZWQgc2VuZGVyLCB3aGVuIHBlcm1pdHRlZCwgaXNcbiAqIG9yZGVyZWQgZmlyc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaXN0U2VuZGVyT3B0aW9ucyhcbiAgY29uZmlnOiBSZXNvbHZlZEVtYWlsQ29uZmlnLFxuICB1c2VyRW1haWw6IHN0cmluZyB8IHVuZGVmaW5lZCxcbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgcGF0dGVybnMgPSBjb25maWcuYWxsb3dlZFNlbmRlcnMgPz8gW107XG4gIGNvbnN0IGxvY2FsID0gdXNlckVtYWlsPy5zcGxpdChcIkBcIilbMF0/LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBvcHRpb25zOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBhZGQgPSAoYWRkcmVzczogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCA9PiB7XG4gICAgaWYgKGFkZHJlc3MgJiYgIW9wdGlvbnMuaW5jbHVkZXMoYWRkcmVzcykpIG9wdGlvbnMucHVzaChhZGRyZXNzKTtcbiAgfTtcblxuICAvLyBTdXJmYWNlIHRoZSBhZGRyZXNzIGEgc2VuZCB3b3VsZCB1c2UgYnkgZGVmYXVsdCBmaXJzdCwgd2hlbiBpdCBjYW5cbiAgLy8gYmUgcmVzb2x2ZWQgYW5kIHRoZSBhbGxvdy1saXN0IChpZiBhbnkpIHBlcm1pdHMgaXQuXG4gIHRyeSB7XG4gICAgY29uc3QgZmFsbGJhY2sgPSByZXNvbHZlU2VuZGVyQWRkcmVzcyhjb25maWcsIHVzZXJFbWFpbCk7XG4gICAgaWYgKGlzU2VuZGVyQWxsb3dlZChmYWxsYmFjaywgcGF0dGVybnMpKSBhZGQoZmFsbGJhY2sudG9Mb3dlckNhc2UoKSk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIE5vIGRlZmF1bHQgcmVzb2x2YWJsZSAoZS5nLiBmaWxlIG1vZGUgd2l0aCBubyB1c2VyIC8gZG9tYWluIC8gZnJvbSkuXG4gIH1cblxuICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICBpZiAocGF0dGVybiA9PT0gXCIqXCIpIGNvbnRpbnVlOyAvLyBcImFueVwiIGNhbid0IGJlIGVudW1lcmF0ZWQgYXMgYSBjaG9pY2VcbiAgICBpZiAocGF0dGVybi5zdGFydHNXaXRoKFwiKkBcIikgfHwgIXBhdHRlcm4uaW5jbHVkZXMoXCJAXCIpKSB7XG4gICAgICBjb25zdCBkb21haW4gPSBwYXR0ZXJuLnN0YXJ0c1dpdGgoXCIqQFwiKSA/IHBhdHRlcm4uc2xpY2UoMikgOiBwYXR0ZXJuO1xuICAgICAgaWYgKGxvY2FsKSBhZGQoYCR7bG9jYWx9QCR7ZG9tYWlufWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBhZGQocGF0dGVybik7IC8vIGV4YWN0IGFkZHJlc3NcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnM7XG59XG4iXX0=
|
|
200
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlbmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBRUgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSXRFLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7QUFFMUM7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxTQUE2QixFQUFFLE1BQWM7SUFDL0UsTUFBTSxLQUFLLEdBQUcsU0FBUyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUMvQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxNQUFNLGtCQUFrQixDQUFDLGdCQUFnQixDQUN2Qyx5QkFBeUIsRUFDekIsK0VBQStFLENBQ2hGLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxHQUFHLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUM5QixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsR0FBa0M7SUFDcEUsT0FBTyxXQUFXLENBQUMsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUVELGdGQUFnRjtBQUNoRixTQUFTLG1CQUFtQixDQUFDLE9BQWU7SUFDMUMsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztRQUFFLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDNUQsSUFBSSxDQUFDLE9BQU8s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TSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNyRSxJQUFJLEtBQUs7Z0JBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdkMsQ0FBQzthQUFNLENBQUM7WUFDTixHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0I7UUFDaEMsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTZW5kZXItYWRkcmVzcyBwb2xpY3k6IHR1cm4gdGhlIG9uLWJlaGFsZi1vZiB1c2VyJ3MgZW1haWwgaW50byBhblxuICogb3V0Ym91bmQgYEZyb21gLCBhbmQgKG9wdGlvbmFsbHkpIHJlc3RyaWN0IHdoaWNoIGFkZHJlc3NlcyBtYXkgc2VuZC5cbiAqXG4gKiBUaGUgZGVmYXVsdCBgRnJvbWAgcmUtaG9tZXMgdGhlIGxvY2FsIHBhcnQgKGV2ZXJ5dGhpbmcgYmVmb3JlIGBAYCkgb2ZcbiAqIHRoZSBPQk8gZW1haWwgb24gdGhlIGNvbmZpZ3VyZWQgc2VuZGluZyBkb21haW4sIHNvIGBhbGljZUBkYXRhYnJpY2tzLmNvbWBcbiAqIHRocm91Z2ggYSBkb21haW4gb2YgYG1haWwuZXhhbXBsZS5jb21gIGdvZXMgb3V0IGFzXG4gKiBgYWxpY2VAbWFpbC5leGFtcGxlLmNvbWAuIE5vdGhpbmcgaGFzIHRvIGJlIGNvbmZpZ3VyZWQgZm9yIHRoYXQgYmV5b25kIHRoZVxuICogZG9tYWluOiBhIGZpeGVkIGBmcm9tYCBpcyBhbiBPVkVSUklERSwgbm90IGEgcmVxdWlyZW1lbnQuIFRoZSBmaWxlL291dGJveFxuICogZmFsbGJhY2sgKG5vIGRvbWFpbikga2VlcHMgdGhlIHVzZXIncyBhZGRyZXNzIHZlcmJhdGltIHNvIHRlc3QgYXJ0aWZhY3RzIGxhbmRcbiAqIHVuZGVyIGEgcmVjb2duaXphYmxlIGZvbGRlci5cbiAqXG4gKiBBIHNlbmQgd2l0aCBOTyB1c2VyIGluIHNjb3BlIGlzIFNZU1RFTSBtYWlsIC0gYSBzaWduLWluIGNvZGUsIGEgcGFzc3dvcmRcbiAqIHJlc2V0LCBhbiBhbGVydCAtIGFuZCBnb2VzIGZyb20gdGhlIGRvLW5vdC1yZXBseSBhZGRyZXNzIGluc3RlYWRcbiAqICh7QGxpbmsgcmVzb2x2ZVN5c3RlbVNlbmRlckFkZHJlc3N9KSwgYmVjYXVzZSBhIHJlY2lwaWVudCBjYW5ub3QgdXNlZnVsbHlcbiAqIHJlcGx5IHRvIGEgbWFjaGluZSBhbmQgYSBodW1hbidzIGFkZHJlc3Mgb24gbWFjaGluZSBtYWlsIGludml0ZXMgdGhlbSB0byB0cnkuXG4gKlxuICogVGhlIHJlc29sdmVkIGBGcm9tYCBpcyB0aGVuIGNvbnN0cmFpbmVkIHRvIHRoZSBlZmZlY3RpdmUgYWxsb3ctbGlzdDogYVxuICogcGF0dGVybiBpcyBlaXRoZXIgYW4gZXhhY3QgYWRkcmVzcyAoYHVzZXJAZG9tYWluLmNvbWApLCBhIGRvbWFpbiB3aWxkY2FyZFxuICogKGAqQGRvbWFpbi5jb21gIG9yIHRoZSBiYXJlIGBkb21haW4uY29tYCwgbWF0Y2hpbmcgYW55IGxvY2FsIHBhcnQgb24gdGhhdFxuICogZG9tYWluKSwgb3IgYCpgIChhbnkpLiBUaGlzIG1vZHVsZSBvbmx5IG1hdGNoZXMgcGF0dGVybnM7IHdoaWNoIHBhdHRlcm5zXG4gKiBhcHBseSBpcyBkZWNpZGVkIGJ5IHRoZSBjb25maWd1cmVkIHNlbmRlciBwb2xpY3kgaW4gYC4vY29uZmlnYCwgd2hpY2hcbiAqIHVuZGVyIHRoZSBkZWZhdWx0IGBcImFsbG93bGlzdFwiYCBtb2RlIGZpbGxzIGFuIGVtcHR5IGxpc3QgaW4gZnJvbSB0aGVcbiAqIHNlbmRlciBzb3VyY2UuIHtAbGluayBsaXN0U2VuZGVyT3B0aW9uc30gZXhwYW5kcyB0aGUgZWZmZWN0aXZlIGxpc3QgaW50b1xuICogdGhlIGNvbmNyZXRlIGFkZHJlc3NlcyBhIFVJIGRyb3Bkb3duIGNhbiBvZmZlciBmb3IgdGhlIGN1cnJlbnQgdXNlci5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbkVycm9yLCBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBsb2csIHBhcnNlRW1haWxzLCB0cmltVG9OdWxsIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcblxuaW1wb3J0IHR5cGUgeyBSZXNvbHZlZEVtYWlsQ29uZmlnLCBSZXNvbHZlZFNlbmRlciB9IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiZW1haWwvc2VuZGVyXCIpO1xuXG4vKipcbiAqIFJlLWhvbWUgYSB1c2VyJ3MgbG9jYWwgcGFydCBvbiBgZG9tYWluYC4gVGhyb3dzIHdoZW4gbm8gdXNhYmxlIGxvY2FsIHBhcnQgaXNcbiAqIGF2YWlsYWJsZTsgY2FsbGVycyB3aXRoIG5vIHVzZXIgaW4gc2NvcGUgd2FudFxuICoge0BsaW5rIHJlc29sdmVTeXN0ZW1TZW5kZXJBZGRyZXNzfSBpbnN0ZWFkIG9mIGEgZml4ZWQgYGZyb21gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZlU2VuZGVyQWRkcmVzcyh1c2VyRW1haWw6IHN0cmluZyB8IHVuZGVmaW5lZCwgZG9tYWluOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBsb2NhbCA9IHVzZXJFbWFpbD8uc3BsaXQoXCJAXCIpWzBdPy50cmltKCk7XG4gIGlmICghbG9jYWwpIHtcbiAgICB0aHJvdyBDb25maWd1cmF0aW9uRXJyb3IucmVzb3VyY2VOb3RGb3VuZChcbiAgICAgIFwiT24tYmVoYWxmLW9mIHVzZXIgZW1haWxcIixcbiAgICAgIFwiU2V0IGBmcm9tYCAvIEVNQUlMX0ZST00gdG8gc2VuZCBmcm9tIGEgZml4ZWQgYWRkcmVzcyBpbnN0ZWFkIG9mIGRlcml2aW5nIG9uZS5cIixcbiAgICApO1xuICB9XG4gIHJldHVybiBgJHtsb2NhbH1AJHtkb21haW59YDtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgYSBzZW5kZXIgYWxsb3ctbGlzdCBmcm9tIGNvbmZpZyAoYSBgc3RyaW5nW11gKSBvciBhbiBlbnYgdmFyXG4gKiAoYSBDU1YgLyB3aGl0ZXNwYWNlLXNlcGFyYXRlZCBzdHJpbmcpLiBEZWxlZ2F0ZXMgdG8gdGhlIHNoYXJlZFxuICoge0BsaW5rIG5ldC5wYXJzZUVtYWlsc30gc28gYWxsb3ctbGlzdCBwYXR0ZXJucyBhcmUgcmVhZCBleGFjdGx5XG4gKiBsaWtlIHJlY2lwaWVudCBsaXN0cyBlbHNld2hlcmU6IGVudHJpZXMgYXJlIHRyaW1tZWQsIGxvd2VyLWNhc2VkIChzb1xuICogbWF0Y2hpbmcgaW4ge0BsaW5rIGlzU2VuZGVyQWxsb3dlZH0gaXMgY2FzZS1pbnNlbnNpdGl2ZSksIGFuZFxuICogZGUtZHVwbGljYXRlZDsgZW1wdGllcyBhcmUgZHJvcHBlZC4gQW4gZW1wdHkgcmVzdWx0IG1lYW5zIFwibm9cbiAqIHJlc3RyaWN0aW9uXCIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFsbG93ZWRTZW5kZXJzKHJhdzogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBwYXJzZUVtYWlscyhyYXcsIHsgbG93ZXJjYXNlOiB0cnVlIH0pO1xufVxuXG4vKiogVGhlIGBAZG9tYWluYCBzdWZmaXggYSB3aWxkY2FyZCAvIGJhcmUtZG9tYWluIHBhdHRlcm4gbWF0Y2hlcywgZWxzZSBudWxsLiAqL1xuZnVuY3Rpb24gcGF0dGVybkRvbWFpblN1ZmZpeChwYXR0ZXJuOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKHBhdHRlcm4uc3RhcnRzV2l0aChcIipAXCIpKSByZXR1cm4gYEAke3BhdHRlcm4uc2xpY2UoMil9YDtcbiAgaWYgKCFwYXR0ZXJuLmluY2x1ZGVzKFwiQFwiKSkgcmV0dXJuIGBAJHtwYXR0ZXJufWA7XG4gIHJldHVybiBudWxsO1xufVxuXG4vKiogV2hldGhlciBgYWRkcmVzc2AgKGFscmVhZHkgbG93ZXItY2FzZWQpIHNhdGlzZmllcyBhIHNpbmdsZSBwYXR0ZXJuLiAqL1xuZnVuY3Rpb24gbWF0Y2hlc1BhdHRlcm4oYWRkcmVzczogc3RyaW5nLCBwYXR0ZXJuOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKHBhdHRlcm4gPT09IFwiKlwiKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3Qgc3VmZml4ID0gcGF0dGVybkRvbWFpblN1ZmZpeChwYXR0ZXJuKTtcbiAgaWYgKHN1ZmZpeCkgcmV0dXJuIGFkZHJlc3MubGVuZ3RoID4gc3VmZml4Lmxlbmd0aCAmJiBhZGRyZXNzLmVuZHNXaXRoKHN1ZmZpeCk7XG4gIHJldHVybiBhZGRyZXNzID09PSBwYXR0ZXJuO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgYGZyb21gIGlzIHBlcm1pdHRlZCBieSB0aGUgYWxsb3ctbGlzdC4gQW4gZW1wdHkgKG9yIGFic2VudClcbiAqIGFsbG93LWxpc3QgcGVybWl0cyBldmVyeXRoaW5nOiB7QGxpbmsgcmVzb2x2ZUVtYWlsQ29uZmlnfSBpcyB3aGF0IHR1cm5zXG4gKiB0aGUgY29uZmlndXJlZCB7QGxpbmsgU2VuZGVyUG9saWN5fSBpbnRvIGNvbmNyZXRlIHBhdHRlcm5zLCBzbyBhbiBlbXB0eVxuICogbGlzdCBoZXJlIG1lYW5zIHRoZSBwb2xpY3kgaGFkIG5vdGhpbmcgdG8gbmFycm93IHRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTZW5kZXJBbGxvd2VkKGZyb206IHN0cmluZywgcGF0dGVybnM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gIGlmIChwYXR0ZXJucy5sZW5ndGggPT09IDApIHJldHVybiB0cnVlO1xuICBjb25zdCBhZGRyZXNzID0gZnJvbS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIHBhdHRlcm5zLnNvbWUoKHBhdHRlcm4pID0+IG1hdGNoZXNQYXR0ZXJuKGFkZHJlc3MsIHBhdHRlcm4pKTtcbn1cblxuLyoqXG4gKiBUaHJvdyB3aGVuIGBmcm9tYCBpcyBub3QgcGVybWl0dGVkIGJ5IHRoZSBhbGxvdy1saXN0LiBOby1vcCB3aGVuIHRoZVxuICogYWxsb3ctbGlzdCBpcyBlbXB0eS4gVGhlIHNpbmdsZSBlbmZvcmNlbWVudCBwb2ludCBmb3IgdGhlIHJlc3RyaWN0aW9uXG4gKiAoY2FsbGVkIGZyb20ge0BsaW5rIHNlbmRFbWFpbH0pLCBzbyBldmVyeSBzZW5kIHBhdGggaXMgY292ZXJlZCB3aGV0aGVyXG4gKiB0aGUgYWRkcmVzcyB3YXMgZGVyaXZlZCBzZXJ2ZXItc2lkZSBvciBjaG9zZW4gaW4gYSBVSS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFNlbmRlckFsbG93ZWQoZnJvbTogc3RyaW5nLCBwYXR0ZXJuczogc3RyaW5nW10pOiB2b2lkIHtcbiAgaWYgKGlzU2VuZGVyQWxsb3dlZChmcm9tLCBwYXR0ZXJucykpIHJldHVybjtcbiAgLy8gVGhlIHRocm93biBtZXNzYWdlIG5hbWVzIHRoZSBmaWVsZCBvbmx5OyB0aGUgcGF0dGVybnMgYXJlIHBvbGljeSBkZXRhaWxcbiAgLy8gdGhhdCBiZWxvbmdzIGluIHRoZSBvcGVyYXRvcidzIGxvZ3MsIG5vdCBpbiBhIGNsaWVudCBvciBtb2RlbCByZXNwb25zZS5cbiAgbG9nZ2VyLndhcm4oXCJzZW5kZXI6ZGVuaWVkXCIsIHsgZnJvbSwgYWxsb3dlZFNlbmRlcnM6IHBhdHRlcm5zIH0pO1xuICB0aHJvdyBWYWxpZGF0aW9uRXJyb3IuaW52YWxpZFZhbHVlKFxuICAgIFwiZnJvbVwiLFxuICAgIGZyb20sXG4gICAgXCJhbiBhZGRyZXNzIHBlcm1pdHRlZCBieSB0aGUgY29uZmlndXJlZCBzZW5kZXIgYWxsb3ctbGlzdFwiLFxuICApO1xufVxuXG4vKipcbiAqIExvY2FsIHBhcnQgb2YgdGhlIGRlZmF1bHQgZG8tbm90LXJlcGx5IHNlbmRlciwgdXNlZCBmb3IgbWFpbCB0aGF0IG5vIHVzZXJcbiAqIGFza2VkIGZvciBhbmQgbm9ib2R5IGNhbiByZXBseSB0by5cbiAqL1xuZXhwb3J0IGNvbnN0IFNZU1RFTV9TRU5ERVJfTE9DQUxfUEFSVCA9IFwibm8tcmVwbHlcIjtcblxuLyoqIFRoZSBzZW5kZXIgZmllbGRzIHtAbGluayBzeXN0ZW1TZW5kZXJBZGRyZXNzfSByZWFkcywgcmVzb2x2ZWQgb3IgcmF3LiAqL1xudHlwZSBTZW5kZXJTb3VyY2UgPSBQaWNrPFJlc29sdmVkU2VuZGVyLCBcInN5c3RlbUZyb21cIiB8IFwiZG9tYWluXCIgfCBcImZyb21cIj47XG5cbi8qKlxuICogVGhlIGFkZHJlc3MgU1lTVEVNIG1haWwgc2VuZHMgZnJvbSwgb3IgdW5kZWZpbmVkIHdoZW4gbm90aGluZyBjb25maWd1cmVkXG4gKiB5aWVsZHMgb25lOiBhbiBleHBsaWNpdCB7QGxpbmsgUmVzb2x2ZWRTZW5kZXIuc3lzdGVtRnJvbX0gd2lucywgZWxzZVxuICogYG5vLXJlcGx5QDxkb21haW4+YCwgZWxzZSB0aGUgZml4ZWQgYGZyb21gLlxuICpcbiAqIGBuby1yZXBseUA8ZG9tYWluPmAgb3V0cmFua3MgYSBjb25maWd1cmVkIGBmcm9tYCBvbiBwdXJwb3NlLiBBIGZpeGVkIGBmcm9tYCBpc1xuICogdHlwaWNhbGx5IGEgcGVyc29uIG9yIGEgdGVhbSBhZGRyZXNzIGNob3NlbiBmb3IgbWFpbCBhIEhVTUFOIHNlbnQsIGFuZCBhXG4gKiB2ZXJpZmljYXRpb24gY29kZSBhcnJpdmluZyBmcm9tIGl0IGludml0ZXMgYSByZXBseSBub2JvZHkgcmVhZHMuIFNldFxuICogYHN5c3RlbUZyb21gIC8gRU1BSUxfU1lTVEVNX0ZST00gdG8gbmFtZSB0aGUgYWRkcmVzcyBleHBsaWNpdGx5IChhIG1vbml0b3JlZFxuICogYHN1cHBvcnRAYCwgYSBkaWZmZXJlbnRseS1zcGVsbGVkIGBkb25vdHJlcGx5QGApLlxuICpcbiAqIFJldHVybnMgdW5kZWZpbmVkIHJhdGhlciB0aGFuIHRocm93aW5nIHNvIGNvbmZpZyByZXNvbHV0aW9uIGNhbiBmb2xkIHRoZVxuICogcmVzdWx0IGludG8gdGhlIHNlbmRlciBhbGxvdy1saXN0IGJlZm9yZSBhbnkgc2VuZCBoYXBwZW5zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3lzdGVtU2VuZGVyQWRkcmVzcyhzb3VyY2U6IFNlbmRlclNvdXJjZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGV4cGxpY2l0ID0gdHJpbVRvTnVsbChzb3VyY2Uuc3lzdGVtRnJvbSk7XG4gIGlmIChleHBsaWNpdCkgcmV0dXJuIGV4cGxpY2l0O1xuICBjb25zdCBkb21haW4gPSB0cmltVG9OdWxsKHNvdXJjZS5kb21haW4pO1xuICBpZiAoZG9tYWluKSByZXR1cm4gYCR7U1lTVEVNX1NFTkRFUl9MT0NBTF9QQVJUfUAke2RvbWFpbn1gO1xuICByZXR1cm4gdHJpbVRvTnVsbChzb3VyY2UuZnJvbSkgPz8gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRoZSBgRnJvbWAgZm9yIGEgc2VuZCB3aXRoIG5vIHVzZXIgaW4gc2NvcGUuIFRocm93cyB3aGVuIG5vIHNlbmRlciBzb3VyY2UgaXNcbiAqIGNvbmZpZ3VyZWQgYXQgYWxsLCB3aGljaCBpbiBTTVRQIG1vZGUge0BsaW5rIHJlc29sdmVFbWFpbENvbmZpZ30gaGFzIGFscmVhZHlcbiAqIHJ1bGVkIG91dCAtIHNvIHRoaXMgb25seSBmaXJlcyBmb3IgYW4gb3V0Ym94IHdpdGggbm90aGluZyBjb25maWd1cmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVN5c3RlbVNlbmRlckFkZHJlc3MoY29uZmlnOiBSZXNvbHZlZEVtYWlsQ29uZmlnKTogc3RyaW5nIHtcbiAgY29uc3QgYWRkcmVzcyA9IHN5c3RlbVNlbmRlckFkZHJlc3MoY29uZmlnKTtcbiAgaWYgKGFkZHJlc3MpIHJldHVybiBhZGRyZXNzO1xuICB0aHJvdyBDb25maWd1cmF0aW9uRXJyb3IucmVzb3VyY2VOb3RGb3VuZChcbiAgICBcIkVtYWlsIHNlbmRlciBhZGRyZXNzXCIsXG4gICAgXCJTZXQgYGRvbWFpbmAgLyBFTUFJTF9ET01BSU4gdG8gc2VuZCBzeXN0ZW0gbWFpbCBhcyBuby1yZXBseUA8ZG9tYWluPiwgb3IgYHN5c3RlbUZyb21gIC8gRU1BSUxfU1lTVEVNX0ZST00gdG8gbmFtZSB0aGUgYWRkcmVzcy5cIixcbiAgKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBgRnJvbWAgYWRkcmVzcyBmb3IgYSBzZW5kIGZyb20gdGhlIHJlc29sdmVkIGNvbmZpZyBhbmQgdGhlXG4gKiBjdXJyZW50IE9CTyB1c2VyLlxuICpcbiAqIFdpdGggYSB1c2VyIGluIHNjb3BlOiBhbiBleHBsaWNpdCBgZnJvbWAgd2lucywgdGhlbiBgPGxvY2FsPkA8ZG9tYWluPmAsIHRoZW5cbiAqIChmaWxlL291dGJveCBtb2RlIG9ubHkpIHRoZSB1c2VyJ3MgZW1haWwgdmVyYmF0aW0uIFdpdGggTk8gdXNlciB0aGUgc2VuZCBpc1xuICogc3lzdGVtIG1haWwsIHNvIGl0IGdvZXMgZnJvbSB7QGxpbmsgcmVzb2x2ZVN5c3RlbVNlbmRlckFkZHJlc3N9LiBUaHJvd3Mgd2hlblxuICogbm9uZSBvZiB0aG9zZSB5aWVsZCBhbiBhZGRyZXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVNlbmRlckFkZHJlc3MoXG4gIGNvbmZpZzogUmVzb2x2ZWRFbWFpbENvbmZpZyxcbiAgdXNlckVtYWlsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4pOiBzdHJpbmcge1xuICBjb25zdCBlbWFpbCA9IHRyaW1Ub051bGwodXNlckVtYWlsKTtcbiAgaWYgKCFlbWFpbCkgcmV0dXJuIHJlc29sdmVTeXN0ZW1TZW5kZXJBZGRyZXNzKGNvbmZpZyk7XG4gIGlmIChjb25maWcuZnJvbSkgcmV0dXJuIGNvbmZpZy5mcm9tO1xuICBpZiAoY29uZmlnLmRvbWFpbikgcmV0dXJuIGRlcml2ZVNlbmRlckFkZHJlc3MoZW1haWwsIGNvbmZpZy5kb21haW4pO1xuICByZXR1cm4gZW1haWw7XG59XG5cbi8qKlxuICogRXhwYW5kIHRoZSByZXNvbHZlZCBjb25maWcncyBhbGxvdy1saXN0IGludG8gdGhlIGNvbmNyZXRlIGBGcm9tYFxuICogYWRkcmVzc2VzIG9mZmVyZWQgdG8gdGhlIGN1cnJlbnQgdXNlciAtIHRoZSBkYXRhIGEgVUkgc2VuZGVyIGRyb3Bkb3duXG4gKiByZW5kZXJzLiBFeGFjdC1hZGRyZXNzIHBhdHRlcm5zIHBhc3MgdGhyb3VnaDsgZG9tYWluIHdpbGRjYXJkc1xuICogKGAqQGRvbWFpbi5jb21gIC8gYmFyZSBgZG9tYWluLmNvbWApIGFyZSBjb25jcmV0aXplZCBhc1xuICogYDx1c2VyLWxvY2FsPkA8ZG9tYWluPmAgYW5kIGRyb3BwZWQgd2hlbiBubyBPQk8gdXNlciBsb2NhbCBwYXJ0IGlzXG4gKiBhdmFpbGFibGUuIFdoZW4gbm8gYWxsb3ctbGlzdCBpcyBjb25maWd1cmVkLCB0aGUgc2luZ2xlIGRlZmF1bHQgc2VuZGVyXG4gKiAoe0BsaW5rIHJlc29sdmVTZW5kZXJBZGRyZXNzfSkgaXMgcmV0dXJuZWQgd2hlbiBpdCBjYW4gYmUgcmVzb2x2ZWQsXG4gKiBlbHNlIGFuIGVtcHR5IGxpc3QuIFRoZSBkZWZhdWx0IHJlc29sdmVkIHNlbmRlciwgd2hlbiBwZXJtaXR0ZWQsIGlzXG4gKiBvcmRlcmVkIGZpcnN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdFNlbmRlck9wdGlvbnMoXG4gIGNvbmZpZzogUmVzb2x2ZWRFbWFpbENvbmZpZyxcbiAgdXNlckVtYWlsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHBhdHRlcm5zID0gY29uZmlnLmFsbG93ZWRTZW5kZXJzID8/IFtdO1xuICBjb25zdCBsb2NhbCA9IHVzZXJFbWFpbD8uc3BsaXQoXCJAXCIpWzBdPy50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qgb3B0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgYWRkID0gKGFkZHJlc3M6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQgPT4ge1xuICAgIGlmIChhZGRyZXNzICYmICFvcHRpb25zLmluY2x1ZGVzKGFkZHJlc3MpKSBvcHRpb25zLnB1c2goYWRkcmVzcyk7XG4gIH07XG5cbiAgLy8gU3VyZmFjZSB0aGUgYWRkcmVzcyBhIHNlbmQgd291bGQgdXNlIGJ5IGRlZmF1bHQgZmlyc3QsIHdoZW4gaXQgY2FuXG4gIC8vIGJlIHJlc29sdmVkIGFuZCB0aGUgYWxsb3ctbGlzdCAoaWYgYW55KSBwZXJtaXRzIGl0LlxuICB0cnkge1xuICAgIGNvbnN0IGZhbGxiYWNrID0gcmVzb2x2ZVNlbmRlckFkZHJlc3MoY29uZmlnLCB1c2VyRW1haWwpO1xuICAgIGlmIChpc1NlbmRlckFsbG93ZWQoZmFsbGJhY2ssIHBhdHRlcm5zKSkgYWRkKGZhbGxiYWNrLnRvTG93ZXJDYXNlKCkpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBObyBkZWZhdWx0IHJlc29sdmFibGUgKGUuZy4gZmlsZSBtb2RlIHdpdGggbm8gdXNlciAvIGRvbWFpbiAvIGZyb20pLlxuICB9XG5cbiAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHBhdHRlcm5zKSB7XG4gICAgaWYgKHBhdHRlcm4gPT09IFwiKlwiKSBjb250aW51ZTsgLy8gXCJhbnlcIiBjYW4ndCBiZSBlbnVtZXJhdGVkIGFzIGEgY2hvaWNlXG4gICAgaWYgKHBhdHRlcm4uc3RhcnRzV2l0aChcIipAXCIpIHx8ICFwYXR0ZXJuLmluY2x1ZGVzKFwiQFwiKSkge1xuICAgICAgY29uc3QgZG9tYWluID0gcGF0dGVybi5zdGFydHNXaXRoKFwiKkBcIikgPyBwYXR0ZXJuLnNsaWNlKDIpIDogcGF0dGVybjtcbiAgICAgIGlmIChsb2NhbCkgYWRkKGAke2xvY2FsfUAke2RvbWFpbn1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWRkKHBhdHRlcm4pOyAvLyBleGFjdCBhZGRyZXNzXG4gICAgfVxuICB9XG4gIHJldHVybiBvcHRpb25zO1xufVxuIl19
|
package/lib/src/tool.d.ts
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
*
|
|
17
17
|
* @module
|
|
18
18
|
*/
|
|
19
|
-
import {
|
|
19
|
+
import { type EmailMessage, type EmailResult } from "@dbx-tools/shared-email";
|
|
20
20
|
import { type ToolAction } from "@mastra/core/tools";
|
|
21
21
|
/**
|
|
22
22
|
* The model-facing description of the send capability, shared by the Mastra
|
|
@@ -37,7 +37,7 @@ export interface EmailToolOptions {
|
|
|
37
37
|
* Use a function or Classifier-backed policy to allow low-risk calls while
|
|
38
38
|
* retaining human review for uncertain ones.
|
|
39
39
|
*/
|
|
40
|
-
requireApproval?: ToolAction<
|
|
40
|
+
requireApproval?: ToolAction<EmailMessage, EmailResult>["requireApproval"];
|
|
41
41
|
}
|
|
42
42
|
/**
|
|
43
43
|
* Build the approval-gated `send_email` tool. Spread it into the agents
|
package/lib/src/tool.js
CHANGED
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
* @module
|
|
18
18
|
*/
|
|
19
19
|
import { getExecutionContext } from "@databricks/appkit";
|
|
20
|
-
import { log,
|
|
21
|
-
import {
|
|
20
|
+
import { log, toDescription } from "@dbx-tools/shared-core";
|
|
21
|
+
import { emailMessageSchema, emailResultSchema, } from "@dbx-tools/shared-email";
|
|
22
22
|
import { createTool } from "@mastra/core/tools";
|
|
23
23
|
import { resolveSenderAddress } from "./sender.js";
|
|
24
24
|
import { getEmailRuntime, sendEmail } from "./transport.js";
|
|
@@ -28,7 +28,7 @@ const logger = log.logger("email/tool/send-email");
|
|
|
28
28
|
* {@link emailTool} and the AppKit `email.send` tool so both agents get the
|
|
29
29
|
* same guidance about approval and scope.
|
|
30
30
|
*/
|
|
31
|
-
export const SEND_EMAIL_DESCRIPTION =
|
|
31
|
+
export const SEND_EMAIL_DESCRIPTION = toDescription(`
|
|
32
32
|
Send an email on the user's behalf. Pass one or more recipient
|
|
33
33
|
addresses (with optional cc / bcc and file attachments), a subject,
|
|
34
34
|
and a body; the configured approval policy runs before it goes out.
|
|
@@ -58,11 +58,11 @@ export function emailTool(opts = {}) {
|
|
|
58
58
|
return createTool({
|
|
59
59
|
id: opts.id ?? "send_email",
|
|
60
60
|
description: SEND_EMAIL_DESCRIPTION,
|
|
61
|
-
inputSchema:
|
|
62
|
-
outputSchema:
|
|
61
|
+
inputSchema: emailMessageSchema,
|
|
62
|
+
outputSchema: emailResultSchema,
|
|
63
63
|
requireApproval: opts.requireApproval ?? true,
|
|
64
64
|
execute: async (input, context) => {
|
|
65
|
-
const message =
|
|
65
|
+
const message = emailMessageSchema.parse(input);
|
|
66
66
|
const { config } = getEmailRuntime();
|
|
67
67
|
const ctx = getExecutionContext();
|
|
68
68
|
const userEmail = "isUserContext" in ctx ? ctx.userEmail : undefined;
|
|
@@ -77,4 +77,4 @@ export function emailTool(opts = {}) {
|
|
|
77
77
|
},
|
|
78
78
|
});
|
|
79
79
|
}
|
|
80
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUVILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUdMLGtCQUFrQixFQUNsQixpQkFBaUIsR0FDbEIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsVUFBVSxFQUFtQixNQUFNLG9CQUFvQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTVELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztBQUVuRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsYUFBYSxDQUFDOzs7Ozs7Ozs7Q0FTbkQsQ0FBQyxDQUFDO0FBa0JIOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsT0FBeUIsRUFBRTtJQUNuRCxPQUFPLFVBQVUsQ0FBQztRQUNoQixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxZQUFZO1FBQzNCLFdBQVcsRUFBRSxzQkFBc0I7UUFDbkMsV0FBVyxFQUFFLGtCQUFrQjtRQUMvQixZQUFZLEVBQUUsaUJBQWlCO1FBQy9CLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUk7UUFDN0MsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDaEMsTUFBTSxPQUFPLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hELE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxlQUFlLEVBQUUsQ0FBQztZQUNyQyxNQUFNLEdBQUcsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sU0FBUyxHQUFHLGVBQWUsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNyRSxNQUFNLElBQUksR0FBRyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDckQsTUFBTSxNQUFNLEdBQUcsTUFBTSxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDcEUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ2xCLEVBQUUsRUFBRSxNQUFNLENBQUMsU0FBUztnQkFDcEIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2dCQUNqQixHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDN0QsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBgc2VuZF9lbWFpbGAgTWFzdHJhIHRvb2w6IGh1bWFuIGFwcHJvdmFsIGlzIHJlcXVpcmVkIGJ5IGRlZmF1bHQsIHdpdGggYW5cbiAqIG9wdGlvbmFsIE1hc3RyYS1uYXRpdmUgY29uZGl0aW9uYWwgYXBwcm92YWwgZnVuY3Rpb24gZm9yIGNhbGxlci1vd25lZCBwb2xpY3kuXG4gKiBPbmNlIGFsbG93ZWQsIHRoZSBzZW5kZXIgaXMgcmVzb2x2ZWQgKGV4cGxpY2l0IGBmcm9tYCBjb25maWcsIGVsc2UgZGVyaXZlZFxuICogZnJvbSB0aGUgb24tYmVoYWxmLW9mIHVzZXIncyBlbWFpbCkgYW5kIHRoZSBtZXNzYWdlIGlzIGRpc3BhdGNoZWQgdGhyb3VnaFxuICogdGhlIHNoYXJlZCBTTVRQIHRyYW5zcG9ydC5cbiAqXG4gKiBUaGUgc2VuZGVyIGRlcml2YXRpb24gcnVucyBpbnNpZGUgdGhlIEFwcEtpdCB1c2VyIHNjb3BlLCBzb1xuICogYGdldEV4ZWN1dGlvbkNvbnRleHQoKWAgcmV0dXJucyB0aGUgT0JPIHVzZXIgd2hvc2UgbG9jYWwtcGFydCBzZWVkc1xuICogdGhlIGFkZHJlc3MgKHNlZSB7QGxpbmsgZGVyaXZlU2VuZGVyQWRkcmVzc30pLlxuICpcbiAqIFRoZSBkaXNwYXRjaCBpdHNlbGYgZ29lcyB0aHJvdWdoIHRoZSBleGVjdXRvciB0aGUgcGx1Z2luIGluc3RhbGxzIG9uIHRoZVxuICogc2hhcmVkIHJ1bnRpbWUsIHNvIGEgc2VuZCBmcm9tIHRoaXMgdG9vbCBwaWNrcyB1cCB0aGUgc2FtZSByZXRyeSAvIHRpbWVvdXQgL1xuICogdGVsZW1ldHJ5IGNoYWluIGFzIG9uZSBmcm9tIHRoZSBBcHBLaXQgdG9vbC4gSW4gYSBNYXN0cmEgYXBwIHdpdGggbm8gQXBwS2l0XG4gKiBwbHVnaW4gcmVnaXN0ZXJlZCB0aGUgc2VuZCBzdGlsbCBydW5zLCBqdXN0IHdpdGhvdXQgaW50ZXJjZXB0b3JzLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBnZXRFeGVjdXRpb25Db250ZXh0IH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgbG9nLCB0b0Rlc2NyaXB0aW9uIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7XG4gIHR5cGUgRW1haWxNZXNzYWdlLFxuICB0eXBlIEVtYWlsUmVzdWx0LFxuICBlbWFpbE1lc3NhZ2VTY2hlbWEsXG4gIGVtYWlsUmVzdWx0U2NoZW1hLFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtZW1haWxcIjtcbmltcG9ydCB7IGNyZWF0ZVRvb2wsIHR5cGUgVG9vbEFjdGlvbiB9IGZyb20gXCJAbWFzdHJhL2NvcmUvdG9vbHNcIjtcbmltcG9ydCB7IHJlc29sdmVTZW5kZXJBZGRyZXNzIH0gZnJvbSBcIi4vc2VuZGVyLnRzXCI7XG5pbXBvcnQgeyBnZXRFbWFpbFJ1bnRpbWUsIHNlbmRFbWFpbCB9IGZyb20gXCIuL3RyYW5zcG9ydC50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiZW1haWwvdG9vbC9zZW5kLWVtYWlsXCIpO1xuXG4vKipcbiAqIFRoZSBtb2RlbC1mYWNpbmcgZGVzY3JpcHRpb24gb2YgdGhlIHNlbmQgY2FwYWJpbGl0eSwgc2hhcmVkIGJ5IHRoZSBNYXN0cmFcbiAqIHtAbGluayBlbWFpbFRvb2x9IGFuZCB0aGUgQXBwS2l0IGBlbWFpbC5zZW5kYCB0b29sIHNvIGJvdGggYWdlbnRzIGdldCB0aGVcbiAqIHNhbWUgZ3VpZGFuY2UgYWJvdXQgYXBwcm92YWwgYW5kIHNjb3BlLlxuICovXG5leHBvcnQgY29uc3QgU0VORF9FTUFJTF9ERVNDUklQVElPTiA9IHRvRGVzY3JpcHRpb24oYFxuICBTZW5kIGFuIGVtYWlsIG9uIHRoZSB1c2VyJ3MgYmVoYWxmLiBQYXNzIG9uZSBvciBtb3JlIHJlY2lwaWVudFxuICBhZGRyZXNzZXMgKHdpdGggb3B0aW9uYWwgY2MgLyBiY2MgYW5kIGZpbGUgYXR0YWNobWVudHMpLCBhIHN1YmplY3QsXG4gIGFuZCBhIGJvZHk7IHRoZSBjb25maWd1cmVkIGFwcHJvdmFsIHBvbGljeSBydW5zIGJlZm9yZSBpdCBnb2VzIG91dC5cbiAgVXNlIGl0IG9ubHkgd2hlbiB0aGUgdXNlclxuICBleHBsaWNpdGx5IGFza3MgdG8gc2VuZCAvIGZvcndhcmQgLyBzaGFyZSBzb21ldGhpbmcgdmlhIGVtYWlsIC1cbiAgbmV2ZXIgYXV0b25vbW91c2x5LiBDb21wb3NlIHdoYXRldmVyIHN1YmplY3QgYW5kIGJvZHkgYmVzdCBmdWxmaWxsXG4gIHRoZSB1c2VyJ3MgcmVxdWVzdDsgdGhlIGNvbmZpZ3VyZWQgUmVhY3QgRW1haWwgdGVtcGxhdGUgaGFuZGxlcyB0aGVcbiAgcmVzcG9uc2l2ZSBsYXlvdXQsIHJpY2ggcHJlc2VudGF0aW9uLCBhbmQgYnJhbmQgc3R5bGluZy5cbmApO1xuXG4vKiogT3B0aW9ucyBhY2NlcHRlZCBieSB7QGxpbmsgZW1haWxUb29sfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxUb29sT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgdG9vbCBpZC4gRGVmYXVsdHMgdG8gYFwic2VuZF9lbWFpbFwiYDsgdGhlIGNoYXQgVUknc1xuICAgKiBhcHByb3ZhbCBnYXRlIGtleXMgb2ZmIHRoaXMgaWQsIHNvIGtlZXAgaXQgdW5sZXNzIHlvdSBhbHNvIHRlYWNoXG4gICAqIHRoZSBjbGllbnQgYWJvdXQgdGhlIG5ldyBuYW1lLlxuICAgKi9cbiAgaWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBNYXN0cmEtbmF0aXZlIHN0YXRpYyBvciBwZXItY2FsbCBhcHByb3ZhbCBwcmVkaWNhdGUuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICogVXNlIGEgZnVuY3Rpb24gb3IgQ2xhc3NpZmllci1iYWNrZWQgcG9saWN5IHRvIGFsbG93IGxvdy1yaXNrIGNhbGxzIHdoaWxlXG4gICAqIHJldGFpbmluZyBodW1hbiByZXZpZXcgZm9yIHVuY2VydGFpbiBvbmVzLlxuICAgKi9cbiAgcmVxdWlyZUFwcHJvdmFsPzogVG9vbEFjdGlvbjxFbWFpbE1lc3NhZ2UsIEVtYWlsUmVzdWx0PltcInJlcXVpcmVBcHByb3ZhbFwiXTtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgYXBwcm92YWwtZ2F0ZWQgYHNlbmRfZW1haWxgIHRvb2wuIFNwcmVhZCBpdCBpbnRvIHRoZSBhZ2VudHNcbiAqIHRoYXQgc2hvdWxkIGJlIGFibGUgdG8gZHJhZnQgbWFpbDsgaXQgaXMgaW50ZW50aW9uYWxseSBub3QgaW5zdGFsbGVkXG4gKiBldmVyeXdoZXJlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZW1haWxUb29sIH0gZnJvbSBcIkBkYngtdG9vbHMvZW1haWxcIjtcbiAqIGltcG9ydCB7IGNyZWF0ZUFnZW50IH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0LW1hc3RyYVwiO1xuICpcbiAqIGNvbnN0IHN1cHBvcnQgPSBjcmVhdGVBZ2VudCh7XG4gKiAgIGluc3RydWN0aW9uczogXCIuLi5cIixcbiAqICAgdG9vbHM6ICgpID0+ICh7IHNlbmRfZW1haWw6IGVtYWlsVG9vbCgpIH0pLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVtYWlsVG9vbChvcHRzOiBFbWFpbFRvb2xPcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIGNyZWF0ZVRvb2woe1xuICAgIGlkOiBvcHRzLmlkID8/IFwic2VuZF9lbWFpbFwiLFxuICAgIGRlc2NyaXB0aW9uOiBTRU5EX0VNQUlMX0RFU0NSSVBUSU9OLFxuICAgIGlucHV0U2NoZW1hOiBlbWFpbE1lc3NhZ2VTY2hlbWEsXG4gICAgb3V0cHV0U2NoZW1hOiBlbWFpbFJlc3VsdFNjaGVtYSxcbiAgICByZXF1aXJlQXBwcm92YWw6IG9wdHMucmVxdWlyZUFwcHJvdmFsID8/IHRydWUsXG4gICAgZXhlY3V0ZTogYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZW1haWxNZXNzYWdlU2NoZW1hLnBhcnNlKGlucHV0KTtcbiAgICAgIGNvbnN0IHsgY29uZmlnIH0gPSBnZXRFbWFpbFJ1bnRpbWUoKTtcbiAgICAgIGNvbnN0IGN0eCA9IGdldEV4ZWN1dGlvbkNvbnRleHQoKTtcbiAgICAgIGNvbnN0IHVzZXJFbWFpbCA9IFwiaXNVc2VyQ29udGV4dFwiIGluIGN0eCA/IGN0eC51c2VyRW1haWwgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBmcm9tID0gcmVzb2x2ZVNlbmRlckFkZHJlc3MoY29uZmlnLCB1c2VyRW1haWwpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2VuZEVtYWlsKG1lc3NhZ2UsIGZyb20sIGNvbnRleHQ/LmFib3J0U2lnbmFsKTtcbiAgICAgIGxvZ2dlci5pbmZvKFwic2VudFwiLCB7XG4gICAgICAgIHRvOiByZXN1bHQucmVjaXBpZW50LFxuICAgICAgICBmcm9tOiByZXN1bHQuZnJvbSxcbiAgICAgICAgLi4uKHJlc3VsdC5tZXNzYWdlSWQgPyB7IG1lc3NhZ2VJZDogcmVzdWx0Lm1lc3NhZ2VJZCB9IDoge30pLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gIH0pO1xufVxuIl19
|
package/lib/src/transport.js
CHANGED
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
* @module
|
|
23
23
|
*/
|
|
24
24
|
import { ConfigurationError, ValidationError } from "@databricks/appkit";
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
25
|
+
import { runPluginExecution } from "@dbx-tools/appkit";
|
|
26
|
+
import { log, directExecutor } from "@dbx-tools/shared-core";
|
|
27
27
|
import nodemailer from "nodemailer";
|
|
28
28
|
import { resolveEmailConfig } from "./config.js";
|
|
29
29
|
import { EMAIL_SEND_SETTINGS, MAX_ATTACHMENT_BYTES, MAX_ATTACHMENT_COUNT, MAX_ATTACHMENTS_TOTAL_BYTES, MAX_BODY_CHARS, } from "./defaults.js";
|
|
@@ -36,7 +36,7 @@ const logger = log.logger("email/transport");
|
|
|
36
36
|
* directly, mapping a throw onto the same {@link ExecutionResult} shape so
|
|
37
37
|
* call sites branch on `ok` either way.
|
|
38
38
|
*/
|
|
39
|
-
const directExecute =
|
|
39
|
+
const directExecute = directExecutor();
|
|
40
40
|
let runtime;
|
|
41
41
|
/**
|
|
42
42
|
* Return the shared runtime, building it on first use by resolving
|
|
@@ -103,7 +103,7 @@ export function resetEmailRuntime() {
|
|
|
103
103
|
*/
|
|
104
104
|
export async function executeWrite(operation, settings, fn, signal) {
|
|
105
105
|
const { execute } = getEmailRuntime();
|
|
106
|
-
return
|
|
106
|
+
return runPluginExecution({
|
|
107
107
|
plugin: "email",
|
|
108
108
|
logger,
|
|
109
109
|
operation,
|
|
@@ -317,4 +317,4 @@ export async function sendEmail(message, from, signal, options) {
|
|
|
317
317
|
assertSenderAllowed(from, getEmailRuntime().config.allowedSenders);
|
|
318
318
|
return executeWrite("send", EMAIL_SEND_SETTINGS, (executeSignal) => dispatch(message, from, executeSignal, options), signal);
|
|
319
319
|
}
|
|
320
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RyYW5zcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUVILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQXdCLE1BQU0sb0JBQW9CLENBQUM7QUFDL0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFeEQsT0FBTyxVQUFzRCxNQUFNLFlBQVksQ0FBQztBQUVoRixPQUFPLEVBQUUsa0JBQWtCLEVBQW9ELE1BQU0sYUFBYSxDQUFDO0FBQ25HLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNwQiwyQkFBMkIsRUFDM0IsY0FBYyxHQUVmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWxELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQW9CN0M7Ozs7R0FJRztBQUNILE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxjQUFjLEVBQTBCLENBQUM7QUFFekUsSUFBSSxPQUFpQyxDQUFDO0FBRXRDOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxTQUE2QjtJQUMzRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixNQUFNLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QyxPQUFPLEdBQUc7WUFDUixNQUFNO1lBQ04sT0FB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QUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ25ELENBQUMsRUFDRixNQUFNLENBQ1AsQ0FBQztJQUNGLE9BQU87UUFDTCxJQUFJLEVBQUUsSUFBSTtRQUNWLFNBQVM7UUFDVCxJQUFJO1FBQ0osR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ3pELENBQUM7QUFDSixDQUFDO0FBK0NEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxTQUFTLENBQzdCLE9BQXFCLEVBQ3JCLElBQVksRUFDWixNQUFvQixFQUNwQixPQUEwQjtJQUUxQixJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzVCLE1BQU0sZUFBZSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNuRSxPQUFPLFlBQVksQ0FDakIsTUFBTSxFQUNOLG1CQUFtQixFQUNuQixDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLE9BQU8sQ0FBQyxFQUNsRSxNQUFNLENBQ1AsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBlbWFpbCBydW50aW1lOiBhIGxhemlseS1idWlsdCwgcHJvY2Vzcy13aWRlIGRpc3BhdGNoZXIgcGx1cyBpdHNcbiAqIHJlc29sdmVkIGNvbmZpZywgYW5kIHtAbGluayBzZW5kRW1haWx9IHdoaWNoIHNlbmRzIG9uZVxuICoge0BsaW5rIEVtYWlsTWVzc2FnZX0gdGhyb3VnaCBpdC4gSW4gU01UUCBtb2RlIHRoZSBydW50aW1lIGhvbGRzIGFcbiAqIG1lbW9pemVkIG5vZGVtYWlsZXIgdHJhbnNwb3J0IChzaGFyZWQgYnkgdGhlIHBsdWdpbidzIHNldHVwIGFuZCB0aGVcbiAqIGFnZW50IHRvb2wsIHNvIHRoZXkgcmV1c2Ugb25lIGNvbm5lY3Rpb24gcG9vbCk7IGluIGZpbGUvb3V0Ym94IG1vZGUgaXRcbiAqIGhvbGRzIG5vIHRyYW5zcG9ydCBhbmQge0BsaW5rIHNlbmRFbWFpbH0gd3JpdGVzIEhUTUwgdG8gZGlzayBpbnN0ZWFkLlxuICogVGhlIGZpcnN0IGNhbGxlciAobm9ybWFsbHkgdGhlIHBsdWdpbiBhdCBzZXR1cCkgcHJpbWVzIGl0IHdpdGggdGhlXG4gKiBwbHVnaW4ncyBjb25maWc7IGxhdGVyIGNhbGxlcnMgcmV1c2UgaXQuXG4gKlxuICogVGhlIHJ1bnRpbWUgYWxzbyBjYXJyaWVzIHRoZSB7QGxpbmsgRW1haWxFeGVjdXRvcn0gZXZlcnkgb3V0Ym91bmQgc2VuZCBydW5zXG4gKiB0aHJvdWdoLiBUaGUgcGx1Z2luIGluc3RhbGxzIGl0cyBvd24gYGV4ZWN1dGUoKWAgdGhlcmUgYXQgc2V0dXAsIHdoaWNoIGlzXG4gKiBob3cgdGhlIE1hc3RyYSB0b29sIC0gYSBwbGFpbiBmdW5jdGlvbiB3aXRoIG5vIHBsdWdpbiBpbnN0YW5jZSBpbiBzY29wZSAtXG4gKiBzdGlsbCBnZXRzIEFwcEtpdCdzIHJldHJ5IC8gdGltZW91dCAvIHRlbGVtZXRyeSBjaGFpbi4gV2l0aG91dCBhIHJlZ2lzdGVyZWRcbiAqIHBsdWdpbiAoYSBkaXJlY3QgY2FsbCBmcm9tIGEgc2NyaXB0IG9yIGEgdGVzdCkgdGhlIHNlbmQgc3RpbGwgcnVucywganVzdFxuICogd2l0aG91dCBpbnRlcmNlcHRvcnMuXG4gKlxuICogRXZlcnkgZW50cnkgcG9pbnQgdGFrZXMgYW4gb3B0aW9uYWwge0BsaW5rIEFib3J0U2lnbmFsfSBzbyB0aGUgcGx1Z2luJ3NcbiAqIGBleGVjdXRlKClgIHRpbWVvdXQgYW5kIGEgY2xpZW50IGRpc2Nvbm5lY3QgYm90aCBzdG9wIHRoZSBjYWxsZXIgd2FpdGluZ1xuICogb24gU01UUC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbkVycm9yLCBWYWxpZGF0aW9uRXJyb3IsIHR5cGUgRXhlY3V0aW9uUmVzdWx0IH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgcGx1Z2luRXhlY3V0aW9uIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgeyBleGVjdXRpb24sIGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IEVtYWlsQXR0YWNobWVudCwgRW1haWxNZXNzYWdlLCBFbWFpbFJlc3VsdCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1lbWFpbFwiO1xuaW1wb3J0IG5vZGVtYWlsZXIsIHsgdHlwZSBTZW5kTWFpbE9wdGlvbnMsIHR5cGUgVHJhbnNwb3J0ZXIgfSBmcm9tIFwibm9kZW1haWxlclwiO1xuaW1wb3J0IHR5cGUgeyBFbWFpbEJyYW5kIH0gZnJvbSBcIi4vYnJhbmQudHNcIjtcbmltcG9ydCB7IHJlc29sdmVFbWFpbENvbmZpZywgdHlwZSBFbWFpbFBsdWdpbkNvbmZpZywgdHlwZSBSZXNvbHZlZEVtYWlsQ29uZmlnIH0gZnJvbSBcIi4vY29uZmlnLnRzXCI7XG5pbXBvcnQge1xuICBFTUFJTF9TRU5EX1NFVFRJTkdTLFxuICBNQVhfQVRUQUNITUVOVF9CWVRFUyxcbiAgTUFYX0FUVEFDSE1FTlRfQ09VTlQsXG4gIE1BWF9BVFRBQ0hNRU5UU19UT1RBTF9CWVRFUyxcbiAgTUFYX0JPRFlfQ0hBUlMsXG4gIHR5cGUgRW1haWxFeGVjdXRpb25TZXR0aW5ncyxcbn0gZnJvbSBcIi4vZGVmYXVsdHMudHNcIjtcbmltcG9ydCB7IHJlbmRlckVtYWlsIH0gZnJvbSBcIi4vZW1haWwtaHRtbC50c1wiO1xuaW1wb3J0IHsgd3JpdGVPdXRib3hFbWFpbCB9IGZyb20gXCIuL291dGJveC50c1wiO1xuaW1wb3J0IHsgYXNzZXJ0U2VuZGVyQWxsb3dlZCB9IGZyb20gXCIuL3NlbmRlci50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiZW1haWwvdHJhbnNwb3J0XCIpO1xuXG4vKipcbiAqIFJ1bnMgb25lIG91dGJvdW5kIHNlbmQgdGhyb3VnaCBBcHBLaXQncyBpbnRlcmNlcHRvciBjaGFpbi4gTWF0Y2hlc1xuICogYFBsdWdpbi5leGVjdXRlKClgLCB3aGljaCBuZXZlciB0aHJvd3M6IGEgZmFpbHVyZSBjb21lcyBiYWNrIGFzXG4gKiBgeyBvazogZmFsc2UgfWAuXG4gKi9cbmV4cG9ydCB0eXBlIEVtYWlsRXhlY3V0b3IgPSA8VD4oXG4gIGZuOiAoc2lnbmFsPzogQWJvcnRTaWduYWwpID0+IFByb21pc2U8VD4sXG4gIHNldHRpbmdzOiBFbWFpbEV4ZWN1dGlvblNldHRpbmdzLFxuKSA9PiBQcm9taXNlPEV4ZWN1dGlvblJlc3VsdDxUPj47XG5cbi8qKiBUaGUgc2hhcmVkIGRpc3BhdGNoZXIsIGl0cyByZXNvbHZlZCBjb25maWcsIGFuZCB0aGUgc2VuZCBleGVjdXRvci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxSdW50aW1lIHtcbiAgLyoqIFByZXNlbnQgb25seSBpbiBTTVRQIG1vZGUuICovXG4gIHRyYW5zcG9ydGVyPzogVHJhbnNwb3J0ZXI7XG4gIGNvbmZpZzogUmVzb2x2ZWRFbWFpbENvbmZpZztcbiAgZXhlY3V0ZTogRW1haWxFeGVjdXRvcjtcbn1cblxuLyoqXG4gKiBFeGVjdXRvciB1c2VkIHVudGlsIChvciB1bmxlc3MpIHRoZSBwbHVnaW4gaW5zdGFsbHMgaXRzIG93bjogcnVuIHRoZSBzZW5kXG4gKiBkaXJlY3RseSwgbWFwcGluZyBhIHRocm93IG9udG8gdGhlIHNhbWUge0BsaW5rIEV4ZWN1dGlvblJlc3VsdH0gc2hhcGUgc29cbiAqIGNhbGwgc2l0ZXMgYnJhbmNoIG9uIGBva2AgZWl0aGVyIHdheS5cbiAqL1xuY29uc3QgZGlyZWN0RXhlY3V0ZSA9IGV4ZWN1dGlvbi5kaXJlY3RFeGVjdXRvcjxFbWFpbEV4ZWN1dGlvblNldHRpbmdzPigpO1xuXG5sZXQgcnVudGltZTogRW1haWxSdW50aW1lIHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIFJldHVybiB0aGUgc2hhcmVkIHJ1bnRpbWUsIGJ1aWxkaW5nIGl0IG9uIGZpcnN0IHVzZSBieSByZXNvbHZpbmdcbiAqIGBvdmVycmlkZXNgIG92ZXIgdGhlIGVudmlyb25tZW50IChgU01UUF9IT1NUYCwgYFNNVFBfUE9SVGAsXG4gKiBgU01UUF9TRUNVUkVgLCBgU01UUF9VU0VSYCwgYFNNVFBfUEFTU1dPUkRgLCBgRU1BSUxfRE9NQUlOYCxcbiAqIGBFTUFJTF9GUk9NYCwgYEVNQUlMX0FMTE9XRURfU0VOREVSU2AsIGBFTUFJTF9TRU5ERVJfUE9MSUNZYCxcbiAqIGBFTUFJTF9PVVRCT1hfTU9ERWAsIGBFTUFJTF9PVVRCT1hfRElSYCkgdGhyb3VnaFxuICoge0BsaW5rIHJlc29sdmVFbWFpbENvbmZpZ30uIFdpdGggU01UUCBjcmVkZW50aWFscyBwcmVzZW50IGl0IGhvbGRzIGFcbiAqIG5vZGVtYWlsZXIgdHJhbnNwb3J0IGFuZCBpdHMgY29ubmVjdGlvbiBwb29sOyBvdGhlcndpc2UgaXQgaXMgaW5cbiAqIGZpbGUvb3V0Ym94IG1vZGUgYW5kIGhvbGRzIG5vbmUuXG4gKlxuICogYG92ZXJyaWRlc2AgaXMgcmVhZCBvbmx5IG9uIHRoZSBjYWxsIHRoYXQgYnVpbGRzIHRoZSBydW50aW1lLCBzbyBwcmltZSBpdFxuICogZnJvbSB0aGUgcGx1Z2luJ3MgY29uZmlnIGF0IHNldHVwOyBsYXRlciBjYWxsZXJzICh0aGUgdG9vbCdzIGBleGVjdXRlYCxcbiAqIHRoZSBzZW5kZXItb3B0aW9ucyByb3V0ZSkgcGFzcyBub3RoaW5nIGFuZCBnZXQgdGhlIHNhbWUgaW5zdGFuY2UuIFRocm93c1xuICogd2hhdGV2ZXIge0BsaW5rIHJlc29sdmVFbWFpbENvbmZpZ30gdGhyb3dzIGZvciBhbiB1bnVzYWJsZSBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW1haWxSdW50aW1lKG92ZXJyaWRlcz86IEVtYWlsUGx1Z2luQ29uZmlnKTogRW1haWxSdW50aW1lIHtcbiAgaWYgKCFydW50aW1lKSB7XG4gICAgY29uc3QgY29uZmlnID0gcmVzb2x2ZUVtYWlsQ29uZmlnKG92ZXJyaWRlcyk7XG4gICAgcnVudGltZSA9IHtcbiAgICAgIGNvbmZpZyxcbiAgICAgIGV4ZWN1dGU6IGRpcmVjdEV4ZWN1dGUsXG4gICAgICAuLi4oY29uZmlnLm1vZGUgPT09IFwic210cFwiXG4gICAgICAgID8ge1xuICAgICAgICAgICAgdHJhbnNwb3J0ZXI6IG5vZGVtYWlsZXIuY3JlYXRlVHJhbnNwb3J0KHtcbiAgICAgICAgICAgICAgaG9zdDogY29uZmlnLmhvc3QsXG4gICAgICAgICAgICAgIHBvcnQ6IGNvbmZpZy5wb3J0LFxuICAgICAgICAgICAgICBzZWN1cmU6IGNvbmZpZy5zZWN1cmUsXG4gICAgICAgICAgICAgIGF1dGg6IGNvbmZpZy5hdXRoLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfVxuICAgICAgICA6IHt9KSxcbiAgICB9O1xuICB9XG4gIHJldHVybiBydW50aW1lO1xufVxuXG4vKipcbiAqIEluc3RhbGwgdGhlIGV4ZWN1dG9yIG91dGJvdW5kIHNlbmRzIHJ1biB0aHJvdWdoLiBUaGUgcGx1Z2luIGNhbGxzIHRoaXMgYXRcbiAqIHNldHVwIHdpdGggaXRzIG93biBgZXhlY3V0ZSgpYDsgYSBzZWNvbmQgY2FsbCByZXBsYWNlcyB0aGUgcHJldmlvdXMgb25lLCBzb1xuICogYSByZS1yZWdpc3RlcmVkIHBsdWdpbiBkb2VzIG5vdCBsZWF2ZSB0aGUgdG9vbHMgYm91bmQgdG8gYSBkZWFkIGluc3RhbmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RW1haWxFeGVjdXRvcihleGVjdXRlOiBFbWFpbEV4ZWN1dG9yKTogdm9pZCB7XG4gIGdldEVtYWlsUnVudGltZSgpLmV4ZWN1dGUgPSBleGVjdXRlO1xufVxuXG4vKipcbiAqIERyb3AgdGhlIG1lbW9pemVkIHJ1bnRpbWUsIGNsb3NpbmcgdGhlIFNNVFAgY29ubmVjdGlvbiBwb29sLCBzbyB0aGUgbmV4dFxuICoge0BsaW5rIGdldEVtYWlsUnVudGltZX0gcmVidWlsZHMgaXQgZnJvbSBmcmVzaCBjb25maWcgYW5kIHN0b3BzIGNhbGxpbmdcbiAqIHRocm91Z2ggYSB0b3JuLWRvd24gcGx1Z2luJ3MgYGV4ZWN1dGUoKWAuIElkZW1wb3RlbnQsIGFuZCB0aGUgcGx1Z2luJ3NcbiAqIGBzaHV0ZG93bigpYCBob29rLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRFbWFpbFJ1bnRpbWUoKTogdm9pZCB7XG4gIHJ1bnRpbWU/LnRyYW5zcG9ydGVyPy5jbG9zZSgpO1xuICBydW50aW1lID0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJ1biBvbmUgbm9uLWlkZW1wb3RlbnQgd3JpdGUgdGhyb3VnaCB0aGUgc2hhcmVkIGV4ZWN1dG9yIGFuZCB1bndyYXAgaXQuXG4gKlxuICogYGV4ZWN1dGUoKWAgbmV2ZXIgdGhyb3dzLCBzbyBhIGZhaWxlZCBzZW5kIGFycml2ZXMgYXMgYHsgb2s6IGZhbHNlIH1gIHdpdGggYVxuICogc3RhdHVzIHRoZSBpbnRlcmNlcHRvcnMgYWxyZWFkeSBzYW5pdGl6ZWQ7IGl0IGlzIGxvZ2dlZCBoZXJlIGFuZCByZS1yYWlzZWRcbiAqIGFzIGEgc3RhYmxlIHtAbGluayBFeGVjdXRpb25FcnJvcn0gc28gYW4gdXBzdHJlYW0gbWVzc2FnZSBuZXZlciBiZWNvbWVzIHRoZVxuICogY2FsbGVyJ3MgZXJyb3IgdGV4dC4gYHNpZ25hbGAgaXMgdGhlIGNhbGxlcidzIG93biBjYW5jZWxsYXRpb24gKGFuIGFnZW50XG4gKiBydW4sIGEgcmVxdWVzdCB0ZWFyZG93bik7IGl0IGlzIG1lcmdlZCB3aXRoIHRoZSBzaWduYWwgdGhlIHRpbWVvdXRcbiAqIGludGVyY2VwdG9yIHN1cHBsaWVzIHNvIGVpdGhlciBvbmUgdW53aW5kcyB0aGUgSS9PLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZVdyaXRlPFQ+KFxuICBvcGVyYXRpb246IHN0cmluZyxcbiAgc2V0dGluZ3M6IEVtYWlsRXhlY3V0aW9uU2V0dGluZ3MsXG4gIGZuOiAoc2lnbmFsPzogQWJvcnRTaWduYWwpID0+IFByb21pc2U8VD4sXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IHsgZXhlY3V0ZSB9ID0gZ2V0RW1haWxSdW50aW1lKCk7XG4gIHJldHVybiBwbHVnaW5FeGVjdXRpb24ucnVuUGx1Z2luRXhlY3V0aW9uKHtcbiAgICBwbHVnaW46IFwiZW1haWxcIixcbiAgICBsb2dnZXIsXG4gICAgb3BlcmF0aW9uLFxuICAgIHNldHRpbmdzLFxuICAgIGV4ZWN1dGUsXG4gICAgZm4sXG4gICAgc2lnbmFsLFxuICB9KTtcbn1cblxuLyoqXG4gKiBPcGVuIGFuZCB0ZWFyIGRvd24gb25lIFNNVFAgY29ubmVjdGlvbiB0byBwcm92ZSB0aGUgaG9zdCwgcG9ydCwgYW5kXG4gKiBjcmVkZW50aWFscyB3b3JrLiBDYWxsZWQgYXQgcGx1Z2luIHNldHVwIHNvIGEgYmFkIHJlbGF5IHNob3dzIHVwIGluIHRoZVxuICogYm9vdCBsb2dzIHJhdGhlciB0aGFuIG9uIHRoZSBmaXJzdCBhcHByb3ZlZCBzZW5kLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5RW1haWxUcmFuc3BvcnQoXG4gIHRyYW5zcG9ydGVyOiBUcmFuc3BvcnRlciB8IHVuZGVmaW5lZCxcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCF0cmFuc3BvcnRlcikge1xuICAgIHRocm93IENvbmZpZ3VyYXRpb25FcnJvci5pbnZhbGlkQ29ubmVjdGlvbihcbiAgICAgIFwiU01UUFwiLFxuICAgICAgXCJUaGUgcnVudGltZSByZXNvbHZlZCB0byBvdXRib3ggbW9kZSwgc28gdGhlcmUgaXMgbm8gdHJhbnNwb3J0IHRvIHZlcmlmeS5cIixcbiAgICApO1xuICB9XG4gIGF3YWl0IGFib3J0YWJsZSh0cmFuc3BvcnRlci52ZXJpZnkoKSwgc2lnbmFsKTtcbn1cblxuLyoqXG4gKiBTdG9wIGF3YWl0aW5nIGBwcm9taXNlYCBhcyBzb29uIGFzIGBzaWduYWxgIGFib3J0cy4gbm9kZW1haWxlciBleHBvc2VzIG5vXG4gKiBjYW5jZWxsYXRpb24gaG9vaywgc28gdGhlIFNNVFAgY29udmVyc2F0aW9uIGl0c2VsZiBmaW5pc2hlcyBvbiBpdHMgb3duXG4gKiBjb25uZWN0aW9uOyB3aGF0IHVud2luZHMgaXMgdGhlIGNhbGxlciBhbmQgZXZlcnl0aGluZyBkb3duc3RyZWFtIG9mIGl0LlxuICovXG5mdW5jdGlvbiBhYm9ydGFibGU8VD4ocHJvbWlzZTogUHJvbWlzZTxUPiwgc2lnbmFsOiBBYm9ydFNpZ25hbCB8IHVuZGVmaW5lZCk6IFByb21pc2U8VD4ge1xuICBpZiAoIXNpZ25hbCkgcmV0dXJuIHByb21pc2U7XG4gIHNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAvLyBUaGUgbGlzdGVuZXIgaXMgZGV0YWNoZWQgb25jZSB0aGUgcmFjZSBzZXR0bGVzIHNvIGEgbG9uZy1saXZlZCBydW4gc2lnbmFsXG4gIC8vIGRvZXMgbm90IGFjY3VtdWxhdGUgb25lIHBlciBzZW5kLlxuICBjb25zdCBsaXN0ZW5lciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgY29uc3QgYWJvcnRlZCA9IG5ldyBQcm9taXNlPG5ldmVyPigoXywgcmVqZWN0KSA9PiB7XG4gICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiByZWplY3Qoc2lnbmFsLnJlYXNvbiksIHtcbiAgICAgIG9uY2U6IHRydWUsXG4gICAgICBzaWduYWw6IGxpc3RlbmVyLnNpZ25hbCxcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBQcm9taXNlLnJhY2UoW3Byb21pc2UsIGFib3J0ZWRdKS5maW5hbGx5KCgpID0+IGxpc3RlbmVyLmFib3J0KCkpO1xufVxuXG4vKiogVGhlIGNvbW1hLWpvaW5lZCByZWNpcGllbnQgc3RyaW5nIGVjaG9lZCBiYWNrIGluIHtAbGluayBFbWFpbFJlc3VsdH0uICovXG5mdW5jdGlvbiByZWNpcGllbnRFY2hvKHRvOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiB0by5qb2luKFwiLCBcIik7XG59XG5cbi8qKlxuICogTm9kZSBidWZmZXIgZW5jb2RpbmdzIGEgd2lyZSBhdHRhY2htZW50IG1heSBuYW1lIGZvciBpdHMgaW5saW5lIGBjb250ZW50YC5cbiAqIEFueXRoaW5nIGVsc2UgaXMgbWVhc3VyZWQgYXMgVVRGLTgsIHdoaWNoIG92ZXItY291bnRzIHJhdGhlciB0aGFuIGxldHRpbmdcbiAqIGFuIHVucmVjb2duaXplZCBlbmNvZGluZyBzbGlwIHBhc3QgdGhlIHNpemUgY2FwLlxuICovXG5jb25zdCBDT05URU5UX0VOQ09ESU5HUzogUmVhZG9ubHlTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoW1xuICBcImFzY2lpXCIsXG4gIFwiYmFzZTY0XCIsXG4gIFwiYmFzZTY0dXJsXCIsXG4gIFwiYmluYXJ5XCIsXG4gIFwiaGV4XCIsXG4gIFwibGF0aW4xXCIsXG4gIFwidWNzMlwiLFxuICBcInVjcy0yXCIsXG4gIFwidXRmOFwiLFxuICBcInV0Zi04XCIsXG4gIFwidXRmMTZsZVwiLFxuICBcInV0Zi0xNmxlXCIsXG5dKTtcblxuLyoqIERlY29kZWQgYnl0ZSBzaXplIG9mIG9uZSBhdHRhY2htZW50J3MgaW5saW5lIGNvbnRlbnQuICovXG5mdW5jdGlvbiBhdHRhY2htZW50Qnl0ZXMoYXR0YWNobWVudDogRW1haWxBdHRhY2htZW50KTogbnVtYmVyIHtcbiAgY29uc3QgeyBjb250ZW50LCBlbmNvZGluZyB9ID0gYXR0YWNobWVudDtcbiAgaWYgKGNvbnRlbnQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDA7XG4gIGNvbnN0IGRlY2xhcmVkID0gZW5jb2Rpbmc/LnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IHJlc29sdmVkID1cbiAgICBkZWNsYXJlZCAmJiBDT05URU5UX0VOQ09ESU5HUy5oYXMoZGVjbGFyZWQpID8gKGRlY2xhcmVkIGFzIEJ1ZmZlckVuY29kaW5nKSA6IFwidXRmOFwiO1xuICByZXR1cm4gQnVmZmVyLmJ5dGVMZW5ndGgoY29udGVudCwgcmVzb2x2ZWQpO1xufVxuXG4vKipcbiAqIFJlamVjdCBhIG1lc3NhZ2Ugd2hvc2UgYm9keSBvciBhdHRhY2htZW50cyBleGNlZWQgdGhlIHBsdWdpbidzIGNhcHMuIFRoZVxuICogYm9keSBhbmQgYXR0YWNobWVudCBsaXN0IGFycml2ZSBmcm9tIGEgbW9kZWwsIHNvIHRoZXkgYXJlIHVuYm91bmRlZCB1bnRpbFxuICogc29tZXRoaW5nIGJvdW5kcyB0aGVtOyBtb3N0IFNNVFAgcmVsYXlzIGFsc28gcmVqZWN0IGFuIG92ZXJzaXplZCBtZXNzYWdlXG4gKiBvbmx5IGFmdGVyIHRoZSB3aG9sZSBwYXlsb2FkIGhhcyBiZWVuIHVwbG9hZGVkLlxuICovXG5mdW5jdGlvbiBhc3NlcnRNZXNzYWdlV2l0aGluQ2FwcyhtZXNzYWdlOiBFbWFpbE1lc3NhZ2UpOiB2b2lkIHtcbiAgaWYgKG1lc3NhZ2UuYm9keS5sZW5ndGggPiBNQVhfQk9EWV9DSEFSUykge1xuICAgIHRocm93IFZhbGlkYXRpb25FcnJvci5pbnZhbGlkVmFsdWUoXG4gICAgICBcImJvZHlcIixcbiAgICAgIG1lc3NhZ2UuYm9keS5sZW5ndGgsXG4gICAgICBgYXQgbW9zdCAke01BWF9CT0RZX0NIQVJTfSBjaGFyYWN0ZXJzYCxcbiAgICApO1xuICB9XG4gIGNvbnN0IGF0dGFjaG1lbnRzID0gbWVzc2FnZS5hdHRhY2htZW50cyA/PyBbXTtcbiAgaWYgKGF0dGFjaG1lbnRzLmxlbmd0aCA+IE1BWF9BVFRBQ0hNRU5UX0NPVU5UKSB7XG4gICAgdGhyb3cgVmFsaWRhdGlvbkVycm9yLmludmFsaWRWYWx1ZShcbiAgICAgIFwiYXR0YWNobWVudHNcIixcbiAgICAgIGF0dGFjaG1lbnRzLmxlbmd0aCxcbiAgICAgIGBhdCBtb3N0ICR7TUFYX0FUVEFDSE1FTlRfQ09VTlR9IGZpbGVzYCxcbiAgICApO1xuICB9XG4gIGxldCB0b3RhbCA9IDA7XG4gIGZvciAoY29uc3QgYXR0YWNobWVudCBvZiBhdHRhY2htZW50cykge1xuICAgIGNvbnN0IGJ5dGVzID0gYXR0YWNobWVudEJ5dGVzKGF0dGFjaG1lbnQpO1xuICAgIGlmIChieXRlcyA+IE1BWF9BVFRBQ0hNRU5UX0JZVEVTKSB7XG4gICAgICB0aHJvdyBWYWxpZGF0aW9uRXJyb3IuaW52YWxpZFZhbHVlKFxuICAgICAgICBcImF0dGFjaG1lbnRzW10uY29udGVudFwiLFxuICAgICAgICBieXRlcyxcbiAgICAgICAgYGF0IG1vc3QgJHtNQVhfQVRUQUNITUVOVF9CWVRFU30gYnl0ZXMgcGVyIGZpbGVgLFxuICAgICAgKTtcbiAgICB9XG4gICAgdG90YWwgKz0gYnl0ZXM7XG4gIH1cbiAgaWYgKHRvdGFsID4gTUFYX0FUVEFDSE1FTlRTX1RPVEFMX0JZVEVTKSB7XG4gICAgdGhyb3cgVmFsaWRhdGlvbkVycm9yLmludmFsaWRWYWx1ZShcbiAgICAgIFwiYXR0YWNobWVudHNcIixcbiAgICAgIHRvdGFsLFxuICAgICAgYGF0IG1vc3QgJHtNQVhfQVRUQUNITUVOVFNfVE9UQUxfQllURVN9IGJ5dGVzIGFjcm9zcyBhbGwgZmlsZXNgLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBNYXAgdGhlIHdpcmUtZm9ybWF0IHtAbGluayBFbWFpbEF0dGFjaG1lbnR9cyBvbnRvIG5vZGVtYWlsZXInc1xuICogYXR0YWNobWVudCBzaGFwZSwgZHJvcHBpbmcgdW5zZXQgb3B0aW9uYWwga2V5cyBzbyBub2RlbWFpbGVyIGFwcGxpZXNcbiAqIGl0cyBvd24gZGVmYXVsdHMgKHV0Zi04IGVuY29kaW5nLCBmaWxlbmFtZS1pbmZlcnJlZCBjb250ZW50IHR5cGUpLiBUaGVcbiAqIHdpcmUgZmllbGRzIGFyZSBhIGRlbGliZXJhdGUgc3Vic2V0IG9mIG5vZGVtYWlsZXIncywgc28gdGhpcyBpcyBhXG4gKiBzdHJhaWdodCBzdHJ1Y3R1cmFsIHBhc3MtdGhyb3VnaC5cbiAqL1xuZnVuY3Rpb24gdG9NYWlsQXR0YWNobWVudHMoXG4gIGF0dGFjaG1lbnRzOiBFbWFpbEF0dGFjaG1lbnRbXSB8IHVuZGVmaW5lZCxcbik6IFNlbmRNYWlsT3B0aW9uc1tcImF0dGFjaG1lbnRzXCJdIHtcbiAgaWYgKCFhdHRhY2htZW50cyB8fCBhdHRhY2htZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBhdHRhY2htZW50cy5tYXAoKGF0dCkgPT4gKHtcbiAgICBmaWxlbmFtZTogYXR0LmZpbGVuYW1lLFxuICAgIC4uLihhdHQuY29udGVudCAhPT0gdW5kZWZpbmVkID8geyBjb250ZW50OiBhdHQuY29udGVudCB9IDoge30pLFxuICAgIC4uLihhdHQuZW5jb2RpbmcgIT09IHVuZGVmaW5lZCA/IHsgZW5jb2Rpbmc6IGF0dC5lbmNvZGluZyB9IDoge30pLFxuICAgIC4uLihhdHQuY29udGVudFR5cGUgIT09IHVuZGVmaW5lZCA/IHsgY29udGVudFR5cGU6IGF0dC5jb250ZW50VHlwZSB9IDoge30pLFxuICB9KSk7XG59XG5cbmNvbnN0IElOTElORV9CUkFORF9DSUQgPSBcImRieC10b29scy1icmFuZC1sb2dvXCI7XG5cbmZ1bmN0aW9uIGlubGluZUJyYW5kSW1hZ2UoYnJhbmQ6IEVtYWlsQnJhbmQpOiB7XG4gIGJyYW5kOiBFbWFpbEJyYW5kO1xuICBhdHRhY2htZW50PzogTm9uTnVsbGFibGU8U2VuZE1haWxPcHRpb25zW1wiYXR0YWNobWVudHNcIl0+W251bWJlcl07XG59IHtcbiAgY29uc3QgbWF0Y2ggPSAvXmRhdGE6KGltYWdlXFwvW147LF0rKTtiYXNlNjQsKFthLXowLTkrLz1dKykkL2kuZXhlYyhicmFuZC5sb2dvVXJsID8/IFwiXCIpO1xuICBpZiAoIW1hdGNoKSByZXR1cm4geyBicmFuZCB9O1xuICBjb25zdCBbLCBjb250ZW50VHlwZSwgY29udGVudF0gPSBtYXRjaDtcbiAgcmV0dXJuIHtcbiAgICBicmFuZDogeyAuLi5icmFuZCwgbG9nb1VybDogYGNpZDoke0lOTElORV9CUkFORF9DSUR9YCB9LFxuICAgIGF0dGFjaG1lbnQ6IHtcbiAgICAgIGZpbGVuYW1lOlxuICAgICAgICBjb250ZW50VHlwZSA9PT0gXCJpbWFnZS9zdmcreG1sXCJcbiAgICAgICAgICA/IFwiYnJhbmQtbG9nby5zdmdcIlxuICAgICAgICAgIDogY29udGVudFR5cGUgPT09IFwiaW1hZ2UvcG5nXCJcbiAgICAgICAgICAgID8gXCJicmFuZC1sb2dvLnBuZ1wiXG4gICAgICAgICAgICA6IFwiYnJhbmQtbG9nb1wiLFxuICAgICAgY29udGVudCxcbiAgICAgIGVuY29kaW5nOiBcImJhc2U2NFwiLFxuICAgICAgY29udGVudFR5cGUsXG4gICAgICBjb250ZW50RGlzcG9zaXRpb246IFwiaW5saW5lXCIsXG4gICAgICBjaWQ6IElOTElORV9CUkFORF9DSUQsXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBIYW5kIG9uZSBhbHJlYWR5LXZhbGlkYXRlZCBtZXNzYWdlIHRvIFNNVFAsIG9yIHdyaXRlIGl0IHRvIHRoZSBvdXRib3ggd2hlblxuICogbm8gY3JlZGVudGlhbHMgYXJlIGNvbmZpZ3VyZWQuIFRoZSBoYWxmIG9mIGEgc2VuZCB0aGF0IHBlcmZvcm1zIEkvTywgc28gaXRcbiAqIGlzIHdoYXQgcnVucyBpbnNpZGUgdGhlIGludGVyY2VwdG9yIGNoYWluLlxuICovXG5hc3luYyBmdW5jdGlvbiBkaXNwYXRjaChcbiAgbWVzc2FnZTogRW1haWxNZXNzYWdlLFxuICBmcm9tOiBzdHJpbmcsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICBvcHRpb25zPzogU2VuZEVtYWlsT3B0aW9ucyxcbik6IFByb21pc2U8RW1haWxSZXN1bHQ+IHtcbiAgY29uc3QgeyBjb25maWcsIHRyYW5zcG9ydGVyIH0gPSBnZXRFbWFpbFJ1bnRpbWUoKTtcbiAgY29uc3QgcmVjaXBpZW50ID0gcmVjaXBpZW50RWNobyhtZXNzYWdlLnRvKTtcbiAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuXG4gIGlmIChjb25maWcubW9kZSA9PT0gXCJmaWxlXCIpIHtcbiAgICBjb25zdCBwYXRoID0gYXdhaXQgd3JpdGVPdXRib3hFbWFpbChtZXNzYWdlLCBmcm9tLCBjb25maWcub3V0RGlyLCBjb25maWcuYnJhbmQsIHtcbiAgICAgIC4uLihvcHRpb25zPy5oZWFkaW5nICE9PSB1bmRlZmluZWQgPyB7IGhlYWRpbmc6IG9wdGlvbnMuaGVhZGluZyB9IDoge30pLFxuICAgICAgLi4uKG9wdGlvbnM/LnByZXZpZXcgIT09IHVuZGVmaW5lZCA/IHsgcHJldmlldzogb3B0aW9ucy5wcmV2aWV3IH0gOiB7fSksXG4gICAgfSk7XG4gICAgcmV0dXJuIHsgc2VudDogdHJ1ZSwgcmVjaXBpZW50LCBmcm9tLCBtZXNzYWdlSWQ6IHBhdGggfTtcbiAgfVxuXG4gIGlmICghdHJhbnNwb3J0ZXIpIHtcbiAgICB0aHJvdyBDb25maWd1cmF0aW9uRXJyb3IuaW52YWxpZENvbm5lY3Rpb24oXG4gICAgICBcIlNNVFBcIixcbiAgICAgIFwiTm8gdHJhbnNwb3J0IHdhcyBidWlsdCBmb3IgdGhlIHJlc29sdmVkIGNvbmZpZ3VyYXRpb24uXCIsXG4gICAgKTtcbiAgfVxuICBjb25zdCBtZXNzYWdlQXR0YWNobWVudHMgPSB0b01haWxBdHRhY2htZW50cyhtZXNzYWdlLmF0dGFjaG1lbnRzKTtcbiAgY29uc3QgaW5saW5lQnJhbmQgPSBpbmxpbmVCcmFuZEltYWdlKGNvbmZpZy5icmFuZCk7XG4gIGNvbnN0IGF0dGFjaG1lbnRzID0gW1xuICAgIC4uLihtZXNzYWdlQXR0YWNobWVudHMgPz8gW10pLFxuICAgIC4uLihpbmxpbmVCcmFuZC5hdHRhY2htZW50ID8gW2lubGluZUJyYW5kLmF0dGFjaG1lbnRdIDogW10pLFxuICBdO1xuICBjb25zdCByZW5kZXJlZCA9IGF3YWl0IHJlbmRlckVtYWlsKHtcbiAgICBzdWJqZWN0OiBtZXNzYWdlLnN1YmplY3QsXG4gICAgYm9keTogbWVzc2FnZS5ib2R5LFxuICAgIGJyYW5kOiBpbmxpbmVCcmFuZC5icmFuZCxcbiAgICAuLi4ob3B0aW9ucz8uaGVhZGluZyAhPT0gdW5kZWZpbmVkID8geyBoZWFkaW5nOiBvcHRpb25zLmhlYWRpbmcgfSA6IHt9KSxcbiAgICAuLi4ob3B0aW9ucz8ucHJldmlldyAhPT0gdW5kZWZpbmVkID8geyBwcmV2aWV3OiBvcHRpb25zLnByZXZpZXcgfSA6IHt9KSxcbiAgfSk7XG4gIGNvbnN0IGluZm8gPSBhd2FpdCBhYm9ydGFibGUoXG4gICAgdHJhbnNwb3J0ZXIuc2VuZE1haWwoe1xuICAgICAgZnJvbSxcbiAgICAgIHRvOiBtZXNzYWdlLnRvLFxuICAgICAgc3ViamVjdDogbWVzc2FnZS5zdWJqZWN0LFxuICAgICAgLy8gQSBjYWxsZXItc3VwcGxpZWQgcGxhaW4tdGV4dCBwYXJ0IFdJTlMgb3ZlciB0aGUgZ2VuZXJhdGVkIG9uZS4gQm90aCBwYXJ0c1xuICAgICAgLy8gc3RpbGwgY29tZSBmcm9tIHRoZSBzYW1lIGNvbnRlbnQ7IHRoaXMgb25seSBsZXRzIGEgY2FsbGVyIGNvbnRyb2wgdGhlXG4gICAgICAvLyB0ZXh0IGFsdGVybmF0aXZlJ3MgZXhhY3QgbGluZSBsYXlvdXQsIHdoaWNoIHNvbWUgY2xpZW50cyBwYXJzZSAoc2VlXG4gICAgICAvLyBgU2VuZEVtYWlsT3B0aW9ucy50ZXh0YCkuXG4gICAgICB0ZXh0OiBvcHRpb25zPy50ZXh0ID8/IHJlbmRlcmVkLnRleHQsXG4gICAgICBodG1sOiByZW5kZXJlZC5odG1sLFxuICAgICAgLi4uKG1lc3NhZ2UuY2MgJiYgbWVzc2FnZS5jYy5sZW5ndGggPiAwID8geyBjYzogbWVzc2FnZS5jYyB9IDoge30pLFxuICAgICAgLi4uKG1lc3NhZ2UuYmNjICYmIG1lc3NhZ2UuYmNjLmxlbmd0aCA+IDAgPyB7IGJjYzogbWVzc2FnZS5iY2MgfSA6IHt9KSxcbiAgICAgIC4uLihhdHRhY2htZW50cy5sZW5ndGggPiAwID8geyBhdHRhY2htZW50cyB9IDoge30pLFxuICAgIH0pLFxuICAgIHNpZ25hbCxcbiAgKTtcbiAgcmV0dXJuIHtcbiAgICBzZW50OiB0cnVlLFxuICAgIHJlY2lwaWVudCxcbiAgICBmcm9tLFxuICAgIC4uLihpbmZvLm1lc3NhZ2VJZCA/IHsgbWVzc2FnZUlkOiBpbmZvLm1lc3NhZ2VJZCB9IDoge30pLFxuICB9O1xufVxuXG4vKipcbiAqIERlbGl2ZXJ5LXRpbWUgb3B0aW9ucyB0aGF0IGFyZSBOT1QgcGFydCBvZiB0aGUgbWVzc2FnZSBhIG1vZGVsIGNvbXBvc2VzLlxuICpcbiAqIERlbGliZXJhdGVseSBzZXBhcmF0ZSBmcm9tIHtAbGluayBFbWFpbE1lc3NhZ2V9OiB0aGF0IHNjaGVtYSBpcyB0aGUgYWdlbnRcbiAqIHRvb2wncyBpbnB1dCwgc28gYW55dGhpbmcgYWRkZWQgdG8gaXQgYmVjb21lcyBhIGZpZWxkIGEgbW9kZWwgY2FuIHNldC4gVGhlc2VcbiAqIGRlc2NyaWJlIGhvdyBhIG1lc3NhZ2UgaXMgREVMSVZFUkVELCBzbyB0aGV5IGFyZSB0aGUgY2FsbGVyJ3MgdG8gc3VwcGx5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbmRFbWFpbE9wdGlvbnMge1xuICAvKipcbiAgICogVmlzaWJsZSBoZWFkaW5nIGluc2lkZSB0aGUgYnJhbmRlZCBIVE1MIGNhcmQuIERlZmF1bHRzIHRvIHRoZSBtZXNzYWdlXG4gICAqIHN1YmplY3QuIFVzZSB0aGlzIHdoZW4gdGhlIHRyYW5zcG9ydCBzdWJqZWN0IGNhcnJpZXMgbm90aWZpY2F0aW9uLXNwZWNpZmljXG4gICAqIGRldGFpbHMgdGhhdCB3b3VsZCBiZSBub2lzeSBpZiByZXBlYXRlZCBpbnNpZGUgdGhlIG9wZW5lZCBlbWFpbC5cbiAgICovXG4gIGhlYWRpbmc/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBbiBleHBsaWNpdCBgdGV4dC9wbGFpbmAgYWx0ZXJuYXRpdmUsIHJlcGxhY2luZyB0aGUgb25lIGdlbmVyYXRlZCBmcm9tIHRoZVxuICAgKiBSZWFjdCBFbWFpbCB0cmVlLiBUaGUgSFRNTCBwYXJ0IGlzIHVudG91Y2hlZCwgc28gdGhlIHJlY2lwaWVudCBzdGlsbCBnZXRzIHRoZVxuICAgKiBmdWxsIGJyYW5kZWQgdGVtcGxhdGUuXG4gICAqXG4gICAqIFRoaXMgZXhpc3RzIGJlY2F1c2UgdGhlIGdlbmVyYXRlZCB0ZXh0IHBhcnQgaXMgYSBSRU5ERVJJTkcgb2YgdGhlIEhUTUw6IGl0XG4gICAqIGNhcnJpZXMgdGhlIGJyYW5kIGhlYWRlciBhbmQgZm9vdGVyLCBhbmQgaXQgdHVybnMgQ1NTIG1hcmdpbiBpbnRvIGJsYW5rXG4gICAqIGxpbmVzLiBUaGF0IGlzIGZpbmUgZm9yIHByb3NlIGFuZCB3cm9uZyBmb3IgY29udGVudCBhIG1hY2hpbmUgcGFyc2VzLiBBXG4gICAqIG9uZS10aW1lLWNvZGUgZW1haWwgaXMgdGhlIGNhc2UgaW4gcG9pbnQgLSBjbGllbnRzIGxvb2sgZm9yIHRoZSBjb2RlIG9uIHRoZVxuICAgKiBsaW5lIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBwcm9tcHQsIGFuZCBhIHN0eWxlZCBgPGgyPmAgY29kZSBsYW5kcyB0d28gYmxhbmtcbiAgICogbGluZXMgYmVsb3cgaXQsIHNvIGF1dG9maWxsIHN0b3BzIGJlaW5nIG9mZmVyZWQgZXZlbiB0aG91Z2ggdGhlIEhUTUwgbG9va3NcbiAgICogcGVyZmVjdC4gU3VwcGx5aW5nIHRoZSB0ZXh0IHBhcnQgZGlyZWN0bHkga2VlcHMgdGhlIG5pY2UgdGVtcGxhdGUgQU5EIHRoZVxuICAgKiBsYXlvdXQgdGhvc2UgY2xpZW50cyBleHBlY3QuXG4gICAqXG4gICAqIEtlZXAgdGhlIHNhbWUgaW5mb3JtYXRpb24gaW4gYm90aCBwYXJ0czsgYSB0ZXh0IGFsdGVybmF0aXZlIHRoYXQgZGlzYWdyZWVzXG4gICAqIHdpdGggdGhlIEhUTUwgcmVhZHMgYXMgcGhpc2hpbmcgdG8gc3BhbSBmaWx0ZXJzLlxuICAgKi9cbiAgdGV4dD86IHN0cmluZztcbiAgLyoqXG4gICAqIFByZWhlYWRlciB0ZXh0IGZvciB0aGUgSFRNTCBwYXJ0IC0gdGhlIHNuaXBwZXQgc2hvd24gYmVzaWRlIHRoZSBzdWJqZWN0IGluIGFuXG4gICAqIGluYm94IGxpc3QsIGFuZCB0aGUgYm9keSBvZiB0aGUgUFVTSCBOT1RJRklDQVRJT04gYSBtb2JpbGUgbWFpbCBhcHAgcG9zdHMuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBzdWJqZWN0LlxuICAgKlxuICAgKiBEZWxpdmVyeS10aW1lIHJhdGhlciB0aGFuIHBhcnQgb2Yge0BsaW5rIEVtYWlsTWVzc2FnZX0gZm9yIHRoZSBzYW1lIHJlYXNvbiBhc1xuICAgKiBgdGV4dGA6IGl0IGlzIHByZXNlbnRhdGlvbiB0aGUgc2VuZGluZyBDT0RFIGNob29zZXMsIG5vdCBjb250ZW50IGEgbW9kZWxcbiAgICogY29tcG9zZXMuIFRoZSBvbmUtdGltZS1jb2RlIHBhdGggc2V0cyBpdCBzbyB0aGUgY29kZSBpdHNlbGYgcmlkZXMgaW4gdGhlXG4gICAqIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXMgdGhlIG9ubHkgdGV4dCBpT1MgYXV0b2ZpbGwgZ2V0cyB0byByZWFkLlxuICAgKi9cbiAgcHJldmlldz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZW5kIChTTVRQIG1vZGUpIG9yIHBlcnNpc3QgKGZpbGUvb3V0Ym94IG1vZGUpIG9uZSBtZXNzYWdlIGZyb20gdGhlXG4gKiByZXNvbHZlZCBgZnJvbWAgYWRkcmVzcy4gYHRvYCAoYW5kIG9wdGlvbmFsIGBjY2AgLyBgYmNjYCkgZWFjaCBhY2NlcHRcbiAqIG9uZSBvciBtb3JlIGFkZHJlc3NlcywgYW5kIGBhdHRhY2htZW50c2AgYXJlIGZvcndhcmRlZCBhcyBmaWxlcy4gVGhlXG4gKiBib2R5IGlzIHJlbmRlcmVkIGJ5IFJlYWN0IEVtYWlsIGludG8gbWF0Y2hpbmcgcGxhaW4tdGV4dCBhbmQgSFRNTCBNSU1FXG4gKiBhbHRlcm5hdGl2ZXMsIGFuZCB0aGUgb3V0Ym94IGVtYmVkcyB0aGVcbiAqIHJlbmRlcmVkIEhUTUwgaW4gYSBkb2N1bWVudC4gSW4gZmlsZSBtb2RlIHRoZSByZXR1cm5lZCBgbWVzc2FnZUlkYCBpc1xuICogdGhlIHBhdGggd3JpdHRlbi4gVGhyb3dzIHdoZW4gYHRvYCBjYXJyaWVzIG5vIHJlY2lwaWVudCwgd2hlbiB0aGUgYm9keVxuICogb3IgYXR0YWNobWVudHMgZXhjZWVkIHRoZSBwbHVnaW4ncyBjYXBzLCBvciB3aGVuIGBmcm9tYCBpcyBub3QgcGVybWl0dGVkXG4gKiBieSB0aGUgZWZmZWN0aXZlIHNlbmRlciBhbGxvdy1saXN0LlxuICpcbiAqIFRoZSByZWNpcGllbnQsIGNhcCwgYW5kIHNlbmRlciBjaGVja3MgcnVuIGJlZm9yZSB0aGUgaW50ZXJjZXB0b3IgY2hhaW4gc29cbiAqIHRoZWlyIHNwZWNpZmljIHN0YXR1cyBhbmQgYWN0aW9uYWJsZSBtZXNzYWdlIHJlYWNoIHRoZSBjYWxsZXIgaW5zdGVhZCBvZlxuICogdGhlIGNoYWluJ3Mgc3RhYmxlIGZhaWx1cmUgdGV4dC4gYHNpZ25hbGAgY2FuY2VscyB0aGUgc2VuZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRFbWFpbChcbiAgbWVzc2FnZTogRW1haWxNZXNzYWdlLFxuICBmcm9tOiBzdHJpbmcsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICBvcHRpb25zPzogU2VuZEVtYWlsT3B0aW9ucyxcbik6IFByb21pc2U8RW1haWxSZXN1bHQ+IHtcbiAgaWYgKG1lc3NhZ2UudG8ubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgVmFsaWRhdGlvbkVycm9yLm1pc3NpbmdGaWVsZChcInRvXCIpO1xuICB9XG4gIGFzc2VydE1lc3NhZ2VXaXRoaW5DYXBzKG1lc3NhZ2UpO1xuICBhc3NlcnRTZW5kZXJBbGxvd2VkKGZyb20sIGdldEVtYWlsUnVudGltZSgpLmNvbmZpZy5hbGxvd2VkU2VuZGVycyk7XG4gIHJldHVybiBleGVjdXRlV3JpdGUoXG4gICAgXCJzZW5kXCIsXG4gICAgRU1BSUxfU0VORF9TRVRUSU5HUyxcbiAgICAoZXhlY3V0ZVNpZ25hbCkgPT4gZGlzcGF0Y2gobWVzc2FnZSwgZnJvbSwgZXhlY3V0ZVNpZ25hbCwgb3B0aW9ucyksXG4gICAgc2lnbmFsLFxuICApO1xufVxuIl19
|
|
320
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RyYW5zcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUVILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQXdCLE1BQU0sb0JBQW9CLENBQUM7QUFDL0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUc3RCxPQUFPLFVBQXNELE1BQU0sWUFBWSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxrQkFBa0IsRUFBb0QsTUFBTSxhQUFhLENBQUM7QUFDbkcsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3BCLDJCQUEyQixFQUMzQixjQUFjLEdBRWYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFbEQsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBb0I3Qzs7OztHQUlHO0FBQ0gsTUFBTSxhQUFhLEdBQUcsY0FBYyxFQUEwQixDQUFDO0FBRS9ELElBQUksT0FBaUMsQ0FBQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsU0FBNkI7SUFDM0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0MsT0FBTyxHQUFHO1lBQ1IsTUFBTTtZQUNOLE9BQU8sRUFBRSxh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TUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ25ELENBQUMsRUFDRixNQUFNLENBQ1AsQ0FBQztJQUNGLE9BQU87UUFDTCxJQUFJLEVBQUUsSUFBSTtRQUNWLFNBQVM7UUFDVCxJQUFJO1FBQ0osR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ3pELENBQUM7QUFDSixDQUFDO0FBK0NEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxTQUFTLENBQzdCLE9BQXFCLEVBQ3JCLElBQVksRUFDWixNQUFvQixFQUNwQixPQUEwQjtJQUUxQixJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzVCLE1BQU0sZUFBZSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNuRSxPQUFPLFlBQVksQ0FDakIsTUFBTSxFQUNOLG1CQUFtQixFQUNuQixDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLE9BQU8sQ0FBQyxFQUNsRSxNQUFNLENBQ1AsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBlbWFpbCBydW50aW1lOiBhIGxhemlseS1idWlsdCwgcHJvY2Vzcy13aWRlIGRpc3BhdGNoZXIgcGx1cyBpdHNcbiAqIHJlc29sdmVkIGNvbmZpZywgYW5kIHtAbGluayBzZW5kRW1haWx9IHdoaWNoIHNlbmRzIG9uZVxuICoge0BsaW5rIEVtYWlsTWVzc2FnZX0gdGhyb3VnaCBpdC4gSW4gU01UUCBtb2RlIHRoZSBydW50aW1lIGhvbGRzIGFcbiAqIG1lbW9pemVkIG5vZGVtYWlsZXIgdHJhbnNwb3J0IChzaGFyZWQgYnkgdGhlIHBsdWdpbidzIHNldHVwIGFuZCB0aGVcbiAqIGFnZW50IHRvb2wsIHNvIHRoZXkgcmV1c2Ugb25lIGNvbm5lY3Rpb24gcG9vbCk7IGluIGZpbGUvb3V0Ym94IG1vZGUgaXRcbiAqIGhvbGRzIG5vIHRyYW5zcG9ydCBhbmQge0BsaW5rIHNlbmRFbWFpbH0gd3JpdGVzIEhUTUwgdG8gZGlzayBpbnN0ZWFkLlxuICogVGhlIGZpcnN0IGNhbGxlciAobm9ybWFsbHkgdGhlIHBsdWdpbiBhdCBzZXR1cCkgcHJpbWVzIGl0IHdpdGggdGhlXG4gKiBwbHVnaW4ncyBjb25maWc7IGxhdGVyIGNhbGxlcnMgcmV1c2UgaXQuXG4gKlxuICogVGhlIHJ1bnRpbWUgYWxzbyBjYXJyaWVzIHRoZSB7QGxpbmsgRW1haWxFeGVjdXRvcn0gZXZlcnkgb3V0Ym91bmQgc2VuZCBydW5zXG4gKiB0aHJvdWdoLiBUaGUgcGx1Z2luIGluc3RhbGxzIGl0cyBvd24gYGV4ZWN1dGUoKWAgdGhlcmUgYXQgc2V0dXAsIHdoaWNoIGlzXG4gKiBob3cgdGhlIE1hc3RyYSB0b29sIC0gYSBwbGFpbiBmdW5jdGlvbiB3aXRoIG5vIHBsdWdpbiBpbnN0YW5jZSBpbiBzY29wZSAtXG4gKiBzdGlsbCBnZXRzIEFwcEtpdCdzIHJldHJ5IC8gdGltZW91dCAvIHRlbGVtZXRyeSBjaGFpbi4gV2l0aG91dCBhIHJlZ2lzdGVyZWRcbiAqIHBsdWdpbiAoYSBkaXJlY3QgY2FsbCBmcm9tIGEgc2NyaXB0IG9yIGEgdGVzdCkgdGhlIHNlbmQgc3RpbGwgcnVucywganVzdFxuICogd2l0aG91dCBpbnRlcmNlcHRvcnMuXG4gKlxuICogRXZlcnkgZW50cnkgcG9pbnQgdGFrZXMgYW4gb3B0aW9uYWwge0BsaW5rIEFib3J0U2lnbmFsfSBzbyB0aGUgcGx1Z2luJ3NcbiAqIGBleGVjdXRlKClgIHRpbWVvdXQgYW5kIGEgY2xpZW50IGRpc2Nvbm5lY3QgYm90aCBzdG9wIHRoZSBjYWxsZXIgd2FpdGluZ1xuICogb24gU01UUC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbkVycm9yLCBWYWxpZGF0aW9uRXJyb3IsIHR5cGUgRXhlY3V0aW9uUmVzdWx0IH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgcnVuUGx1Z2luRXhlY3V0aW9uIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgeyBsb2csIGRpcmVjdEV4ZWN1dG9yIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHsgRW1haWxBdHRhY2htZW50LCBFbWFpbE1lc3NhZ2UsIEVtYWlsUmVzdWx0IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWVtYWlsXCI7XG5pbXBvcnQgdHlwZSB7IEVtYWlsQnJhbmQgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtZW1haWwtdGVtcGxhdGVcIjtcbmltcG9ydCBub2RlbWFpbGVyLCB7IHR5cGUgU2VuZE1haWxPcHRpb25zLCB0eXBlIFRyYW5zcG9ydGVyIH0gZnJvbSBcIm5vZGVtYWlsZXJcIjtcbmltcG9ydCB7IHJlc29sdmVFbWFpbENvbmZpZywgdHlwZSBFbWFpbFBsdWdpbkNvbmZpZywgdHlwZSBSZXNvbHZlZEVtYWlsQ29uZmlnIH0gZnJvbSBcIi4vY29uZmlnLnRzXCI7XG5pbXBvcnQge1xuICBFTUFJTF9TRU5EX1NFVFRJTkdTLFxuICBNQVhfQVRUQUNITUVOVF9CWVRFUyxcbiAgTUFYX0FUVEFDSE1FTlRfQ09VTlQsXG4gIE1BWF9BVFRBQ0hNRU5UU19UT1RBTF9CWVRFUyxcbiAgTUFYX0JPRFlfQ0hBUlMsXG4gIHR5cGUgRW1haWxFeGVjdXRpb25TZXR0aW5ncyxcbn0gZnJvbSBcIi4vZGVmYXVsdHMudHNcIjtcbmltcG9ydCB7IHJlbmRlckVtYWlsIH0gZnJvbSBcIi4vZW1haWwtaHRtbC50c1wiO1xuaW1wb3J0IHsgd3JpdGVPdXRib3hFbWFpbCB9IGZyb20gXCIuL291dGJveC50c1wiO1xuaW1wb3J0IHsgYXNzZXJ0U2VuZGVyQWxsb3dlZCB9IGZyb20gXCIuL3NlbmRlci50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiZW1haWwvdHJhbnNwb3J0XCIpO1xuXG4vKipcbiAqIFJ1bnMgb25lIG91dGJvdW5kIHNlbmQgdGhyb3VnaCBBcHBLaXQncyBpbnRlcmNlcHRvciBjaGFpbi4gTWF0Y2hlc1xuICogYFBsdWdpbi5leGVjdXRlKClgLCB3aGljaCBuZXZlciB0aHJvd3M6IGEgZmFpbHVyZSBjb21lcyBiYWNrIGFzXG4gKiBgeyBvazogZmFsc2UgfWAuXG4gKi9cbmV4cG9ydCB0eXBlIEVtYWlsRXhlY3V0b3IgPSA8VD4oXG4gIGZuOiAoc2lnbmFsPzogQWJvcnRTaWduYWwpID0+IFByb21pc2U8VD4sXG4gIHNldHRpbmdzOiBFbWFpbEV4ZWN1dGlvblNldHRpbmdzLFxuKSA9PiBQcm9taXNlPEV4ZWN1dGlvblJlc3VsdDxUPj47XG5cbi8qKiBUaGUgc2hhcmVkIGRpc3BhdGNoZXIsIGl0cyByZXNvbHZlZCBjb25maWcsIGFuZCB0aGUgc2VuZCBleGVjdXRvci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxSdW50aW1lIHtcbiAgLyoqIFByZXNlbnQgb25seSBpbiBTTVRQIG1vZGUuICovXG4gIHRyYW5zcG9ydGVyPzogVHJhbnNwb3J0ZXI7XG4gIGNvbmZpZzogUmVzb2x2ZWRFbWFpbENvbmZpZztcbiAgZXhlY3V0ZTogRW1haWxFeGVjdXRvcjtcbn1cblxuLyoqXG4gKiBFeGVjdXRvciB1c2VkIHVudGlsIChvciB1bmxlc3MpIHRoZSBwbHVnaW4gaW5zdGFsbHMgaXRzIG93bjogcnVuIHRoZSBzZW5kXG4gKiBkaXJlY3RseSwgbWFwcGluZyBhIHRocm93IG9udG8gdGhlIHNhbWUge0BsaW5rIEV4ZWN1dGlvblJlc3VsdH0gc2hhcGUgc29cbiAqIGNhbGwgc2l0ZXMgYnJhbmNoIG9uIGBva2AgZWl0aGVyIHdheS5cbiAqL1xuY29uc3QgZGlyZWN0RXhlY3V0ZSA9IGRpcmVjdEV4ZWN1dG9yPEVtYWlsRXhlY3V0aW9uU2V0dGluZ3M+KCk7XG5cbmxldCBydW50aW1lOiBFbWFpbFJ1bnRpbWUgfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogUmV0dXJuIHRoZSBzaGFyZWQgcnVudGltZSwgYnVpbGRpbmcgaXQgb24gZmlyc3QgdXNlIGJ5IHJlc29sdmluZ1xuICogYG92ZXJyaWRlc2Agb3ZlciB0aGUgZW52aXJvbm1lbnQgKGBTTVRQX0hPU1RgLCBgU01UUF9QT1JUYCxcbiAqIGBTTVRQX1NFQ1VSRWAsIGBTTVRQX1VTRVJgLCBgU01UUF9QQVNTV09SRGAsIGBFTUFJTF9ET01BSU5gLFxuICogYEVNQUlMX0ZST01gLCBgRU1BSUxfQUxMT1dFRF9TRU5ERVJTYCwgYEVNQUlMX1NFTkRFUl9QT0xJQ1lgLFxuICogYEVNQUlMX09VVEJPWF9NT0RFYCwgYEVNQUlMX09VVEJPWF9ESVJgKSB0aHJvdWdoXG4gKiB7QGxpbmsgcmVzb2x2ZUVtYWlsQ29uZmlnfS4gV2l0aCBTTVRQIGNyZWRlbnRpYWxzIHByZXNlbnQgaXQgaG9sZHMgYVxuICogbm9kZW1haWxlciB0cmFuc3BvcnQgYW5kIGl0cyBjb25uZWN0aW9uIHBvb2w7IG90aGVyd2lzZSBpdCBpcyBpblxuICogZmlsZS9vdXRib3ggbW9kZSBhbmQgaG9sZHMgbm9uZS5cbiAqXG4gKiBgb3ZlcnJpZGVzYCBpcyByZWFkIG9ubHkgb24gdGhlIGNhbGwgdGhhdCBidWlsZHMgdGhlIHJ1bnRpbWUsIHNvIHByaW1lIGl0XG4gKiBmcm9tIHRoZSBwbHVnaW4ncyBjb25maWcgYXQgc2V0dXA7IGxhdGVyIGNhbGxlcnMgKHRoZSB0b29sJ3MgYGV4ZWN1dGVgLFxuICogdGhlIHNlbmRlci1vcHRpb25zIHJvdXRlKSBwYXNzIG5vdGhpbmcgYW5kIGdldCB0aGUgc2FtZSBpbnN0YW5jZS4gVGhyb3dzXG4gKiB3aGF0ZXZlciB7QGxpbmsgcmVzb2x2ZUVtYWlsQ29uZmlnfSB0aHJvd3MgZm9yIGFuIHVudXNhYmxlIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbWFpbFJ1bnRpbWUob3ZlcnJpZGVzPzogRW1haWxQbHVnaW5Db25maWcpOiBFbWFpbFJ1bnRpbWUge1xuICBpZiAoIXJ1bnRpbWUpIHtcbiAgICBjb25zdCBjb25maWcgPSByZXNvbHZlRW1haWxDb25maWcob3ZlcnJpZGVzKTtcbiAgICBydW50aW1lID0ge1xuICAgICAgY29uZmlnLFxuICAgICAgZXhlY3V0ZTogZGlyZWN0RXhlY3V0ZSxcbiAgICAgIC4uLihjb25maWcubW9kZSA9PT0gXCJzbXRwXCJcbiAgICAgICAgPyB7XG4gICAgICAgICAgICB0cmFuc3BvcnRlcjogbm9kZW1haWxlci5jcmVhdGVUcmFuc3BvcnQoe1xuICAgICAgICAgICAgICBob3N0OiBjb25maWcuaG9zdCxcbiAgICAgICAgICAgICAgcG9ydDogY29uZmlnLnBvcnQsXG4gICAgICAgICAgICAgIHNlY3VyZTogY29uZmlnLnNlY3VyZSxcbiAgICAgICAgICAgICAgYXV0aDogY29uZmlnLmF1dGgsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9XG4gICAgICAgIDoge30pLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHJ1bnRpbWU7XG59XG5cbi8qKlxuICogSW5zdGFsbCB0aGUgZXhlY3V0b3Igb3V0Ym91bmQgc2VuZHMgcnVuIHRocm91Z2guIFRoZSBwbHVnaW4gY2FsbHMgdGhpcyBhdFxuICogc2V0dXAgd2l0aCBpdHMgb3duIGBleGVjdXRlKClgOyBhIHNlY29uZCBjYWxsIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBvbmUsIHNvXG4gKiBhIHJlLXJlZ2lzdGVyZWQgcGx1Z2luIGRvZXMgbm90IGxlYXZlIHRoZSB0b29scyBib3VuZCB0byBhIGRlYWQgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRFbWFpbEV4ZWN1dG9yKGV4ZWN1dGU6IEVtYWlsRXhlY3V0b3IpOiB2b2lkIHtcbiAgZ2V0RW1haWxSdW50aW1lKCkuZXhlY3V0ZSA9IGV4ZWN1dGU7XG59XG5cbi8qKlxuICogRHJvcCB0aGUgbWVtb2l6ZWQgcnVudGltZSwgY2xvc2luZyB0aGUgU01UUCBjb25uZWN0aW9uIHBvb2wsIHNvIHRoZSBuZXh0XG4gKiB7QGxpbmsgZ2V0RW1haWxSdW50aW1lfSByZWJ1aWxkcyBpdCBmcm9tIGZyZXNoIGNvbmZpZyBhbmQgc3RvcHMgY2FsbGluZ1xuICogdGhyb3VnaCBhIHRvcm4tZG93biBwbHVnaW4ncyBgZXhlY3V0ZSgpYC4gSWRlbXBvdGVudCwgYW5kIHRoZSBwbHVnaW4nc1xuICogYHNodXRkb3duKClgIGhvb2suXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldEVtYWlsUnVudGltZSgpOiB2b2lkIHtcbiAgcnVudGltZT8udHJhbnNwb3J0ZXI/LmNsb3NlKCk7XG4gIHJ1bnRpbWUgPSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUnVuIG9uZSBub24taWRlbXBvdGVudCB3cml0ZSB0aHJvdWdoIHRoZSBzaGFyZWQgZXhlY3V0b3IgYW5kIHVud3JhcCBpdC5cbiAqXG4gKiBgZXhlY3V0ZSgpYCBuZXZlciB0aHJvd3MsIHNvIGEgZmFpbGVkIHNlbmQgYXJyaXZlcyBhcyBgeyBvazogZmFsc2UgfWAgd2l0aCBhXG4gKiBzdGF0dXMgdGhlIGludGVyY2VwdG9ycyBhbHJlYWR5IHNhbml0aXplZDsgaXQgaXMgbG9nZ2VkIGhlcmUgYW5kIHJlLXJhaXNlZFxuICogYXMgYSBzdGFibGUge0BsaW5rIEV4ZWN1dGlvbkVycm9yfSBzbyBhbiB1cHN0cmVhbSBtZXNzYWdlIG5ldmVyIGJlY29tZXMgdGhlXG4gKiBjYWxsZXIncyBlcnJvciB0ZXh0LiBgc2lnbmFsYCBpcyB0aGUgY2FsbGVyJ3Mgb3duIGNhbmNlbGxhdGlvbiAoYW4gYWdlbnRcbiAqIHJ1biwgYSByZXF1ZXN0IHRlYXJkb3duKTsgaXQgaXMgbWVyZ2VkIHdpdGggdGhlIHNpZ25hbCB0aGUgdGltZW91dFxuICogaW50ZXJjZXB0b3Igc3VwcGxpZXMgc28gZWl0aGVyIG9uZSB1bndpbmRzIHRoZSBJL08uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGVjdXRlV3JpdGU8VD4oXG4gIG9wZXJhdGlvbjogc3RyaW5nLFxuICBzZXR0aW5nczogRW1haWxFeGVjdXRpb25TZXR0aW5ncyxcbiAgZm46IChzaWduYWw/OiBBYm9ydFNpZ25hbCkgPT4gUHJvbWlzZTxUPixcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgeyBleGVjdXRlIH0gPSBnZXRFbWFpbFJ1bnRpbWUoKTtcbiAgcmV0dXJuIHJ1blBsdWdpbkV4ZWN1dGlvbih7XG4gICAgcGx1Z2luOiBcImVtYWlsXCIsXG4gICAgbG9nZ2VyLFxuICAgIG9wZXJhdGlvbixcbiAgICBzZXR0aW5ncyxcbiAgICBleGVjdXRlLFxuICAgIGZuLFxuICAgIHNpZ25hbCxcbiAgfSk7XG59XG5cbi8qKlxuICogT3BlbiBhbmQgdGVhciBkb3duIG9uZSBTTVRQIGNvbm5lY3Rpb24gdG8gcHJvdmUgdGhlIGhvc3QsIHBvcnQsIGFuZFxuICogY3JlZGVudGlhbHMgd29yay4gQ2FsbGVkIGF0IHBsdWdpbiBzZXR1cCBzbyBhIGJhZCByZWxheSBzaG93cyB1cCBpbiB0aGVcbiAqIGJvb3QgbG9ncyByYXRoZXIgdGhhbiBvbiB0aGUgZmlyc3QgYXBwcm92ZWQgc2VuZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeUVtYWlsVHJhbnNwb3J0KFxuICB0cmFuc3BvcnRlcjogVHJhbnNwb3J0ZXIgfCB1bmRlZmluZWQsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghdHJhbnNwb3J0ZXIpIHtcbiAgICB0aHJvdyBDb25maWd1cmF0aW9uRXJyb3IuaW52YWxpZENvbm5lY3Rpb24oXG4gICAgICBcIlNNVFBcIixcbiAgICAgIFwiVGhlIHJ1bnRpbWUgcmVzb2x2ZWQgdG8gb3V0Ym94IG1vZGUsIHNvIHRoZXJlIGlzIG5vIHRyYW5zcG9ydCB0byB2ZXJpZnkuXCIsXG4gICAgKTtcbiAgfVxuICBhd2FpdCBhYm9ydGFibGUodHJhbnNwb3J0ZXIudmVyaWZ5KCksIHNpZ25hbCk7XG59XG5cbi8qKlxuICogU3RvcCBhd2FpdGluZyBgcHJvbWlzZWAgYXMgc29vbiBhcyBgc2lnbmFsYCBhYm9ydHMuIG5vZGVtYWlsZXIgZXhwb3NlcyBub1xuICogY2FuY2VsbGF0aW9uIGhvb2ssIHNvIHRoZSBTTVRQIGNvbnZlcnNhdGlvbiBpdHNlbGYgZmluaXNoZXMgb24gaXRzIG93blxuICogY29ubmVjdGlvbjsgd2hhdCB1bndpbmRzIGlzIHRoZSBjYWxsZXIgYW5kIGV2ZXJ5dGhpbmcgZG93bnN0cmVhbSBvZiBpdC5cbiAqL1xuZnVuY3Rpb24gYWJvcnRhYmxlPFQ+KHByb21pc2U6IFByb21pc2U8VD4sIHNpZ25hbDogQWJvcnRTaWduYWwgfCB1bmRlZmluZWQpOiBQcm9taXNlPFQ+IHtcbiAgaWYgKCFzaWduYWwpIHJldHVybiBwcm9taXNlO1xuICBzaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgLy8gVGhlIGxpc3RlbmVyIGlzIGRldGFjaGVkIG9uY2UgdGhlIHJhY2Ugc2V0dGxlcyBzbyBhIGxvbmctbGl2ZWQgcnVuIHNpZ25hbFxuICAvLyBkb2VzIG5vdCBhY2N1bXVsYXRlIG9uZSBwZXIgc2VuZC5cbiAgY29uc3QgbGlzdGVuZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGNvbnN0IGFib3J0ZWQgPSBuZXcgUHJvbWlzZTxuZXZlcj4oKF8sIHJlamVjdCkgPT4ge1xuICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gcmVqZWN0KHNpZ25hbC5yZWFzb24pLCB7XG4gICAgICBvbmNlOiB0cnVlLFxuICAgICAgc2lnbmFsOiBsaXN0ZW5lci5zaWduYWwsXG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gUHJvbWlzZS5yYWNlKFtwcm9taXNlLCBhYm9ydGVkXSkuZmluYWxseSgoKSA9PiBsaXN0ZW5lci5hYm9ydCgpKTtcbn1cblxuLyoqIFRoZSBjb21tYS1qb2luZWQgcmVjaXBpZW50IHN0cmluZyBlY2hvZWQgYmFjayBpbiB7QGxpbmsgRW1haWxSZXN1bHR9LiAqL1xuZnVuY3Rpb24gcmVjaXBpZW50RWNobyh0bzogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gdG8uam9pbihcIiwgXCIpO1xufVxuXG4vKipcbiAqIE5vZGUgYnVmZmVyIGVuY29kaW5ncyBhIHdpcmUgYXR0YWNobWVudCBtYXkgbmFtZSBmb3IgaXRzIGlubGluZSBgY29udGVudGAuXG4gKiBBbnl0aGluZyBlbHNlIGlzIG1lYXN1cmVkIGFzIFVURi04LCB3aGljaCBvdmVyLWNvdW50cyByYXRoZXIgdGhhbiBsZXR0aW5nXG4gKiBhbiB1bnJlY29nbml6ZWQgZW5jb2Rpbmcgc2xpcCBwYXN0IHRoZSBzaXplIGNhcC5cbiAqL1xuY29uc3QgQ09OVEVOVF9FTkNPRElOR1M6IFJlYWRvbmx5U2V0PHN0cmluZz4gPSBuZXcgU2V0KFtcbiAgXCJhc2NpaVwiLFxuICBcImJhc2U2NFwiLFxuICBcImJhc2U2NHVybFwiLFxuICBcImJpbmFyeVwiLFxuICBcImhleFwiLFxuICBcImxhdGluMVwiLFxuICBcInVjczJcIixcbiAgXCJ1Y3MtMlwiLFxuICBcInV0ZjhcIixcbiAgXCJ1dGYtOFwiLFxuICBcInV0ZjE2bGVcIixcbiAgXCJ1dGYtMTZsZVwiLFxuXSk7XG5cbi8qKiBEZWNvZGVkIGJ5dGUgc2l6ZSBvZiBvbmUgYXR0YWNobWVudCdzIGlubGluZSBjb250ZW50LiAqL1xuZnVuY3Rpb24gYXR0YWNobWVudEJ5dGVzKGF0dGFjaG1lbnQ6IEVtYWlsQXR0YWNobWVudCk6IG51bWJlciB7XG4gIGNvbnN0IHsgY29udGVudCwgZW5jb2RpbmcgfSA9IGF0dGFjaG1lbnQ7XG4gIGlmIChjb250ZW50ID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICBjb25zdCBkZWNsYXJlZCA9IGVuY29kaW5nPy50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCByZXNvbHZlZCA9XG4gICAgZGVjbGFyZWQgJiYgQ09OVEVOVF9FTkNPRElOR1MuaGFzKGRlY2xhcmVkKSA/IChkZWNsYXJlZCBhcyBCdWZmZXJFbmNvZGluZykgOiBcInV0ZjhcIjtcbiAgcmV0dXJuIEJ1ZmZlci5ieXRlTGVuZ3RoKGNvbnRlbnQsIHJlc29sdmVkKTtcbn1cblxuLyoqXG4gKiBSZWplY3QgYSBtZXNzYWdlIHdob3NlIGJvZHkgb3IgYXR0YWNobWVudHMgZXhjZWVkIHRoZSBwbHVnaW4ncyBjYXBzLiBUaGVcbiAqIGJvZHkgYW5kIGF0dGFjaG1lbnQgbGlzdCBhcnJpdmUgZnJvbSBhIG1vZGVsLCBzbyB0aGV5IGFyZSB1bmJvdW5kZWQgdW50aWxcbiAqIHNvbWV0aGluZyBib3VuZHMgdGhlbTsgbW9zdCBTTVRQIHJlbGF5cyBhbHNvIHJlamVjdCBhbiBvdmVyc2l6ZWQgbWVzc2FnZVxuICogb25seSBhZnRlciB0aGUgd2hvbGUgcGF5bG9hZCBoYXMgYmVlbiB1cGxvYWRlZC5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0TWVzc2FnZVdpdGhpbkNhcHMobWVzc2FnZTogRW1haWxNZXNzYWdlKTogdm9pZCB7XG4gIGlmIChtZXNzYWdlLmJvZHkubGVuZ3RoID4gTUFYX0JPRFlfQ0hBUlMpIHtcbiAgICB0aHJvdyBWYWxpZGF0aW9uRXJyb3IuaW52YWxpZFZhbHVlKFxuICAgICAgXCJib2R5XCIsXG4gICAgICBtZXNzYWdlLmJvZHkubGVuZ3RoLFxuICAgICAgYGF0IG1vc3QgJHtNQVhfQk9EWV9DSEFSU30gY2hhcmFjdGVyc2AsXG4gICAgKTtcbiAgfVxuICBjb25zdCBhdHRhY2htZW50cyA9IG1lc3NhZ2UuYXR0YWNobWVudHMgPz8gW107XG4gIGlmIChhdHRhY2htZW50cy5sZW5ndGggPiBNQVhfQVRUQUNITUVOVF9DT1VOVCkge1xuICAgIHRocm93IFZhbGlkYXRpb25FcnJvci5pbnZhbGlkVmFsdWUoXG4gICAgICBcImF0dGFjaG1lbnRzXCIsXG4gICAgICBhdHRhY2htZW50cy5sZW5ndGgsXG4gICAgICBgYXQgbW9zdCAke01BWF9BVFRBQ0hNRU5UX0NPVU5UfSBmaWxlc2AsXG4gICAgKTtcbiAgfVxuICBsZXQgdG90YWwgPSAwO1xuICBmb3IgKGNvbnN0IGF0dGFjaG1lbnQgb2YgYXR0YWNobWVudHMpIHtcbiAgICBjb25zdCBieXRlcyA9IGF0dGFjaG1lbnRCeXRlcyhhdHRhY2htZW50KTtcbiAgICBpZiAoYnl0ZXMgPiBNQVhfQVRUQUNITUVOVF9CWVRFUykge1xuICAgICAgdGhyb3cgVmFsaWRhdGlvbkVycm9yLmludmFsaWRWYWx1ZShcbiAgICAgICAgXCJhdHRhY2htZW50c1tdLmNvbnRlbnRcIixcbiAgICAgICAgYnl0ZXMsXG4gICAgICAgIGBhdCBtb3N0ICR7TUFYX0FUVEFDSE1FTlRfQllURVN9IGJ5dGVzIHBlciBmaWxlYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHRvdGFsICs9IGJ5dGVzO1xuICB9XG4gIGlmICh0b3RhbCA+IE1BWF9BVFRBQ0hNRU5UU19UT1RBTF9CWVRFUykge1xuICAgIHRocm93IFZhbGlkYXRpb25FcnJvci5pbnZhbGlkVmFsdWUoXG4gICAgICBcImF0dGFjaG1lbnRzXCIsXG4gICAgICB0b3RhbCxcbiAgICAgIGBhdCBtb3N0ICR7TUFYX0FUVEFDSE1FTlRTX1RPVEFMX0JZVEVTfSBieXRlcyBhY3Jvc3MgYWxsIGZpbGVzYCxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogTWFwIHRoZSB3aXJlLWZvcm1hdCB7QGxpbmsgRW1haWxBdHRhY2htZW50fXMgb250byBub2RlbWFpbGVyJ3NcbiAqIGF0dGFjaG1lbnQgc2hhcGUsIGRyb3BwaW5nIHVuc2V0IG9wdGlvbmFsIGtleXMgc28gbm9kZW1haWxlciBhcHBsaWVzXG4gKiBpdHMgb3duIGRlZmF1bHRzICh1dGYtOCBlbmNvZGluZywgZmlsZW5hbWUtaW5mZXJyZWQgY29udGVudCB0eXBlKS4gVGhlXG4gKiB3aXJlIGZpZWxkcyBhcmUgYSBkZWxpYmVyYXRlIHN1YnNldCBvZiBub2RlbWFpbGVyJ3MsIHNvIHRoaXMgaXMgYVxuICogc3RyYWlnaHQgc3RydWN0dXJhbCBwYXNzLXRocm91Z2guXG4gKi9cbmZ1bmN0aW9uIHRvTWFpbEF0dGFjaG1lbnRzKFxuICBhdHRhY2htZW50czogRW1haWxBdHRhY2htZW50W10gfCB1bmRlZmluZWQsXG4pOiBTZW5kTWFpbE9wdGlvbnNbXCJhdHRhY2htZW50c1wiXSB7XG4gIGlmICghYXR0YWNobWVudHMgfHwgYXR0YWNobWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gYXR0YWNobWVudHMubWFwKChhdHQpID0+ICh7XG4gICAgZmlsZW5hbWU6IGF0dC5maWxlbmFtZSxcbiAgICAuLi4oYXR0LmNvbnRlbnQgIT09IHVuZGVmaW5lZCA/IHsgY29udGVudDogYXR0LmNvbnRlbnQgfSA6IHt9KSxcbiAgICAuLi4oYXR0LmVuY29kaW5nICE9PSB1bmRlZmluZWQgPyB7IGVuY29kaW5nOiBhdHQuZW5jb2RpbmcgfSA6IHt9KSxcbiAgICAuLi4oYXR0LmNvbnRlbnRUeXBlICE9PSB1bmRlZmluZWQgPyB7IGNvbnRlbnRUeXBlOiBhdHQuY29udGVudFR5cGUgfSA6IHt9KSxcbiAgfSkpO1xufVxuXG5jb25zdCBJTkxJTkVfQlJBTkRfQ0lEID0gXCJkYngtdG9vbHMtYnJhbmQtbG9nb1wiO1xuXG5mdW5jdGlvbiBpbmxpbmVCcmFuZEltYWdlKGJyYW5kOiBFbWFpbEJyYW5kKToge1xuICBicmFuZDogRW1haWxCcmFuZDtcbiAgYXR0YWNobWVudD86IE5vbk51bGxhYmxlPFNlbmRNYWlsT3B0aW9uc1tcImF0dGFjaG1lbnRzXCJdPltudW1iZXJdO1xufSB7XG4gIGNvbnN0IG1hdGNoID0gL15kYXRhOihpbWFnZVxcL1teOyxdKyk7YmFzZTY0LChbYS16MC05Ky89XSspJC9pLmV4ZWMoYnJhbmQubG9nb1VybCA/PyBcIlwiKTtcbiAgaWYgKCFtYXRjaCkgcmV0dXJuIHsgYnJhbmQgfTtcbiAgY29uc3QgWywgY29udGVudFR5cGUsIGNvbnRlbnRdID0gbWF0Y2g7XG4gIHJldHVybiB7XG4gICAgYnJhbmQ6IHsgLi4uYnJhbmQsIGxvZ29Vcmw6IGBjaWQ6JHtJTkxJTkVfQlJBTkRfQ0lEfWAgfSxcbiAgICBhdHRhY2htZW50OiB7XG4gICAgICBmaWxlbmFtZTpcbiAgICAgICAgY29udGVudFR5cGUgPT09IFwiaW1hZ2Uvc3ZnK3htbFwiXG4gICAgICAgICAgPyBcImJyYW5kLWxvZ28uc3ZnXCJcbiAgICAgICAgICA6IGNvbnRlbnRUeXBlID09PSBcImltYWdlL3BuZ1wiXG4gICAgICAgICAgICA/IFwiYnJhbmQtbG9nby5wbmdcIlxuICAgICAgICAgICAgOiBcImJyYW5kLWxvZ29cIixcbiAgICAgIGNvbnRlbnQsXG4gICAgICBlbmNvZGluZzogXCJiYXNlNjRcIixcbiAgICAgIGNvbnRlbnRUeXBlLFxuICAgICAgY29udGVudERpc3Bvc2l0aW9uOiBcImlubGluZVwiLFxuICAgICAgY2lkOiBJTkxJTkVfQlJBTkRfQ0lELFxuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogSGFuZCBvbmUgYWxyZWFkeS12YWxpZGF0ZWQgbWVzc2FnZSB0byBTTVRQLCBvciB3cml0ZSBpdCB0byB0aGUgb3V0Ym94IHdoZW5cbiAqIG5vIGNyZWRlbnRpYWxzIGFyZSBjb25maWd1cmVkLiBUaGUgaGFsZiBvZiBhIHNlbmQgdGhhdCBwZXJmb3JtcyBJL08sIHNvIGl0XG4gKiBpcyB3aGF0IHJ1bnMgaW5zaWRlIHRoZSBpbnRlcmNlcHRvciBjaGFpbi5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGlzcGF0Y2goXG4gIG1lc3NhZ2U6IEVtYWlsTWVzc2FnZSxcbiAgZnJvbTogc3RyaW5nLFxuICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgb3B0aW9ucz86IFNlbmRFbWFpbE9wdGlvbnMsXG4pOiBQcm9taXNlPEVtYWlsUmVzdWx0PiB7XG4gIGNvbnN0IHsgY29uZmlnLCB0cmFuc3BvcnRlciB9ID0gZ2V0RW1haWxSdW50aW1lKCk7XG4gIGNvbnN0IHJlY2lwaWVudCA9IHJlY2lwaWVudEVjaG8obWVzc2FnZS50byk7XG4gIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcblxuICBpZiAoY29uZmlnLm1vZGUgPT09IFwiZmlsZVwiKSB7XG4gICAgY29uc3QgcGF0aCA9IGF3YWl0IHdyaXRlT3V0Ym94RW1haWwobWVzc2FnZSwgZnJvbSwgY29uZmlnLm91dERpciwgY29uZmlnLmJyYW5kLCB7XG4gICAgICAuLi4ob3B0aW9ucz8uaGVhZGluZyAhPT0gdW5kZWZpbmVkID8geyBoZWFkaW5nOiBvcHRpb25zLmhlYWRpbmcgfSA6IHt9KSxcbiAgICAgIC4uLihvcHRpb25zPy5wcmV2aWV3ICE9PSB1bmRlZmluZWQgPyB7IHByZXZpZXc6IG9wdGlvbnMucHJldmlldyB9IDoge30pLFxuICAgIH0pO1xuICAgIHJldHVybiB7IHNlbnQ6IHRydWUsIHJlY2lwaWVudCwgZnJvbSwgbWVzc2FnZUlkOiBwYXRoIH07XG4gIH1cblxuICBpZiAoIXRyYW5zcG9ydGVyKSB7XG4gICAgdGhyb3cgQ29uZmlndXJhdGlvbkVycm9yLmludmFsaWRDb25uZWN0aW9uKFxuICAgICAgXCJTTVRQXCIsXG4gICAgICBcIk5vIHRyYW5zcG9ydCB3YXMgYnVpbHQgZm9yIHRoZSByZXNvbHZlZCBjb25maWd1cmF0aW9uLlwiLFxuICAgICk7XG4gIH1cbiAgY29uc3QgbWVzc2FnZUF0dGFjaG1lbnRzID0gdG9NYWlsQXR0YWNobWVudHMobWVzc2FnZS5hdHRhY2htZW50cyk7XG4gIGNvbnN0IGlubGluZUJyYW5kID0gaW5saW5lQnJhbmRJbWFnZShjb25maWcuYnJhbmQpO1xuICBjb25zdCBhdHRhY2htZW50cyA9IFtcbiAgICAuLi4obWVzc2FnZUF0dGFjaG1lbnRzID8/IFtdKSxcbiAgICAuLi4oaW5saW5lQnJhbmQuYXR0YWNobWVudCA/IFtpbmxpbmVCcmFuZC5hdHRhY2htZW50XSA6IFtdKSxcbiAgXTtcbiAgY29uc3QgcmVuZGVyZWQgPSBhd2FpdCByZW5kZXJFbWFpbCh7XG4gICAgc3ViamVjdDogbWVzc2FnZS5zdWJqZWN0LFxuICAgIGJvZHk6IG1lc3NhZ2UuYm9keSxcbiAgICBicmFuZDogaW5saW5lQnJhbmQuYnJhbmQsXG4gICAgLi4uKG9wdGlvbnM/LmhlYWRpbmcgIT09IHVuZGVmaW5lZCA/IHsgaGVhZGluZzogb3B0aW9ucy5oZWFkaW5nIH0gOiB7fSksXG4gICAgLi4uKG9wdGlvbnM/LnByZXZpZXcgIT09IHVuZGVmaW5lZCA/IHsgcHJldmlldzogb3B0aW9ucy5wcmV2aWV3IH0gOiB7fSksXG4gIH0pO1xuICBjb25zdCBpbmZvID0gYXdhaXQgYWJvcnRhYmxlKFxuICAgIHRyYW5zcG9ydGVyLnNlbmRNYWlsKHtcbiAgICAgIGZyb20sXG4gICAgICB0bzogbWVzc2FnZS50byxcbiAgICAgIHN1YmplY3Q6IG1lc3NhZ2Uuc3ViamVjdCxcbiAgICAgIC8vIEEgY2FsbGVyLXN1cHBsaWVkIHBsYWluLXRleHQgcGFydCBXSU5TIG92ZXIgdGhlIGdlbmVyYXRlZCBvbmUuIEJvdGggcGFydHNcbiAgICAgIC8vIHN0aWxsIGNvbWUgZnJvbSB0aGUgc2FtZSBjb250ZW50OyB0aGlzIG9ubHkgbGV0cyBhIGNhbGxlciBjb250cm9sIHRoZVxuICAgICAgLy8gdGV4dCBhbHRlcm5hdGl2ZSdzIGV4YWN0IGxpbmUgbGF5b3V0LCB3aGljaCBzb21lIGNsaWVudHMgcGFyc2UgKHNlZVxuICAgICAgLy8gYFNlbmRFbWFpbE9wdGlvbnMudGV4dGApLlxuICAgICAgdGV4dDogb3B0aW9ucz8udGV4dCA/PyByZW5kZXJlZC50ZXh0LFxuICAgICAgaHRtbDogcmVuZGVyZWQuaHRtbCxcbiAgICAgIC4uLihtZXNzYWdlLmNjICYmIG1lc3NhZ2UuY2MubGVuZ3RoID4gMCA/IHsgY2M6IG1lc3NhZ2UuY2MgfSA6IHt9KSxcbiAgICAgIC4uLihtZXNzYWdlLmJjYyAmJiBtZXNzYWdlLmJjYy5sZW5ndGggPiAwID8geyBiY2M6IG1lc3NhZ2UuYmNjIH0gOiB7fSksXG4gICAgICAuLi4oYXR0YWNobWVudHMubGVuZ3RoID4gMCA/IHsgYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICB9KSxcbiAgICBzaWduYWwsXG4gICk7XG4gIHJldHVybiB7XG4gICAgc2VudDogdHJ1ZSxcbiAgICByZWNpcGllbnQsXG4gICAgZnJvbSxcbiAgICAuLi4oaW5mby5tZXNzYWdlSWQgPyB7IG1lc3NhZ2VJZDogaW5mby5tZXNzYWdlSWQgfSA6IHt9KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBEZWxpdmVyeS10aW1lIG9wdGlvbnMgdGhhdCBhcmUgTk9UIHBhcnQgb2YgdGhlIG1lc3NhZ2UgYSBtb2RlbCBjb21wb3Nlcy5cbiAqXG4gKiBEZWxpYmVyYXRlbHkgc2VwYXJhdGUgZnJvbSB7QGxpbmsgRW1haWxNZXNzYWdlfTogdGhhdCBzY2hlbWEgaXMgdGhlIGFnZW50XG4gKiB0b29sJ3MgaW5wdXQsIHNvIGFueXRoaW5nIGFkZGVkIHRvIGl0IGJlY29tZXMgYSBmaWVsZCBhIG1vZGVsIGNhbiBzZXQuIFRoZXNlXG4gKiBkZXNjcmliZSBob3cgYSBtZXNzYWdlIGlzIERFTElWRVJFRCwgc28gdGhleSBhcmUgdGhlIGNhbGxlcidzIHRvIHN1cHBseS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZW5kRW1haWxPcHRpb25zIHtcbiAgLyoqXG4gICAqIFZpc2libGUgaGVhZGluZyBpbnNpZGUgdGhlIGJyYW5kZWQgSFRNTCBjYXJkLiBEZWZhdWx0cyB0byB0aGUgbWVzc2FnZVxuICAgKiBzdWJqZWN0LiBVc2UgdGhpcyB3aGVuIHRoZSB0cmFuc3BvcnQgc3ViamVjdCBjYXJyaWVzIG5vdGlmaWNhdGlvbi1zcGVjaWZpY1xuICAgKiBkZXRhaWxzIHRoYXQgd291bGQgYmUgbm9pc3kgaWYgcmVwZWF0ZWQgaW5zaWRlIHRoZSBvcGVuZWQgZW1haWwuXG4gICAqL1xuICBoZWFkaW5nPzogc3RyaW5nO1xuICAvKipcbiAgICogQW4gZXhwbGljaXQgYHRleHQvcGxhaW5gIGFsdGVybmF0aXZlLCByZXBsYWNpbmcgdGhlIG9uZSBnZW5lcmF0ZWQgZnJvbSB0aGVcbiAgICogUmVhY3QgRW1haWwgdHJlZS4gVGhlIEhUTUwgcGFydCBpcyB1bnRvdWNoZWQsIHNvIHRoZSByZWNpcGllbnQgc3RpbGwgZ2V0cyB0aGVcbiAgICogZnVsbCBicmFuZGVkIHRlbXBsYXRlLlxuICAgKlxuICAgKiBUaGlzIGV4aXN0cyBiZWNhdXNlIHRoZSBnZW5lcmF0ZWQgdGV4dCBwYXJ0IGlzIGEgUkVOREVSSU5HIG9mIHRoZSBIVE1MOiBpdFxuICAgKiBjYXJyaWVzIHRoZSBicmFuZCBoZWFkZXIgYW5kIGZvb3RlciwgYW5kIGl0IHR1cm5zIENTUyBtYXJnaW4gaW50byBibGFua1xuICAgKiBsaW5lcy4gVGhhdCBpcyBmaW5lIGZvciBwcm9zZSBhbmQgd3JvbmcgZm9yIGNvbnRlbnQgYSBtYWNoaW5lIHBhcnNlcy4gQVxuICAgKiBvbmUtdGltZS1jb2RlIGVtYWlsIGlzIHRoZSBjYXNlIGluIHBvaW50IC0gY2xpZW50cyBsb29rIGZvciB0aGUgY29kZSBvbiB0aGVcbiAgICogbGluZSBpbW1lZGlhdGVseSBhZnRlciB0aGUgcHJvbXB0LCBhbmQgYSBzdHlsZWQgYDxoMj5gIGNvZGUgbGFuZHMgdHdvIGJsYW5rXG4gICAqIGxpbmVzIGJlbG93IGl0LCBzbyBhdXRvZmlsbCBzdG9wcyBiZWluZyBvZmZlcmVkIGV2ZW4gdGhvdWdoIHRoZSBIVE1MIGxvb2tzXG4gICAqIHBlcmZlY3QuIFN1cHBseWluZyB0aGUgdGV4dCBwYXJ0IGRpcmVjdGx5IGtlZXBzIHRoZSBuaWNlIHRlbXBsYXRlIEFORCB0aGVcbiAgICogbGF5b3V0IHRob3NlIGNsaWVudHMgZXhwZWN0LlxuICAgKlxuICAgKiBLZWVwIHRoZSBzYW1lIGluZm9ybWF0aW9uIGluIGJvdGggcGFydHM7IGEgdGV4dCBhbHRlcm5hdGl2ZSB0aGF0IGRpc2FncmVlc1xuICAgKiB3aXRoIHRoZSBIVE1MIHJlYWRzIGFzIHBoaXNoaW5nIHRvIHNwYW0gZmlsdGVycy5cbiAgICovXG4gIHRleHQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQcmVoZWFkZXIgdGV4dCBmb3IgdGhlIEhUTUwgcGFydCAtIHRoZSBzbmlwcGV0IHNob3duIGJlc2lkZSB0aGUgc3ViamVjdCBpbiBhblxuICAgKiBpbmJveCBsaXN0LCBhbmQgdGhlIGJvZHkgb2YgdGhlIFBVU0ggTk9USUZJQ0FUSU9OIGEgbW9iaWxlIG1haWwgYXBwIHBvc3RzLlxuICAgKiBEZWZhdWx0cyB0byB0aGUgc3ViamVjdC5cbiAgICpcbiAgICogRGVsaXZlcnktdGltZSByYXRoZXIgdGhhbiBwYXJ0IG9mIHtAbGluayBFbWFpbE1lc3NhZ2V9IGZvciB0aGUgc2FtZSByZWFzb24gYXNcbiAgICogYHRleHRgOiBpdCBpcyBwcmVzZW50YXRpb24gdGhlIHNlbmRpbmcgQ09ERSBjaG9vc2VzLCBub3QgY29udGVudCBhIG1vZGVsXG4gICAqIGNvbXBvc2VzLiBUaGUgb25lLXRpbWUtY29kZSBwYXRoIHNldHMgaXQgc28gdGhlIGNvZGUgaXRzZWxmIHJpZGVzIGluIHRoZVxuICAgKiBub3RpZmljYXRpb24sIHdoaWNoIGlzIHRoZSBvbmx5IHRleHQgaU9TIGF1dG9maWxsIGdldHMgdG8gcmVhZC5cbiAgICovXG4gIHByZXZpZXc/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2VuZCAoU01UUCBtb2RlKSBvciBwZXJzaXN0IChmaWxlL291dGJveCBtb2RlKSBvbmUgbWVzc2FnZSBmcm9tIHRoZVxuICogcmVzb2x2ZWQgYGZyb21gIGFkZHJlc3MuIGB0b2AgKGFuZCBvcHRpb25hbCBgY2NgIC8gYGJjY2ApIGVhY2ggYWNjZXB0XG4gKiBvbmUgb3IgbW9yZSBhZGRyZXNzZXMsIGFuZCBgYXR0YWNobWVudHNgIGFyZSBmb3J3YXJkZWQgYXMgZmlsZXMuIFRoZVxuICogYm9keSBpcyByZW5kZXJlZCBieSBSZWFjdCBFbWFpbCBpbnRvIG1hdGNoaW5nIHBsYWluLXRleHQgYW5kIEhUTUwgTUlNRVxuICogYWx0ZXJuYXRpdmVzLCBhbmQgdGhlIG91dGJveCBlbWJlZHMgdGhlXG4gKiByZW5kZXJlZCBIVE1MIGluIGEgZG9jdW1lbnQuIEluIGZpbGUgbW9kZSB0aGUgcmV0dXJuZWQgYG1lc3NhZ2VJZGAgaXNcbiAqIHRoZSBwYXRoIHdyaXR0ZW4uIFRocm93cyB3aGVuIGB0b2AgY2FycmllcyBubyByZWNpcGllbnQsIHdoZW4gdGhlIGJvZHlcbiAqIG9yIGF0dGFjaG1lbnRzIGV4Y2VlZCB0aGUgcGx1Z2luJ3MgY2Fwcywgb3Igd2hlbiBgZnJvbWAgaXMgbm90IHBlcm1pdHRlZFxuICogYnkgdGhlIGVmZmVjdGl2ZSBzZW5kZXIgYWxsb3ctbGlzdC5cbiAqXG4gKiBUaGUgcmVjaXBpZW50LCBjYXAsIGFuZCBzZW5kZXIgY2hlY2tzIHJ1biBiZWZvcmUgdGhlIGludGVyY2VwdG9yIGNoYWluIHNvXG4gKiB0aGVpciBzcGVjaWZpYyBzdGF0dXMgYW5kIGFjdGlvbmFibGUgbWVzc2FnZSByZWFjaCB0aGUgY2FsbGVyIGluc3RlYWQgb2ZcbiAqIHRoZSBjaGFpbidzIHN0YWJsZSBmYWlsdXJlIHRleHQuIGBzaWduYWxgIGNhbmNlbHMgdGhlIHNlbmQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kRW1haWwoXG4gIG1lc3NhZ2U6IEVtYWlsTWVzc2FnZSxcbiAgZnJvbTogc3RyaW5nLFxuICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgb3B0aW9ucz86IFNlbmRFbWFpbE9wdGlvbnMsXG4pOiBQcm9taXNlPEVtYWlsUmVzdWx0PiB7XG4gIGlmIChtZXNzYWdlLnRvLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IFZhbGlkYXRpb25FcnJvci5taXNzaW5nRmllbGQoXCJ0b1wiKTtcbiAgfVxuICBhc3NlcnRNZXNzYWdlV2l0aGluQ2FwcyhtZXNzYWdlKTtcbiAgYXNzZXJ0U2VuZGVyQWxsb3dlZChmcm9tLCBnZXRFbWFpbFJ1bnRpbWUoKS5jb25maWcuYWxsb3dlZFNlbmRlcnMpO1xuICByZXR1cm4gZXhlY3V0ZVdyaXRlKFxuICAgIFwic2VuZFwiLFxuICAgIEVNQUlMX1NFTkRfU0VUVElOR1MsXG4gICAgKGV4ZWN1dGVTaWduYWwpID0+IGRpc3BhdGNoKG1lc3NhZ2UsIGZyb20sIGV4ZWN1dGVTaWduYWwsIG9wdGlvbnMpLFxuICAgIHNpZ25hbCxcbiAgKTtcbn1cbiJdfQ==
|
package/lib/tsconfig.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/
|
|
1
|
+
{"root":["../src/config.ts","../src/defaults.ts","../src/email-html.ts","../src/markdown.ts","../src/outbox.ts","../src/plugin.ts","../src/sender.ts","../src/tool.ts","../src/transport.ts","../index.ts"],"version":"5.9.3"}
|