testcafe
Version:
Automated browser testing for the modern web development stack.
144 lines • 48 kB
JavaScript
"use strict";
// -------------------------------------------------------------
// WARNING: this file is used by both the client and the server.
// Do not use any browser or node-specific API!
// -------------------------------------------------------------
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const types_1 = require("../types");
const error_hints_1 = __importDefault(require("../../browser/connection/error-hints"));
const string_1 = require("../../utils/string");
const skip_js_errors_option_names_1 = require("../../configuration/skip-js-errors-option-names");
const DOCUMENTATION_LINKS = {
TEST_SOURCE_PARAMETER: 'https://testcafe.io/documentation/402639/reference/command-line-interface#file-pathglob-pattern',
FILTER_SETTINGS: 'https://testcafe.io/documentation/402638/reference/configuration-file#filter',
HEADLESS_MODE: 'https://testcafe.io/documentation/402828/guides/concepts/browsers#test-in-headless-mode',
CUSTOM_ACTIONS: 'https://testcafe.io/documentation/404150/guides/advanced-guides/custom-test-actions',
};
exports.default = {
[]: 'Cannot launch multiple live mode instances of the TestCafe test runner.',
[]: 'Cannot launch the same live mode instance of the TestCafe test runner multiple times.',
[]: 'The {userAgent} browser disconnected. If you did not close the browser yourself, browser performance or network issues may be at fault.',
[]: 'The following browsers disconnected: {userAgents}. Cannot run further tests.',
[]: '"{browser}" disconnected during test execution.',
[]: 'Cannot establish one or more browser connections.',
[]: 'Cannot find the browser. "{browser}" is neither a known browser alias, nor a path to an executable file.',
[]: 'Cannot find the "{providerName}" browser provider.',
[]: 'You have not specified a browser.',
[]: 'Could not find test files at the following location: "{cwd}".\n' +
'Check patterns for errors:\n\n' +
'{sourceList}\n\n' +
'or launch TestCafe from a different directory.\n' +
`For more information on how to specify test locations, see ${DOCUMENTATION_LINKS.TEST_SOURCE_PARAMETER}.`,
[]: "Source files do not contain valid 'fixture' and 'test' declarations.",
[]: 'No tests match your filter.\n' +
`See ${DOCUMENTATION_LINKS.FILTER_SETTINGS}.`,
[]: 'Reporters cannot share output streams. The following reporters interfere with one another: "{reporters}".',
[]: 'The "{optionName}" option does not contain a valid regular expression.',
[]: 'The "{optionName}" option does not contain a valid key-value pair.',
[]: 'The "{optionName}" option does not exist. Specify "attemptLimit" and "successThreshold" to configure quarantine mode.',
[]: 'The value of "attemptLimit" ({attemptLimit}) should be greater then the value of "successThreshold" ({successThreshold}).',
[]: 'The "{attemptLimit}" parameter only accepts values of {MIN_ATTEMPT_LIMIT} and up.',
[]: 'The "{successThreshold}" parameter only accepts values of {MIN_SUCCESS_THRESHOLD} and up.',
[]: 'Speed should be a number between 0.01 and 1.',
[]: 'The concurrency factor should be an integer greater than or equal to 1.',
[]: 'The number of remote browsers should be divisible by the concurrency factor.',
[]: 'The value of the "concurrency" option includes the CDP port.',
[]: 'The "--ports" option requires two arguments.',
[]: 'Port {portNum} is occupied by another process.',
[]: 'Cannot resolve hostname "{hostname}".',
[]: 'Cannot find a test file at "{path}".',
[]: 'Cannot initialize a ClientFunction because {#instantiationCallsiteName} is {type}, and not a function.',
[]: 'Cannot initialize a Selector because {#instantiationCallsiteName} is {type}, and not one of the following: a CSS selector string, a Selector object, a node snapshot, a function, or a Promise returned by a Selector.',
[]: '{#instantiationCallsiteName} does not have test controller access. To execute {#instantiationCallsiteName} from a Node.js API callback, bind the test controller object to the function with the `.with({ boundTestRun: t })` method. Note that you cannot execute {#instantiationCallsiteName} outside test code.',
[]: '"request" does not have test controller access.',
[]: `{
[]: 'Cannot resolve the "boundTestRun" option because its value is not a test controller.',
[]: '{smthg} ({actual}) is not of expected type ({type}).',
[]: 'Invalid {what}: "{url}". TestCafe cannot execute the test because the {what} includes the {protocol} protocol. TestCafe supports the following protocols: http://, https:// and file://.',
[]: `The action does not have implicit test controller access. Reference the 't' object to gain it.`,
[]: 'A Promise timed out.',
[]: 'You cannot manage advanced video parameters when the video recording capability is off. Specify the root storage folder for video content to enable video recording.',
[]: 'You cannot call the "{methodName}" method more than once. Specify an array of parameters instead.',
[]: "Specify a file name or a writable stream as the reporter's output target.",
[]: 'Unable to read the file referenced by the "{option}" ssl option ("{path}"). Error details:\n' +
'\n' +
'{err}',
[]: 'Cannot prepare tests due to the following error:\n' +
'\n' +
'{errMessage}',
[]: 'Cannot parse a raw test file at "{path}" due to the following error:\n' +
'\n' +
'{errMessage}',
[]: 'The web application failed with the following error:\n' +
'\n' +
'{errMessage}',
[]: 'Unable to open the "{alias}" browser due to the following error:\n' +
'\n' +
'{errMessage}',
[]: 'Attempt to configure a request hook resulted in the following error:\n' +
'\n' +
'{requestHookName}: {errMsg}',
[]: 'There are forbidden characters in the "{screenshotPath}" {screenshotPathType}:\n' +
' {forbiddenCharsDescription}',
[]: 'TestCafe cannot record videos because it cannot locate the FFmpeg executable. Try one of the following solutions:\n' +
'\n' +
'* add the path of the FFmpeg installation directory to the PATH environment variable,\n' +
'* specify the path of the FFmpeg executable in the FFMPEG_PATH environment variable or the ffmpegPath option,\n' +
'* install the @ffmpeg-installer/ffmpeg npm package.',
[]: 'Failed to read the "{path}" configuration file from disk. Error details:\n' +
'\n' +
'{err}',
[]: 'Failed to parse the "{path}" configuration file. The file contains invalid JSON syntax. \n\nError details:\n' +
'\n' +
'{err}',
[]: 'Failed to load the "{name}" reporter. Please check the parameter for errors. Error details:\n' +
'\n' +
'{err}',
[]: '"{filePath}" is not a valid TypeScript configuration file.',
[]: 'Initialize your client script with one of the following: a JavaScript script, a JavaScript file path, or the name of a JavaScript module.',
[]: 'Specify the base path for the client script file.',
[]: 'Client scripts can only have one initializer: JavaScript code, a JavaScript file path, or the name of a JavaScript module.',
[]: 'Cannot load a client script from {path}.\n{errorMessage}',
[]: 'A client script tried to load a JavaScript module that TestCafe cannot locate:\n\n{errorMessage}.',
[]: 'This method cannot be called on a service host.',
[]: 'The specified payload is too large to form an IPC packet.',
[]: 'Cannot process a malformed IPC message.',
[]: 'Cannot create an IPC message due to an unexpected IPC head packet.',
[]: 'Cannot create an IPC message due to an unexpected IPC body packet.',
[]: 'Cannot create an IPC message due to an unexpected IPC tail packet.',
[]: 'Your Linux installation does not have a graphic subsystem to run {browserAlias} with a GUI. ' +
'You can launch the browser in headless mode. ' +
'If you use a portable browser executable, ' +
"specify the browser alias before the path instead of the 'path' prefix. " +
`For more information, see ${DOCUMENTATION_LINKS.HEADLESS_MODE}`,
[]: 'The "{methodName}" method of the "{reporterName}" reporter produced an uncaught error. Error details:\n{originalError}',
[]: 'Your Role includes a relative login page URL, but the "baseUrl" option is not set.\nUse an absolute URL or add the baseUrl option to your configuration file or CLI launch string.',
[]: 'Cannot load the TypeScript compiler.\n{originErrorMessage}.',
[]: 'You cannot specify options for the {noncustomizableCompilerList} compiler{suffix}.',
[]: 'Cannot enable the \'retryTestPages\' option. Apply one of the following two solutions:\n' +
'-- set the \'hostname\' option to \'localhost\'\n' +
'-- run TestCafe over HTTPS\n',
[]: '{originErrorMessage}\n{numOfNotOpenedConnection} of {numOfAllConnections} browser connections have not been established:\n{listOfNotOpenedConnections}\n\nHints:\n{listOfHints}',
[]: 'The host machine may not be powerful enough to handle the specified concurrency factor ({concurrencyFactor}). ' +
'Decrease the concurrency factor or allocate more computing resources to the host machine.',
[]: 'Increase the Browser Initialization Timeout if its value is too low (currently: {browserInitTimeoutMsg}). The timeout determines how long TestCafe waits for browsers to be ready.',
[]: 'The error can also be caused by network issues or remote device failure. Make sure that your network connection is stable and you can reach the remote device.',
[]: 'Cannot locate a TestCafe configuration file at {filePath}. Either the file does not exist, or the path is invalid.',
[]: 'The value of the baseUrl argument cannot be relative: "{baseUrl}"',
[]: 'The request url is invalid ({actualValue}).',
[]: 'The request was interrupted by an error:\n{message}',
[]: `The "{optionName}" option does not exist. Use the following options to configure skipJsErrors: ${(0, string_1.getConcatenatedValuesString)(Object.keys(skip_js_errors_option_names_1.SKIP_JS_ERRORS_OPTIONS_OBJECT_OPTION_NAMES))}.`,
[]: `The "{optionName}" option does not exist. Use the following options to configure skipJsErrors callbacks: ${(0, string_1.getConcatenatedValuesString)(Object.keys(skip_js_errors_option_names_1.SKIP_JS_ERRORS_CALLBACK_WITH_OPTIONS_OPTION_NAMES))}.`,
[]: `TestCafe terminated the test run. The "{path}" file contains an unknown Chrome User Flow action "{action}". Remove the action to continue. Refer to the following article for the definitive list of supported Chrome User Flow actions: https://testcafe.io/documentation/403998/guides/experimental-capabilities/chrome-replay-support#supported-replay-actions`,
[]: `The value of the customActions option does not belong to type Object. Refer to the following article for custom action setup instructions: ${DOCUMENTATION_LINKS.CUSTOM_ACTIONS}`,
[]: `TestCafe cannot parse the "{actionName}" action, because the action definition is invalid. Format the definition in accordance with the custom actions guide: ${DOCUMENTATION_LINKS.CUSTOM_ACTIONS}`,
[]: 'Cannot import the {esModule} ECMAScript module from {targetFile}. Use a dynamic import() statement or enable the --esm CLI flag.',
[]: 'The "{browser}" do not support the Native Automation mode. Use the "disable native automation" option to continue.',
[]: 'TestCafe cannot run legacy tests in Native Automation mode. Disable native automation to continue.',
[]: 'Cannot initialize the test run. When TestCafe uses native automation, it can only launch browsers with an empty user profile. Disable native automation, or remove the "userProfile" suffix from the following browser aliases: "{browsers}".',
};
module.exports = exports.default;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Vycm9ycy9ydW50aW1lL3RlbXBsYXRlcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsZ0VBQWdFO0FBQ2hFLGdFQUFnRTtBQUNoRSwrQ0FBK0M7QUFDL0MsZ0VBQWdFOzs7OztBQUVoRSxvQ0FBMEM7QUFDMUMsdUZBQThFO0FBQzlFLCtDQUFpRTtBQUNqRSxpR0FBZ0s7QUFFaEssTUFBTSxtQkFBbUIsR0FBRztJQUN4QixxQkFBcUIsRUFBRSxpR0FBaUc7SUFDeEgsZUFBZSxFQUFRLDhFQUE4RTtJQUNyRyxhQUFhLEVBQVUseUZBQXlGO0lBQ2hILGNBQWMsRUFBUyxxRkFBcUY7Q0FDL0csQ0FBQztBQUVGLGtCQUFlO0lBQ1gsQ0FBQyxzQkFBYyxDQUFDLG1DQUFtQyxDQUFDLEVBQUcseUVBQXlFO0lBQ2hJLENBQUMsc0JBQWMsQ0FBQyxvQ0FBb0MsQ0FBQyxFQUFFLHVGQUF1RjtJQUM5SSxDQUFDLHNCQUFjLENBQUMsbUJBQW1CLENBQUMsRUFBbUIseUlBQXlJO0lBQ2hNLENBQUMsc0JBQWMsQ0FBQyxvQ0FBb0MsQ0FBQyxFQUFFLDhFQUE4RTtJQUNySSxDQUFDLHNCQUFjLENBQUMsbUNBQW1DLENBQUMsRUFBRyxpREFBaUQ7SUFDeEcsQ0FBQyxzQkFBYyxDQUFDLGdDQUFnQyxDQUFDLEVBQU0sbURBQW1EO0lBQzFHLENBQUMsc0JBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFxQiwwR0FBMEc7SUFDakssQ0FBQyxzQkFBYyxDQUFDLHVCQUF1QixDQUFDLEVBQWUsb0RBQW9EO0lBQzNHLENBQUMsc0JBQWMsQ0FBQyxhQUFhLENBQUMsRUFBeUIsbUNBQW1DO0lBQzFGLENBQUMsc0JBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFxQixpRUFBaUU7UUFDakUsZ0NBQWdDO1FBQ2hDLGtCQUFrQjtRQUNsQixrREFBa0Q7UUFDbEQsOERBQThELG1CQUFtQixDQUFD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QyxJQUFJLENBQUMsd0VBQTBDLENBQUMsQ0FBQyxHQUFHO0lBQzFQLENBQUMsc0JBQWMsQ0FBQyw4Q0FBOEMsQ0FBQyxFQUFFLDRHQUE0RyxJQUFBLG9DQUEyQixFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsK0VBQWlELENBQUMsQ0FBQyxHQUFHO0lBQzNRLENBQUMsc0JBQWMsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFvQixtV0FBbVc7SUFDcGEsQ0FBQyxzQkFBYyxDQUFDLDhCQUE4QixDQUFDLEVBQWtCLDhJQUErSSxtQkFBbUIsQ0FBQyxjQUFlLEVBQUU7SUFDclAsQ0FBQyxzQkFBYyxDQUFDLHVCQUF1QixDQUFDLEVBQXlCLGlLQUFrSyxtQkFBbUIsQ0FBQyxjQUFlLEVBQUU7SUFDeFEsQ0FBQyxzQkFBYyxDQUFDLDBCQUEwQixDQUFDLEVBQXNCLGtJQUFrSTtJQUNuTSxDQUFDLHNCQUFjLENBQUMseUNBQXlDLENBQUMsRUFBTyxvSEFBb0g7SUFDckwsQ0FBQyxzQkFBYyxDQUFDLDBDQUEwQyxDQUFDLEVBQU0sb0dBQW9HO0lBQ3JLLENBQUMsc0JBQWMsQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUFnQiwrT0FBK087Q0FDblQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFdBUk5JTkc6IHRoaXMgZmlsZSBpcyB1c2VkIGJ5IGJvdGggdGhlIGNsaWVudCBhbmQgdGhlIHNlcnZlci5cbi8vIERvIG5vdCB1c2UgYW55IGJyb3dzZXIgb3Igbm9kZS1zcGVjaWZpYyBBUEkhXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmltcG9ydCB7IFJVTlRJTUVfRVJST1JTIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IEJyb3dzZXJDb25uZWN0aW9uRXJyb3JIaW50IGZyb20gJy4uLy4uL2Jyb3dzZXIvY29ubmVjdGlvbi9lcnJvci1oaW50cyc7XG5pbXBvcnQgeyBnZXRDb25jYXRlbmF0ZWRWYWx1ZXNTdHJpbmcgfSBmcm9tICcuLi8uLi91dGlscy9zdHJpbmcnO1xuaW1wb3J0IHsgU0tJUF9KU19FUlJPUlNfT1BUSU9OU19PQkpFQ1RfT1BUSU9OX05BTUVTLCBTS0lQX0pTX0VSUk9SU19DQUxMQkFDS19XSVRIX09QVElPTlNfT1BUSU9OX05BTUVTIH0gZnJvbSAnLi4vLi4vY29uZmlndXJhdGlvbi9za2lwLWpzLWVycm9ycy1vcHRpb24tbmFtZXMnO1xuXG5jb25zdCBET0NVTUVOVEFUSU9OX0xJTktTID0ge1xuICAgIFRFU1RfU09VUkNFX1BBUkFNRVRFUjogJ2h0dHBzOi8vdGVzdGNhZmUuaW8vZG9jdW1lbnRhdGlvbi80MDI2MzkvcmVmZXJlbmNlL2NvbW1hbmQtbGluZS1pbnRlcmZhY2UjZmlsZS1wYXRoZ2xvYi1wYXR0ZXJuJyxcbiAgICBGSUxURVJfU0VUVElOR1M6ICAgICAgICdodHRwczovL3Rlc3RjYWZlLmlvL2RvY3VtZW50YXRpb24vNDAyNjM4L3JlZmVyZW5jZS9jb25maWd1cmF0aW9uLWZpbGUjZmlsdGVyJyxcbiAgICBIRUFETEVTU19NT0RFOiAgICAgICAgICdodHRwczovL3Rlc3RjYWZlLmlvL2RvY3VtZW50YXRpb24vNDAyODI4L2d1aWRlcy9jb25jZXB0cy9icm93c2VycyN0ZXN0LWluLWhlYWRsZXNzLW1vZGUnLFxuICAgIENVU1RPTV9BQ1RJT05TOiAgICAgICAgJ2h0dHBzOi8vdGVzdGNhZmUuaW8vZG9jdW1lbnRhdGlvbi80MDQxNTAvZ3VpZGVzL2FkdmFuY2VkLWd1aWRlcy9jdXN0b20tdGVzdC1hY3Rpb25zJyxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90Q3JlYXRlTXVsdGlwbGVMaXZlTW9kZVJ1bm5lcnNdOiAgJ0Nhbm5vdCBsYXVuY2ggbXVsdGlwbGUgbGl2ZSBtb2RlIGluc3RhbmNlcyBvZiB0aGUgVGVzdENhZmUgdGVzdCBydW5uZXIuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90UnVuTGl2ZU1vZGVSdW5uZXJNdWx0aXBsZVRpbWVzXTogJ0Nhbm5vdCBsYXVuY2ggdGhlIHNhbWUgbGl2ZSBtb2RlIGluc3RhbmNlIG9mIHRoZSBUZXN0Q2FmZSB0ZXN0IHJ1bm5lciBtdWx0aXBsZSB0aW1lcy4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5icm93c2VyRGlzY29ubmVjdGVkXTogICAgICAgICAgICAgICAgICAnVGhlIHt1c2VyQWdlbnR9IGJyb3dzZXIgZGlzY29ubmVjdGVkLiBJZiB5b3UgZGlkIG5vdCBjbG9zZSB0aGUgYnJvd3NlciB5b3Vyc2VsZiwgYnJvd3NlciBwZXJmb3JtYW5jZSBvciBuZXR3b3JrIGlzc3VlcyBtYXkgYmUgYXQgZmF1bHQuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90UnVuQWdhaW5zdERpc2Nvbm5lY3RlZEJyb3dzZXJzXTogJ1RoZSBmb2xsb3dpbmcgYnJvd3NlcnMgZGlzY29ubmVjdGVkOiB7dXNlckFnZW50c30uIENhbm5vdCBydW4gZnVydGhlciB0ZXN0cy4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy50ZXN0UnVuUmVxdWVzdEluRGlzY29ubmVjdGVkQnJvd3Nlcl06ICAnXCJ7YnJvd3Nlcn1cIiBkaXNjb25uZWN0ZWQgZHVyaW5nIHRlc3QgZXhlY3V0aW9uLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmNhbm5vdEVzdGFibGlzaEJyb3dzZXJDb25uZWN0aW9uXTogICAgICdDYW5ub3QgZXN0YWJsaXNoIG9uZSBvciBtb3JlIGJyb3dzZXIgY29ubmVjdGlvbnMuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90RmluZEJyb3dzZXJdOiAgICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCBmaW5kIHRoZSBicm93c2VyLiBcInticm93c2VyfVwiIGlzIG5laXRoZXIgYSBrbm93biBicm93c2VyIGFsaWFzLCBub3IgYSBwYXRoIHRvIGFuIGV4ZWN1dGFibGUgZmlsZS4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5icm93c2VyUHJvdmlkZXJOb3RGb3VuZF06ICAgICAgICAgICAgICAnQ2Fubm90IGZpbmQgdGhlIFwie3Byb3ZpZGVyTmFtZX1cIiBicm93c2VyIHByb3ZpZGVyLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmJyb3dzZXJOb3RTZXRdOiAgICAgICAgICAgICAgICAgICAgICAgICdZb3UgaGF2ZSBub3Qgc3BlY2lmaWVkIGEgYnJvd3Nlci4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy50ZXN0RmlsZXNOb3RGb3VuZF06ICAgICAgICAgICAgICAgICAgICAnQ291bGQgbm90IGZpbmQgdGVzdCBmaWxlcyBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uOiBcIntjd2R9XCIuXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDaGVjayBwYXR0ZXJucyBmb3IgZXJyb3JzOlxcblxcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAne3NvdXJjZUxpc3R9XFxuXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvciBsYXVuY2ggVGVzdENhZmUgZnJvbSBhIGRpZmZlcmVudCBkaXJlY3RvcnkuXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gc3BlY2lmeSB0ZXN0IGxvY2F0aW9ucywgc2VlICR7RE9DVU1FTlRBVElPTl9MSU5LUy5URVNUX1NPVVJDRV9QQVJBTUVURVJ9LmAsXG5cbiAgICBbUlVOVElNRV9FUlJPUlMubm9UZXN0c1RvUnVuXTogXCJTb3VyY2UgZmlsZXMgZG8gbm90IGNvbnRhaW4gdmFsaWQgJ2ZpeHR1cmUnIGFuZCAndGVzdCcgZGVjbGFyYXRpb25zLlwiLFxuXG4gICAgW1JVTlRJTUVfRVJST1JTLm5vVGVzdHNUb1J1bkR1ZUZpbHRlcmluZ106ICdObyB0ZXN0cyBtYXRjaCB5b3VyIGZpbHRlci5cXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFNlZSAke0RPQ1VNRU5UQVRJT05fTElOS1MuRklMVEVSX1NFVFRJTkdTfS5gLFxuICAgIFtSVU5USU1FX0VSUk9SUy5tdWx0aXBsZVNhbWVTdHJlYW1SZXBvcnRlcnNdOiAgICAgICAgICAgICAgICAgICAgICAgICdSZXBvcnRlcnMgY2Fubm90IHNoYXJlIG91dHB1dCBzdHJlYW1zLiBUaGUgZm9sbG93aW5nIHJlcG9ydGVycyBpbnRlcmZlcmUgd2l0aCBvbmUgYW5vdGhlcjogXCJ7cmVwb3J0ZXJzfVwiLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLm9wdGlvblZhbHVlSXNOb3RWYWxpZFJlZ0V4cF06ICAgICAgICAgICAgICAgICAgICAgICAgJ1RoZSBcIntvcHRpb25OYW1lfVwiIG9wdGlvbiBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgcmVndWxhciBleHByZXNzaW9uLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLm9wdGlvblZhbHVlSXNOb3RWYWxpZEtleVZhbHVlXTogICAgICAgICAgICAgICAgICAgICAgJ1RoZSBcIntvcHRpb25OYW1lfVwiIG9wdGlvbiBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQga2V5LXZhbHVlIHBhaXIuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuaW52YWxpZFF1YXJhbnRpbmVPcHRpb25dOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGhlIFwie29wdGlvbk5hbWV9XCIgb3B0aW9uIGRvZXMgbm90IGV4aXN0LiBTcGVjaWZ5IFwiYXR0ZW1wdExpbWl0XCIgYW5kIFwic3VjY2Vzc1RocmVzaG9sZFwiIHRvIGNvbmZpZ3VyZSBxdWFyYW50aW5lIG1vZGUuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuaW52YWxpZFF1YXJhbnRpbmVQYXJhbWV0ZXJzUmF0aW9dOiAgICAgICAgICAgICAgICAgICAnVGhlIHZhbHVlIG9mIFwiYXR0ZW1wdExpbWl0XCIgKHthdHRlbXB0TGltaXR9KSBzaG91bGQgYmUgZ3JlYXRlciB0aGVuIHRoZSB2YWx1ZSBvZiBcInN1Y2Nlc3NUaHJlc2hvbGRcIiAoe3N1Y2Nlc3NUaHJlc2hvbGR9KS4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5pbnZhbGlkQXR0ZW1wdExpbWl0VmFsdWVdOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdUaGUgXCJ7YXR0ZW1wdExpbWl0fVwiIHBhcmFtZXRlciBvbmx5IGFjY2VwdHMgdmFsdWVzIG9mIHtNSU5fQVRURU1QVF9MSU1JVH0gYW5kIHVwLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmludmFsaWRTdWNjZXNzVGhyZXNob2xkVmFsdWVdOiAgICAgICAgICAgICAgICAgICAgICAgJ1RoZSBcIntzdWNjZXNzVGhyZXNob2xkfVwiIHBhcmFtZXRlciBvbmx5IGFjY2VwdHMgdmFsdWVzIG9mIHtNSU5fU1VDQ0VTU19USFJFU0hPTER9IGFuZCB1cC4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5pbnZhbGlkU3BlZWRWYWx1ZV06ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTcGVlZCBzaG91bGQgYmUgYSBudW1iZXIgYmV0d2VlbiAwLjAxIGFuZCAxLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmludmFsaWRDb25jdXJyZW5jeUZhY3Rvcl06ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RoZSBjb25jdXJyZW5jeSBmYWN0b3Igc2hvdWxkIGJlIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90RGl2aWRlUmVtb3Rlc0NvdW50QnlDb25jdXJyZW5jeV06ICAgICAgICAgICAgICAnVGhlIG51bWJlciBvZiByZW1vdGUgYnJvd3NlcnMgc2hvdWxkIGJlIGRpdmlzaWJsZSBieSB0aGUgY29uY3VycmVuY3kgZmFjdG9yLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmNhbm5vdFNldENvbmN1cnJlbmN5V2l0aENEUFBvcnRdOiAgICAgICAgICAgICAgICAgICAgJ1RoZSB2YWx1ZSBvZiB0aGUgXCJjb25jdXJyZW5jeVwiIG9wdGlvbiBpbmNsdWRlcyB0aGUgQ0RQIHBvcnQuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMucG9ydHNPcHRpb25SZXF1aXJlc1R3b051bWJlcnNdOiAgICAgICAgICAgICAgICAgICAgICAnVGhlIFwiLS1wb3J0c1wiIG9wdGlvbiByZXF1aXJlcyB0d28gYXJndW1lbnRzLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLnBvcnRJc05vdEZyZWVdOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BvcnQge3BvcnROdW19IGlzIG9jY3VwaWVkIGJ5IGFub3RoZXIgcHJvY2Vzcy4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5pbnZhbGlkSG9zdG5hbWVdOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDYW5ub3QgcmVzb2x2ZSBob3N0bmFtZSBcIntob3N0bmFtZX1cIi4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5jYW5ub3RGaW5kU3BlY2lmaWVkVGVzdFNvdXJjZV06ICAgICAgICAgICAgICAgICAgICAgICdDYW5ub3QgZmluZCBhIHRlc3QgZmlsZSBhdCBcIntwYXRofVwiLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmNsaWVudEZ1bmN0aW9uQ29kZUlzTm90QUZ1bmN0aW9uXTogICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCBpbml0aWFsaXplIGEgQ2xpZW50RnVuY3Rpb24gYmVjYXVzZSB7I2luc3RhbnRpYXRpb25DYWxsc2l0ZU5hbWV9IGlzIHt0eXBlfSwgYW5kIG5vdCBhIGZ1bmN0aW9uLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLnNlbGVjdG9ySW5pdGlhbGl6ZWRXaXRoV3JvbmdUeXBlXTogICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCBpbml0aWFsaXplIGEgU2VsZWN0b3IgYmVjYXVzZSB7I2luc3RhbnRpYXRpb25DYWxsc2l0ZU5hbWV9IGlzIHt0eXBlfSwgYW5kIG5vdCBvbmUgb2YgdGhlIGZvbGxvd2luZzogYSBDU1Mgc2VsZWN0b3Igc3RyaW5nLCBhIFNlbGVjdG9yIG9iamVjdCwgYSBub2RlIHNuYXBzaG90LCBhIGZ1bmN0aW9uLCBvciBhIFByb21pc2UgcmV0dXJuZWQgYnkgYSBTZWxlY3Rvci4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5jbGllbnRGdW5jdGlvbkNhbm5vdFJlc29sdmVUZXN0UnVuXTogICAgICAgICAgICAgICAgICd7I2luc3RhbnRpYXRpb25DYWxsc2l0ZU5hbWV9IGRvZXMgbm90IGhhdmUgdGVzdCBjb250cm9sbGVyIGFjY2Vzcy4gVG8gZXhlY3V0ZSB7I2luc3RhbnRpYXRpb25DYWxsc2l0ZU5hbWV9IGZyb20gYSBOb2RlLmpzIEFQSSBjYWxsYmFjaywgYmluZCB0aGUgdGVzdCBjb250cm9sbGVyIG9iamVjdCB0byB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgYC53aXRoKHsgYm91bmRUZXN0UnVuOiB0IH0pYCBtZXRob2QuIE5vdGUgdGhhdCB5b3UgY2Fubm90IGV4ZWN1dGUgeyNpbnN0YW50aWF0aW9uQ2FsbHNpdGVOYW1lfSBvdXRzaWRlIHRlc3QgY29kZS4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5yZXF1ZXN0Q2Fubm90UmVzb2x2ZVRlc3RSdW5dOiAgICAgICAgICAgICAgICAgICAgICAgICdcInJlcXVlc3RcIiBkb2VzIG5vdCBoYXZlIHRlc3QgY29udHJvbGxlciBhY2Nlc3MuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMucmVnZW5lcmF0b3JJbkNsaWVudEZ1bmN0aW9uQ29kZV06ICAgICAgICAgICAgICAgICAgICBgeyNpbnN0YW50aWF0aW9uQ2FsbHNpdGVOYW1lfSBjb2RlLCBhcmd1bWVudHMgb3IgZGVwZW5kZW5jaWVzIGNhbm5vdCBjb250YWluIGdlbmVyYXRvcnMgb3IgXCJhc3luYy9hd2FpdFwiIHN5bnRheCAodXNlIFByb21pc2VzIGluc3RlYWQpLmAsXG4gICAgW1JVTlRJTUVfRVJST1JTLmludmFsaWRDbGllbnRGdW5jdGlvblRlc3RSdW5CaW5kaW5nXTogICAgICAgICAgICAgICAgJ0Nhbm5vdCByZXNvbHZlIHRoZSBcImJvdW5kVGVzdFJ1blwiIG9wdGlvbiBiZWNhdXNlIGl0cyB2YWx1ZSBpcyBub3QgYSB0ZXN0IGNvbnRyb2xsZXIuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuaW52YWxpZFZhbHVlVHlwZV06ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAne3NtdGhnfSAoe2FjdHVhbH0pIGlzIG5vdCBvZiBleHBlY3RlZCB0eXBlICh7dHlwZX0pLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLnVuc3VwcG9ydGVkVXJsUHJvdG9jb2xdOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ludmFsaWQge3doYXR9OiBcInt1cmx9XCIuIFRlc3RDYWZlIGNhbm5vdCBleGVjdXRlIHRoZSB0ZXN0IGJlY2F1c2UgdGhlIHt3aGF0fSBpbmNsdWRlcyB0aGUge3Byb3RvY29sfSBwcm90b2NvbC4gVGVzdENhZmUgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBwcm90b2NvbHM6IGh0dHA6Ly8sIGh0dHBzOi8vIGFuZCBmaWxlOi8vLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLnRlc3RDb250cm9sbGVyUHJveHlDYW5ub3RSZXNvbHZlVGVzdFJ1bl06ICAgICAgICAgICAgYFRoZSBhY3Rpb24gZG9lcyBub3QgaGF2ZSBpbXBsaWNpdCB0ZXN0IGNvbnRyb2xsZXIgYWNjZXNzLiBSZWZlcmVuY2UgdGhlICd0JyBvYmplY3QgdG8gZ2FpbiBpdC5gLFxuICAgIFtSVU5USU1FX0VSUk9SUy50aW1lTGltaXRlZFByb21pc2VUaW1lb3V0RXhwaXJlZF06ICAgICAgICAgICAgICAgICAgICdBIFByb21pc2UgdGltZWQgb3V0LicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmNhbm5vdFNldFZpZGVvT3B0aW9uc1dpdGhvdXRCYXNlVmlkZW9QYXRoU3BlY2lmaWVkXTogJ1lvdSBjYW5ub3QgbWFuYWdlIGFkdmFuY2VkIHZpZGVvIHBhcmFtZXRlcnMgd2hlbiB0aGUgdmlkZW8gcmVjb3JkaW5nIGNhcGFiaWxpdHkgaXMgb2ZmLiBTcGVjaWZ5IHRoZSByb290IHN0b3JhZ2UgZm9sZGVyIGZvciB2aWRlbyBjb250ZW50IHRvIGVuYWJsZSB2aWRlbyByZWNvcmRpbmcuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMubXVsdGlwbGVBUElNZXRob2RDYWxsRm9yYmlkZGVuXTogICAgICAgICAgICAgICAgICAgICAnWW91IGNhbm5vdCBjYWxsIHRoZSBcInttZXRob2ROYW1lfVwiIG1ldGhvZCBtb3JlIHRoYW4gb25jZS4gU3BlY2lmeSBhbiBhcnJheSBvZiBwYXJhbWV0ZXJzIGluc3RlYWQuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuaW52YWxpZFJlcG9ydGVyT3V0cHV0XTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlNwZWNpZnkgYSBmaWxlIG5hbWUgb3IgYSB3cml0YWJsZSBzdHJlYW0gYXMgdGhlIHJlcG9ydGVyJ3Mgb3V0cHV0IHRhcmdldC5cIixcbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90UmVhZFNTTENlcnRGaWxlXTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVW5hYmxlIHRvIHJlYWQgdGhlIGZpbGUgcmVmZXJlbmNlZCBieSB0aGUgXCJ7b3B0aW9ufVwiIHNzbCBvcHRpb24gKFwie3BhdGh9XCIpLiBFcnJvciBkZXRhaWxzOlxcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAne2Vycn0nLFxuXG4gICAgW1JVTlRJTUVfRVJST1JTLmNhbm5vdFByZXBhcmVUZXN0c0R1ZVRvRXJyb3JdOiAnQ2Fubm90IHByZXBhcmUgdGVzdHMgZHVlIHRvIHRoZSBmb2xsb3dpbmcgZXJyb3I6XFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAne2Vyck1lc3NhZ2V9JyxcblxuICAgIFtSVU5USU1FX0VSUk9SUy5jYW5ub3RQYXJzZVJhd0ZpbGVdOiAnQ2Fubm90IHBhcnNlIGEgcmF3IHRlc3QgZmlsZSBhdCBcIntwYXRofVwiIGR1ZSB0byB0aGUgZm9sbG93aW5nIGVycm9yOlxcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7ZXJyTWVzc2FnZX0nLFxuXG4gICAgW1JVTlRJTUVfRVJST1JTLnRlc3RlZEFwcEZhaWxlZFdpdGhFcnJvcl06ICdUaGUgd2ViIGFwcGxpY2F0aW9uIGZhaWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgZXJyb3I6XFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3tlcnJNZXNzYWdlfScsXG5cbiAgICBbUlVOVElNRV9FUlJPUlMudW5hYmxlVG9PcGVuQnJvd3Nlcl06ICdVbmFibGUgdG8gb3BlbiB0aGUgXCJ7YWxpYXN9XCIgYnJvd3NlciBkdWUgdG8gdGhlIGZvbGxvd2luZyBlcnJvcjpcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7ZXJyTWVzc2FnZX0nLFxuXG4gICAgW1JVTlRJTUVfRVJST1JTLnJlcXVlc3RIb29rQ29uZmlndXJlQVBJRXJyb3JdOiAnQXR0ZW1wdCB0byBjb25maWd1cmUgYSByZXF1ZXN0IGhvb2sgcmVzdWx0ZWQgaW4gdGhlIGZvbGxvd2luZyBlcnJvcjpcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7cmVxdWVzdEhvb2tOYW1lfToge2Vyck1zZ30nLFxuXG4gICAgW1JVTlRJTUVfRVJST1JTLmZvcmJpZGRlbkNoYXJhdGVyc0luU2NyZWVuc2hvdFBhdGhdOiAnVGhlcmUgYXJlIGZvcmJpZGRlbiBjaGFyYWN0ZXJzIGluIHRoZSBcIntzY3JlZW5zaG90UGF0aH1cIiB7c2NyZWVuc2hvdFBhdGhUeXBlfTpcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcge2ZvcmJpZGRlbkNoYXJzRGVzY3JpcHRpb259JyxcblxuICAgIFtSVU5USU1FX0VSUk9SUy5jYW5ub3RGaW5kRkZNUEVHXTogJ1Rlc3RDYWZlIGNhbm5vdCByZWNvcmQgdmlkZW9zIGJlY2F1c2UgaXQgY2Fubm90IGxvY2F0ZSB0aGUgRkZtcGVnIGV4ZWN1dGFibGUuIFRyeSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzb2x1dGlvbnM6XFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKiBhZGQgdGhlIHBhdGggb2YgdGhlIEZGbXBlZyBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IHRvIHRoZSBQQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLFxcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyogc3BlY2lmeSB0aGUgcGF0aCBvZiB0aGUgRkZtcGVnIGV4ZWN1dGFibGUgaW4gdGhlIEZGTVBFR19QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIG9yIHRoZSBmZm1wZWdQYXRoIG9wdGlvbixcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqIGluc3RhbGwgdGhlIEBmZm1wZWctaW5zdGFsbGVyL2ZmbXBlZyBucG0gcGFja2FnZS4nLFxuXG4gICAgW1JVTlRJTUVfRVJST1JTLmNhbm5vdFJlYWRDb25maWdGaWxlXTogJ0ZhaWxlZCB0byByZWFkIHRoZSBcIntwYXRofVwiIGNvbmZpZ3VyYXRpb24gZmlsZSBmcm9tIGRpc2suIEVycm9yIGRldGFpbHM6XFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7ZXJyfScsXG5cbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90UGFyc2VDb25maWdGaWxlXTogJ0ZhaWxlZCB0byBwYXJzZSB0aGUgXCJ7cGF0aH1cIiBjb25maWd1cmF0aW9uIGZpbGUuIFRoZSBmaWxlIGNvbnRhaW5zIGludmFsaWQgSlNPTiBzeW50YXguIFxcblxcbkVycm9yIGRldGFpbHM6XFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7ZXJyfScsXG5cbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90RmluZFJlcG9ydGVyRm9yQWxpYXNdOiAnRmFpbGVkIHRvIGxvYWQgdGhlIFwie25hbWV9XCIgcmVwb3J0ZXIuIFBsZWFzZSBjaGVjayB0aGUgcGFyYW1ldGVyIGZvciBlcnJvcnMuIEVycm9yIGRldGFpbHM6XFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7ZXJyfScsXG5cbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90RmluZFR5cGVzY3JpcHRDb25maWd1cmF0aW9uRmlsZV06ICAgICAgICAgICAgJ1wie2ZpbGVQYXRofVwiIGlzIG5vdCBhIHZhbGlkIFR5cGVTY3JpcHQgY29uZmlndXJhdGlvbiBmaWxlLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmNsaWVudFNjcmlwdEluaXRpYWxpemVySXNOb3RTcGVjaWZpZWRdOiAgICAgICAgICAgICdJbml0aWFsaXplIHlvdXIgY2xpZW50IHNjcmlwdCB3aXRoIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBhIEphdmFTY3JpcHQgc2NyaXB0LCBhIEphdmFTY3JpcHQgZmlsZSBwYXRoLCBvciB0aGUgbmFtZSBvZiBhIEphdmFTY3JpcHQgbW9kdWxlLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmNsaWVudFNjcmlwdEJhc2VQYXRoSXNOb3RTcGVjaWZpZWRdOiAgICAgICAgICAgICAgICdTcGVjaWZ5IHRoZSBiYXNlIHBhdGggZm9yIHRoZSBjbGllbnQgc2NyaXB0IGZpbGUuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuY2xpZW50U2NyaXB0SW5pdGlhbGl6ZXJNdWx0aXBsZUNvbnRlbnRTb3VyY2VzXTogICAgJ0NsaWVudCBzY3JpcHRzIGNhbiBvbmx5IGhhdmUgb25lIGluaXRpYWxpemVyOiBKYXZhU2NyaXB0IGNvZGUsIGEgSmF2YVNjcmlwdCBmaWxlIHBhdGgsIG9yIHRoZSBuYW1lIG9mIGEgSmF2YVNjcmlwdCBtb2R1bGUuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90TG9hZENsaWVudFNjcmlwdEZyb21QYXRoXTogICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCBsb2FkIGEgY2xpZW50IHNjcmlwdCBmcm9tIHtwYXRofS5cXG57ZXJyb3JNZXNzYWdlfScsXG4gICAgW1JVTlRJTUVfRVJST1JTLmNsaWVudFNjcmlwdE1vZHVsZUVudHJ5UG9pbnRQYXRoQ2FsY3VsYXRpb25FcnJvcl06ICdBIGNsaWVudCBzY3JpcHQgdHJpZWQgdG8gbG9hZCBhIEphdmFTY3JpcHQgbW9kdWxlIHRoYXQgVGVzdENhZmUgY2Fubm90IGxvY2F0ZTpcXG5cXG57ZXJyb3JNZXNzYWdlfS4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5tZXRob2RJc05vdEF2YWlsYWJsZUZvckFuSVBDSG9zdF06ICAgICAgICAgICAgICAgICAnVGhpcyBtZXRob2QgY2Fubm90IGJlIGNhbGxlZCBvbiBhIHNlcnZpY2UgaG9zdC4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy50b29MYXJnZUlQQ1BheWxvYWRdOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGhlIHNwZWNpZmllZCBwYXlsb2FkIGlzIHRvbyBsYXJnZSB0byBmb3JtIGFuIElQQyBwYWNrZXQuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMubWFsZm9ybWVkSVBDTWVzc2FnZV06ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCBwcm9jZXNzIGEgbWFsZm9ybWVkIElQQyBtZXNzYWdlLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLnVuZXhwZWN0ZWRJUENIZWFkUGFja2V0XTogICAgICAgICAgICAgICAgICAgICAgICAgICdDYW5ub3QgY3JlYXRlIGFuIElQQyBtZXNzYWdlIGR1ZSB0byBhbiB1bmV4cGVjdGVkIElQQyBoZWFkIHBhY2tldC4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy51bmV4cGVjdGVkSVBDQm9keVBhY2tldF06ICAgICAgICAgICAgICAgICAgICAgICAgICAnQ2Fubm90IGNyZWF0ZSBhbiBJUEMgbWVzc2FnZSBkdWUgdG8gYW4gdW5leHBlY3RlZCBJUEMgYm9keSBwYWNrZXQuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMudW5leHBlY3RlZElQQ1RhaWxQYWNrZXRdOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCBjcmVhdGUgYW4gSVBDIG1lc3NhZ2UgZHVlIHRvIGFuIHVuZXhwZWN0ZWQgSVBDIHRhaWwgcGFja2V0LicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmNhbm5vdFJ1bkxvY2FsTm9uSGVhZGxlc3NCcm93c2VyV2l0aG91dERpc3BsYXldOlxuICAgICAgICAnWW91ciBMaW51eCBpbnN0YWxsYXRpb24gZG9lcyBub3QgaGF2ZSBhIGdyYXBoaWMgc3Vic3lzdGVtIHRvIHJ1biB7YnJvd3NlckFsaWFzfSB3aXRoIGEgR1VJLiAnICtcbiAgICAgICAgJ1lvdSBjYW4gbGF1bmNoIHRoZSBicm93c2VyIGluIGhlYWRsZXNzIG1vZGUuICcgK1xuICAgICAgICAnSWYgeW91IHVzZSBhIHBvcnRhYmxlIGJyb3dzZXIgZXhlY3V0YWJsZSwgJyArXG4gICAgICAgIFwic3BlY2lmeSB0aGUgYnJvd3NlciBhbGlhcyBiZWZvcmUgdGhlIHBhdGggaW5zdGVhZCBvZiB0aGUgJ3BhdGgnIHByZWZpeC4gXCIgK1xuICAgICAgICBgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSAke0RPQ1VNRU5UQVRJT05fTElOS1MuSEVBRExFU1NfTU9ERX1gLFxuXG4gICAgW1JVTlRJTUVfRVJST1JTLnVuY2F1Z2h0RXJyb3JJblJlcG9ydGVyXTogICAgICAgICAgICdUaGUgXCJ7bWV0aG9kTmFtZX1cIiBtZXRob2Qgb2YgdGhlIFwie3JlcG9ydGVyTmFtZX1cIiByZXBvcnRlciBwcm9kdWNlZCBhbiB1bmNhdWdodCBlcnJvci4gRXJyb3IgZGV0YWlsczpcXG57b3JpZ2luYWxFcnJvcn0nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5yb2xlSW5pdGlhbGl6ZWRXaXRoUmVsYXRpdmVVcmxdOiAgICAnWW91ciBSb2xlIGluY2x1ZGVzIGEgcmVsYXRpdmUgbG9naW4gcGFnZSBVUkwsIGJ1dCB0aGUgXCJiYXNlVXJsXCIgb3B0aW9uIGlzIG5vdCBzZXQuXFxuVXNlIGFuIGFic29sdXRlIFVSTCBvciBhZGQgdGhlIGJhc2VVcmwgb3B0aW9uIHRvIHlvdXIgY29uZmlndXJhdGlvbiBmaWxlIG9yIENMSSBsYXVuY2ggc3RyaW5nLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLnR5cGVTY3JpcHRDb21waWxlckxvYWRpbmdFcnJvcl06ICAgICdDYW5ub3QgbG9hZCB0aGUgVHlwZVNjcmlwdCBjb21waWxlci5cXG57b3JpZ2luRXJyb3JNZXNzYWdlfS4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5jYW5ub3RDdXN0b21pemVTcGVjaWZpZWRDb21waWxlcnNdOiAnWW91IGNhbm5vdCBzcGVjaWZ5IG9wdGlvbnMgZm9yIHRoZSB7bm9uY3VzdG9taXphYmxlQ29tcGlsZXJMaXN0fSBjb21waWxlcntzdWZmaXh9LicsXG5cbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90RW5hYmxlUmV0cnlUZXN0UGFnZXNPcHRpb25dOlxuICAgICAgICAnQ2Fubm90IGVuYWJsZSB0aGUgXFwncmV0cnlUZXN0UGFnZXNcXCcgb3B0aW9uLiBBcHBseSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0d28gc29sdXRpb25zOlxcbicgK1xuICAgICAgICAnLS0gc2V0IHRoZSBcXCdob3N0bmFtZVxcJyBvcHRpb24gdG8gXFwnbG9jYWxob3N0XFwnXFxuJyArXG4gICAgICAgICctLSBydW4gVGVzdENhZmUgb3ZlciBIVFRQU1xcbicsXG5cbiAgICBbUlVOVElNRV9FUlJPUlMuYnJvd3NlckNvbm5lY3Rpb25FcnJvcl06ICAgICAgICAgICAgICAgJ3tvcmlnaW5FcnJvck1lc3NhZ2V9XFxue251bU9mTm90T3BlbmVkQ29ubmVjdGlvbn0gb2Yge251bU9mQWxsQ29ubmVjdGlvbnN9IGJyb3dzZXIgY29ubmVjdGlvbnMgaGF2ZSBub3QgYmVlbiBlc3RhYmxpc2hlZDpcXG57bGlzdE9mTm90T3BlbmVkQ29ubmVjdGlvbnN9XFxuXFxuSGludHM6XFxue2xpc3RPZkhpbnRzfScsXG4gICAgW0Jyb3dzZXJDb25uZWN0aW9uRXJyb3JIaW50LlRvb0hpZ2hDb25jdXJyZW5jeUZhY3Rvcl06ICdUaGUgaG9zdCBtYWNoaW5lIG1heSBub3QgYmUgcG93ZXJmdWwgZW5vdWdoIHRvIGhhbmRsZSB0aGUgc3BlY2lmaWVkIGNvbmN1cnJlbmN5IGZhY3RvciAoe2NvbmN1cnJlbmN5RmFjdG9yfSkuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRGVjcmVhc2UgdGhlIGNvbmN1cnJlbmN5IGZhY3RvciBvciBhbGxvY2F0ZSBtb3JlIGNvbXB1dGluZyByZXNvdXJjZXMgdG8gdGhlIGhvc3QgbWFjaGluZS4nLFxuICAgIFtCcm93c2VyQ29ubmVjdGlvbkVycm9ySGludC5Vc2VCcm93c2VySW5pdE9wdGlvbl06ICAgICAgICAgICAgICAgJ0luY3JlYXNlIHRoZSBCcm93c2VyIEluaXRpYWxpemF0aW9uIFRpbWVvdXQgaWYgaXRzIHZhbHVlIGlzIHRvbyBsb3cgKGN1cnJlbnRseToge2Jyb3dzZXJJbml0VGltZW91dE1zZ30pLiBUaGUgdGltZW91dCBkZXRlcm1pbmVzIGhvdyBsb25nIFRlc3RDYWZlIHdhaXRzIGZvciBicm93c2VycyB0byBiZSByZWFkeS4nLFxuICAgIFtCcm93c2VyQ29ubmVjdGlvbkVycm9ySGludC5SZXN0RXJyb3JDYXVzZXNdOiAgICAgICAgICAgICAgICAgICAgJ1RoZSBlcnJvciBjYW4gYWxzbyBiZSBjYXVzZWQgYnkgbmV0d29yayBpc3N1ZXMgb3IgcmVtb3RlIGRldmljZSBmYWlsdXJlLiBNYWtlIHN1cmUgdGhhdCB5b3VyIG5ldHdvcmsgY29ubmVjdGlvbiBpcyBzdGFibGUgYW5kIHlvdSBjYW4gcmVhY2ggdGhlIHJlbW90ZSBkZXZpY2UuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90RmluZFRlc3RjYWZlQ29uZmlndXJhdGlvbkZpbGVdOiAgICAgICAgICAgICdDYW5ub3QgbG9jYXRlIGEgVGVzdENhZmUgY29uZmlndXJhdGlvbiBmaWxlIGF0IHtmaWxlUGF0aH0uIEVpdGhlciB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgb3IgdGhlIHBhdGggaXMgaW52YWxpZC4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5yZWxhdGl2ZUJhc2VVcmxdOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RoZSB2YWx1ZSBvZiB0aGUgYmFzZVVybCBhcmd1bWVudCBjYW5ub3QgYmUgcmVsYXRpdmU6IFwie2Jhc2VVcmx9XCInLFxuICAgIFtSVU5USU1FX0VSUk9SUy5yZXF1ZXN0VXJsSW52YWxpZFZhbHVlRXJyb3JdOiAgICAgICAgICAgICAgICAgICAgJ1RoZSByZXF1ZXN0IHVybCBpcyBpbnZhbGlkICh7YWN0dWFsVmFsdWV9KS4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5yZXF1ZXN0UnVudGltZUVycm9yXTogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RoZSByZXF1ZXN0IHdhcyBpbnRlcnJ1cHRlZCBieSBhbiBlcnJvcjpcXG57bWVzc2FnZX0nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5pbnZhbGlkU2tpcEpzRXJyb3JzT3B0aW9uc09iamVjdFByb3BlcnR5XTogICAgICAgYFRoZSBcIntvcHRpb25OYW1lfVwiIG9wdGlvbiBkb2VzIG5vdCBleGlzdC4gVXNlIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyB0byBjb25maWd1cmUgc2tpcEpzRXJyb3JzOiAke2dldENvbmNhdGVuYXRlZFZhbHVlc1N0cmluZyhPYmplY3Qua2V5cyhTS0lQX0pTX0VSUk9SU19PUFRJT05TX09CSkVDVF9PUFRJT05fTkFNRVMpKX0uYCxcbiAgICBbUlVOVElNRV9FUlJPUlMuaW52YWxpZFNraXBKc0Vycm9yc0NhbGxiYWNrV2l0aE9wdGlvbnNQcm9wZXJ0eV06IGBUaGUgXCJ7b3B0aW9uTmFtZX1cIiBvcHRpb24gZG9lcyBub3QgZXhpc3QuIFVzZSB0aGUgZm9sbG93aW5nIG9wdGlvbnMgdG8gY29uZmlndXJlIHNraXBKc0Vycm9ycyBjYWxsYmFja3M6ICR7Z2V0Q29uY2F0ZW5hdGVkVmFsdWVzU3RyaW5nKE9iamVjdC5rZXlzKFNLSVBfSlNfRVJST1JTX0NBTExCQUNLX1dJVEhfT1BUSU9OU19PUFRJT05fTkFNRVMpKX0uYCxcbiAgICBbUlVOVElNRV9FUlJPUlMuaW52YWxpZENvbW1hbmRJbkpzb25Db21waWxlcl06ICAgICAgICAgICAgICAgICAgIGBUZXN0Q2FmZSB0ZXJtaW5hdGVkIHRoZSB0ZXN0IHJ1bi4gVGhlIFwie3BhdGh9XCIgZmlsZSBjb250YWlucyBhbiB1bmtub3duIENocm9tZSBVc2VyIEZsb3cgYWN0aW9uIFwie2FjdGlvbn1cIi4gUmVtb3ZlIHRoZSBhY3Rpb24gdG8gY29udGludWUuIFJlZmVyIHRvIHRoZSBmb2xsb3dpbmcgYXJ0aWNsZSBmb3IgdGhlIGRlZmluaXRpdmUgbGlzdCBvZiBzdXBwb3J0ZWQgQ2hyb21lIFVzZXIgRmxvdyBhY3Rpb25zOiBodHRwczovL3Rlc3RjYWZlLmlvL2RvY3VtZW50YXRpb24vNDAzOTk4L2d1aWRlcy9leHBlcmltZW50YWwtY2FwYWJpbGl0aWVzL2Nocm9tZS1yZXBsYXktc3VwcG9ydCNzdXBwb3J0ZWQtcmVwbGF5LWFjdGlvbnNgLFxuICAgIFtSVU5USU1FX0VSUk9SUy5pbnZhbGlkQ3VzdG9tQWN0aW9uc09wdGlvblR5cGVdOiAgICAgICAgICAgICAgICAgYFRoZSB2YWx1ZSBvZiB0aGUgY3VzdG9tQWN0aW9ucyBvcHRpb24gZG9lcyBub3QgYmVsb25nIHRvIHR5cGUgT2JqZWN0LiBSZWZlciB0byB0aGUgZm9sbG93aW5nIGFydGljbGUgZm9yIGN1c3RvbSBhY3Rpb24gc2V0dXAgaW5zdHJ1Y3Rpb25zOiAkeyBET0NVTUVOVEFUSU9OX0xJTktTLkNVU1RPTV9BQ1RJT05TIH1gLFxuICAgIFtSVU5USU1FX0VSUk9SUy5pbnZhbGlkQ3VzdG9tQWN0aW9uVHlwZV06ICAgICAgICAgICAgICAgICAgICAgICAgYFRlc3RDYWZlIGNhbm5vdCBwYXJzZSB0aGUgXCJ7YWN0aW9uTmFtZX1cIiBhY3Rpb24sIGJlY2F1c2UgdGhlIGFjdGlvbiBkZWZpbml0aW9uIGlzIGludmFsaWQuIEZvcm1hdCB0aGUgZGVmaW5pdGlvbiBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGN1c3RvbSBhY3Rpb25zIGd1aWRlOiAkeyBET0NVTUVOVEFUSU9OX0xJTktTLkNVU1RPTV9BQ1RJT05TIH1gLFxuICAgIFtSVU5USU1FX0VSUk9SUy5jYW5ub3RJbXBvcnRFU01JbkNvbW1vbnNKU106ICAgICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCBpbXBvcnQgdGhlIHtlc01vZHVsZX0gRUNNQVNjcmlwdCBtb2R1bGUgZnJvbSB7dGFyZ2V0RmlsZX0uIFVzZSBhIGR5bmFtaWMgaW1wb3J0KCkgc3RhdGVtZW50IG9yIGVuYWJsZSB0aGUgLS1lc20gQ0xJIGZsYWcuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuc2V0TmF0aXZlQXV0b21hdGlvbkZvclVuc3VwcG9ydGVkQnJvd3NlcnNdOiAgICAgICdUaGUgXCJ7YnJvd3Nlcn1cIiBkbyBub3Qgc3VwcG9ydCB0aGUgTmF0aXZlIEF1dG9tYXRpb24gbW9kZS4gVXNlIHRoZSBcImRpc2FibGUgbmF0aXZlIGF1dG9tYXRpb25cIiBvcHRpb24gdG8gY29udGludWUuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90UnVuTGVnYWN5VGVzdHNJbk5hdGl2ZUF1dG9tYXRpb25Nb2RlXTogICAgICdUZXN0Q2FmZSBjYW5ub3QgcnVuIGxlZ2FjeSB0ZXN0cyBpbiBOYXRpdmUgQXV0b21hdGlvbiBtb2RlLiBEaXNhYmxlIG5hdGl2ZSBhdXRvbWF0aW9uIHRvIGNvbnRpbnVlLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLnNldFVzZXJQcm9maWxlSW5OYXRpdmVBdXRvbWF0aW9uXTogICAgICAgICAgICAgICAnQ2Fubm90IGluaXRpYWxpemUgdGhlIHRlc3QgcnVuLiBXaGVuIFRlc3RDYWZlIHVzZXMgbmF0aXZlIGF1dG9tYXRpb24sIGl0IGNhbiBvbmx5IGxhdW5jaCBicm93c2VycyB3aXRoIGFuIGVtcHR5IHVzZXIgcHJvZmlsZS4gRGlzYWJsZSBuYXRpdmUgYXV0b21hdGlvbiwgb3IgcmVtb3ZlIHRoZSBcInVzZXJQcm9maWxlXCIgc3VmZml4IGZyb20gdGhlIGZvbGxvd2luZyBicm93c2VyIGFsaWFzZXM6IFwie2Jyb3dzZXJzfVwiLicsXG59O1xuIl19