{"version":3,"file":"skyux-sdk-testing.mjs","sources":["../tmp-esm2022/lib/a11y/a11y-analyzer.js","../tmp-esm2022/lib/matchers/matchers.js","../tmp-esm2022/lib/query-predicates/sky-by.js","../tmp-esm2022/lib/test-utility/test-utility.js","../tmp-esm2022/skyux-sdk-testing.js"],"sourcesContent":["import axe from 'axe-core';\nfunction parseMessage(violations) {\n    let message = 'Expected element to pass accessibility checks.\\n\\n';\n    violations.forEach((violation) => {\n        const wcagTags = violation.tags\n            .filter((tag) => tag.match(/wcag\\d{3}|^best*/gi))\n            .join(', ');\n        const nodeResults = violation.nodes.filter(filterViolationNodeResults(violation));\n        const html = nodeResults.reduce((accumulator, node) => {\n            const related = [...node.all, ...node.none, ...node.any]\n                .map((checkResult) => {\n                const relatedNodes = checkResult.relatedNodes || [];\n                let relatedHtml = relatedNodes\n                    .map((relatedNode) => relatedNode.html.split(`\\n`).join(`\\n      `))\n                    .join(`\\n\\n      `);\n                if (relatedHtml) {\n                    relatedHtml = `\\n    Related Nodes:\\n      ${relatedHtml}`;\n                }\n                return `  - [${checkResult.id}] ${checkResult.message}${relatedHtml}`;\n            })\n                .join(`\\n`);\n            const newInformation = [\n                node.failureSummary\n                    ? `[${node.impact?.toUpperCase()}] ${node.failureSummary\n                        .split(/\\n */g)\n                        .join(`\\n  - `)}`\n                    : '',\n                node.ancestry ? `Ancestry: ${node.ancestry.join(', ')}` : '',\n                `Target: ${node.target.join(', ')}`,\n                node.html ? `HTML: ${node.html}` : '',\n                related,\n            ].filter((info) => !!info);\n            return `${accumulator}\\n\\n${newInformation.join(`\\n`)}`;\n        }, '');\n        const error = [\n            `aXe - [Rule: '${violation.id}'] ${violation.help} - WCAG: ${wcagTags}`,\n            `       Get help at: ${violation.helpUrl}\\n`,\n            `${html}\\n\\n`,\n        ].join('\\n');\n        message += `${error}\\n`;\n    });\n    return message;\n}\nfunction filterViolationNodeResults(result) {\n    if ([\n        'aria-dialog-name', // AG Grid adds role=\"dialog\" to its popup editor container, but doesn't set title, aria-label, or aria-labelledby\n        'aria-hidden-focus', // AG Grid uses aria-hidden on elements before they are ready\n        'aria-required-children', // AG Grid uses some aria-hidden elements that axe doesn't like\n        'aria-valid-attr', // AG Grid uses aria-description, which is still in draft\n        'scrollable-region-focusable', // AG Grid handles scrolling\n    ].includes(result.id)) {\n        return (node) => !node.html.includes('class=\"ag-');\n    }\n    else if (result.id === 'aria-allowed-role') {\n        const fieldsetRadiogroupRegex = new RegExp(/<fieldset[^>]+role=\"radiogroup\"/);\n        return (node) => !fieldsetRadiogroupRegex.test(node.html);\n    }\n    else {\n        return () => true;\n    }\n}\nexport class SkyA11yAnalyzer {\n    static { this.analyzer = axe; }\n    static run(element, config) {\n        if (element === undefined) {\n            throw new Error('No element was specified for accessibility checking.');\n        }\n        SkyA11yAnalyzer.analyzer.reset();\n        const defaults = {\n            rules: {},\n        };\n        // Disable autocomplete-valid\n        // Chrome browsers ignore autocomplete=\"off\", which forces us to use non-standard values\n        // to disable the browser's native autofill.\n        // https://bugs.chromium.org/p/chromium/issues/detail?id=468153#c164\n        defaults.rules['autocomplete-valid'] = { enabled: false };\n        return new Promise((resolve, reject) => {\n            const callback = (error, results) => {\n                if (error?.message) {\n                    reject(error);\n                    return;\n                }\n                const violations = results.violations.filter((violation) => violation.nodes.some(filterViolationNodeResults(violation)));\n                if (violations.length > 0) {\n                    const message = parseMessage(violations);\n                    reject(new Error(message));\n                }\n                resolve();\n            };\n            SkyA11yAnalyzer.analyzer.run(element, { ...defaults, ...config }, callback);\n        });\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYTExeS1hbmFseXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3Rlc3Rpbmcvc3JjL2xpYi9hMTF5L2ExMXktYW5hbHl6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxHQUFHLE1BQU0sVUFBVSxDQUFDO0FBSTNCLFNBQVMsWUFBWSxDQUFDLFVBQXdCO0lBQzVDLElBQUksT0FBTyxHQUFHLG9EQUFvRCxDQUFDO0lBRW5FLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtRQUMvQixNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsSUFBSTthQUM1QixNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQzthQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFZCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FDeEMsMEJBQTBCLENBQUMsU0FBUyxDQUFDLENBQ3RDLENBQUM7UUFDRixNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsTUFBTSxDQUM3QixDQUFDLFdBQW1CLEVBQUUsSUFBb0IsRUFBRSxFQUFFO1lBQzVDLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7aUJBQ3JELEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUNuQixNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztnQkFDcEQsSUFBSSxXQUFXLEdBQUcsWUFBWTtxQkFDM0IsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FDbkIsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENB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R0FBRyxRQUFRLEVBQUUsR0FBRyxNQUFNLEVBQUUsRUFDMUIsUUFBUSxDQUNULENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXhlIGZyb20gJ2F4ZS1jb3JlJztcblxuaW1wb3J0IHsgU2t5QTExeUFuYWx5emVyQ29uZmlnIH0gZnJvbSAnLi9hMTF5LWFuYWx5emVyLWNvbmZpZyc7XG5cbmZ1bmN0aW9uIHBhcnNlTWVzc2FnZSh2aW9sYXRpb25zOiBheGUuUmVzdWx0W10pOiBzdHJpbmcge1xuICBsZXQgbWVzc2FnZSA9ICdFeHBlY3RlZCBlbGVtZW50IHRvIHBhc3MgYWNjZXNzaWJpbGl0eSBjaGVja3MuXFxuXFxuJztcblxuICB2aW9sYXRpb25zLmZvckVhY2goKHZpb2xhdGlvbikgPT4ge1xuICAgIGNvbnN0IHdjYWdUYWdzID0gdmlvbGF0aW9uLnRhZ3NcbiAgICAgIC5maWx0ZXIoKHRhZykgPT4gdGFnLm1hdGNoKC93Y2FnXFxkezN9fF5iZXN0Ki9naSkpXG4gICAgICAuam9pbignLCAnKTtcblxuICAgIGNvbnN0IG5vZGVSZXN1bHRzID0gdmlvbGF0aW9uLm5vZGVzLmZpbHRlcihcbiAgICAgIGZpbHRlclZpb2xhdGlvbk5vZGVSZXN1bHRzKHZpb2xhdGlvbiksXG4gICAgKTtcbiAgICBjb25zdCBodG1sID0gbm9kZVJlc3VsdHMucmVkdWNlKFxuICAgICAgKGFjY3VtdWxhdG9yOiBzdHJpbmcsIG5vZGU6IGF4ZS5Ob2RlUmVzdWx0KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlbGF0ZWQgPSBbLi4ubm9kZS5hbGwsIC4uLm5vZGUubm9uZSwgLi4ubm9kZS5hbnldXG4gICAgICAgICAgLm1hcCgoY2hlY2tSZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlbGF0ZWROb2RlcyA9IGNoZWNrUmVzdWx0LnJlbGF0ZWROb2RlcyB8fCBbXTtcbiAgICAgICAgICAgIGxldCByZWxhdGVkSHRtbCA9IHJlbGF0ZWROb2Rlc1xuICAgICAgICAgICAgICAubWFwKChyZWxhdGVkTm9kZSkgPT5cbiAgICAgICAgICAgICAgICByZWxhdGVkTm9kZS5odG1sLnNwbGl0KGBcXG5gKS5qb2luKGBcXG4gICAgICBgKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAuam9pbihgXFxuXFxuICAgICAgYCk7XG4gICAgICAgICAgICBpZiAocmVsYXRlZEh0bWwpIHtcbiAgICAgICAgICAgICAgcmVsYXRlZEh0bWwgPSBgXFxuICAgIFJlbGF0ZWQgTm9kZXM6XFxuICAgICAgJHtyZWxhdGVkSHRtbH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGAgIC0gWyR7Y2hlY2tSZXN1bHQuaWR9XSAke2NoZWNrUmVzdWx0Lm1lc3NhZ2V9JHtyZWxhdGVkSHRtbH1gO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmpvaW4oYFxcbmApO1xuICAgICAgICBjb25zdCBuZXdJbmZvcm1hdGlvbjogc3RyaW5nW10gPSBbXG4gICAgICAgICAgbm9kZS5mYWlsdXJlU3VtbWFyeVxuICAgICAgICAgICAgPyBgWyR7bm9kZS5pbXBhY3Q/LnRvVXBwZXJDYXNlKCl9XSAke25vZGUuZmFpbHVyZVN1bW1hcnlcbiAgICAgICAgICAgICAgICAuc3BsaXQoL1xcbiAqL2cpXG4gICAgICAgICAgICAgICAgLmpvaW4oYFxcbiAgLSBgKX1gXG4gICAgICAgICAgICA6ICcnLFxuICAgICAgICAgIG5vZGUuYW5jZXN0cnkgPyBgQW5jZXN0cnk6ICR7bm9kZS5hbmNlc3RyeS5qb2luKCcsICcpfWAgOiAnJyxcbiAgICAgICAgICBgVGFyZ2V0OiAke25vZGUudGFyZ2V0LmpvaW4oJywgJyl9YCxcbiAgICAgICAgICBub2RlLmh0bWwgPyBgSFRNTDogJHtub2RlLmh0bWx9YCA6ICcnLFxuICAgICAgICAgIHJlbGF0ZWQsXG4gICAgICAgIF0uZmlsdGVyKChpbmZvKSA9PiAhIWluZm8pO1xuXG4gICAgICAgIHJldHVybiBgJHthY2N1bXVsYXRvcn1cXG5cXG4ke25ld0luZm9ybWF0aW9uLmpvaW4oYFxcbmApfWA7XG4gICAgICB9LFxuICAgICAgJycsXG4gICAgKTtcblxuICAgIGNvbnN0IGVycm9yID0gW1xuICAgICAgYGFYZSAtIFtSdWxlOiAnJHt2aW9sYXRpb24uaWR9J10gJHt2aW9sYXRpb24uaGVscH0gLSBXQ0FHOiAke3djYWdUYWdzfWAsXG4gICAgICBgICAgICAgIEdldCBoZWxwIGF0OiAke3Zpb2xhdGlvbi5oZWxwVXJsfVxcbmAsXG4gICAgICBgJHtodG1sfVxcblxcbmAsXG4gICAgXS5qb2luKCdcXG4nKTtcblxuICAgIG1lc3NhZ2UgKz0gYCR7ZXJyb3J9XFxuYDtcbiAgfSk7XG5cbiAgcmV0dXJuIG1lc3NhZ2U7XG59XG5cbmZ1bmN0aW9uIGZpbHRlclZpb2xhdGlvbk5vZGVSZXN1bHRzKFxuICByZXN1bHQ6IGF4ZS5SZXN1bHQsXG4pOiAobm9kZTogYXhlLk5vZGVSZXN1bHQpID0+IGJvb2xlYW4ge1xuICBpZiAoXG4gICAgW1xuICAgICAgJ2FyaWEtZGlhbG9nLW5hbWUnLCAvLyBBRyBHcmlkIGFkZHMgcm9sZT1cImRpYWxvZ1wiIHRvIGl0cyBwb3B1cCBlZGl0b3IgY29udGFpbmVyLCBidXQgZG9lc24ndCBzZXQgdGl0bGUsIGFyaWEtbGFiZWwsIG9yIGFyaWEtbGFiZWxsZWRieVxuICAgICAgJ2FyaWEtaGlkZGVuLWZvY3VzJywgLy8gQUcgR3JpZCB1c2VzIGFyaWEtaGlkZGVuIG9uIGVsZW1lbnRzIGJlZm9yZSB0aGV5IGFyZSByZWFkeVxuICAgICAgJ2FyaWEtcmVxdWlyZWQtY2hpbGRyZW4nLCAvLyBBRyBHcmlkIHVzZXMgc29tZSBhcmlhLWhpZGRlbiBlbGVtZW50cyB0aGF0IGF4ZSBkb2Vzbid0IGxpa2VcbiAgICAgICdhcmlhLXZhbGlkLWF0dHInLCAvLyBBRyBHcmlkIHVzZXMgYXJpYS1kZXNjcmlwdGlvbiwgd2hpY2ggaXMgc3RpbGwgaW4gZHJhZnRcbiAgICAgICdzY3JvbGxhYmxlLXJlZ2lvbi1mb2N1c2FibGUnLCAvLyBBRyBHcmlkIGhhbmRsZXMgc2Nyb2xsaW5nXG4gICAgXS5pbmNsdWRlcyhyZXN1bHQuaWQpXG4gICkge1xuICAgIHJldHVybiAobm9kZTogYXhlLk5vZGVSZXN1bHQpID0+ICFub2RlLmh0bWwuaW5jbHVkZXMoJ2NsYXNzPVwiYWctJyk7XG4gIH0gZWxzZSBpZiAocmVzdWx0LmlkID09PSAnYXJpYS1hbGxvd2VkLXJvbGUnKSB7XG4gICAgY29uc3QgZmllbGRzZXRSYWRpb2dyb3VwUmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgLzxmaWVsZHNldFtePl0rcm9sZT1cInJhZGlvZ3JvdXBcIi8sXG4gICAgKTtcbiAgICByZXR1cm4gKG5vZGU6IGF4ZS5Ob2RlUmVzdWx0KSA9PiAhZmllbGRzZXRSYWRpb2dyb3VwUmVnZXgudGVzdChub2RlLmh0bWwpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAoKSA9PiB0cnVlO1xuICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTa3lBMTF5QW5hbHl6ZXIge1xuICBwcml2YXRlIHN0YXRpYyBhbmFseXplciA9IGF4ZTtcblxuICBwdWJsaWMgc3RhdGljIHJ1bihcbiAgICBlbGVtZW50PzogYXhlLkVsZW1lbnRDb250ZXh0LFxuICAgIGNvbmZpZz86IFNreUExMXlBbmFseXplckNvbmZpZyxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGVsZW1lbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBlbGVtZW50IHdhcyBzcGVjaWZpZWQgZm9yIGFjY2Vzc2liaWxpdHkgY2hlY2tpbmcuJyk7XG4gICAgfVxuXG4gICAgU2t5QTExeUFuYWx5emVyLmFuYWx5emVyLnJlc2V0KCk7XG5cbiAgICBjb25zdCBkZWZhdWx0czogU2t5QTExeUFuYWx5emVyQ29uZmlnID0ge1xuICAgICAgcnVsZXM6IHt9LFxuICAgIH07XG5cbiAgICAvLyBEaXNhYmxlIGF1dG9jb21wbGV0ZS12YWxpZFxuICAgIC8vIENocm9tZSBicm93c2VycyBpZ25vcmUgYXV0b2NvbXBsZXRlPVwib2ZmXCIsIHdoaWNoIGZvcmNlcyB1cyB0byB1c2Ugbm9uLXN0YW5kYXJkIHZhbHVlc1xuICAgIC8vIHRvIGRpc2FibGUgdGhlIGJyb3dzZXIncyBuYXRpdmUgYXV0b2ZpbGwuXG4gICAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDY4MTUzI2MxNjRcbiAgICBkZWZhdWx0cy5ydWxlc1snYXV0b2NvbXBsZXRlLXZhbGlkJ10gPSB7IGVuYWJsZWQ6IGZhbHNlIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2s6IGF4ZS5SdW5DYWxsYmFjayA9IChlcnJvciwgcmVzdWx0cykgPT4ge1xuICAgICAgICBpZiAoZXJyb3I/Lm1lc3NhZ2UpIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZpb2xhdGlvbnMgPSByZXN1bHRzLnZpb2xhdGlvbnMuZmlsdGVyKCh2aW9sYXRpb24pID0+XG4gICAgICAgICAgdmlvbGF0aW9uLm5vZGVzLnNvbWUoZmlsdGVyVmlvbGF0aW9uTm9kZVJlc3VsdHModmlvbGF0aW9uKSksXG4gICAgICAgICk7XG4gICAgICAgIGlmICh2aW9sYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gcGFyc2VNZXNzYWdlKHZpb2xhdGlvbnMpO1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IobWVzc2FnZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfTtcblxuICAgICAgU2t5QTExeUFuYWx5emVyLmFuYWx5emVyLnJ1bihcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgeyAuLi5kZWZhdWx0cywgLi4uY29uZmlnIH0sXG4gICAgICAgIGNhbGxiYWNrLFxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxufVxuIl19","import { TestBed } from '@angular/core/testing';\nimport { SkyAppResourcesService, SkyLibResourcesService } from '@skyux/i18n';\nimport { firstValueFrom } from 'rxjs';\nimport { SkyA11yAnalyzer } from '../a11y/a11y-analyzer';\nconst windowRef = window;\nfunction getResources(name, args = []) {\n    const resourcesService = TestBed.inject(SkyAppResourcesService);\n    return firstValueFrom(resourcesService.getString(name, ...args));\n}\nfunction getLibResources(name, args = []) {\n    const resourcesService = TestBed.inject(SkyLibResourcesService);\n    return firstValueFrom(resourcesService.getString(name, ...args));\n}\nfunction isTemplateMatch(sample, template) {\n    let matches = true;\n    const templateTokens = template.split(new RegExp('{\\\\d+}')).reverse();\n    let currentToken = templateTokens.pop();\n    let lastPosition = 0;\n    while (currentToken !== undefined && matches) {\n        const tokenPosition = sample.indexOf(currentToken, lastPosition);\n        matches = tokenPosition >= lastPosition;\n        lastPosition = tokenPosition + currentToken.length;\n        currentToken = templateTokens.pop();\n    }\n    return matches;\n}\nconst matchers = {\n    toBeAccessible() {\n        return {\n            compare(element, callback, config) {\n                SkyA11yAnalyzer.run(element, config)\n                    .then(() => {\n                    /*istanbul ignore else*/\n                    if (callback) {\n                        callback();\n                    }\n                })\n                    .catch((err) => {\n                    windowRef.fail(err.message);\n                    /*istanbul ignore else*/\n                    if (callback) {\n                        callback();\n                    }\n                });\n                // Asynchronous matchers are currently unsupported, but\n                // the method above works to fail the specific test in the\n                // callback manually, if checks do not pass.\n                // ---\n                // A side effect of this technique is the matcher cannot be\n                // paired with a `.not.toBeAccessible` operator (since the returned\n                // result is always `true`). For this particular matcher,\n                // checking if an element is not accessible may be irrelevant.\n                return {\n                    message: '',\n                    pass: true,\n                };\n            },\n        };\n    },\n    toBeVisible() {\n        return {\n            compare(el, options) {\n                const defaults = {\n                    checkCssDisplay: true,\n                    checkCssVisibility: false,\n                    checkDimensions: false,\n                    checkExists: false,\n                };\n                const settings = { ...defaults, ...options };\n                const result = {\n                    pass: true,\n                    message: '',\n                };\n                if (settings.checkExists) {\n                    result.pass = !!el;\n                }\n                if (result.pass) {\n                    const computedStyle = window.getComputedStyle(el);\n                    if (settings.checkCssDisplay) {\n                        result.pass = computedStyle.display !== 'none';\n                    }\n                    if (settings.checkCssVisibility) {\n                        result.pass = computedStyle.visibility !== 'hidden';\n                    }\n                    if (settings.checkDimensions) {\n                        const box = el.getBoundingClientRect();\n                        result.pass = box.width > 0 && box.height > 0;\n                    }\n                }\n                result.message = result.pass\n                    ? 'Expected element to not be visible'\n                    : 'Expected element to be visible';\n                return result;\n            },\n        };\n    },\n    toExist() {\n        return {\n            compare(el) {\n                const result = {\n                    pass: false,\n                    message: '',\n                };\n                result.pass = !!el;\n                result.message = result.pass\n                    ? 'Expected element not to exist'\n                    : 'Expected element to exist';\n                return result;\n            },\n        };\n    },\n    toHaveCssClass() {\n        return {\n            compare(el, expectedClassName) {\n                const result = {\n                    pass: false,\n                    message: '',\n                };\n                if (expectedClassName.indexOf('.') === 0) {\n                    throw new Error('Please remove the leading dot from your class name.');\n                }\n                result.pass = el.classList.contains(expectedClassName);\n                result.message = result.pass\n                    ? `Expected element not to have CSS class \"${expectedClassName}\"`\n                    : `Expected element to have CSS class \"${expectedClassName}\"`;\n                return result;\n            },\n        };\n    },\n    toHaveStyle() {\n        return {\n            compare(el, expectedStyles) {\n                const message = [];\n                let hasFailure = false;\n                Object.keys(expectedStyles).forEach((styleName) => {\n                    const styles = windowRef.getComputedStyle(el);\n                    const actualStyle = styles[styleName];\n                    const expectedStyle = expectedStyles[styleName];\n                    if (actualStyle !== expectedStyle) {\n                        if (!hasFailure) {\n                            hasFailure = true;\n                        }\n                        message.push(`Expected element not to have CSS style \"${styleName}: ${expectedStyle}\"`);\n                    }\n                    else {\n                        message.push(`Expected element to have CSS style \"${styleName}: ${expectedStyle}\"`);\n                    }\n                    message.push(`Actual styles are: \"${styleName}: ${actualStyle}\"`);\n                });\n                const result = {\n                    pass: !hasFailure,\n                    message: message.join('\\n'),\n                };\n                return result;\n            },\n        };\n    },\n    toHaveText() {\n        return {\n            compare(el, expectedText, trimWhitespace = true) {\n                const result = {\n                    pass: false,\n                    message: '',\n                };\n                let actualText = el.textContent;\n                if (trimWhitespace) {\n                    actualText = actualText.trim();\n                }\n                result.pass = actualText === expectedText;\n                result.message = result.pass\n                    ? `Expected element's inner text \"${actualText}\" not to be: \"${expectedText}\"`\n                    : `Expected element's inner text to be: \"${expectedText}\"\\n` +\n                        `Actual element's inner text was: \"${actualText}\"`;\n                return result;\n            },\n        };\n    },\n    toEqualResourceText() {\n        return {\n            compare(actual, name, args, callback) {\n                void getResources(name, args).then((message) => {\n                    /*istanbul ignore else*/\n                    if (actual !== message) {\n                        windowRef.fail(`Expected \"${actual}\" to equal \"${message}\"`);\n                    }\n                    /*istanbul ignore else*/\n                    if (callback) {\n                        callback();\n                    }\n                });\n                // Asynchronous matchers are currently unsupported, but\n                // the method above works to fail the specific test in the\n                // callback manually, if checks do not pass.\n                // ---\n                // A side effect of this technique is the matcher cannot be\n                // paired with a `.not.toHaveResourceText` operator (since the returned\n                // result is always `true`).\n                return {\n                    message: '',\n                    pass: true,\n                };\n            },\n        };\n    },\n    toHaveResourceText() {\n        return {\n            compare(el, name, args, trimWhitespace = true, callback) {\n                let actual = el.textContent;\n                if (trimWhitespace) {\n                    actual = actual.trim();\n                }\n                void getResources(name, args).then((message) => {\n                    if (actual !== message) {\n                        windowRef.fail(`Expected element's inner text \"${el.textContent}\" to be \"${message}\"`);\n                    }\n                    /*istanbul ignore else*/\n                    if (callback) {\n                        callback();\n                    }\n                });\n                // Asynchronous matchers are currently unsupported, but\n                // the method above works to fail the specific test in the\n                // callback manually, if checks do not pass.\n                // ---\n                // A side effect of this technique is the matcher cannot be\n                // paired with a `.not.toHaveResourceText` operator (since the returned\n                // result is always `true`).\n                return {\n                    message: '',\n                    pass: true,\n                };\n            },\n        };\n    },\n    toMatchResourceTemplate() {\n        return {\n            compare(el, name, callback) {\n                const actual = el.textContent;\n                void getResources(name).then((message) => {\n                    if (!isTemplateMatch(actual, message)) {\n                        windowRef.fail(`Expected element's text \"${actual}\" to match \"${message}\"`);\n                    }\n                    /*istanbul ignore else*/\n                    if (callback) {\n                        callback();\n                    }\n                });\n                // Asynchronous matchers are currently unsupported, but\n                // the method above works to fail the specific test in the\n                // callback manually, if checks do not pass.\n                // ---\n                // A side effect of this technique is the matcher cannot be\n                // paired with a `.not.toHaveResourceText` operator (since the returned\n                // result is always `true`).\n                return {\n                    message: '',\n                    pass: true,\n                };\n            },\n        };\n    },\n};\nconst asyncMatchers = {\n    toBeAccessible() {\n        return {\n            compare(element, config) {\n                return new Promise((resolve) => {\n                    SkyA11yAnalyzer.run(element, config)\n                        .then(() => {\n                        resolve({\n                            pass: true,\n                        });\n                    })\n                        .catch((err) => {\n                        resolve({\n                            pass: false,\n                            message: err.message,\n                        });\n                    });\n                });\n            },\n        };\n    },\n    toEqualResourceText() {\n        return {\n            compare(actual, name, args) {\n                return getResources(name, args).then((message) => {\n                    if (actual === message) {\n                        return {\n                            pass: true,\n                        };\n                    }\n                    else {\n                        return {\n                            pass: false,\n                            message: `Expected \"${actual}\" to equal \"${message}\"`,\n                        };\n                    }\n                });\n            },\n        };\n    },\n    toEqualLibResourceText() {\n        return {\n            compare(actual, name, args) {\n                return getLibResources(name, args).then((message) => {\n                    if (actual === message) {\n                        return {\n                            pass: true,\n                        };\n                    }\n                    else {\n                        return {\n                            pass: false,\n                            message: `Expected \"${actual}\" to equal \"${message}\"`,\n                        };\n                    }\n                });\n            },\n        };\n    },\n    toHaveResourceText() {\n        return {\n            compare(element, name, args, trimWhitespace = true) {\n                return getResources(name, args).then((message) => {\n                    let actual = element.textContent;\n                    if (trimWhitespace) {\n                        actual = actual.trim();\n                    }\n                    if (actual === message) {\n                        return {\n                            pass: true,\n                        };\n                    }\n                    else {\n                        return {\n                            pass: false,\n                            message: `Expected element's inner text \"${actual}\" to be \"${message}\"`,\n                        };\n                    }\n                });\n            },\n        };\n    },\n    toHaveLibResourceText() {\n        return {\n            compare(element, name, args, trimWhitespace = true) {\n                return getLibResources(name, args).then((message) => {\n                    let actual = element.textContent;\n                    if (trimWhitespace) {\n                        actual = actual.trim();\n                    }\n                    if (actual === message) {\n                        return {\n                            pass: true,\n                        };\n                    }\n                    else {\n                        return {\n                            pass: false,\n                            message: `Expected element's inner text \"${actual}\" to be \"${message}\"`,\n                        };\n                    }\n                });\n            },\n        };\n    },\n    toMatchResourceTemplate() {\n        return {\n            compare(element, name) {\n                return getResources(name).then((message) => {\n                    const actual = element.textContent;\n                    if (isTemplateMatch(actual, message)) {\n                        return {\n                            pass: true,\n                        };\n                    }\n                    else {\n                        return {\n                            pass: false,\n                            message: `Expected element's text \"${actual}\" to match \"${message}\"`,\n                        };\n                    }\n                });\n            },\n        };\n    },\n    toMatchLibResourceTemplate() {\n        return {\n            compare(element, name) {\n                return getLibResources(name).then((message) => {\n                    const actual = element.textContent;\n                    if (isTemplateMatch(actual, message)) {\n                        return {\n                            pass: true,\n                        };\n                    }\n                    else {\n                        return {\n                            pass: false,\n                            message: `Expected element's text \"${actual}\" to match \"${message}\"`,\n                        };\n                    }\n                });\n            },\n        };\n    },\n};\nwindowRef.beforeEach(() => {\n    jasmine.addMatchers(matchers);\n    jasmine.addAsyncMatchers(asyncMatchers);\n});\n/**\n * Create an expectation for a spec.\n * @param actual Actual computed value to test expectations against.\n */\nexport function expect(actual) {\n    return windowRef.expect(actual);\n}\n/**\n * Create an async expectation for a spec.\n * @param actual Actual computed value to test expectations against.\n */\nexport function expectAsync(actual) {\n    return windowRef.expectAsync(actual);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0Y2hlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay90ZXN0aW5nL3NyYy9saWIvbWF0Y2hlcnMvbWF0Y2hlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUc3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXRDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUt4RCxNQUFNLFNBQVMsR0FBUSxNQUFNLENBQUM7QUFFOUIsU0FBUyxZQUFZLENBQUMsSUFBWSxFQUFFLE9BQWMsRUFBRTtJQUNsRCxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUNoRSxPQUFPLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNuRSxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsSUFBWSxFQUFFLE9BQWMsRUFBRTtJQUNyRCxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUNoRSxPQUFPLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNuRSxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsTUFBYyxFQUFFLFFBQWdCO0lBQ3ZELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztJQUNuQixNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENB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QUFDLEVBQUUsQ0FBQzt3QkFDckMsT0FBTzs0QkFDTCxJQUFJLEVBQUUsSUFBSTt5QkFDWCxDQUFDO29CQUNKLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixPQUFPOzRCQUNMLElBQUksRUFBRSxLQUFLOzRCQUNYLE9BQU8sRUFBRSw0QkFBNEIsTUFBTSxlQUFlLE9BQU8sR0FBRzt5QkFDckUsQ0FBQztvQkFDSixDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDO0NBQ0YsQ0FBQztBQUVGLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFO0lBQ3hCLE9BQU8sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDOUIsT0FBTyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQzFDLENBQUMsQ0FBQyxDQUFDO0FBMExIOzs7R0FHRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQUksTUFBUztJQUNqQyxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQ3pCLE1BQTBCO0lBRTFCLE9BQU8sU0FBUyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVzdEJlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvdGVzdGluZyc7XG5pbXBvcnQgeyBTa3lBcHBSZXNvdXJjZXNTZXJ2aWNlLCBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2kxOG4nO1xuXG5pbXBvcnQgYXhlIGZyb20gJ2F4ZS1jb3JlJztcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNreUExMXlBbmFseXplciB9IGZyb20gJy4uL2ExMXkvYTExeS1hbmFseXplcic7XG5pbXBvcnQgeyBTa3lBMTF5QW5hbHl6ZXJDb25maWcgfSBmcm9tICcuLi9hMTF5L2ExMXktYW5hbHl6ZXItY29uZmlnJztcblxuaW1wb3J0IHsgU2t5VG9CZVZpc2libGVPcHRpb25zIH0gZnJvbSAnLi90by1iZS12aXNpYmxlLW9wdGlvbnMnO1xuXG5jb25zdCB3aW5kb3dSZWY6IGFueSA9IHdpbmRvdztcblxuZnVuY3Rpb24gZ2V0UmVzb3VyY2VzKG5hbWU6IHN0cmluZywgYXJnczogYW55W10gPSBbXSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJlc291cmNlc1NlcnZpY2UgPSBUZXN0QmVkLmluamVjdChTa3lBcHBSZXNvdXJjZXNTZXJ2aWNlKTtcbiAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHJlc291cmNlc1NlcnZpY2UuZ2V0U3RyaW5nKG5hbWUsIC4uLmFyZ3MpKTtcbn1cblxuZnVuY3Rpb24gZ2V0TGliUmVzb3VyY2VzKG5hbWU6IHN0cmluZywgYXJnczogYW55W10gPSBbXSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJlc291cmNlc1NlcnZpY2UgPSBUZXN0QmVkLmluamVjdChTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlKTtcbiAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHJlc291cmNlc1NlcnZpY2UuZ2V0U3RyaW5nKG5hbWUsIC4uLmFyZ3MpKTtcbn1cblxuZnVuY3Rpb24gaXNUZW1wbGF0ZU1hdGNoKHNhbXBsZTogc3RyaW5nLCB0ZW1wbGF0ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGxldCBtYXRjaGVzID0gdHJ1ZTtcbiAgY29uc3QgdGVtcGxhdGVUb2tlbnMgPSB0ZW1wbGF0ZS5zcGxpdChuZXcgUmVnRXhwKCd7XFxcXGQrfScpKS5yZXZlcnNlKCk7XG4gIGxldCBjdXJyZW50VG9rZW4gPSB0ZW1wbGF0ZVRva2Vucy5wb3AoKTtcbiAgbGV0IGxhc3RQb3NpdGlvbiA9IDA7XG4gIHdoaWxlIChjdXJyZW50VG9rZW4gIT09IHVuZGVmaW5lZCAmJiBtYXRjaGVzKSB7XG4gICAgY29uc3QgdG9rZW5Qb3NpdGlvbjogbnVtYmVyID0gc2FtcGxlLmluZGV4T2YoY3VycmVudFRva2VuLCBsYXN0UG9zaXRpb24pO1xuICAgIG1hdGNoZXMgPSB0b2tlblBvc2l0aW9uID49IGxhc3RQb3NpdGlvbjtcbiAgICBsYXN0UG9zaXRpb24gPSB0b2tlblBvc2l0aW9uICsgY3VycmVudFRva2VuLmxlbmd0aDtcbiAgICBjdXJyZW50VG9rZW4gPSB0ZW1wbGF0ZVRva2Vucy5wb3AoKTtcbiAgfVxuICByZXR1cm4gbWF0Y2hlcztcbn1cblxuY29uc3QgbWF0Y2hlcnM6IGphc21pbmUuQ3VzdG9tTWF0Y2hlckZhY3RvcmllcyA9IHtcbiAgdG9CZUFjY2Vzc2libGUoKTogamFzbWluZS5DdXN0b21NYXRjaGVyIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29tcGFyZShcbiAgICAgICAgZWxlbWVudDogYW55LFxuICAgICAgICBjYWxsYmFjaz86ICgpID0+IHZvaWQsXG4gICAgICAgIGNvbmZpZz86IFNreUExMXlBbmFseXplckNvbmZpZyxcbiAgICAgICk6IGphc21pbmUuQ3VzdG9tTWF0Y2hlclJlc3VsdCB7XG4gICAgICAgIFNreUExMXlBbmFseXplci5ydW4oZWxlbWVudCwgY29uZmlnKVxuICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIC8qaXN0YW5idWwgaWdub3JlIGVsc2UqL1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgd2luZG93UmVmLmZhaWwoZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgZWxzZSovXG4gICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAvLyBBc3luY2hyb25vdXMgbWF0Y2hlcnMgYXJlIGN1cnJlbnRseSB1bnN1cHBvcnRlZCwgYnV0XG4gICAgICAgIC8vIHRoZSBtZXRob2QgYWJvdmUgd29ya3MgdG8gZmFpbCB0aGUgc3BlY2lmaWMgdGVzdCBpbiB0aGVcbiAgICAgICAgLy8gY2FsbGJhY2sgbWFudWFsbHksIGlmIGNoZWNrcyBkbyBub3QgcGFzcy5cbiAgICAgICAgLy8gLS0tXG4gICAgICAgIC8vIEEgc2lkZSBlZmZlY3Qgb2YgdGhpcyB0ZWNobmlxdWUgaXMgdGhlIG1hdGNoZXIgY2Fubm90IGJlXG4gICAgICAgIC8vIHBhaXJlZCB3aXRoIGEgYC5ub3QudG9CZUFjY2Vzc2libGVgIG9wZXJhdG9yIChzaW5jZSB0aGUgcmV0dXJuZWRcbiAgICAgICAgLy8gcmVzdWx0IGlzIGFsd2F5cyBgdHJ1ZWApLiBGb3IgdGhpcyBwYXJ0aWN1bGFyIG1hdGNoZXIsXG4gICAgICAgIC8vIGNoZWNraW5nIGlmIGFuIGVsZW1lbnQgaXMgbm90IGFjY2Vzc2libGUgbWF5IGJlIGlycmVsZXZhbnQuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgICAgcGFzczogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcblxuICB0b0JlVmlzaWJsZSgpOiBqYXNtaW5lLkN1c3RvbU1hdGNoZXIge1xuICAgIHJldHVybiB7XG4gICAgICBjb21wYXJlKFxuICAgICAgICBlbDogRWxlbWVudCxcbiAgICAgICAgb3B0aW9ucz86IFNreVRvQmVWaXNpYmxlT3B0aW9ucyxcbiAgICAgICk6IGphc21pbmUuQ3VzdG9tTWF0Y2hlclJlc3VsdCB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRzOiBTa3lUb0JlVmlzaWJsZU9wdGlvbnMgPSB7XG4gICAgICAgICAgY2hlY2tDc3NEaXNwbGF5OiB0cnVlLFxuICAgICAgICAgIGNoZWNrQ3NzVmlzaWJpbGl0eTogZmFsc2UsXG4gICAgICAgICAgY2hlY2tEaW1lbnNpb25zOiBmYWxzZSxcbiAgICAgICAgICBjaGVja0V4aXN0czogZmFsc2UsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB7IC4uLmRlZmF1bHRzLCAuLi5vcHRpb25zIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgICAgIHBhc3M6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHNldHRpbmdzLmNoZWNrRXhpc3RzKSB7XG4gICAgICAgICAgcmVzdWx0LnBhc3MgPSAhIWVsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3VsdC5wYXNzKSB7XG4gICAgICAgICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKTtcblxuICAgICAgICAgIGlmIChzZXR0aW5ncy5jaGVja0Nzc0Rpc3BsYXkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wYXNzID0gY29tcHV0ZWRTdHlsZS5kaXNwbGF5ICE9PSAnbm9uZSc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNldHRpbmdzLmNoZWNrQ3NzVmlzaWJpbGl0eSkge1xuICAgICAgICAgICAgcmVzdWx0LnBhc3MgPSBjb21wdXRlZFN0eWxlLnZpc2liaWxpdHkgIT09ICdoaWRkZW4nO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZXR0aW5ncy5jaGVja0RpbWVuc2lvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGJveCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgcmVzdWx0LnBhc3MgPSBib3gud2lkdGggPiAwICYmIGJveC5oZWlnaHQgPiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdC5tZXNzYWdlID0gcmVzdWx0LnBhc3NcbiAgICAgICAgICA/ICdFeHBlY3RlZCBlbGVtZW50IHRvIG5vdCBiZSB2aXNpYmxlJ1xuICAgICAgICAgIDogJ0V4cGVjdGVkIGVsZW1lbnQgdG8gYmUgdmlzaWJsZSc7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcblxuICB0b0V4aXN0KCk6IGphc21pbmUuQ3VzdG9tTWF0Y2hlciB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbXBhcmUoZWw6IGFueSk6IGphc21pbmUuQ3VzdG9tTWF0Y2hlclJlc3VsdCB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgICAgICBwYXNzOiBmYWxzZSxcbiAgICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgfTtcblxuICAgICAgICByZXN1bHQucGFzcyA9ICEhZWw7XG5cbiAgICAgICAgcmVzdWx0Lm1lc3NhZ2UgPSByZXN1bHQucGFzc1xuICAgICAgICAgID8gJ0V4cGVjdGVkIGVsZW1lbnQgbm90IHRvIGV4aXN0J1xuICAgICAgICAgIDogJ0V4cGVjdGVkIGVsZW1lbnQgdG8gZXhpc3QnO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG5cbiAgdG9IYXZlQ3NzQ2xhc3MoKTogamFzbWluZS5DdXN0b21NYXRjaGVyIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29tcGFyZShlbDogYW55LCBleHBlY3RlZENsYXNzTmFtZTogc3RyaW5nKTogamFzbWluZS5DdXN0b21NYXRjaGVyUmVzdWx0IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgICAgIHBhc3M6IGZhbHNlLFxuICAgICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChleHBlY3RlZENsYXNzTmFtZS5pbmRleE9mKCcuJykgPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnUGxlYXNlIHJlbW92ZSB0aGUgbGVhZGluZyBkb3QgZnJvbSB5b3VyIGNsYXNzIG5hbWUuJyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0LnBhc3MgPSBlbC5jbGFzc0xpc3QuY29udGFpbnMoZXhwZWN0ZWRDbGFzc05hbWUpO1xuXG4gICAgICAgIHJlc3VsdC5tZXNzYWdlID0gcmVzdWx0LnBhc3NcbiAgICAgICAgICA/IGBFeHBlY3RlZCBlbGVtZW50IG5vdCB0byBoYXZlIENTUyBjbGFzcyBcIiR7ZXhwZWN0ZWRDbGFzc05hbWV9XCJgXG4gICAgICAgICAgOiBgRXhwZWN0ZWQgZWxlbWVudCB0byBoYXZlIENTUyBjbGFzcyBcIiR7ZXhwZWN0ZWRDbGFzc05hbWV9XCJgO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG5cbiAgdG9IYXZlU3R5bGUoKTogamFzbWluZS5DdXN0b21NYXRjaGVyIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29tcGFyZShcbiAgICAgICAgZWw6IGFueSxcbiAgICAgICAgZXhwZWN0ZWRTdHlsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gICAgICApOiBqYXNtaW5lLkN1c3RvbU1hdGNoZXJSZXN1bHQge1xuICAgICAgICBjb25zdCBtZXNzYWdlOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgIGxldCBoYXNGYWlsdXJlID0gZmFsc2U7XG5cbiAgICAgICAgT2JqZWN0LmtleXMoZXhwZWN0ZWRTdHlsZXMpLmZvckVhY2goKHN0eWxlTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3R5bGVzID0gd2luZG93UmVmLmdldENvbXB1dGVkU3R5bGUoZWwpO1xuICAgICAgICAgIGNvbnN0IGFjdHVhbFN0eWxlID0gc3R5bGVzW3N0eWxlTmFtZV07XG4gICAgICAgICAgY29uc3QgZXhwZWN0ZWRTdHlsZSA9IGV4cGVjdGVkU3R5bGVzW3N0eWxlTmFtZV07XG5cbiAgICAgICAgICBpZiAoYWN0dWFsU3R5bGUgIT09IGV4cGVjdGVkU3R5bGUpIHtcbiAgICAgICAgICAgIGlmICghaGFzRmFpbHVyZSkge1xuICAgICAgICAgICAgICBoYXNGYWlsdXJlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbWVzc2FnZS5wdXNoKFxuICAgICAgICAgICAgICBgRXhwZWN0ZWQgZWxlbWVudCBub3QgdG8gaGF2ZSBDU1Mgc3R5bGUgXCIke3N0eWxlTmFtZX06ICR7ZXhwZWN0ZWRTdHlsZX1cImAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtZXNzYWdlLnB1c2goXG4gICAgICAgICAgICAgIGBFeHBlY3RlZCBlbGVtZW50IHRvIGhhdmUgQ1NTIHN0eWxlIFwiJHtzdHlsZU5hbWV9OiAke2V4cGVjdGVkU3R5bGV9XCJgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnB1c2goYEFjdHVhbCBzdHlsZXMgYXJlOiBcIiR7c3R5bGVOYW1lfTogJHthY3R1YWxTdHlsZX1cImApO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAgICAgcGFzczogIWhhc0ZhaWx1cmUsXG4gICAgICAgICAgbWVzc2FnZTogbWVzc2FnZS5qb2luKCdcXG4nKSxcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSxcbiAgICB9O1xuICB9LFxuXG4gIHRvSGF2ZVRleHQoKTogamFzbWluZS5DdXN0b21NYXRjaGVyIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29tcGFyZShcbiAgICAgICAgZWw6IGFueSxcbiAgICAgICAgZXhwZWN0ZWRUZXh0OiBzdHJpbmcsXG4gICAgICAgIHRyaW1XaGl0ZXNwYWNlID0gdHJ1ZSxcbiAgICAgICk6IGphc21pbmUuQ3VzdG9tTWF0Y2hlclJlc3VsdCB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgICAgICBwYXNzOiBmYWxzZSxcbiAgICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgYWN0dWFsVGV4dCA9IGVsLnRleHRDb250ZW50O1xuXG4gICAgICAgIGlmICh0cmltV2hpdGVzcGFjZSkge1xuICAgICAgICAgIGFjdHVhbFRleHQgPSBhY3R1YWxUZXh0LnRyaW0oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdC5wYXNzID0gYWN0dWFsVGV4dCA9PT0gZXhwZWN0ZWRUZXh0O1xuXG4gICAgICAgIHJlc3VsdC5tZXNzYWdlID0gcmVzdWx0LnBhc3NcbiAgICAgICAgICA/IGBFeHBlY3RlZCBlbGVtZW50J3MgaW5uZXIgdGV4dCBcIiR7YWN0dWFsVGV4dH1cIiBub3QgdG8gYmU6IFwiJHtleHBlY3RlZFRleHR9XCJgXG4gICAgICAgICAgOiBgRXhwZWN0ZWQgZWxlbWVudCdzIGlubmVyIHRleHQgdG8gYmU6IFwiJHtleHBlY3RlZFRleHR9XCJcXG5gICtcbiAgICAgICAgICAgIGBBY3R1YWwgZWxlbWVudCdzIGlubmVyIHRleHQgd2FzOiBcIiR7YWN0dWFsVGV4dH1cImA7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcblxuICB0b0VxdWFsUmVzb3VyY2VUZXh0KCk6IGphc21pbmUuQ3VzdG9tTWF0Y2hlciB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbXBhcmUoXG4gICAgICAgIGFjdHVhbDogc3RyaW5nLFxuICAgICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICAgIGFyZ3M/OiBhbnlbXSxcbiAgICAgICAgY2FsbGJhY2s/OiAoKSA9PiB2b2lkLFxuICAgICAgKTogamFzbWluZS5DdXN0b21NYXRjaGVyUmVzdWx0IHtcbiAgICAgICAgdm9pZCBnZXRSZXNvdXJjZXMobmFtZSwgYXJncykudGhlbigobWVzc2FnZSkgPT4ge1xuICAgICAgICAgIC8qaXN0YW5idWwgaWdub3JlIGVsc2UqL1xuICAgICAgICAgIGlmIChhY3R1YWwgIT09IG1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHdpbmRvd1JlZi5mYWlsKGBFeHBlY3RlZCBcIiR7YWN0dWFsfVwiIHRvIGVxdWFsIFwiJHttZXNzYWdlfVwiYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8qaXN0YW5idWwgaWdub3JlIGVsc2UqL1xuICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEFzeW5jaHJvbm91cyBtYXRjaGVycyBhcmUgY3VycmVudGx5IHVuc3VwcG9ydGVkLCBidXRcbiAgICAgICAgLy8gdGhlIG1ldGhvZCBhYm92ZSB3b3JrcyB0byBmYWlsIHRoZSBzcGVjaWZpYyB0ZXN0IGluIHRoZVxuICAgICAgICAvLyBjYWxsYmFjayBtYW51YWxseSwgaWYgY2hlY2tzIGRvIG5vdCBwYXNzLlxuICAgICAgICAvLyAtLS1cbiAgICAgICAgLy8gQSBzaWRlIGVmZmVjdCBvZiB0aGlzIHRlY2huaXF1ZSBpcyB0aGUgbWF0Y2hlciBjYW5ub3QgYmVcbiAgICAgICAgLy8gcGFpcmVkIHdpdGggYSBgLm5vdC50b0hhdmVSZXNvdXJjZVRleHRgIG9wZXJhdG9yIChzaW5jZSB0aGUgcmV0dXJuZWRcbiAgICAgICAgLy8gcmVzdWx0IGlzIGFsd2F5cyBgdHJ1ZWApLlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICAgIHBhc3M6IHRydWUsXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG5cbiAgdG9IYXZlUmVzb3VyY2VUZXh0KCk6IGphc21pbmUuQ3VzdG9tTWF0Y2hlciB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbXBhcmUoXG4gICAgICAgIGVsOiBhbnksXG4gICAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgICAgYXJncz86IGFueVtdLFxuICAgICAgICB0cmltV2hpdGVzcGFjZSA9IHRydWUsXG4gICAgICAgIGNhbGxiYWNrPzogKCkgPT4gdm9pZCxcbiAgICAgICk6IGphc21pbmUuQ3VzdG9tTWF0Y2hlclJlc3VsdCB7XG4gICAgICAgIGxldCBhY3R1YWwgPSBlbC50ZXh0Q29udGVudDtcblxuICAgICAgICBpZiAodHJpbVdoaXRlc3BhY2UpIHtcbiAgICAgICAgICBhY3R1YWwgPSBhY3R1YWwudHJpbSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdm9pZCBnZXRSZXNvdXJjZXMobmFtZSwgYXJncykudGhlbigobWVzc2FnZSkgPT4ge1xuICAgICAgICAgIGlmIChhY3R1YWwgIT09IG1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHdpbmRvd1JlZi5mYWlsKFxuICAgICAgICAgICAgICBgRXhwZWN0ZWQgZWxlbWVudCdzIGlubmVyIHRleHQgXCIke2VsLnRleHRDb250ZW50fVwiIHRvIGJlIFwiJHttZXNzYWdlfVwiYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8qaXN0YW5idWwgaWdub3JlIGVsc2UqL1xuICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEFzeW5jaHJvbm91cyBtYXRjaGVycyBhcmUgY3VycmVudGx5IHVuc3VwcG9ydGVkLCBidXRcbiAgICAgICAgLy8gdGhlIG1ldGhvZCBhYm92ZSB3b3JrcyB0byBmYWlsIHRoZSBzcGVjaWZpYyB0ZXN0IGluIHRoZVxuICAgICAgICAvLyBjYWxsYmFjayBtYW51YWxseSwgaWYgY2hlY2tzIGRvIG5vdCBwYXNzLlxuICAgICAgICAvLyAtLS1cbiAgICAgICAgLy8gQSBzaWRlIGVmZmVjdCBvZiB0aGlzIHRlY2huaXF1ZSBpcyB0aGUgbWF0Y2hlciBjYW5ub3QgYmVcbiAgICAgICAgLy8gcGFpcmVkIHdpdGggYSBgLm5vdC50b0hhdmVSZXNvdXJjZVRleHRgIG9wZXJhdG9yIChzaW5jZSB0aGUgcmV0dXJuZWRcbiAgICAgICAgLy8gcmVzdWx0IGlzIGFsd2F5cyBgdHJ1ZWApLlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICAgIHBhc3M6IHRydWUsXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG5cbiAgdG9NYXRjaFJlc291cmNlVGVtcGxhdGUoKTogamFzbWluZS5DdXN0b21NYXRjaGVyIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29tcGFyZShcbiAgICAgICAgZWw6IGFueSxcbiAgICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgICBjYWxsYmFjaz86ICgpID0+IHZvaWQsXG4gICAgICApOiBqYXNtaW5lLkN1c3RvbU1hdGNoZXJSZXN1bHQge1xuICAgICAgICBjb25zdCBhY3R1YWwgPSBlbC50ZXh0Q29udGVudDtcblxuICAgICAgICB2b2lkIGdldFJlc291cmNlcyhuYW1lKS50aGVuKChtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgaWYgKCFpc1RlbXBsYXRlTWF0Y2goYWN0dWFsLCBtZXNzYWdlKSkge1xuICAgICAgICAgICAgd2luZG93UmVmLmZhaWwoXG4gICAgICAgICAgICAgIGBFeHBlY3RlZCBlbGVtZW50J3MgdGV4dCBcIiR7YWN0dWFsfVwiIHRvIG1hdGNoIFwiJHttZXNzYWdlfVwiYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8qaXN0YW5idWwgaWdub3JlIGVsc2UqL1xuICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEFzeW5jaHJvbm91cyBtYXRjaGVycyBhcmUgY3VycmVudGx5IHVuc3VwcG9ydGVkLCBidXRcbiAgICAgICAgLy8gdGhlIG1ldGhvZCBhYm92ZSB3b3JrcyB0byBmYWlsIHRoZSBzcGVjaWZpYyB0ZXN0IGluIHRoZVxuICAgICAgICAvLyBjYWxsYmFjayBtYW51YWxseSwgaWYgY2hlY2tzIGRvIG5vdCBwYXNzLlxuICAgICAgICAvLyAtLS1cbiAgICAgICAgLy8gQSBzaWRlIGVmZmVjdCBvZiB0aGlzIHRlY2huaXF1ZSBpcyB0aGUgbWF0Y2hlciBjYW5ub3QgYmVcbiAgICAgICAgLy8gcGFpcmVkIHdpdGggYSBgLm5vdC50b0hhdmVSZXNvdXJjZVRleHRgIG9wZXJhdG9yIChzaW5jZSB0aGUgcmV0dXJuZWRcbiAgICAgICAgLy8gcmVzdWx0IGlzIGFsd2F5cyBgdHJ1ZWApLlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICAgIHBhc3M6IHRydWUsXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuXG5jb25zdCBhc3luY01hdGNoZXJzOiBqYXNtaW5lLkN1c3RvbUFzeW5jTWF0Y2hlckZhY3RvcmllcyA9IHtcbiAgdG9CZUFjY2Vzc2libGUoKTogamFzbWluZS5DdXN0b21Bc3luY01hdGNoZXIge1xuICAgIHJldHVybiB7XG4gICAgICBjb21wYXJlPFQgZXh0ZW5kcyBheGUuRWxlbWVudENvbnRleHQ+KFxuICAgICAgICBlbGVtZW50OiBULFxuICAgICAgICBjb25maWc/OiBTa3lBMTF5QW5hbHl6ZXJDb25maWcsXG4gICAgICApOiBQcm9taXNlPGphc21pbmUuQ3VzdG9tTWF0Y2hlclJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICBTa3lBMTF5QW5hbHl6ZXIucnVuKGVsZW1lbnQsIGNvbmZpZylcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgcGFzczogdHJ1ZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgcGFzczogZmFsc2UsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyLm1lc3NhZ2UsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9O1xuICB9LFxuXG4gIHRvRXF1YWxSZXNvdXJjZVRleHQoKTogamFzbWluZS5DdXN0b21Bc3luY01hdGNoZXIge1xuICAgIHJldHVybiB7XG4gICAgICBjb21wYXJlKFxuICAgICAgICBhY3R1YWw6IHN0cmluZyxcbiAgICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgICBhcmdzPzogYW55W10sXG4gICAgICApOiBQcm9taXNlPGphc21pbmUuQ3VzdG9tTWF0Y2hlclJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gZ2V0UmVzb3VyY2VzKG5hbWUsIGFyZ3MpLnRoZW4oKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICBpZiAoYWN0dWFsID09PSBtZXNzYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBwYXNzOiB0cnVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgcGFzczogZmFsc2UsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBFeHBlY3RlZCBcIiR7YWN0dWFsfVwiIHRvIGVxdWFsIFwiJHttZXNzYWdlfVwiYCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcblxuICB0b0VxdWFsTGliUmVzb3VyY2VUZXh0KCk6IGphc21pbmUuQ3VzdG9tQXN5bmNNYXRjaGVyIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29tcGFyZShcbiAgICAgICAgYWN0dWFsOiBzdHJpbmcsXG4gICAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgICAgYXJncz86IGFueVtdLFxuICAgICAgKTogUHJvbWlzZTxqYXNtaW5lLkN1c3RvbU1hdGNoZXJSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIGdldExpYlJlc291cmNlcyhuYW1lLCBhcmdzKS50aGVuKChtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgaWYgKGFjdHVhbCA9PT0gbWVzc2FnZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgcGFzczogdHJ1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHBhc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBgRXhwZWN0ZWQgXCIke2FjdHVhbH1cIiB0byBlcXVhbCBcIiR7bWVzc2FnZX1cImAsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG5cbiAgdG9IYXZlUmVzb3VyY2VUZXh0KCk6IGphc21pbmUuQ3VzdG9tQXN5bmNNYXRjaGVyIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29tcGFyZShcbiAgICAgICAgZWxlbWVudDogYW55LFxuICAgICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICAgIGFyZ3M/OiBhbnlbXSxcbiAgICAgICAgdHJpbVdoaXRlc3BhY2UgPSB0cnVlLFxuICAgICAgKTogUHJvbWlzZTxqYXNtaW5lLkN1c3RvbU1hdGNoZXJSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIGdldFJlc291cmNlcyhuYW1lLCBhcmdzKS50aGVuKChtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgbGV0IGFjdHVhbCA9IGVsZW1lbnQudGV4dENvbnRlbnQ7XG4gICAgICAgICAgaWYgKHRyaW1XaGl0ZXNwYWNlKSB7XG4gICAgICAgICAgICBhY3R1YWwgPSBhY3R1YWwudHJpbSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhY3R1YWwgPT09IG1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHBhc3M6IHRydWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBwYXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogYEV4cGVjdGVkIGVsZW1lbnQncyBpbm5lciB0ZXh0IFwiJHthY3R1YWx9XCIgdG8gYmUgXCIke21lc3NhZ2V9XCJgLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9O1xuICB9LFxuXG4gIHRvSGF2ZUxpYlJlc291cmNlVGV4dCgpOiBqYXNtaW5lLkN1c3RvbUFzeW5jTWF0Y2hlciB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbXBhcmUoXG4gICAgICAgIGVsZW1lbnQ6IGFueSxcbiAgICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgICBhcmdzPzogYW55W10sXG4gICAgICAgIHRyaW1XaGl0ZXNwYWNlID0gdHJ1ZSxcbiAgICAgICk6IFByb21pc2U8amFzbWluZS5DdXN0b21NYXRjaGVyUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiBnZXRMaWJSZXNvdXJjZXMobmFtZSwgYXJncykudGhlbigobWVzc2FnZSkgPT4ge1xuICAgICAgICAgIGxldCBhY3R1YWwgPSBlbGVtZW50LnRleHRDb250ZW50O1xuICAgICAgICAgIGlmICh0cmltV2hpdGVzcGFjZSkge1xuICAgICAgICAgICAgYWN0dWFsID0gYWN0dWFsLnRyaW0oKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGFjdHVhbCA9PT0gbWVzc2FnZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgcGFzczogdHJ1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHBhc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBgRXhwZWN0ZWQgZWxlbWVudCdzIGlubmVyIHRleHQgXCIke2FjdHVhbH1cIiB0byBiZSBcIiR7bWVzc2FnZX1cImAsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG5cbiAgdG9NYXRjaFJlc291cmNlVGVtcGxhdGUoKTogamFzbWluZS5DdXN0b21Bc3luY01hdGNoZXIge1xuICAgIHJldHVybiB7XG4gICAgICBjb21wYXJlKFxuICAgICAgICBlbGVtZW50OiBhbnksXG4gICAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgICk6IFByb21pc2U8amFzbWluZS5DdXN0b21NYXRjaGVyUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiBnZXRSZXNvdXJjZXMobmFtZSkudGhlbigobWVzc2FnZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFjdHVhbCA9IGVsZW1lbnQudGV4dENvbnRlbnQ7XG4gICAgICAgICAgaWYgKGlzVGVtcGxhdGVNYXRjaChhY3R1YWwsIG1lc3NhZ2UpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBwYXNzOiB0cnVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgcGFzczogZmFsc2UsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBFeHBlY3RlZCBlbGVtZW50J3MgdGV4dCBcIiR7YWN0dWFsfVwiIHRvIG1hdGNoIFwiJHttZXNzYWdlfVwiYCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcblxuICB0b01hdGNoTGliUmVzb3VyY2VUZW1wbGF0ZSgpOiBqYXNtaW5lLkN1c3RvbUFzeW5jTWF0Y2hlciB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbXBhcmUoXG4gICAgICAgIGVsZW1lbnQ6IGFueSxcbiAgICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgKTogUHJvbWlzZTxqYXNtaW5lLkN1c3RvbU1hdGNoZXJSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIGdldExpYlJlc291cmNlcyhuYW1lKS50aGVuKChtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgY29uc3QgYWN0dWFsID0gZWxlbWVudC50ZXh0Q29udGVudDtcbiAgICAgICAgICBpZiAoaXNUZW1wbGF0ZU1hdGNoKGFjdHVhbCwgbWVzc2FnZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHBhc3M6IHRydWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBwYXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogYEV4cGVjdGVkIGVsZW1lbnQncyB0ZXh0IFwiJHthY3R1YWx9XCIgdG8gbWF0Y2ggXCIke21lc3NhZ2V9XCJgLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9O1xuICB9LFxufTtcblxud2luZG93UmVmLmJlZm9yZUVhY2goKCkgPT4ge1xuICBqYXNtaW5lLmFkZE1hdGNoZXJzKG1hdGNoZXJzKTtcbiAgamFzbWluZS5hZGRBc3luY01hdGNoZXJzKGFzeW5jTWF0Y2hlcnMpO1xufSk7XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBcImFzeW5jaHJvbm91c1wiIGN1c3RvbSBTa3kgbWF0Y2hlcnMgd2hpY2ggY2Fubm90IGJlIHBhaXJlZCB3aXRoIGEgYC5ub3RgIG9wZXJhdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNreUFzeW5jTWF0Y2hlcnM8VCwgVT4gZXh0ZW5kcyBqYXNtaW5lLkFzeW5jTWF0Y2hlcnM8VCwgVT4ge1xuICAvKipcbiAgICogSW52ZXJ0IHRoZSBtYXRjaGVyIGZvbGxvd2luZyB0aGlzIGBleHBlY3RgXG4gICAqL1xuICBub3Q6IFNreUFzeW5jTWF0Y2hlcnM8VCwgVT47XG5cbiAgLyoqXG4gICAqIGBleHBlY3RgIGFuIGVsZW1lbnQgdG8gYmUgYWNjZXNzaWJsZSBiYXNlZCBvbiBXZWIgQ29udGVudCBBY2Nlc3NpYmlsaXR5XG4gICAqIEd1aWRlbGluZXMgMi4wIChXQ0FHMjApIExldmVsIEEgYW5kIEFBIHN1Y2Nlc3MgY3JpdGVyaWEuXG4gICAqIEBwYXJhbSBjb25maWcgVGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIG92ZXJ3cml0aW5nIG9yIHR1cm5pbmcgb2ZmIHNwZWNpZmljIGFjY2Vzc2liaWxpdHkgY2hlY2tzLlxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvbGVhcm4vZ2V0LXN0YXJ0ZWQvYWR2YW5jZWQvYWNjZXNzaWJpbGl0eS11bml0LXRlc3RzXG4gICAqL1xuICB0b0JlQWNjZXNzaWJsZShcbiAgICBjb25maWc/OiBTa3lBMTF5QW5hbHl6ZXJDb25maWcsXG4gICk6IFByb21pc2U8amFzbWluZS5DdXN0b21NYXRjaGVyUmVzdWx0PjtcblxuICAvKipcbiAgICogYGV4cGVjdGAgdGhlIGFjdHVhbCB0ZXh0IHRvIGVxdWFsIHRoZSB0ZXh0IGZvciB0aGUgZXhwZWN0ZWQgcmVzb3VyY2Ugc3RyaW5nLlxuICAgKiBVc2VzIGBTa3lBcHBSZXNvdXJjZXNTZXJ2aWNlLmdldFN0cmluZyhuYW1lLCBhcmdzKWAgdG8gZmV0Y2ggdGhlIGV4cGVjdGVkIHJlc291cmNlIHN0cmluZ1xuICAgKiBhbmQgY29tcGFyZXMgdXNpbmcgPT09LlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgcmVzb3VyY2Ugc3RyaW5nIHRvIGZldGNoIGZyb20gdGhlIHJlc291cmNlIGZpbGUgYW5kIGNvbXBhcmUgYWdhaW5zdC5cbiAgICogQHBhcmFtIGFyZ3MgVGhlIHN0cmluZyByZXBsYWNlbWVudCBhcmd1bWVudHMgZm9yIHRoZSBleHBlY3RlZCByZXNvdXJjZSBzdHJpbmcuXG4gICAqL1xuICB0b0VxdWFsUmVzb3VyY2VUZXh0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBhcmdzPzogYW55W10sXG4gICk6IFByb21pc2U8amFzbWluZS5DdXN0b21NYXRjaGVyUmVzdWx0PjtcblxuICAvKipcbiAgICogYGV4cGVjdGAgdGhlIGFjdHVhbCB0ZXh0IHRvIGVxdWFsIHRoZSB0ZXh0IGZvciB0aGUgZXhwZWN0ZWQgcmVzb3VyY2Ugc3RyaW5nLlxuICAgKiBVc2VzIGBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlLmdldFN0cmluZyhuYW1lLCBhcmdzKWAgdG8gZmV0Y2ggdGhlIGV4cGVjdGVkIHJlc291cmNlIHN0cmluZ1xuICAgKiBhbmQgY29tcGFyZXMgdXNpbmcgPT09LlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgcmVzb3VyY2Ugc3RyaW5nIHRvIGZldGNoIGZyb20gdGhlIHJlc291cmNlIGZpbGUgYW5kIGNvbXBhcmUgYWdhaW5zdC5cbiAgICogQHBhcmFtIGFyZ3MgVGhlIHN0cmluZyByZXBsYWNlbWVudCBhcmd1bWVudHMgZm9yIHRoZSBleHBlY3RlZCByZXNvdXJjZSBzdHJpbmcuXG4gICAqL1xuICB0b0VxdWFsTGliUmVzb3VyY2VUZXh0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBhcmdzPzogYW55W10sXG4gICk6IFByb21pc2U8amFzbWluZS5DdXN0b21NYXRjaGVyUmVzdWx0PjtcblxuICAvKipcbiAgICogYGV4cGVjdGAgdGhlIGFjdHVhbCBlbGVtZW50IHRvIGhhdmUgdGhlIHRleHQgZm9yIHRoZSBleHBlY3RlZCByZXNvdXJjZSBzdHJpbmcuXG4gICAqIFVzZXMgYFNreUFwcFJlc291cmNlc1NlcnZpY2UuZ2V0U3RyaW5nKG5hbWUsIGFyZ3MpYCB0byBmZXRjaCB0aGUgZXhwZWN0ZWQgcmVzb3VyY2Ugc3RyaW5nXG4gICAqIGFuZCBjb21wYXJlcyB1c2luZyA9PT0uXG4gICAqIEBwYXJhbSBuYW1lIFRoZSByZXNvdXJjZSBzdHJpbmcgdG8gZmV0Y2ggZnJvbSB0aGUgcmVzb3VyY2UgZmlsZSBhbmQgY29tcGFyZSBhZ2FpbnN0LlxuICAgKiBAcGFyYW0gYXJncyBUaGUgc3RyaW5nIHJlcGxhY2VtZW50IGFyZ3VtZW50cyBmb3IgdGhlIGV4cGVjdGVkIHJlc291cmNlIHN0cmluZy5cbiAgICogQHBhcmFtIHRyaW1XaGl0ZXNwYWNlIFt0cnVlXSBXaGV0aGVyIG9yIG5vdCB0byB0cmltIHdoaXRlc3BhY2UgZnJvbSB0aGUgYWN0dWFsIGVsZW1lbnQgdGV4dCBiZWZvcmUgY29tcGFyaXNvbi5cbiAgICovXG4gIHRvSGF2ZVJlc291cmNlVGV4dChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgYXJncz86IGFueVtdLFxuICAgIHRyaW1XaGl0ZXNwYWNlPzogYm9vbGVhbixcbiAgKTogUHJvbWlzZTxqYXNtaW5lLkN1c3RvbU1hdGNoZXJSZXN1bHQ+O1xuXG4gIC8qKlxuICAgKiBgZXhwZWN0YCB0aGUgYWN0dWFsIGVsZW1lbnQgdG8gaGF2ZSB0aGUgdGV4dCBmb3IgdGhlIGV4cGVjdGVkIHJlc291cmNlIHN0cmluZy5cbiAgICogVXNlcyBgU2t5TGliUmVzb3VyY2VzU2VydmljZS5nZXRTdHJpbmcobmFtZSwgYXJncylgIHRvIGZldGNoIHRoZSBleHBlY3RlZCByZXNvdXJjZSBzdHJpbmdcbiAgICogYW5kIGNvbXBhcmVzIHVzaW5nID09PS5cbiAgICogQHBhcmFtIG5hbWUgVGhlIHJlc291cmNlIHN0cmluZyB0byBmZXRjaCBmcm9tIHRoZSByZXNvdXJjZSBmaWxlIGFuZCBjb21wYXJlIGFnYWluc3QuXG4gICAqIEBwYXJhbSBhcmdzIFRoZSBzdHJpbmcgcmVwbGFjZW1lbnQgYXJndW1lbnRzIGZvciB0aGUgZXhwZWN0ZWQgcmVzb3VyY2Ugc3RyaW5nLlxuICAgKiBAcGFyYW0gdHJpbVdoaXRlc3BhY2UgW3RydWVdIFdoZXRoZXIgb3Igbm90IHRvIHRyaW0gd2hpdGVzcGFjZSBmcm9tIHRoZSBhY3R1YWwgZWxlbWVudCB0ZXh0IGJlZm9yZSBjb21wYXJpc29uLlxuICAgKi9cbiAgdG9IYXZlTGliUmVzb3VyY2VUZXh0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBhcmdzPzogYW55W10sXG4gICAgdHJpbVdoaXRlc3BhY2U/OiBib29sZWFuLFxuICApOiBQcm9taXNlPGphc21pbmUuQ3VzdG9tTWF0Y2hlclJlc3VsdD47XG5cbiAgLyoqXG4gICAqIGBleHBlY3RgIHRoZSBhY3R1YWwgZWxlbWVudCB0byBoYXZlIHRoZSB0ZXh0IGZvciB0aGUgZXhwZWN0ZWQgcmVzb3VyY2Ugc3RyaW5nLlxuICAgKiBVc2VzIGBTa3lBcHBSZXNvdXJjZXNTZXJ2aWNlLmdldFN0cmluZyhuYW1lLCBhcmdzKWAgdG8gZmV0Y2ggdGhlIGV4cGVjdGVkIHJlc291cmNlIHN0cmluZ1xuICAgKiBhbmQgY29tcGFyZXMgdGhlIHRva2VuaXplZCBlbGVtZW50IHRleHQgYWdhaW5zdCB0aGUgdGVtcGxhdGUuXG4gICAqIEVzc2VudGlhbGx5IHRoaXMgbWF0Y2hlcyBhbnkgdGV4dCB0aGF0IGhhcyB0aGUgbm9uLXBhcmFtZXRlcml6ZWQgdGV4dCBvZiB0aGUgdGVtcGxhdGUgaW4gdGhlIG9yZGVyIG9mIHRoZSB0ZW1wbGF0ZSxcbiAgICogcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgZWFjaCBvZiB0aGUgcGFyYW1ldGVycy5cbiAgICogQHBhcmFtIG5hbWUgVGhlIHJlc291cmNlIHN0cmluZyB0byBmZXRjaCBmcm9tIHRoZSByZXNvdXJjZSBmaWxlIGFuZCBjb21wYXJlIGFnYWluc3QuXG4gICAqL1xuICB0b01hdGNoUmVzb3VyY2VUZW1wbGF0ZShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPGphc21pbmUuQ3VzdG9tTWF0Y2hlclJlc3VsdD47XG5cbiAgLyoqXG4gICAqIGBleHBlY3RgIHRoZSBhY3R1YWwgZWxlbWVudCB0byBoYXZlIHRoZSB0ZXh0IGZvciB0aGUgZXhwZWN0ZWQgcmVzb3VyY2Ugc3RyaW5nLlxuICAgKiBVc2VzIGBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlLmdldFN0cmluZyhuYW1lLCBhcmdzKWAgdG8gZmV0Y2ggdGhlIGV4cGVjdGVkIHJlc291cmNlIHN0cmluZ1xuICAgKiBhbmQgY29tcGFyZXMgdGhlIHRva2VuaXplZCBlbGVtZW50IHRleHQgYWdhaW5zdCB0aGUgdGVtcGxhdGUuXG4gICAqIEVzc2VudGlhbGx5IHRoaXMgbWF0Y2hlcyBhbnkgdGV4dCB0aGF0IGhhcyB0aGUgbm9uLXBhcmFtZXRlcml6ZWQgdGV4dCBvZiB0aGUgdGVtcGxhdGUgaW4gdGhlIG9yZGVyIG9mIHRoZSB0ZW1wbGF0ZSxcbiAgICogcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgZWFjaCBvZiB0aGUgcGFyYW1ldGVycy5cbiAgICogQHBhcmFtIG5hbWUgVGhlIHJlc291cmNlIHN0cmluZyB0byBmZXRjaCBmcm9tIHRoZSByZXNvdXJjZSBmaWxlIGFuZCBjb21wYXJlIGFnYWluc3QuXG4gICAqL1xuICB0b01hdGNoTGliUmVzb3VyY2VUZW1wbGF0ZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICk6IFByb21pc2U8amFzbWluZS5DdXN0b21NYXRjaGVyUmVzdWx0Pjtcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIFwibm9ybWFsXCIgY3VzdG9tIFNreSBtYXRjaGVycyAoaW5jbHVkZXMgb3JpZ2luYWwgamFzbWluZSBtYXRjaGVycykuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2t5TWF0Y2hlcnM8VD4gZXh0ZW5kcyBqYXNtaW5lLk1hdGNoZXJzPFQ+IHtcbiAgLyoqXG4gICAqIEludmVydCB0aGUgbWF0Y2hlciBmb2xsb3dpbmcgdGhpcyBgZXhwZWN0YFxuICAgKi9cbiAgbm90OiBTa3lNYXRjaGVyczxUPjtcblxuICAvKipcbiAgICogYGV4cGVjdGAgdGhlIGFjdHVhbCBlbGVtZW50IHRvIGJlIHZpc2libGUuXG4gICAqIENoZWNrcyBlbGVtZW50cyBzdHlsZSBkaXNwbGF5IGFuZCB2aXNpYmlsaXR5IGFuZCBib3VuZGluZyBib3ggd2lkdGgvaGVpZ2h0LlxuICAgKi9cbiAgdG9CZVZpc2libGUob3B0aW9ucz86IFNreVRvQmVWaXNpYmxlT3B0aW9ucyk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIGBleHBlY3RgIHRoZSBhY3R1YWwgZWxlbWVudCB0byBleGlzdC5cbiAgICovXG4gIHRvRXhpc3QoKTogdm9pZDtcblxuICAvKipcbiAgICogYGV4cGVjdGAgdGhlIGFjdHVhbCBlbGVtZW50IHRvIGhhdmUgdGhlIGV4cGVjdGVkIGNzcyBjbGFzcy5cbiAgICogQHBhcmFtIGV4cGVjdGVkQ2xhc3NOYW1lIFRoZSBjc3MgY2xhc3MgbmFtZSB0byBjaGVjayBmb3IuXG4gICAqL1xuICB0b0hhdmVDc3NDbGFzcyhleHBlY3RlZENsYXNzTmFtZTogc3RyaW5nKTogdm9pZDtcblxuICAvKipcbiAgICogYGV4cGVjdGAgdGhlIGFjdHVhbCBlbGVtZW50IHRvIGhhdmUgdGhlIGV4cGVjdGVkIHN0eWxlKHMpLlxuICAgKiBAcGFyYW0gZXhwZWN0ZWRTdHlsZXMgQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgc3R5bGUocykgdG8gY2hlY2sgZm9yLlxuICAgKi9cbiAgdG9IYXZlU3R5bGUoZXhwZWN0ZWRTdHlsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBgZXhwZWN0YCB0aGUgYWN0dWFsIGVsZW1lbnQgdG8gaGF2ZSB0aGUgZXhwZWN0ZWQgdGV4dC5cbiAgICogQHBhcmFtIGV4cGVjdGVkVGV4dCBUaGUgdGV4dCB0byBjaGVjayBmb3IgaW4gdGhlIGFjdHVhbCBlbGVtZW50LlxuICAgKiBAcGFyYW0gdHJpbVdoaXRlc3BhY2UgW3RydWVdIFdoZXRoZXIgb3Igbm90IHRvIHRyaW0gd2hpdGVzcGFjZSBmcm9tIHRoZSBhY3R1YWwgZWxlbWVudCB0ZXh0IGJlZm9yZSBjb21wYXJpc29uLlxuICAgKi9cbiAgdG9IYXZlVGV4dChleHBlY3RlZFRleHQ6IHN0cmluZywgdHJpbVdoaXRlc3BhY2U/OiBib29sZWFuKTogdm9pZDtcblxuICAvKipcbiAgICogYGV4cGVjdGAgdGhlIGFjdHVhbCBjb21wb25lbnQgdG8gYmUgYWNjZXNzaWJsZSBiYXNlZCBvbiBXZWIgQ29udGVudCBBY2Nlc3NpYmlsaXR5XG4gICAqIEd1aWRlbGluZXMgMi4wIChXQ0FHMjApIExldmVsIEEgYW5kIEFBIHN1Y2Nlc3MgY3JpdGVyaWEuXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgYXdhaXQgZXhwZWN0QXN5bmMoZWxlbWVudCkudG9CZUFjY2Vzc2libGUoKWAgaW5zdGVhZC5cbiAgICogQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBleGVjdXRlIGFmdGVyIGFjY2Vzc2liaWxpdHkgY2hlY2tzIHJ1bi5cbiAgICogQHBhcmFtIGNvbmZpZyBUaGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3Igb3ZlcndyaXRpbmcgb3IgdHVybmluZyBvZmYgc3BlY2lmaWMgYWNjZXNzaWJpbGl0eSBjaGVja3MuXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9sZWFybi9nZXQtc3RhcnRlZC9hZHZhbmNlZC9hY2Nlc3NpYmlsaXR5LXVuaXQtdGVzdHNcbiAgICovXG4gIHRvQmVBY2Nlc3NpYmxlKGNhbGxiYWNrPzogKCkgPT4gdm9pZCwgY29uZmlnPzogU2t5QTExeUFuYWx5emVyQ29uZmlnKTogdm9pZDtcblxuICAvKipcbiAgICogYGV4cGVjdGAgdGhlIGFjdHVhbCB0ZXh0IHRvIGVxdWFsIHRoZSB0ZXh0IGZvciB0aGUgZXhwZWN0ZWQgcmVzb3VyY2Ugc3RyaW5nLlxuICAgKiBVc2VzIGBTa3lBcHBSZXNvdXJjZXNTZXJ2aWNlLmdldFN0cmluZyhuYW1lLCBhcmdzKWAgdG8gZmV0Y2ggdGhlIGV4cGVjdGVkIHJlc291cmNlIHN0cmluZ1xuICAgKiBhbmQgY29tcGFyZXMgdXNpbmcgPT09LlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYGF3YWl0IGV4cGVjdEFzeW5jKCdTb21lIG1lc3NhZ2UuJykudG9FcXVhbFJlc291cmNlVGV4dCgnZm9vX2Jhcl9rZXknKWAgaW5zdGVhZC5cbiAgICogQHBhcmFtIG5hbWUgVGhlIHJlc291cmNlIHN0cmluZyB0byBmZXRjaCBmcm9tIHRoZSByZXNvdXJjZSBmaWxlIGFuZCBjb21wYXJlIGFnYWluc3QuXG4gICAqIEBwYXJhbSBhcmdzIFRoZSBzdHJpbmcgcmVwbGFjZW1lbnQgYXJndW1lbnRzIGZvciB0aGUgZXhwZWN0ZWQgcmVzb3VyY2Ugc3RyaW5nLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUgd2hlbiB0aGUgY29tcGFyaXNvbiBmYWlscy5cbiAgICovXG4gIHRvRXF1YWxSZXNvdXJjZVRleHQobmFtZTogc3RyaW5nLCBhcmdzPzogYW55W10sIGNhbGxiYWNrPzogKCkgPT4gdm9pZCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIGBleHBlY3RgIHRoZSBhY3R1YWwgZWxlbWVudCB0byBoYXZlIHRoZSB0ZXh0IGZvciB0aGUgZXhwZWN0ZWQgcmVzb3VyY2Ugc3RyaW5nLlxuICAgKiBVc2VzIGBTa3lBcHBSZXNvdXJjZXNTZXJ2aWNlLmdldFN0cmluZyhuYW1lLCBhcmdzKWAgdG8gZmV0Y2ggdGhlIGV4cGVjdGVkIHJlc291cmNlIHN0cmluZ1xuICAgKiBhbmQgY29tcGFyZXMgdXNpbmcgPT09LlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYGF3YWl0IGV4cGVjdEFzeW5jKGVsZW1lbnQpLnRvSGF2ZVJlc291cmNlVGV4dCgnZm9vX2Jhcl9rZXknKWAgaW5zdGVhZC5cbiAgICogQHBhcmFtIG5hbWUgVGhlIHJlc291cmNlIHN0cmluZyB0byBmZXRjaCBmcm9tIHRoZSByZXNvdXJjZSBmaWxlIGFuZCBjb21wYXJlIGFnYWluc3QuXG4gICAqIEBwYXJhbSBhcmdzIFRoZSBzdHJpbmcgcmVwbGFjZW1lbnQgYXJndW1lbnRzIGZvciB0aGUgZXhwZWN0ZWQgcmVzb3VyY2Ugc3RyaW5nLlxuICAgKiBAcGFyYW0gdHJpbVdoaXRlc3BhY2UgW3RydWVdIFdoZXRoZXIgb3Igbm90IHRvIHRyaW0gd2hpdGVzcGFjZSBmcm9tIHRoZSBhY3R1YWwgZWxlbWVudCB0ZXh0IGJlZm9yZSBjb21wYXJpc29uLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUgd2hlbiB0aGUgY29tcGFyaXNvbiBmYWlscy5cbiAgICovXG4gIHRvSGF2ZVJlc291cmNlVGV4dChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgYXJncz86IGFueVtdLFxuICAgIHRyaW1XaGl0ZXNwYWNlPzogYm9vbGVhbixcbiAgICBjYWxsYmFjaz86ICgpID0+IHZvaWQsXG4gICk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIGBleHBlY3RgIHRoZSBhY3R1YWwgZWxlbWVudCB0byBoYXZlIHRoZSB0ZXh0IGZvciB0aGUgZXhwZWN0ZWQgcmVzb3VyY2Ugc3RyaW5nLlxuICAgKiBVc2VzIGBTa3lBcHBSZXNvdXJjZXNTZXJ2aWNlLmdldFN0cmluZyhuYW1lLCBhcmdzKWAgdG8gZmV0Y2ggdGhlIGV4cGVjdGVkIHJlc291cmNlIHN0cmluZ1xuICAgKiBhbmQgY29tcGFyZXMgdGhlIHRva2VuaXplZCBlbGVtZW50IHRleHQgYWdhaW5zdCB0aGUgdGVtcGxhdGUuXG4gICAqIEVzc2VudGlhbGx5IHRoaXMgbWF0Y2hlcyBhbnkgdGV4dCB0aGF0IGhhcyB0aGUgbm9uLXBhcmFtZXRlcml6ZWQgdGV4dCBvZiB0aGUgdGVtcGxhdGUgaW4gdGhlIG9yZGVyIG9mIHRoZSB0ZW1wbGF0ZSxcbiAgICogcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgZWFjaCBvZiB0aGUgcGFyYW1ldGVycy5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBhd2FpdCBleHBlY3RBc3luYyhlbGVtZW50KS50b01hdGNoUmVzb3VyY2VUZW1wbGF0ZSgnZm9vX2Jhcl9rZXknKWAgaW5zdGVhZC5cbiAgICogQHBhcmFtIG5hbWUgVGhlIHJlc291cmNlIHN0cmluZyB0byBmZXRjaCBmcm9tIHRoZSByZXNvdXJjZSBmaWxlIGFuZCBjb21wYXJlIGFnYWluc3QuXG4gICAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gZXhlY3V0ZSB3aGVuIHRoZSBjb21wYXJpc29uIGZhaWxzLlxuICAgKi9cbiAgdG9NYXRjaFJlc291cmNlVGVtcGxhdGUobmFtZTogc3RyaW5nLCBjYWxsYmFjaz86ICgpID0+IHZvaWQpOiB2b2lkO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhbiBleHBlY3RhdGlvbiBmb3IgYSBzcGVjLlxuICogQHBhcmFtIGFjdHVhbCBBY3R1YWwgY29tcHV0ZWQgdmFsdWUgdG8gdGVzdCBleHBlY3RhdGlvbnMgYWdhaW5zdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdDxUPihhY3R1YWw6IFQpOiBTa3lNYXRjaGVyczxUPiB7XG4gIHJldHVybiB3aW5kb3dSZWYuZXhwZWN0KGFjdHVhbCk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGFzeW5jIGV4cGVjdGF0aW9uIGZvciBhIHNwZWMuXG4gKiBAcGFyYW0gYWN0dWFsIEFjdHVhbCBjb21wdXRlZCB2YWx1ZSB0byB0ZXN0IGV4cGVjdGF0aW9ucyBhZ2FpbnN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0QXN5bmM8VCwgVT4oXG4gIGFjdHVhbDogVCB8IFByb21pc2VMaWtlPFQ+LFxuKTogU2t5QXN5bmNNYXRjaGVyczxULCBVPiB7XG4gIHJldHVybiB3aW5kb3dSZWYuZXhwZWN0QXN5bmMoYWN0dWFsKTtcbn1cbiJdfQ==","import { By } from '@angular/platform-browser';\nexport class SkyBy {\n    static dataSkyId(skyId) {\n        return By.css(`[data-sky-id=\"${skyId}\"]`);\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2t5LWJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvdGVzdGluZy9zcmMvbGliL3F1ZXJ5LXByZWRpY2F0ZXMvc2t5LWJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUUvQyxNQUFNLE9BQU8sS0FBSztJQUNULE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBYTtRQUNuQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDNUMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVidWdFbGVtZW50LCBQcmVkaWNhdGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJ5IH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5cbmV4cG9ydCBjbGFzcyBTa3lCeSB7XG4gIHB1YmxpYyBzdGF0aWMgZGF0YVNreUlkKHNreUlkOiBzdHJpbmcpOiBQcmVkaWNhdGU8RGVidWdFbGVtZW50PiB7XG4gICAgcmV0dXJuIEJ5LmNzcyhgW2RhdGEtc2t5LWlkPVwiJHtza3lJZH1cIl1gKTtcbiAgfVxufVxuIl19","import { By } from '@angular/platform-browser';\nfunction getNativeEl(el) {\n    if (!el) {\n        return undefined;\n    }\n    if (el.nativeElement) {\n        return el.nativeElement;\n    }\n    return el;\n}\nexport class SkyAppTestUtility {\n    static fireDomEvent(element, eventName, options) {\n        if (!element) {\n            throw new Error(`Event \\`${eventName}\\` could not be fired because the element is not defined.`);\n        }\n        const defaults = {\n            bubbles: true,\n            cancelable: true,\n            keyboardEventInit: {},\n        };\n        const settings = Object.assign({}, defaults, options);\n        // Apply keyboard event options.\n        const event = Object.assign(document.createEvent('CustomEvent'), settings.keyboardEventInit, settings.customEventInit);\n        event.initEvent(eventName, settings.bubbles, settings.cancelable);\n        element.dispatchEvent(event);\n    }\n    /**\n     * Returns the inner text content of an element.\n     */\n    static getText(element) {\n        const nativeEl = getNativeEl(element);\n        if (nativeEl) {\n            return nativeEl.innerText.trim();\n        }\n        return undefined;\n    }\n    /**\n     * Returns true if the element exists on the page.\n     */\n    static isVisible(element) {\n        const nativeEl = getNativeEl(element);\n        if (nativeEl) {\n            return getComputedStyle(nativeEl).display !== 'none';\n        }\n        return undefined;\n    }\n    /**\n     * Sets the value of an input element and triggers its 'input' and 'change' events.\n     */\n    static setInputValue(element, value) {\n        const inputEvent = document.createEvent('Event');\n        inputEvent.initEvent('input', false, false);\n        const changeEvent = document.createEvent('Event');\n        changeEvent.initEvent('change', false, false);\n        element.value = value;\n        element.dispatchEvent(inputEvent);\n    }\n    /**\n     * Returns the URL of an element's background image, if it exists.\n     */\n    static getBackgroundImageUrl(el) {\n        const nativeEl = getNativeEl(el);\n        if (nativeEl) {\n            const backgroundImageUrl = getComputedStyle(nativeEl).backgroundImage;\n            /* istanbul ignore else */\n            // Browser will likely not return an empty value for the computed style,\n            // but leave the if statement here anyway as a sanity check.\n            if (backgroundImageUrl) {\n                const matches = /url\\(('|\")([^'\"]+)('|\")\\)/gi.exec(backgroundImageUrl);\n                if (matches && matches.length > 0) {\n                    return matches[2];\n                }\n            }\n        }\n        return undefined;\n    }\n    /**\n     * Returns a DebugElement representing a SKY UX component.\n     * @internal\n     * @param fixture The ComponentFixture where the SKY UX component resides.\n     * @param skyTestId The value of the `data-sky-id` property specified on the SKY UX component.\n     * @param componentSelector The selector name for the SKY UX component (e.g. 'sky-alert').\n     */\n    static getDebugElementByTestId(fixture, skyTestId, componentSelector) {\n        const skyEl = fixture.debugElement.query(By.css(`[data-sky-id=\"${skyTestId}\"]`));\n        if (!skyEl) {\n            throw new Error(`No element was found with a \\`data-sky-id\\` value of \"${skyTestId}\".`);\n        }\n        if (skyEl.name !== componentSelector) {\n            throw new Error(`The element with the test ID \"${skyTestId}\" is not a component of type ${componentSelector}.\"`);\n        }\n        return skyEl;\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC11dGlsaXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvdGVzdGluZy9zcmMvbGliL3Rlc3QtdXRpbGl0eS90ZXN0LXV0aWxpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBSS9DLFNBQVMsV0FBVyxDQUFDLEVBQU87SUFDMUIsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ1IsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELElBQUksRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sRUFBRSxDQUFDLGFBQWEsQ0FBQztJQUMxQixDQUFDO0lBRUQsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDO0FBRUQsTUFBTSxPQUFPLGlCQUFpQjtJQUNyQixNQUFNLENBQUMsWUFBWSxDQUN4QixPQUF1QyxFQUN2QyxTQUFpQixFQUNqQixPQUEwQztRQUUxQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixNQUFNLElBQUksS0FBSyxDQUNiLFdBQVcsU0FBUywyREFBMkQsQ0FDaEYsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRztZQUNmLE9BQU8sRUFBRSxJQUFJO1lBQ2IsVUFBVSxFQUFFLElBQUk7WUFDaEIsaUJBQWlCLEVBQUUsRUFBRTtTQUN0QixDQUFDO1FBRUYsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRXRELGdDQUFnQztRQUNoQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUN6QixRQUFRLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxFQUNuQyxRQUFRLENBQUMsaUJBQWlCLEVBQzFCLFFBQVEsQ0FBQyxlQUFlLENBQ3pCLENBQUM7UUFFRixLQUFLLENBQUMs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ZXNDb250ZW50IjpbImltcG9ydCB7IERlYnVnRWxlbWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tcG9uZW50Rml4dHVyZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvdGVzdGluZyc7XG5pbXBvcnQgeyBCeSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG5pbXBvcnQgeyBTa3lBcHBUZXN0VXRpbGl0eURvbUV2ZW50T3B0aW9ucyB9IGZyb20gJy4vdGVzdC11dGlsaXR5LWRvbS1ldmVudC1vcHRpb25zJztcblxuZnVuY3Rpb24gZ2V0TmF0aXZlRWwoZWw6IGFueSk6IGFueSB7XG4gIGlmICghZWwpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKGVsLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICByZXR1cm4gZWwubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiBlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFNreUFwcFRlc3RVdGlsaXR5IHtcbiAgcHVibGljIHN0YXRpYyBmaXJlRG9tRXZlbnQoXG4gICAgZWxlbWVudDogRXZlbnRUYXJnZXQgfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIGV2ZW50TmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBTa3lBcHBUZXN0VXRpbGl0eURvbUV2ZW50T3B0aW9ucyxcbiAgKTogdm9pZCB7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBFdmVudCBcXGAke2V2ZW50TmFtZX1cXGAgY291bGQgbm90IGJlIGZpcmVkIGJlY2F1c2UgdGhlIGVsZW1lbnQgaXMgbm90IGRlZmluZWQuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgY2FuY2VsYWJsZTogdHJ1ZSxcbiAgICAgIGtleWJvYXJkRXZlbnRJbml0OiB7fSxcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cywgb3B0aW9ucyk7XG5cbiAgICAvLyBBcHBseSBrZXlib2FyZCBldmVudCBvcHRpb25zLlxuICAgIGNvbnN0IGV2ZW50ID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdDdXN0b21FdmVudCcpLFxuICAgICAgc2V0dGluZ3Mua2V5Ym9hcmRFdmVudEluaXQsXG4gICAgICBzZXR0aW5ncy5jdXN0b21FdmVudEluaXQsXG4gICAgKTtcblxuICAgIGV2ZW50LmluaXRFdmVudChldmVudE5hbWUsIHNldHRpbmdzLmJ1YmJsZXMsIHNldHRpbmdzLmNhbmNlbGFibGUpO1xuICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgaW5uZXIgdGV4dCBjb250ZW50IG9mIGFuIGVsZW1lbnQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldFRleHQoZWxlbWVudDogYW55KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBuYXRpdmVFbCA9IGdldE5hdGl2ZUVsKGVsZW1lbnQpO1xuXG4gICAgaWYgKG5hdGl2ZUVsKSB7XG4gICAgICByZXR1cm4gbmF0aXZlRWwuaW5uZXJUZXh0LnRyaW0oKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZWxlbWVudCBleGlzdHMgb24gdGhlIHBhZ2UuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlzVmlzaWJsZShlbGVtZW50OiBhbnkpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBuYXRpdmVFbCA9IGdldE5hdGl2ZUVsKGVsZW1lbnQpO1xuXG4gICAgaWYgKG5hdGl2ZUVsKSB7XG4gICAgICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShuYXRpdmVFbCkuZGlzcGxheSAhPT0gJ25vbmUnO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdmFsdWUgb2YgYW4gaW5wdXQgZWxlbWVudCBhbmQgdHJpZ2dlcnMgaXRzICdpbnB1dCcgYW5kICdjaGFuZ2UnIGV2ZW50cy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc2V0SW5wdXRWYWx1ZShlbGVtZW50OiBhbnksIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dEV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgaW5wdXRFdmVudC5pbml0RXZlbnQoJ2lucHV0JywgZmFsc2UsIGZhbHNlKTtcblxuICAgIGNvbnN0IGNoYW5nZUV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgY2hhbmdlRXZlbnQuaW5pdEV2ZW50KCdjaGFuZ2UnLCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgZWxlbWVudC52YWx1ZSA9IHZhbHVlO1xuXG4gICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KGlucHV0RXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIFVSTCBvZiBhbiBlbGVtZW50J3MgYmFja2dyb3VuZCBpbWFnZSwgaWYgaXQgZXhpc3RzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRCYWNrZ3JvdW5kSW1hZ2VVcmwoZWw6IGFueSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbmF0aXZlRWwgPSBnZXROYXRpdmVFbChlbCk7XG5cbiAgICBpZiAobmF0aXZlRWwpIHtcbiAgICAgIGNvbnN0IGJhY2tncm91bmRJbWFnZVVybCA9IGdldENvbXB1dGVkU3R5bGUobmF0aXZlRWwpLmJhY2tncm91bmRJbWFnZTtcblxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIC8vIEJyb3dzZXIgd2lsbCBsaWtlbHkgbm90IHJldHVybiBhbiBlbXB0eSB2YWx1ZSBmb3IgdGhlIGNvbXB1dGVkIHN0eWxlLFxuICAgICAgLy8gYnV0IGxlYXZlIHRoZSBpZiBzdGF0ZW1lbnQgaGVyZSBhbnl3YXkgYXMgYSBzYW5pdHkgY2hlY2suXG4gICAgICBpZiAoYmFja2dyb3VuZEltYWdlVXJsKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSAvdXJsXFwoKCd8XCIpKFteJ1wiXSspKCd8XCIpXFwpL2dpLmV4ZWMoYmFja2dyb3VuZEltYWdlVXJsKTtcblxuICAgICAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4gbWF0Y2hlc1syXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIERlYnVnRWxlbWVudCByZXByZXNlbnRpbmcgYSBTS1kgVVggY29tcG9uZW50LlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHBhcmFtIGZpeHR1cmUgVGhlIENvbXBvbmVudEZpeHR1cmUgd2hlcmUgdGhlIFNLWSBVWCBjb21wb25lbnQgcmVzaWRlcy5cbiAgICogQHBhcmFtIHNreVRlc3RJZCBUaGUgdmFsdWUgb2YgdGhlIGBkYXRhLXNreS1pZGAgcHJvcGVydHkgc3BlY2lmaWVkIG9uIHRoZSBTS1kgVVggY29tcG9uZW50LlxuICAgKiBAcGFyYW0gY29tcG9uZW50U2VsZWN0b3IgVGhlIHNlbGVjdG9yIG5hbWUgZm9yIHRoZSBTS1kgVVggY29tcG9uZW50IChlLmcuICdza3ktYWxlcnQnKS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0RGVidWdFbGVtZW50QnlUZXN0SWQoXG4gICAgZml4dHVyZTogQ29tcG9uZW50Rml4dHVyZTxhbnk+LFxuICAgIHNreVRlc3RJZDogc3RyaW5nLFxuICAgIGNvbXBvbmVudFNlbGVjdG9yOiBzdHJpbmcsXG4gICk6IERlYnVnRWxlbWVudCB7XG4gICAgY29uc3Qgc2t5RWwgPSBmaXh0dXJlLmRlYnVnRWxlbWVudC5xdWVyeShcbiAgICAgIEJ5LmNzcyhgW2RhdGEtc2t5LWlkPVwiJHtza3lUZXN0SWR9XCJdYCksXG4gICAgKTtcblxuICAgIGlmICghc2t5RWwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE5vIGVsZW1lbnQgd2FzIGZvdW5kIHdpdGggYSBcXGBkYXRhLXNreS1pZFxcYCB2YWx1ZSBvZiBcIiR7c2t5VGVzdElkfVwiLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChza3lFbC5uYW1lICE9PSBjb21wb25lbnRTZWxlY3Rvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGhlIGVsZW1lbnQgd2l0aCB0aGUgdGVzdCBJRCBcIiR7c2t5VGVzdElkfVwiIGlzIG5vdCBhIGNvbXBvbmVudCBvZiB0eXBlICR7Y29tcG9uZW50U2VsZWN0b3J9LlwiYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNreUVsO1xuICB9XG59XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2t5dXgtc2RrLXRlc3RpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3Nkay90ZXN0aW5nL3NyYy9za3l1eC1zZGstdGVzdGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}