parse-server 9.3.0-alpha.2 → 9.3.0-alpha.4

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.
@@ -17,5 +17,9 @@
17
17
  *
18
18
  * If there are no deprecations, this must return an empty array.
19
19
  */
20
- module.exports = [];
21
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0RlcHJlY2F0b3IvRGVwcmVjYXRpb25zLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGRlcHJlY2F0aW9ucy5cbiAqXG4gKiBBZGQgZGVwcmVjYXRpb25zIHRvIHRoZSBhcnJheSB1c2luZyB0aGUgZm9sbG93aW5nIGtleXM6XG4gKiAtIGBvcHRpb25LZXlgIHtTdHJpbmd9OiBUaGUgb3B0aW9uIGtleSBpbmNsLiBpdHMgcGF0aCwgZS5nLiBgc2VjdXJpdHkuZW5hYmxlQ2hlY2tgLlxuICogLSBgZW52S2V5YCB7U3RyaW5nfTogVGhlIGVudmlyb25tZW50IGtleSwgZS5nLiBgUEFSU0VfU0VSVkVSX1NFQ1VSSVRZYC5cbiAqIC0gYGNoYW5nZU5ld0tleWAge1N0cmluZ306IFNldCB0aGUgbmV3IGtleSBuYW1lIGlmIHRoZSBjdXJyZW50IGtleSB3aWxsIGJlIHJlcGxhY2VkLFxuICogb3Igc2V0IHRvIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgY3VycmVudCBrZXkgd2lsbCBiZSByZW1vdmVkIHdpdGhvdXQgcmVwbGFjZW1lbnQuXG4gKiAtIGBjaGFuZ2VOZXdEZWZhdWx0YCB7U3RyaW5nfTogU2V0IHRoZSBuZXcgZGVmYXVsdCB2YWx1ZSBpZiB0aGUga2V5J3MgZGVmYXVsdCB2YWx1ZVxuICogd2lsbCBjaGFuZ2UgaW4gYSBmdXR1cmUgdmVyc2lvbi5cbiAqIC0gYHNvbHV0aW9uYDogVGhlIGluc3RydWN0aW9uIHRvIHJlc29sdmUgdGhpcyBkZXByZWNhdGlvbiB3YXJuaW5nLiBPcHRpb25hbC4gVGhpc1xuICogaW5zdHJ1Y3Rpb24gbXVzdCBub3QgaW5jbHVkZSB0aGUgZGVwcmVjYXRpb24gd2FybmluZyB3aGljaCBpcyBhdXRvLWdlbmVyYXRlZC5cbiAqIEl0IHNob3VsZCBvbmx5IGNvbnRhaW4gYWRkaXRpb25hbCBpbnN0cnVjdGlvbiByZWdhcmRpbmcgdGhlIGRlcHJlY2F0aW9uIGlmXG4gKiBuZWNlc3NhcnkuXG4gKlxuICogSWYgdGhlcmUgYXJlIG5vIGRlcHJlY2F0aW9ucywgdGhpcyBtdXN0IHJldHVybiBhbiBlbXB0eSBhcnJheS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBbXTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0FBLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHLEVBQUUiLCJpZ25vcmVMaXN0IjpbXX0=
20
+ module.exports = [{
21
+ optionKey: 'fileUpload.allowedFileUrlDomains',
22
+ changeNewDefault: '[]',
23
+ solution: "Set 'fileUpload.allowedFileUrlDomains' to the domains you want to allow, or to '[]' to block all file URLs."
24
+ }];
25
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwib3B0aW9uS2V5IiwiY2hhbmdlTmV3RGVmYXVsdCIsInNvbHV0aW9uIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0RlcHJlY2F0b3IvRGVwcmVjYXRpb25zLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGRlcHJlY2F0aW9ucy5cbiAqXG4gKiBBZGQgZGVwcmVjYXRpb25zIHRvIHRoZSBhcnJheSB1c2luZyB0aGUgZm9sbG93aW5nIGtleXM6XG4gKiAtIGBvcHRpb25LZXlgIHtTdHJpbmd9OiBUaGUgb3B0aW9uIGtleSBpbmNsLiBpdHMgcGF0aCwgZS5nLiBgc2VjdXJpdHkuZW5hYmxlQ2hlY2tgLlxuICogLSBgZW52S2V5YCB7U3RyaW5nfTogVGhlIGVudmlyb25tZW50IGtleSwgZS5nLiBgUEFSU0VfU0VSVkVSX1NFQ1VSSVRZYC5cbiAqIC0gYGNoYW5nZU5ld0tleWAge1N0cmluZ306IFNldCB0aGUgbmV3IGtleSBuYW1lIGlmIHRoZSBjdXJyZW50IGtleSB3aWxsIGJlIHJlcGxhY2VkLFxuICogb3Igc2V0IHRvIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgY3VycmVudCBrZXkgd2lsbCBiZSByZW1vdmVkIHdpdGhvdXQgcmVwbGFjZW1lbnQuXG4gKiAtIGBjaGFuZ2VOZXdEZWZhdWx0YCB7U3RyaW5nfTogU2V0IHRoZSBuZXcgZGVmYXVsdCB2YWx1ZSBpZiB0aGUga2V5J3MgZGVmYXVsdCB2YWx1ZVxuICogd2lsbCBjaGFuZ2UgaW4gYSBmdXR1cmUgdmVyc2lvbi5cbiAqIC0gYHNvbHV0aW9uYDogVGhlIGluc3RydWN0aW9uIHRvIHJlc29sdmUgdGhpcyBkZXByZWNhdGlvbiB3YXJuaW5nLiBPcHRpb25hbC4gVGhpc1xuICogaW5zdHJ1Y3Rpb24gbXVzdCBub3QgaW5jbHVkZSB0aGUgZGVwcmVjYXRpb24gd2FybmluZyB3aGljaCBpcyBhdXRvLWdlbmVyYXRlZC5cbiAqIEl0IHNob3VsZCBvbmx5IGNvbnRhaW4gYWRkaXRpb25hbCBpbnN0cnVjdGlvbiByZWdhcmRpbmcgdGhlIGRlcHJlY2F0aW9uIGlmXG4gKiBuZWNlc3NhcnkuXG4gKlxuICogSWYgdGhlcmUgYXJlIG5vIGRlcHJlY2F0aW9ucywgdGhpcyBtdXN0IHJldHVybiBhbiBlbXB0eSBhcnJheS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gIHtcbiAgICBvcHRpb25LZXk6ICdmaWxlVXBsb2FkLmFsbG93ZWRGaWxlVXJsRG9tYWlucycsXG4gICAgY2hhbmdlTmV3RGVmYXVsdDogJ1tdJyxcbiAgICBzb2x1dGlvbjogXCJTZXQgJ2ZpbGVVcGxvYWQuYWxsb3dlZEZpbGVVcmxEb21haW5zJyB0byB0aGUgZG9tYWlucyB5b3Ugd2FudCB0byBhbGxvdywgb3IgdG8gJ1tdJyB0byBibG9jayBhbGwgZmlsZSBVUkxzLlwiLFxuICB9LFxuXTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0FBLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHLENBQ2Y7RUFDRUMsU0FBUyxFQUFFLGtDQUFrQztFQUM3Q0MsZ0JBQWdCLEVBQUUsSUFBSTtFQUN0QkMsUUFBUSxFQUFFO0FBQ1osQ0FBQyxDQUNGIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+
3
+ const Parse = require('parse/node').Parse;
4
+
5
+ /**
6
+ * Validates whether a File URL is allowed based on the configured allowed domains.
7
+ * @param {string} fileUrl - The URL to validate.
8
+ * @param {Object} config - The Parse Server config object.
9
+ * @throws {Parse.Error} If the URL is not allowed.
10
+ */
11
+ function validateFileUrl(fileUrl, config) {
12
+ if (fileUrl == null || fileUrl === '') {
13
+ return;
14
+ }
15
+ const domains = config?.fileUpload?.allowedFileUrlDomains;
16
+ if (!Array.isArray(domains) || domains.includes('*')) {
17
+ return;
18
+ }
19
+ let parsedUrl;
20
+ try {
21
+ parsedUrl = new URL(fileUrl);
22
+ } catch {
23
+ throw new Parse.Error(Parse.Error.FILE_SAVE_ERROR, `Invalid file URL.`);
24
+ }
25
+ const fileHostname = parsedUrl.hostname.toLowerCase();
26
+ for (const domain of domains) {
27
+ const d = domain.toLowerCase();
28
+ if (fileHostname === d) {
29
+ return;
30
+ }
31
+ if (d.startsWith('*.') && fileHostname.endsWith(d.slice(1))) {
32
+ return;
33
+ }
34
+ }
35
+ throw new Parse.Error(Parse.Error.FILE_SAVE_ERROR, `File URL domain '${parsedUrl.hostname}' is not allowed.`);
36
+ }
37
+
38
+ /**
39
+ * Recursively scans an object for File type fields and validates their URLs.
40
+ * @param {any} obj - The object to scan.
41
+ * @param {Object} config - The Parse Server config object.
42
+ * @throws {Parse.Error} If any File URL is not allowed.
43
+ */
44
+ function validateFileUrlsInObject(obj, config) {
45
+ if (obj == null || typeof obj !== 'object') {
46
+ return;
47
+ }
48
+ if (Array.isArray(obj)) {
49
+ for (const item of obj) {
50
+ validateFileUrlsInObject(item, config);
51
+ }
52
+ return;
53
+ }
54
+ if (obj.__type === 'File' && obj.url) {
55
+ validateFileUrl(obj.url, config);
56
+ return;
57
+ }
58
+ for (const key of Object.keys(obj)) {
59
+ const value = obj[key];
60
+ if (value && typeof value === 'object') {
61
+ validateFileUrlsInObject(value, config);
62
+ }
63
+ }
64
+ }
65
+ module.exports = {
66
+ validateFileUrl,
67
+ validateFileUrlsInObject
68
+ };
69
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJ2YWxpZGF0ZUZpbGVVcmwiLCJmaWxlVXJsIiwiY29uZmlnIiwiZG9tYWlucyIsImZpbGVVcGxvYWQiLCJhbGxvd2VkRmlsZVVybERvbWFpbnMiLCJBcnJheSIsImlzQXJyYXkiLCJpbmNsdWRlcyIsInBhcnNlZFVybCIsIlVSTCIsIkVycm9yIiwiRklMRV9TQVZFX0VSUk9SIiwiZmlsZUhvc3RuYW1lIiwiaG9zdG5hbWUiLCJ0b0xvd2VyQ2FzZSIsImRvbWFpbiIsImQiLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJzbGljZSIsInZhbGlkYXRlRmlsZVVybHNJbk9iamVjdCIsIm9iaiIsIml0ZW0iLCJfX3R5cGUiLCJ1cmwiLCJrZXkiLCJPYmplY3QiLCJrZXlzIiwidmFsdWUiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL0ZpbGVVcmxWYWxpZGF0b3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJykuUGFyc2U7XG5cbi8qKlxuICogVmFsaWRhdGVzIHdoZXRoZXIgYSBGaWxlIFVSTCBpcyBhbGxvd2VkIGJhc2VkIG9uIHRoZSBjb25maWd1cmVkIGFsbG93ZWQgZG9tYWlucy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlVXJsIC0gVGhlIFVSTCB0byB2YWxpZGF0ZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBUaGUgUGFyc2UgU2VydmVyIGNvbmZpZyBvYmplY3QuXG4gKiBAdGhyb3dzIHtQYXJzZS5FcnJvcn0gSWYgdGhlIFVSTCBpcyBub3QgYWxsb3dlZC5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVGaWxlVXJsKGZpbGVVcmwsIGNvbmZpZykge1xuICBpZiAoZmlsZVVybCA9PSBudWxsIHx8IGZpbGVVcmwgPT09ICcnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZG9tYWlucyA9IGNvbmZpZz8uZmlsZVVwbG9hZD8uYWxsb3dlZEZpbGVVcmxEb21haW5zO1xuICBpZiAoIUFycmF5LmlzQXJyYXkoZG9tYWlucykgfHwgZG9tYWlucy5pbmNsdWRlcygnKicpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHBhcnNlZFVybDtcbiAgdHJ5IHtcbiAgICBwYXJzZWRVcmwgPSBuZXcgVVJMKGZpbGVVcmwpO1xuICB9IGNhdGNoIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLCBgSW52YWxpZCBmaWxlIFVSTC5gKTtcbiAgfVxuXG4gIGNvbnN0IGZpbGVIb3N0bmFtZSA9IHBhcnNlZFVybC5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICBmb3IgKGNvbnN0IGRvbWFpbiBvZiBkb21haW5zKSB7XG4gICAgY29uc3QgZCA9IGRvbWFpbi50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChmaWxlSG9zdG5hbWUgPT09IGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGQuc3RhcnRzV2l0aCgnKi4nKSAmJiBmaWxlSG9zdG5hbWUuZW5kc1dpdGgoZC5zbGljZSgxKSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLCBgRmlsZSBVUkwgZG9tYWluICcke3BhcnNlZFVybC5ob3N0bmFtZX0nIGlzIG5vdCBhbGxvd2VkLmApO1xufVxuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHNjYW5zIGFuIG9iamVjdCBmb3IgRmlsZSB0eXBlIGZpZWxkcyBhbmQgdmFsaWRhdGVzIHRoZWlyIFVSTHMuXG4gKiBAcGFyYW0ge2FueX0gb2JqIC0gVGhlIG9iamVjdCB0byBzY2FuLlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIFRoZSBQYXJzZSBTZXJ2ZXIgY29uZmlnIG9iamVjdC5cbiAqIEB0aHJvd3Mge1BhcnNlLkVycm9yfSBJZiBhbnkgRmlsZSBVUkwgaXMgbm90IGFsbG93ZWQuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRmlsZVVybHNJbk9iamVjdChvYmosIGNvbmZpZykge1xuICBpZiAob2JqID09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBvYmopIHtcbiAgICAgIHZhbGlkYXRlRmlsZVVybHNJbk9iamVjdChpdGVtLCBjb25maWcpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKG9iai5fX3R5cGUgPT09ICdGaWxlJyAmJiBvYmoudXJsKSB7XG4gICAgdmFsaWRhdGVGaWxlVXJsKG9iai51cmwsIGNvbmZpZyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YWxpZGF0ZUZpbGVVcmxzSW5PYmplY3QodmFsdWUsIGNvbmZpZyk7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0geyB2YWxpZGF0ZUZpbGVVcmwsIHZhbGlkYXRlRmlsZVVybHNJbk9iamVjdCB9O1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBLE1BQU1BLEtBQUssR0FBR0MsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDRCxLQUFLOztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTRSxlQUFlQSxDQUFDQyxPQUFPLEVBQUVDLE1BQU0sRUFBRTtFQUN4QyxJQUFJRCxPQUFPLElBQUksSUFBSSxJQUFJQSxPQUFPLEtBQUssRUFBRSxFQUFFO0lBQ3JDO0VBQ0Y7RUFFQSxNQUFNRSxPQUFPLEdBQUdELE1BQU0sRUFBRUUsVUFBVSxFQUFFQyxxQkFBcUI7RUFDekQsSUFBSSxDQUFDQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ0osT0FBTyxDQUFDLElBQUlBLE9BQU8sQ0FBQ0ssUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0lBQ3BEO0VBQ0Y7RUFFQSxJQUFJQyxTQUFTO0VBQ2IsSUFBSTtJQUNGQSxTQUFTLEdBQUcsSUFBSUMsR0FBRyxDQUFDVCxPQUFPLENBQUM7RUFDOUIsQ0FBQyxDQUFDLE1BQU07SUFDTixNQUFNLElBQUlILEtBQUssQ0FBQ2EsS0FBSyxDQUFDYixLQUFLLENBQUNhLEtBQUssQ0FBQ0MsZUFBZSxFQUFFLG1CQUFtQixDQUFDO0VBQ3pFO0VBRUEsTUFBTUMsWUFBWSxHQUFHSixTQUFTLENBQUNLLFFBQVEsQ0FBQ0MsV0FBVyxDQUFDLENBQUM7RUFDckQsS0FBSyxNQUFNQyxNQUFNLElBQUliLE9BQU8sRUFBRTtJQUM1QixNQUFNYyxDQUFDLEdBQUdELE1BQU0sQ0FBQ0QsV0FBVyxDQUFDLENBQUM7SUFDOUIsSUFBSUYsWUFBWSxLQUFLSSxDQUFDLEVBQUU7TUFDdEI7SUFDRjtJQUNBLElBQUlBLENBQUMsQ0FBQ0MsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJTCxZQUFZLENBQUNNLFFBQVEsQ0FBQ0YsQ0FBQyxDQUFDRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtNQUMzRDtJQUNGO0VBQ0Y7RUFFQSxNQUFNLElBQUl0QixLQUFLLENBQUNhLEtBQUssQ0FBQ2IsS0FBSyxDQUFDYSxLQUFLLENBQUNDLGVBQWUsRUFBRSxvQkFBb0JILFNBQVMsQ0FBQ0ssUUFBUSxtQkFBbUIsQ0FBQztBQUMvRzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTTyx3QkFBd0JBLENBQUNDLEdBQUcsRUFBRXBCLE1BQU0sRUFBRTtFQUM3QyxJQUFJb0IsR0FBRyxJQUFJLElBQUksSUFBSSxPQUFPQSxHQUFHLEtBQUssUUFBUSxFQUFFO0lBQzFDO0VBQ0Y7RUFDQSxJQUFJaEIsS0FBSyxDQUFDQyxPQUFPLENBQUNlLEdBQUcsQ0FBQyxFQUFFO0lBQ3RCLEtBQUssTUFBTUMsSUFBSSxJQUFJRCxHQUFHLEVBQUU7TUFDdEJELHdCQUF3QixDQUFDRSxJQUFJLEVBQUVyQixNQUFNLENBQUM7SUFDeEM7SUFDQTtFQUNGO0VBQ0EsSUFBSW9CLEdBQUcsQ0FBQ0UsTUFBTSxLQUFLLE1BQU0sSUFBSUYsR0FBRyxDQUFDRyxHQUFHLEVBQUU7SUFDcEN6QixlQUFlLENBQUNzQixHQUFHLENBQUNHLEdBQUcsRUFBRXZCLE1BQU0sQ0FBQztJQUNoQztFQUNGO0VBQ0EsS0FBSyxNQUFNd0IsR0FBRyxJQUFJQyxNQUFNLENBQUNDLElBQUksQ0FBQ04sR0FBRyxDQUFDLEVBQUU7SUFDbEMsTUFBTU8sS0FBSyxHQUFHUCxHQUFHLENBQUNJLEdBQUcsQ0FBQztJQUN0QixJQUFJRyxLQUFLLElBQUksT0FBT0EsS0FBSyxLQUFLLFFBQVEsRUFBRTtNQUN0Q1Isd0JBQXdCLENBQUNRLEtBQUssRUFBRTNCLE1BQU0sQ0FBQztJQUN6QztFQUNGO0FBQ0Y7QUFFQTRCLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHO0VBQUUvQixlQUFlO0VBQUVxQjtBQUF5QixDQUFDIiwiaWdub3JlTGlzdCI6W119
@@ -114,6 +114,12 @@ const transformers = {
114
114
  __type: 'File'
115
115
  };
116
116
  } else if (file && file.name) {
117
+ if (file.url) {
118
+ const {
119
+ validateFileUrl
120
+ } = require('../../FileUrlValidator');
121
+ validateFileUrl(file.url, config);
122
+ }
117
123
  return {
118
124
  name: file.name,
119
125
  __type: 'File',
@@ -271,4 +277,4 @@ const transformers = {
271
277
  }
272
278
  }
273
279
  };
274
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2dyYXBocWxSZWxheSIsIl9maWxlc011dGF0aW9ucyIsIm9iamVjdHNNdXRhdGlvbnMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInRyYW5zZm9ybVR5cGVzIiwiaW5wdXRUeXBlIiwiZmllbGRzIiwiY2xhc3NOYW1lIiwicGFyc2VHcmFwaFFMU2NoZW1hIiwicmVxIiwib3JpZ2luYWxGaWVsZHMiLCJjbGFzc0dyYXBoUUxDcmVhdGVUeXBlIiwiY2xhc3NHcmFwaFFMVXBkYXRlVHlwZSIsImNvbmZpZyIsImlzQ3JlYXRlRW5hYmxlZCIsImlzVXBkYXRlRW5hYmxlZCIsInBhcnNlQ2xhc3NUeXBlcyIsInBhcnNlQ2xhc3MiLCJwYXJzZUNsYXNzZXMiLCJjbGFzc0dyYXBoUUxDcmVhdGVUeXBlRmllbGRzIiwiZ2V0RmllbGRzIiwiY2xhc3NHcmFwaFFMVXBkYXRlVHlwZUZpZWxkcyIsInByb21pc2VzIiwia2V5cyIsIm1hcCIsImZpZWxkIiwiaW5wdXRUeXBlRmllbGQiLCJwYXJzZUZpZWxkVHlwZSIsInR5cGUiLCJfX29wIiwidHJhbnNmb3JtZXJzIiwiZ2VvUG9pbnQiLCJwb2x5Z29uIiwiZmlsZSIsInJlbGF0aW9uIiwidGFyZ2V0Q2xhc3MiLCJwb2ludGVyIiwiUHJvbWlzZSIsImFsbCIsIkFDTCIsImV4cG9ydHMiLCJpbnB1dCIsInVwbG9hZCIsImZpbGVJbmZvIiwiaGFuZGxlVXBsb2FkIiwiX190eXBlIiwibmFtZSIsInVybCIsIlBhcnNlIiwiRXJyb3IiLCJGSUxFX1NBVkVfRVJST1IiLCJ2YWx1ZSIsImNvb3JkaW5hdGVzIiwibGF0aXR1ZGUiLCJsb25naXR1ZGUiLCJwYXJzZUFDTCIsInB1YmxpYyIsInJlYWQiLCJ3cml0ZSIsInVzZXJzIiwiZm9yRWFjaCIsInJ1bGUiLCJnbG9iYWxJZE9iamVjdCIsImZyb21HbG9iYWxJZCIsInVzZXJJZCIsImlkIiwicm9sZXMiLCJyb2xlTmFtZSIsIm9yaWdpbmFsVmFsdWUiLCJhdXRoIiwiaW5mbyIsImxlbmd0aCIsIklOVkFMSURfUE9JTlRFUiIsIm9wIiwib3BzIiwibmVzdGVkT2JqZWN0c1RvQWRkIiwiY3JlYXRlQW5kQWRkIiwicGFyc2VGaWVsZHMiLCJjcmVhdGVPYmplY3QiLCJvYmplY3QiLCJvYmplY3RJZCIsImFkZCIsInB1c2giLCJvYmplY3RzIiwicmVtb3ZlIiwibmVzdGVkT2JqZWN0VG9BZGQiLCJjcmVhdGVBbmRMaW5rIiwibGluayJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9HcmFwaFFML3RyYW5zZm9ybWVycy9tdXRhdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgeyBmcm9tR2xvYmFsSWQgfSBmcm9tICdncmFwaHFsLXJlbGF5JztcbmltcG9ydCB7IGhhbmRsZVVwbG9hZCB9IGZyb20gJy4uL2xvYWRlcnMvZmlsZXNNdXRhdGlvbnMnO1xuaW1wb3J0ICogYXMgb2JqZWN0c011dGF0aW9ucyBmcm9tICcuLi9oZWxwZXJzL29iamVjdHNNdXRhdGlvbnMnO1xuXG5jb25zdCB0cmFuc2Zvcm1UeXBlcyA9IGFzeW5jIChcbiAgaW5wdXRUeXBlOiAnY3JlYXRlJyB8ICd1cGRhdGUnLFxuICBmaWVsZHMsXG4gIHsgY2xhc3NOYW1lLCBwYXJzZUdyYXBoUUxTY2hlbWEsIHJlcSwgb3JpZ2luYWxGaWVsZHMgfVxuKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc0dyYXBoUUxDcmVhdGVUeXBlLFxuICAgIGNsYXNzR3JhcGhRTFVwZGF0ZVR5cGUsXG4gICAgY29uZmlnOiB7IGlzQ3JlYXRlRW5hYmxlZCwgaXNVcGRhdGVFbmFibGVkIH0sXG4gIH0gPSBwYXJzZUdyYXBoUUxTY2hlbWEucGFyc2VDbGFzc1R5cGVzW2NsYXNzTmFtZV07XG4gIGNvbnN0IHBhcnNlQ2xhc3MgPSBwYXJzZUdyYXBoUUxTY2hlbWEucGFyc2VDbGFzc2VzW2NsYXNzTmFtZV07XG4gIGlmIChmaWVsZHMpIHtcbiAgICBjb25zdCBjbGFzc0dyYXBoUUxDcmVhdGVUeXBlRmllbGRzID1cbiAgICAgIGlzQ3JlYXRlRW5hYmxlZCAmJiBjbGFzc0dyYXBoUUxDcmVhdGVUeXBlID8gY2xhc3NHcmFwaFFMQ3JlYXRlVHlwZS5nZXRGaWVsZHMoKSA6IG51bGw7XG4gICAgY29uc3QgY2xhc3NHcmFwaFFMVXBkYXRlVHlwZUZpZWxkcyA9XG4gICAgICBpc1VwZGF0ZUVuYWJsZWQgJiYgY2xhc3NHcmFwaFFMVXBkYXRlVHlwZSA/IGNsYXNzR3JhcGhRTFVwZGF0ZVR5cGUuZ2V0RmllbGRzKCkgOiBudWxsO1xuICAgIGNvbnN0IHByb21pc2VzID0gT2JqZWN0LmtleXMoZmllbGRzKS5tYXAoYXN5bmMgZmllbGQgPT4ge1xuICAgICAgbGV0IGlucHV0VHlwZUZpZWxkO1xuICAgICAgaWYgKGlucHV0VHlwZSA9PT0gJ2NyZWF0ZScgJiYgY2xhc3NHcmFwaFFMQ3JlYXRlVHlwZUZpZWxkcykge1xuICAgICAgICBpbnB1dFR5cGVGaWVsZCA9IGNsYXNzR3JhcGhRTENyZWF0ZVR5cGVGaWVsZHNbZmllbGRdO1xuICAgICAgfSBlbHNlIGlmIChjbGFzc0dyYXBoUUxVcGRhdGVUeXBlRmllbGRzKSB7XG4gICAgICAgIGlucHV0VHlwZUZpZWxkID0gY2xhc3NHcmFwaFFMVXBkYXRlVHlwZUZpZWxkc1tmaWVsZF07XG4gICAgICB9XG4gICAgICBpZiAoaW5wdXRUeXBlRmllbGQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VGaWVsZFR5cGUgPSBwYXJzZUNsYXNzLmZpZWxkc1tmaWVsZF0udHlwZTtcbiAgICAgICAgc3dpdGNoIChwYXJzZUZpZWxkVHlwZSkge1xuICAgICAgICAgIGNhc2UgJ0dlb1BvaW50JzpcbiAgICAgICAgICAgIGlmIChmaWVsZHNbZmllbGRdID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIGZpZWxkc1tmaWVsZF0gPSB7IF9fb3A6ICdEZWxldGUnIH07XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmllbGRzW2ZpZWxkXSA9IHRyYW5zZm9ybWVycy5nZW9Qb2ludChmaWVsZHNbZmllbGRdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ1BvbHlnb24nOlxuICAgICAgICAgICAgaWYgKGZpZWxkc1tmaWVsZF0gPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgZmllbGRzW2ZpZWxkXSA9IHsgX19vcDogJ0RlbGV0ZScgfTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWVsZHNbZmllbGRdID0gdHJhbnNmb3JtZXJzLnBvbHlnb24oZmllbGRzW2ZpZWxkXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdGaWxlJzpcbiAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gdXNlIHRoZSBvcmlnaW5hbEZpZWxkcyB0byBoYW5kbGUgdGhlIGZpbGUgdXBsb2FkXG4gICAgICAgICAgICAvLyBzaW5jZSBmaWVsZHMgYXJlIGEgZGVlcGNvcHkgYW5kIGRvIG5vdCBrZWVwIHRoZSBmaWxlIG9iamVjdFxuICAgICAgICAgICAgZmllbGRzW2ZpZWxkXSA9IGF3YWl0IHRyYW5zZm9ybWVycy5maWxlKG9yaWdpbmFsRmllbGRzW2ZpZWxkXSwgcmVxKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ1JlbGF0aW9uJzpcbiAgICAgICAgICAgIGZpZWxkc1tmaWVsZF0gPSBhd2FpdCB0cmFuc2Zvcm1lcnMucmVsYXRpb24oXG4gICAgICAgICAgICAgIHBhcnNlQ2xhc3MuZmllbGRzW2ZpZWxkXS50YXJnZXRDbGFzcyxcbiAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgIGZpZWxkc1tmaWVsZF0sXG4gICAgICAgICAgICAgIG9yaWdpbmFsRmllbGRzW2ZpZWxkXSxcbiAgICAgICAgICAgICAgcGFyc2VHcmFwaFFMU2NoZW1hLFxuICAgICAgICAgICAgICByZXFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdQb2ludGVyJzpcbiAgICAgICAgICAgIGlmIChmaWVsZHNbZmllbGRdID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIGZpZWxkc1tmaWVsZF0gPSB7IF9fb3A6ICdEZWxldGUnIH07XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmllbGRzW2ZpZWxkXSA9IGF3YWl0IHRyYW5zZm9ybWVycy5wb2ludGVyKFxuICAgICAgICAgICAgICBwYXJzZUNsYXNzLmZpZWxkc1tmaWVsZF0udGFyZ2V0Q2xhc3MsXG4gICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICBmaWVsZHNbZmllbGRdLFxuICAgICAgICAgICAgICBvcmlnaW5hbEZpZWxkc1tmaWVsZF0sXG4gICAgICAgICAgICAgIHBhcnNlR3JhcGhRTFNjaGVtYSxcbiAgICAgICAgICAgICAgcmVxXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmIChmaWVsZHNbZmllbGRdID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIGZpZWxkc1tmaWVsZF0gPSB7IF9fb3A6ICdEZWxldGUnIH07XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgIGlmIChmaWVsZHMuQUNMKSB7IGZpZWxkcy5BQ0wgPSB0cmFuc2Zvcm1lcnMuQUNMKGZpZWxkcy5BQ0wpOyB9XG4gIH1cbiAgcmV0dXJuIGZpZWxkcztcbn07XG5cbmNvbnN0IHRyYW5zZm9ybWVycyA9IHtcbiAgZmlsZTogYXN5bmMgKGlucHV0LCB7IGNvbmZpZyB9KSA9PiB7XG4gICAgaWYgKGlucHV0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4geyBfX29wOiAnRGVsZXRlJyB9O1xuICAgIH1cbiAgICBjb25zdCB7IGZpbGUsIHVwbG9hZCB9ID0gaW5wdXQ7XG4gICAgaWYgKHVwbG9hZCkge1xuICAgICAgY29uc3QgeyBmaWxlSW5mbyB9ID0gYXdhaXQgaGFuZGxlVXBsb2FkKHVwbG9hZCwgY29uZmlnKTtcbiAgICAgIHJldHVybiB7IC4uLmZpbGVJbmZvLCBfX3R5cGU6ICdGaWxlJyB9O1xuICAgIH0gZWxzZSBpZiAoZmlsZSAmJiBmaWxlLm5hbWUpIHtcbiAgICAgIHJldHVybiB7IG5hbWU6IGZpbGUubmFtZSwgX190eXBlOiAnRmlsZScsIHVybDogZmlsZS51cmwgfTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUiwgJ0ludmFsaWQgZmlsZSB1cGxvYWQuJyk7XG4gIH0sXG4gIHBvbHlnb246IHZhbHVlID0+ICh7XG4gICAgX190eXBlOiAnUG9seWdvbicsXG4gICAgY29vcmRpbmF0ZXM6IHZhbHVlLm1hcChnZW9Qb2ludCA9PiBbZ2VvUG9pbnQubGF0aXR1ZGUsIGdlb1BvaW50LmxvbmdpdHVkZV0pLFxuICB9KSxcbiAgZ2VvUG9pbnQ6IHZhbHVlID0+ICh7XG4gICAgLi4udmFsdWUsXG4gICAgX190eXBlOiAnR2VvUG9pbnQnLFxuICB9KSxcbiAgQUNMOiB2YWx1ZSA9PiB7XG4gICAgY29uc3QgcGFyc2VBQ0wgPSB7fTtcbiAgICBpZiAodmFsdWUucHVibGljKSB7XG4gICAgICBwYXJzZUFDTFsnKiddID0ge1xuICAgICAgICByZWFkOiB2YWx1ZS5wdWJsaWMucmVhZCxcbiAgICAgICAgd3JpdGU6IHZhbHVlLnB1YmxpYy53cml0ZSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICh2YWx1ZS51c2Vycykge1xuICAgICAgdmFsdWUudXNlcnMuZm9yRWFjaChydWxlID0+IHtcbiAgICAgICAgY29uc3QgZ2xvYmFsSWRPYmplY3QgPSBmcm9tR2xvYmFsSWQocnVsZS51c2VySWQpO1xuICAgICAgICBpZiAoZ2xvYmFsSWRPYmplY3QudHlwZSA9PT0gJ19Vc2VyJykge1xuICAgICAgICAgIHJ1bGUudXNlcklkID0gZ2xvYmFsSWRPYmplY3QuaWQ7XG4gICAgICAgIH1cbiAgICAgICAgcGFyc2VBQ0xbcnVsZS51c2VySWRdID0ge1xuICAgICAgICAgIHJlYWQ6IHJ1bGUucmVhZCxcbiAgICAgICAgICB3cml0ZTogcnVsZS53cml0ZSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodmFsdWUucm9sZXMpIHtcbiAgICAgIHZhbHVlLnJvbGVzLmZvckVhY2gocnVsZSA9PiB7XG4gICAgICAgIHBhcnNlQUNMW2Byb2xlOiR7cnVsZS5yb2xlTmFtZX1gXSA9IHtcbiAgICAgICAgICByZWFkOiBydWxlLnJlYWQsXG4gICAgICAgICAgd3JpdGU6IHJ1bGUud3JpdGUsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlQUNMO1xuICB9LFxuICByZWxhdGlvbjogYXN5bmMgKFxuICAgIHRhcmdldENsYXNzLFxuICAgIGZpZWxkLFxuICAgIHZhbHVlLFxuICAgIG9yaWdpbmFsVmFsdWUsXG4gICAgcGFyc2VHcmFwaFFMU2NoZW1hLFxuICAgIHsgY29uZmlnLCBhdXRoLCBpbmZvIH1cbiAgKSA9PiB7XG4gICAgaWYgKE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDApXG4gICAgeyB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICBQYXJzZS5FcnJvci5JTlZBTElEX1BPSU5URVIsXG4gICAgICBgWW91IG5lZWQgdG8gcHJvdmlkZSBhdCBsZWFzdCBvbmUgb3BlcmF0aW9uIG9uIHRoZSByZWxhdGlvbiBtdXRhdGlvbiBvZiBmaWVsZCAke2ZpZWxkfWBcbiAgICApOyB9XG5cbiAgICBjb25zdCBvcCA9IHtcbiAgICAgIF9fb3A6ICdCYXRjaCcsXG4gICAgICBvcHM6IFtdLFxuICAgIH07XG4gICAgbGV0IG5lc3RlZE9iamVjdHNUb0FkZCA9IFtdO1xuXG4gICAgaWYgKHZhbHVlLmNyZWF0ZUFuZEFkZCkge1xuICAgICAgbmVzdGVkT2JqZWN0c1RvQWRkID0gKFxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICB2YWx1ZS5jcmVhdGVBbmRBZGQubWFwKGFzeW5jIChpbnB1dCwgaSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VGaWVsZHMgPSBhd2FpdCB0cmFuc2Zvcm1UeXBlcygnY3JlYXRlJywgaW5wdXQsIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiB0YXJnZXRDbGFzcyxcbiAgICAgICAgICAgICAgb3JpZ2luYWxGaWVsZHM6IG9yaWdpbmFsVmFsdWUuY3JlYXRlQW5kQWRkW2ldLFxuICAgICAgICAgICAgICBwYXJzZUdyYXBoUUxTY2hlbWEsXG4gICAgICAgICAgICAgIHJlcTogeyBjb25maWcsIGF1dGgsIGluZm8gfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG9iamVjdHNNdXRhdGlvbnMuY3JlYXRlT2JqZWN0KHRhcmdldENsYXNzLCBwYXJzZUZpZWxkcywgY29uZmlnLCBhdXRoLCBpbmZvKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApLm1hcChvYmplY3QgPT4gKHtcbiAgICAgICAgX190eXBlOiAnUG9pbnRlcicsXG4gICAgICAgIGNsYXNzTmFtZTogdGFyZ2V0Q2xhc3MsXG4gICAgICAgIG9iamVjdElkOiBvYmplY3Qub2JqZWN0SWQsXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlLmFkZCB8fCBuZXN0ZWRPYmplY3RzVG9BZGQubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKCF2YWx1ZS5hZGQpIHsgdmFsdWUuYWRkID0gW107IH1cbiAgICAgIHZhbHVlLmFkZCA9IHZhbHVlLmFkZC5tYXAoaW5wdXQgPT4ge1xuICAgICAgICBjb25zdCBnbG9iYWxJZE9iamVjdCA9IGZyb21HbG9iYWxJZChpbnB1dCk7XG4gICAgICAgIGlmIChnbG9iYWxJZE9iamVjdC50eXBlID09PSB0YXJnZXRDbGFzcykge1xuICAgICAgICAgIGlucHV0ID0gZ2xvYmFsSWRPYmplY3QuaWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBfX3R5cGU6ICdQb2ludGVyJyxcbiAgICAgICAgICBjbGFzc05hbWU6IHRhcmdldENsYXNzLFxuICAgICAgICAgIG9iamVjdElkOiBpbnB1dCxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgb3Aub3BzLnB1c2goe1xuICAgICAgICBfX29wOiAnQWRkUmVsYXRpb24nLFxuICAgICAgICBvYmplY3RzOiBbLi4udmFsdWUuYWRkLCAuLi5uZXN0ZWRPYmplY3RzVG9BZGRdLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlLnJlbW92ZSkge1xuICAgICAgb3Aub3BzLnB1c2goe1xuICAgICAgICBfX29wOiAnUmVtb3ZlUmVsYXRpb24nLFxuICAgICAgICBvYmplY3RzOiB2YWx1ZS5yZW1vdmUubWFwKGlucHV0ID0+IHtcbiAgICAgICAgICBjb25zdCBnbG9iYWxJZE9iamVjdCA9IGZyb21HbG9iYWxJZChpbnB1dCk7XG4gICAgICAgICAgaWYgKGdsb2JhbElkT2JqZWN0LnR5cGUgPT09IHRhcmdldENsYXNzKSB7XG4gICAgICAgICAgICBpbnB1dCA9IGdsb2JhbElkT2JqZWN0LmlkO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgX190eXBlOiAnUG9pbnRlcicsXG4gICAgICAgICAgICBjbGFzc05hbWU6IHRhcmdldENsYXNzLFxuICAgICAgICAgICAgb2JqZWN0SWQ6IGlucHV0LFxuICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBvcDtcbiAgfSxcbiAgcG9pbnRlcjogYXN5bmMgKFxuICAgIHRhcmdldENsYXNzLFxuICAgIGZpZWxkLFxuICAgIHZhbHVlLFxuICAgIG9yaWdpbmFsVmFsdWUsXG4gICAgcGFyc2VHcmFwaFFMU2NoZW1hLFxuICAgIHsgY29uZmlnLCBhdXRoLCBpbmZvIH1cbiAgKSA9PiB7XG4gICAgaWYgKE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPiAxIHx8IE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDApXG4gICAgeyB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICBQYXJzZS5FcnJvci5JTlZBTElEX1BPSU5URVIsXG4gICAgICBgWW91IG5lZWQgdG8gcHJvdmlkZSBsaW5rIE9SIGNyZWF0ZUxpbmsgb24gdGhlIHBvaW50ZXIgbXV0YXRpb24gb2YgZmllbGQgJHtmaWVsZH1gXG4gICAgKTsgfVxuXG4gICAgbGV0IG5lc3RlZE9iamVjdFRvQWRkO1xuICAgIGlmICh2YWx1ZS5jcmVhdGVBbmRMaW5rKSB7XG4gICAgICBjb25zdCBwYXJzZUZpZWxkcyA9IGF3YWl0IHRyYW5zZm9ybVR5cGVzKCdjcmVhdGUnLCB2YWx1ZS5jcmVhdGVBbmRMaW5rLCB7XG4gICAgICAgIGNsYXNzTmFtZTogdGFyZ2V0Q2xhc3MsXG4gICAgICAgIHBhcnNlR3JhcGhRTFNjaGVtYSxcbiAgICAgICAgb3JpZ2luYWxGaWVsZHM6IG9yaWdpbmFsVmFsdWUuY3JlYXRlQW5kTGluayxcbiAgICAgICAgcmVxOiB7IGNvbmZpZywgYXV0aCwgaW5mbyB9LFxuICAgICAgfSk7XG4gICAgICBuZXN0ZWRPYmplY3RUb0FkZCA9IGF3YWl0IG9iamVjdHNNdXRhdGlvbnMuY3JlYXRlT2JqZWN0KFxuICAgICAgICB0YXJnZXRDbGFzcyxcbiAgICAgICAgcGFyc2VGaWVsZHMsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgYXV0aCxcbiAgICAgICAgaW5mb1xuICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIF9fdHlwZTogJ1BvaW50ZXInLFxuICAgICAgICBjbGFzc05hbWU6IHRhcmdldENsYXNzLFxuICAgICAgICBvYmplY3RJZDogbmVzdGVkT2JqZWN0VG9BZGQub2JqZWN0SWQsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAodmFsdWUubGluaykge1xuICAgICAgbGV0IG9iamVjdElkID0gdmFsdWUubGluaztcbiAgICAgIGNvbnN0IGdsb2JhbElkT2JqZWN0ID0gZnJvbUdsb2JhbElkKG9iamVjdElkKTtcbiAgICAgIGlmIChnbG9iYWxJZE9iamVjdC50eXBlID09PSB0YXJnZXRDbGFzcykge1xuICAgICAgICBvYmplY3RJZCA9IGdsb2JhbElkT2JqZWN0LmlkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX190eXBlOiAnUG9pbnRlcicsXG4gICAgICAgIGNsYXNzTmFtZTogdGFyZ2V0Q2xhc3MsXG4gICAgICAgIG9iamVjdElkLFxuICAgICAgfTtcbiAgICB9XG4gIH0sXG59O1xuXG5leHBvcnQgeyB0cmFuc2Zvcm1UeXBlcyB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxLQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxhQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxlQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxnQkFBQSxHQUFBQyx1QkFBQSxDQUFBSixPQUFBO0FBQWdFLFNBQUFJLHdCQUFBQyxDQUFBLEVBQUFDLENBQUEsNkJBQUFDLE9BQUEsTUFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBSCx1QkFBQSxZQUFBQSxDQUFBQyxDQUFBLEVBQUFDLENBQUEsU0FBQUEsQ0FBQSxJQUFBRCxD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
280
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2dyYXBocWxSZWxheSIsIl9maWxlc011dGF0aW9ucyIsIm9iamVjdHNNdXRhdGlvbnMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInRyYW5zZm9ybVR5cGVzIiwiaW5wdXRUeXBlIiwiZmllbGRzIiwiY2xhc3NOYW1lIiwicGFyc2VHcmFwaFFMU2NoZW1hIiwicmVxIiwib3JpZ2luYWxGaWVsZHMiLCJjbGFzc0dyYXBoUUxDcmVhdGVUeXBlIiwiY2xhc3NHcmFwaFFMVXBkYXRlVHlwZSIsImNvbmZpZyIsImlzQ3JlYXRlRW5hYmxlZCIsImlzVXBkYXRlRW5hYmxlZCIsInBhcnNlQ2xhc3NUeXBlcyIsInBhcnNlQ2xhc3MiLCJwYXJzZUNsYXNzZXMiLCJjbGFzc0dyYXBoUUxDcmVhdGVUeXBlRmllbGRzIiwiZ2V0RmllbGRzIiwiY2xhc3NHcmFwaFFMVXBkYXRlVHlwZUZpZWxkcyIsInByb21pc2VzIiwia2V5cyIsIm1hcCIsImZpZWxkIiwiaW5wdXRUeXBlRmllbGQiLCJwYXJzZUZpZWxkVHlwZSIsInR5cGUiLCJfX29wIiwidHJhbnNmb3JtZXJzIiwiZ2VvUG9pbnQiLCJwb2x5Z29uIiwiZmlsZSIsInJlbGF0aW9uIiwidGFyZ2V0Q2xhc3MiLCJwb2ludGVyIiwiUHJvbWlzZSIsImFsbCIsIkFDTCIsImV4cG9ydHMiLCJpbnB1dCIsInVwbG9hZCIsImZpbGVJbmZvIiwiaGFuZGxlVXBsb2FkIiwiX190eXBlIiwibmFtZSIsInVybCIsInZhbGlkYXRlRmlsZVVybCIsIlBhcnNlIiwiRXJyb3IiLCJGSUxFX1NBVkVfRVJST1IiLCJ2YWx1ZSIsImNvb3JkaW5hdGVzIiwibGF0aXR1ZGUiLCJsb25naXR1ZGUiLCJwYXJzZUFDTCIsInB1YmxpYyIsInJlYWQiLCJ3cml0ZSIsInVzZXJzIiwiZm9yRWFjaCIsInJ1bGUiLCJnbG9iYWxJZE9iamVjdCIsImZyb21HbG9iYWxJZCIsInVzZXJJZCIsImlkIiwicm9sZXMiLCJyb2xlTmFtZSIsIm9yaWdpbmFsVmFsdWUiLCJhdXRoIiwiaW5mbyIsImxlbmd0aCIsIklOVkFMSURfUE9JTlRFUiIsIm9wIiwib3BzIiwibmVzdGVkT2JqZWN0c1RvQWRkIiwiY3JlYXRlQW5kQWRkIiwicGFyc2VGaWVsZHMiLCJjcmVhdGVPYmplY3QiLCJvYmplY3QiLCJvYmplY3RJZCIsImFkZCIsInB1c2giLCJvYmplY3RzIiwicmVtb3ZlIiwibmVzdGVkT2JqZWN0VG9BZGQiLCJjcmVhdGVBbmRMaW5rIiwibGluayJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9HcmFwaFFML3RyYW5zZm9ybWVycy9tdXRhdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgeyBmcm9tR2xvYmFsSWQgfSBmcm9tICdncmFwaHFsLXJlbGF5JztcbmltcG9ydCB7IGhhbmRsZVVwbG9hZCB9IGZyb20gJy4uL2xvYWRlcnMvZmlsZXNNdXRhdGlvbnMnO1xuaW1wb3J0ICogYXMgb2JqZWN0c011dGF0aW9ucyBmcm9tICcuLi9oZWxwZXJzL29iamVjdHNNdXRhdGlvbnMnO1xuXG5jb25zdCB0cmFuc2Zvcm1UeXBlcyA9IGFzeW5jIChcbiAgaW5wdXRUeXBlOiAnY3JlYXRlJyB8ICd1cGRhdGUnLFxuICBmaWVsZHMsXG4gIHsgY2xhc3NOYW1lLCBwYXJzZUdyYXBoUUxTY2hlbWEsIHJlcSwgb3JpZ2luYWxGaWVsZHMgfVxuKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc0dyYXBoUUxDcmVhdGVUeXBlLFxuICAgIGNsYXNzR3JhcGhRTFVwZGF0ZVR5cGUsXG4gICAgY29uZmlnOiB7IGlzQ3JlYXRlRW5hYmxlZCwgaXNVcGRhdGVFbmFibGVkIH0sXG4gIH0gPSBwYXJzZUdyYXBoUUxTY2hlbWEucGFyc2VDbGFzc1R5cGVzW2NsYXNzTmFtZV07XG4gIGNvbnN0IHBhcnNlQ2xhc3MgPSBwYXJzZUdyYXBoUUxTY2hlbWEucGFyc2VDbGFzc2VzW2NsYXNzTmFtZV07XG4gIGlmIChmaWVsZHMpIHtcbiAgICBjb25zdCBjbGFzc0dyYXBoUUxDcmVhdGVUeXBlRmllbGRzID1cbiAgICAgIGlzQ3JlYXRlRW5hYmxlZCAmJiBjbGFzc0dyYXBoUUxDcmVhdGVUeXBlID8gY2xhc3NHcmFwaFFMQ3JlYXRlVHlwZS5nZXRGaWVsZHMoKSA6IG51bGw7XG4gICAgY29uc3QgY2xhc3NHcmFwaFFMVXBkYXRlVHlwZUZpZWxkcyA9XG4gICAgICBpc1VwZGF0ZUVuYWJsZWQgJiYgY2xhc3NHcmFwaFFMVXBkYXRlVHlwZSA/IGNsYXNzR3JhcGhRTFVwZGF0ZVR5cGUuZ2V0RmllbGRzKCkgOiBudWxsO1xuICAgIGNvbnN0IHByb21pc2VzID0gT2JqZWN0LmtleXMoZmllbGRzKS5tYXAoYXN5bmMgZmllbGQgPT4ge1xuICAgICAgbGV0IGlucHV0VHlwZUZpZWxkO1xuICAgICAgaWYgKGlucHV0VHlwZSA9PT0gJ2NyZWF0ZScgJiYgY2xhc3NHcmFwaFFMQ3JlYXRlVHlwZUZpZWxkcykge1xuICAgICAgICBpbnB1dFR5cGVGaWVsZCA9IGNsYXNzR3JhcGhRTENyZWF0ZVR5cGVGaWVsZHNbZmllbGRdO1xuICAgICAgfSBlbHNlIGlmIChjbGFzc0dyYXBoUUxVcGRhdGVUeXBlRmllbGRzKSB7XG4gICAgICAgIGlucHV0VHlwZUZpZWxkID0gY2xhc3NHcmFwaFFMVXBkYXRlVHlwZUZpZWxkc1tmaWVsZF07XG4gICAgICB9XG4gICAgICBpZiAoaW5wdXRUeXBlRmllbGQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VGaWVsZFR5cGUgPSBwYXJzZUNsYXNzLmZpZWxkc1tmaWVsZF0udHlwZTtcbiAgICAgICAgc3dpdGNoIChwYXJzZUZpZWxkVHlwZSkge1xuICAgICAgICAgIGNhc2UgJ0dlb1BvaW50JzpcbiAgICAgICAgICAgIGlmIChmaWVsZHNbZmllbGRdID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIGZpZWxkc1tmaWVsZF0gPSB7IF9fb3A6ICdEZWxldGUnIH07XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmllbGRzW2ZpZWxkXSA9IHRyYW5zZm9ybWVycy5nZW9Qb2ludChmaWVsZHNbZmllbGRdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ1BvbHlnb24nOlxuICAgICAgICAgICAgaWYgKGZpZWxkc1tmaWVsZF0gPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgZmllbGRzW2ZpZWxkXSA9IHsgX19vcDogJ0RlbGV0ZScgfTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWVsZHNbZmllbGRdID0gdHJhbnNmb3JtZXJzLnBvbHlnb24oZmllbGRzW2ZpZWxkXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdGaWxlJzpcbiAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gdXNlIHRoZSBvcmlnaW5hbEZpZWxkcyB0byBoYW5kbGUgdGhlIGZpbGUgdXBsb2FkXG4gICAgICAgICAgICAvLyBzaW5jZSBmaWVsZHMgYXJlIGEgZGVlcGNvcHkgYW5kIGRvIG5vdCBrZWVwIHRoZSBmaWxlIG9iamVjdFxuICAgICAgICAgICAgZmllbGRzW2ZpZWxkXSA9IGF3YWl0IHRyYW5zZm9ybWVycy5maWxlKG9yaWdpbmFsRmllbGRzW2ZpZWxkXSwgcmVxKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ1JlbGF0aW9uJzpcbiAgICAgICAgICAgIGZpZWxkc1tmaWVsZF0gPSBhd2FpdCB0cmFuc2Zvcm1lcnMucmVsYXRpb24oXG4gICAgICAgICAgICAgIHBhcnNlQ2xhc3MuZmllbGRzW2ZpZWxkXS50YXJnZXRDbGFzcyxcbiAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgIGZpZWxkc1tmaWVsZF0sXG4gICAgICAgICAgICAgIG9yaWdpbmFsRmllbGRzW2ZpZWxkXSxcbiAgICAgICAgICAgICAgcGFyc2VHcmFwaFFMU2NoZW1hLFxuICAgICAgICAgICAgICByZXFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdQb2ludGVyJzpcbiAgICAgICAgICAgIGlmIChmaWVsZHNbZmllbGRdID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIGZpZWxkc1tmaWVsZF0gPSB7IF9fb3A6ICdEZWxldGUnIH07XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmllbGRzW2ZpZWxkXSA9IGF3YWl0IHRyYW5zZm9ybWVycy5wb2ludGVyKFxuICAgICAgICAgICAgICBwYXJzZUNsYXNzLmZpZWxkc1tmaWVsZF0udGFyZ2V0Q2xhc3MsXG4gICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICBmaWVsZHNbZmllbGRdLFxuICAgICAgICAgICAgICBvcmlnaW5hbEZpZWxkc1tmaWVsZF0sXG4gICAgICAgICAgICAgIHBhcnNlR3JhcGhRTFNjaGVtYSxcbiAgICAgICAgICAgICAgcmVxXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmIChmaWVsZHNbZmllbGRdID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIGZpZWxkc1tmaWVsZF0gPSB7IF9fb3A6ICdEZWxldGUnIH07XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgIGlmIChmaWVsZHMuQUNMKSB7IGZpZWxkcy5BQ0wgPSB0cmFuc2Zvcm1lcnMuQUNMKGZpZWxkcy5BQ0wpOyB9XG4gIH1cbiAgcmV0dXJuIGZpZWxkcztcbn07XG5cbmNvbnN0IHRyYW5zZm9ybWVycyA9IHtcbiAgZmlsZTogYXN5bmMgKGlucHV0LCB7IGNvbmZpZyB9KSA9PiB7XG4gICAgaWYgKGlucHV0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4geyBfX29wOiAnRGVsZXRlJyB9O1xuICAgIH1cbiAgICBjb25zdCB7IGZpbGUsIHVwbG9hZCB9ID0gaW5wdXQ7XG4gICAgaWYgKHVwbG9hZCkge1xuICAgICAgY29uc3QgeyBmaWxlSW5mbyB9ID0gYXdhaXQgaGFuZGxlVXBsb2FkKHVwbG9hZCwgY29uZmlnKTtcbiAgICAgIHJldHVybiB7IC4uLmZpbGVJbmZvLCBfX3R5cGU6ICdGaWxlJyB9O1xuICAgIH0gZWxzZSBpZiAoZmlsZSAmJiBmaWxlLm5hbWUpIHtcbiAgICAgIGlmIChmaWxlLnVybCkge1xuICAgICAgICBjb25zdCB7IHZhbGlkYXRlRmlsZVVybCB9ID0gcmVxdWlyZSgnLi4vLi4vRmlsZVVybFZhbGlkYXRvcicpO1xuICAgICAgICB2YWxpZGF0ZUZpbGVVcmwoZmlsZS51cmwsIGNvbmZpZyk7XG4gICAgICB9XG4gICAgICByZXR1cm4geyBuYW1lOiBmaWxlLm5hbWUsIF9fdHlwZTogJ0ZpbGUnLCB1cmw6IGZpbGUudXJsIH07XG4gICAgfVxuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsICdJbnZhbGlkIGZpbGUgdXBsb2FkLicpO1xuICB9LFxuICBwb2x5Z29uOiB2YWx1ZSA9PiAoe1xuICAgIF9fdHlwZTogJ1BvbHlnb24nLFxuICAgIGNvb3JkaW5hdGVzOiB2YWx1ZS5tYXAoZ2VvUG9pbnQgPT4gW2dlb1BvaW50LmxhdGl0dWRlLCBnZW9Qb2ludC5sb25naXR1ZGVdKSxcbiAgfSksXG4gIGdlb1BvaW50OiB2YWx1ZSA9PiAoe1xuICAgIC4uLnZhbHVlLFxuICAgIF9fdHlwZTogJ0dlb1BvaW50JyxcbiAgfSksXG4gIEFDTDogdmFsdWUgPT4ge1xuICAgIGNvbnN0IHBhcnNlQUNMID0ge307XG4gICAgaWYgKHZhbHVlLnB1YmxpYykge1xuICAgICAgcGFyc2VBQ0xbJyonXSA9IHtcbiAgICAgICAgcmVhZDogdmFsdWUucHVibGljLnJlYWQsXG4gICAgICAgIHdyaXRlOiB2YWx1ZS5wdWJsaWMud3JpdGUsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAodmFsdWUudXNlcnMpIHtcbiAgICAgIHZhbHVlLnVzZXJzLmZvckVhY2gocnVsZSA9PiB7XG4gICAgICAgIGNvbnN0IGdsb2JhbElkT2JqZWN0ID0gZnJvbUdsb2JhbElkKHJ1bGUudXNlcklkKTtcbiAgICAgICAgaWYgKGdsb2JhbElkT2JqZWN0LnR5cGUgPT09ICdfVXNlcicpIHtcbiAgICAgICAgICBydWxlLnVzZXJJZCA9IGdsb2JhbElkT2JqZWN0LmlkO1xuICAgICAgICB9XG4gICAgICAgIHBhcnNlQUNMW3J1bGUudXNlcklkXSA9IHtcbiAgICAgICAgICByZWFkOiBydWxlLnJlYWQsXG4gICAgICAgICAgd3JpdGU6IHJ1bGUud3JpdGUsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHZhbHVlLnJvbGVzKSB7XG4gICAgICB2YWx1ZS5yb2xlcy5mb3JFYWNoKHJ1bGUgPT4ge1xuICAgICAgICBwYXJzZUFDTFtgcm9sZToke3J1bGUucm9sZU5hbWV9YF0gPSB7XG4gICAgICAgICAgcmVhZDogcnVsZS5yZWFkLFxuICAgICAgICAgIHdyaXRlOiBydWxlLndyaXRlLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUFDTDtcbiAgfSxcbiAgcmVsYXRpb246IGFzeW5jIChcbiAgICB0YXJnZXRDbGFzcyxcbiAgICBmaWVsZCxcbiAgICB2YWx1ZSxcbiAgICBvcmlnaW5hbFZhbHVlLFxuICAgIHBhcnNlR3JhcGhRTFNjaGVtYSxcbiAgICB7IGNvbmZpZywgYXV0aCwgaW5mbyB9XG4gICkgPT4ge1xuICAgIGlmIChPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwKVxuICAgIHsgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9QT0lOVEVSLFxuICAgICAgYFlvdSBuZWVkIHRvIHByb3ZpZGUgYXQgbGVhc3Qgb25lIG9wZXJhdGlvbiBvbiB0aGUgcmVsYXRpb24gbXV0YXRpb24gb2YgZmllbGQgJHtmaWVsZH1gXG4gICAgKTsgfVxuXG4gICAgY29uc3Qgb3AgPSB7XG4gICAgICBfX29wOiAnQmF0Y2gnLFxuICAgICAgb3BzOiBbXSxcbiAgICB9O1xuICAgIGxldCBuZXN0ZWRPYmplY3RzVG9BZGQgPSBbXTtcblxuICAgIGlmICh2YWx1ZS5jcmVhdGVBbmRBZGQpIHtcbiAgICAgIG5lc3RlZE9iamVjdHNUb0FkZCA9IChcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgdmFsdWUuY3JlYXRlQW5kQWRkLm1hcChhc3luYyAoaW5wdXQsIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlRmllbGRzID0gYXdhaXQgdHJhbnNmb3JtVHlwZXMoJ2NyZWF0ZScsIGlucHV0LCB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogdGFyZ2V0Q2xhc3MsXG4gICAgICAgICAgICAgIG9yaWdpbmFsRmllbGRzOiBvcmlnaW5hbFZhbHVlLmNyZWF0ZUFuZEFkZFtpXSxcbiAgICAgICAgICAgICAgcGFyc2VHcmFwaFFMU2NoZW1hLFxuICAgICAgICAgICAgICByZXE6IHsgY29uZmlnLCBhdXRoLCBpbmZvIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBvYmplY3RzTXV0YXRpb25zLmNyZWF0ZU9iamVjdCh0YXJnZXRDbGFzcywgcGFyc2VGaWVsZHMsIGNvbmZpZywgYXV0aCwgaW5mbyk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKS5tYXAob2JqZWN0ID0+ICh7XG4gICAgICAgIF9fdHlwZTogJ1BvaW50ZXInLFxuICAgICAgICBjbGFzc05hbWU6IHRhcmdldENsYXNzLFxuICAgICAgICBvYmplY3RJZDogb2JqZWN0Lm9iamVjdElkLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZS5hZGQgfHwgbmVzdGVkT2JqZWN0c1RvQWRkLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICghdmFsdWUuYWRkKSB7IHZhbHVlLmFkZCA9IFtdOyB9XG4gICAgICB2YWx1ZS5hZGQgPSB2YWx1ZS5hZGQubWFwKGlucHV0ID0+IHtcbiAgICAgICAgY29uc3QgZ2xvYmFsSWRPYmplY3QgPSBmcm9tR2xvYmFsSWQoaW5wdXQpO1xuICAgICAgICBpZiAoZ2xvYmFsSWRPYmplY3QudHlwZSA9PT0gdGFyZ2V0Q2xhc3MpIHtcbiAgICAgICAgICBpbnB1dCA9IGdsb2JhbElkT2JqZWN0LmlkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgX190eXBlOiAnUG9pbnRlcicsXG4gICAgICAgICAgY2xhc3NOYW1lOiB0YXJnZXRDbGFzcyxcbiAgICAgICAgICBvYmplY3RJZDogaW5wdXQsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIG9wLm9wcy5wdXNoKHtcbiAgICAgICAgX19vcDogJ0FkZFJlbGF0aW9uJyxcbiAgICAgICAgb2JqZWN0czogWy4uLnZhbHVlLmFkZCwgLi4ubmVzdGVkT2JqZWN0c1RvQWRkXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZS5yZW1vdmUpIHtcbiAgICAgIG9wLm9wcy5wdXNoKHtcbiAgICAgICAgX19vcDogJ1JlbW92ZVJlbGF0aW9uJyxcbiAgICAgICAgb2JqZWN0czogdmFsdWUucmVtb3ZlLm1hcChpbnB1dCA9PiB7XG4gICAgICAgICAgY29uc3QgZ2xvYmFsSWRPYmplY3QgPSBmcm9tR2xvYmFsSWQoaW5wdXQpO1xuICAgICAgICAgIGlmIChnbG9iYWxJZE9iamVjdC50eXBlID09PSB0YXJnZXRDbGFzcykge1xuICAgICAgICAgICAgaW5wdXQgPSBnbG9iYWxJZE9iamVjdC5pZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIF9fdHlwZTogJ1BvaW50ZXInLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiB0YXJnZXRDbGFzcyxcbiAgICAgICAgICAgIG9iamVjdElkOiBpbnB1dCxcbiAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gb3A7XG4gIH0sXG4gIHBvaW50ZXI6IGFzeW5jIChcbiAgICB0YXJnZXRDbGFzcyxcbiAgICBmaWVsZCxcbiAgICB2YWx1ZSxcbiAgICBvcmlnaW5hbFZhbHVlLFxuICAgIHBhcnNlR3JhcGhRTFNjaGVtYSxcbiAgICB7IGNvbmZpZywgYXV0aCwgaW5mbyB9XG4gICkgPT4ge1xuICAgIGlmIChPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID4gMSB8fCBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwKVxuICAgIHsgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9QT0lOVEVSLFxuICAgICAgYFlvdSBuZWVkIHRvIHByb3ZpZGUgbGluayBPUiBjcmVhdGVMaW5rIG9uIHRoZSBwb2ludGVyIG11dGF0aW9uIG9mIGZpZWxkICR7ZmllbGR9YFxuICAgICk7IH1cblxuICAgIGxldCBuZXN0ZWRPYmplY3RUb0FkZDtcbiAgICBpZiAodmFsdWUuY3JlYXRlQW5kTGluaykge1xuICAgICAgY29uc3QgcGFyc2VGaWVsZHMgPSBhd2FpdCB0cmFuc2Zvcm1UeXBlcygnY3JlYXRlJywgdmFsdWUuY3JlYXRlQW5kTGluaywge1xuICAgICAgICBjbGFzc05hbWU6IHRhcmdldENsYXNzLFxuICAgICAgICBwYXJzZUdyYXBoUUxTY2hlbWEsXG4gICAgICAgIG9yaWdpbmFsRmllbGRzOiBvcmlnaW5hbFZhbHVlLmNyZWF0ZUFuZExpbmssXG4gICAgICAgIHJlcTogeyBjb25maWcsIGF1dGgsIGluZm8gfSxcbiAgICAgIH0pO1xuICAgICAgbmVzdGVkT2JqZWN0VG9BZGQgPSBhd2FpdCBvYmplY3RzTXV0YXRpb25zLmNyZWF0ZU9iamVjdChcbiAgICAgICAgdGFyZ2V0Q2xhc3MsXG4gICAgICAgIHBhcnNlRmllbGRzLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGF1dGgsXG4gICAgICAgIGluZm9cbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBfX3R5cGU6ICdQb2ludGVyJyxcbiAgICAgICAgY2xhc3NOYW1lOiB0YXJnZXRDbGFzcyxcbiAgICAgICAgb2JqZWN0SWQ6IG5lc3RlZE9iamVjdFRvQWRkLm9iamVjdElkLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHZhbHVlLmxpbmspIHtcbiAgICAgIGxldCBvYmplY3RJZCA9IHZhbHVlLmxpbms7XG4gICAgICBjb25zdCBnbG9iYWxJZE9iamVjdCA9IGZyb21HbG9iYWxJZChvYmplY3RJZCk7XG4gICAgICBpZiAoZ2xvYmFsSWRPYmplY3QudHlwZSA9PT0gdGFyZ2V0Q2xhc3MpIHtcbiAgICAgICAgb2JqZWN0SWQgPSBnbG9iYWxJZE9iamVjdC5pZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIF9fdHlwZTogJ1BvaW50ZXInLFxuICAgICAgICBjbGFzc05hbWU6IHRhcmdldENsYXNzLFxuICAgICAgICBvYmplY3RJZCxcbiAgICAgIH07XG4gICAgfVxuICB9LFxufTtcblxuZXhwb3J0IHsgdHJhbnNmb3JtVHlwZXMgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsS0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsYUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsZUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsZ0JBQUEsR0FBQUMs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