@vue/devtools
Version:
StandAlone vue-devtools
1 lines • 54 kB
JavaScript
"use strict";(self["webpackChunk_vue_devtools"]=self["webpackChunk_vue_devtools"]||[]).push([[6354],{6354:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"conf\": () => (/* binding */ conf),\n/* harmony export */ \"language\": () => (/* binding */ language)\n/* harmony export */ });\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar conf = {\n comments: {\n lineComment: '#',\n blockComment: ['=begin', '=end']\n },\n brackets: [\n ['(', ')'],\n ['{', '}'],\n ['[', ']']\n ],\n autoClosingPairs: [\n { open: '{', close: '}' },\n { open: '[', close: ']' },\n { open: '(', close: ')' },\n { open: '\"', close: '\"' },\n { open: \"'\", close: \"'\" }\n ],\n surroundingPairs: [\n { open: '{', close: '}' },\n { open: '[', close: ']' },\n { open: '(', close: ')' },\n { open: '\"', close: '\"' },\n { open: \"'\", close: \"'\" }\n ],\n indentationRules: {\n increaseIndentPattern: new RegExp('^\\\\s*((begin|class|(private|protected)\\\\s+def|def|else|elsif|ensure|for|if|module|rescue|unless|until|when|while|case)|([^#]*\\\\sdo\\\\b)|([^#]*=\\\\s*(case|if|unless)))\\\\b([^#\\\\{;]|(\"|\\'|/).*\\\\4)*(#.*)?$'),\n decreaseIndentPattern: new RegExp('^\\\\s*([}\\\\]]([,)]?\\\\s*(#|$)|\\\\.[a-zA-Z_]\\\\w*\\\\b)|(end|rescue|ensure|else|elsif|when)\\\\b)')\n }\n};\n/*\n * Ruby language definition\n *\n * Quite a complex language due to elaborate escape sequences\n * and quoting of literate strings/regular expressions, and\n * an 'end' keyword that does not always apply to modifiers like until and while,\n * and a 'do' keyword that sometimes starts a block, but sometimes is part of\n * another statement (like 'while').\n *\n * (1) end blocks:\n * 'end' may end declarations like if or until, but sometimes 'if' or 'until'\n * are modifiers where there is no 'end'. Also, 'do' sometimes starts a block\n * that is ended by 'end', but sometimes it is part of a 'while', 'for', or 'until'\n * To do proper brace matching we do some elaborate state manipulation.\n * some examples:\n *\n * until bla do\n * work until tired\n * list.each do\n * something if test\n * end\n * end\n *\n * or\n *\n * if test\n * something (if test then x end)\n * bar if bla\n * end\n *\n * or, how about using class as a property..\n *\n * class Test\n * def endpoint\n * self.class.endpoint || routes\n * end\n * end\n *\n * (2) quoting:\n * there are many kinds of strings and escape sequences. But also, one can\n * start many string-like things as '%qx' where q specifies the kind of string\n * (like a command, escape expanded, regular expression, symbol etc.), and x is\n * some character and only another 'x' ends the sequence. Except for brackets\n * where the closing bracket ends the sequence.. and except for a nested bracket\n * inside the string like entity. Also, such strings can contain interpolated\n * ruby expressions again (and span multiple lines). Moreover, expanded\n * regular expression can also contain comments.\n */\nvar language = {\n tokenPostfix: '.ruby',\n keywords: [\n '__LINE__',\n '__ENCODING__',\n '__FILE__',\n 'BEGIN',\n 'END',\n 'alias',\n 'and',\n 'begin',\n 'break',\n 'case',\n 'class',\n 'def',\n 'defined?',\n 'do',\n 'else',\n 'elsif',\n 'end',\n 'ensure',\n 'for',\n 'false',\n 'if',\n 'in',\n 'module',\n 'next',\n 'nil',\n 'not',\n 'or',\n 'redo',\n 'rescue',\n 'retry',\n 'return',\n 'self',\n 'super',\n 'then',\n 'true',\n 'undef',\n 'unless',\n 'until',\n 'when',\n 'while',\n 'yield'\n ],\n keywordops: ['::', '..', '...', '?', ':', '=>'],\n builtins: [\n 'require',\n 'public',\n 'private',\n 'include',\n 'extend',\n 'attr_reader',\n 'protected',\n 'private_class_method',\n 'protected_class_method',\n 'new'\n ],\n // these are closed by 'end' (if, while and until are handled separately)\n declarations: [\n 'module',\n 'class',\n 'def',\n 'case',\n 'do',\n 'begin',\n 'for',\n 'if',\n 'while',\n 'until',\n 'unless'\n ],\n linedecls: ['def', 'case', 'do', 'begin', 'for', 'if', 'while', 'until', 'unless'],\n operators: [\n '^',\n '&',\n '|',\n '<=>',\n '==',\n '===',\n '!~',\n '=~',\n '>',\n '>=',\n '<',\n '<=',\n '<<',\n '>>',\n '+',\n '-',\n '*',\n '/',\n '%',\n '**',\n '~',\n '+@',\n '-@',\n '[]',\n '[]=',\n '`',\n '+=',\n '-=',\n '*=',\n '**=',\n '/=',\n '^=',\n '%=',\n '<<=',\n '>>=',\n '&=',\n '&&=',\n '||=',\n '|='\n ],\n brackets: [\n { open: '(', close: ')', token: 'delimiter.parenthesis' },\n { open: '{', close: '}', token: 'delimiter.curly' },\n { open: '[', close: ']', token: 'delimiter.square' }\n ],\n // we include these common regular expressions\n symbols: /[=><!~?:&|+\\-*\\/\\^%\\.]+/,\n // escape sequences\n escape: /(?:[abefnrstv\\\\\"'\\n\\r]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2}|u[0-9A-Fa-f]{4})/,\n escapes: /\\\\(?:C\\-(@escape|.)|c(@escape|.)|@escape)/,\n decpart: /\\d(_?\\d)*/,\n decimal: /0|@decpart/,\n delim: /[^a-zA-Z0-9\\s\\n\\r]/,\n heredelim: /(?:\\w+|'[^']*'|\"[^\"]*\"|`[^`]*`)/,\n regexpctl: /[(){}\\[\\]\\$\\^|\\-*+?\\.]/,\n regexpesc: /\\\\(?:[AzZbBdDfnrstvwWn0\\\\\\/]|@regexpctl|c[A-Z]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4})?/,\n // The main tokenizer for our languages\n tokenizer: {\n // Main entry.\n // root.<decl> where decl is the current opening declaration (like 'class')\n root: [\n // identifiers and keywords\n // most complexity here is due to matching 'end' correctly with declarations.\n // We distinguish a declaration that comes first on a line, versus declarations further on a line (which are most likey modifiers)\n [\n /^(\\s*)([a-z_]\\w*[!?=]?)/,\n [\n 'white',\n {\n cases: {\n 'for|until|while': {\n token: 'keyword.$2',\n next: '@dodecl.$2'\n },\n '@declarations': {\n token: 'keyword.$2',\n next: '@root.$2'\n },\n end: { token: 'keyword.$S2', next: '@pop' },\n '@keywords': 'keyword',\n '@builtins': 'predefined',\n '@default': 'identifier'\n }\n }\n ]\n ],\n [\n /[a-z_]\\w*[!?=]?/,\n {\n cases: {\n 'if|unless|while|until': {\n token: 'keyword.$0x',\n next: '@modifier.$0x'\n },\n for: { token: 'keyword.$2', next: '@dodecl.$2' },\n '@linedecls': { token: 'keyword.$0', next: '@root.$0' },\n end: { token: 'keyword.$S2', next: '@pop' },\n '@keywords': 'keyword',\n '@builtins': 'predefined',\n '@default': 'identifier'\n }\n }\n ],\n [/[A-Z][\\w]*[!?=]?/, 'constructor.identifier'],\n [/\\$[\\w]*/, 'global.constant'],\n [/@[\\w]*/, 'namespace.instance.identifier'],\n [/@@@[\\w]*/, 'namespace.class.identifier'],\n // here document\n [/<<[-~](@heredelim).*/, { token: 'string.heredoc.delimiter', next: '@heredoc.$1' }],\n [\n /[ \\t\\r\\n]+<<(@heredelim).*/,\n { token: 'string.heredoc.delimiter', next: '@heredoc.$1' }\n ],\n [/^<<(@heredelim).*/, { token: 'string.heredoc.delimiter', next: '@heredoc.$1' }],\n // whitespace\n { include: '@whitespace' },\n // strings\n [/\"/, { token: 'string.d.delim', next: '@dstring.d.\"' }],\n [/'/, { token: 'string.sq.delim', next: '@sstring.sq' }],\n // % literals. For efficiency, rematch in the 'pstring' state\n [/%([rsqxwW]|Q?)/, { token: '@rematch', next: 'pstring' }],\n // commands and symbols\n [/`/, { token: 'string.x.delim', next: '@dstring.x.`' }],\n [/:(\\w|[$@])\\w*[!?=]?/, 'string.s'],\n [/:\"/, { token: 'string.s.delim', next: '@dstring.s.\"' }],\n [/:'/, { token: 'string.s.delim', next: '@sstring.s' }],\n // regular expressions. Lookahead for a (not escaped) closing forwardslash on the same line\n [/\\/(?=(\\\\\\/|[^\\/\\n])+\\/)/, { token: 'regexp.delim', next: '@regexp' }],\n // delimiters and operators\n [/[{}()\\[\\]]/, '@brackets'],\n [\n /@symbols/,\n {\n cases: {\n '@keywordops': 'keyword',\n '@operators': 'operator',\n '@default': ''\n }\n }\n ],\n [/[;,]/, 'delimiter'],\n // numbers\n [/0[xX][0-9a-fA-F](_?[0-9a-fA-F])*/, 'number.hex'],\n [/0[_oO][0-7](_?[0-7])*/, 'number.octal'],\n [/0[bB][01](_?[01])*/, 'number.binary'],\n [/0[dD]@decpart/, 'number'],\n [\n /@decimal((\\.@decpart)?([eE][\\-+]?@decpart)?)/,\n {\n cases: {\n $1: 'number.float',\n '@default': 'number'\n }\n }\n ]\n ],\n // used to not treat a 'do' as a block opener if it occurs on the same\n // line as a 'do' statement: 'while|until|for'\n // dodecl.<decl> where decl is the declarations started, like 'while'\n dodecl: [\n [/^/, { token: '', switchTo: '@root.$S2' }],\n [\n /[a-z_]\\w*[!?=]?/,\n {\n cases: {\n end: { token: 'keyword.$S2', next: '@pop' },\n do: { token: 'keyword', switchTo: '@root.$S2' },\n '@linedecls': {\n token: '@rematch',\n switchTo: '@root.$S2'\n },\n '@keywords': 'keyword',\n '@builtins': 'predefined',\n '@default': 'identifier'\n }\n }\n ],\n { include: '@root' }\n ],\n // used to prevent potential modifiers ('if|until|while|unless') to match\n // with 'end' keywords.\n // modifier.<decl>x where decl is the declaration starter, like 'if'\n modifier: [\n [/^/, '', '@pop'],\n [\n /[a-z_]\\w*[!?=]?/,\n {\n cases: {\n end: { token: 'keyword.$S2', next: '@pop' },\n 'then|else|elsif|do': {\n token: 'keyword',\n switchTo: '@root.$S2'\n },\n '@linedecls': {\n token: '@rematch',\n switchTo: '@root.$S2'\n },\n '@keywords': 'keyword',\n '@builtins': 'predefined',\n '@default': 'identifier'\n }\n }\n ],\n { include: '@root' }\n ],\n // single quote strings (also used for symbols)\n // sstring.<kind> where kind is 'sq' (single quote) or 's' (symbol)\n sstring: [\n [/[^\\\\']+/, 'string.$S2'],\n [/\\\\\\\\|\\\\'|\\\\$/, 'string.$S2.escape'],\n [/\\\\./, 'string.$S2.invalid'],\n [/'/, { token: 'string.$S2.delim', next: '@pop' }]\n ],\n // double quoted \"string\".\n // dstring.<kind>.<delim> where kind is 'd' (double quoted), 'x' (command), or 's' (symbol)\n // and delim is the ending delimiter (\" or `)\n dstring: [\n [/[^\\\\`\"#]+/, 'string.$S2'],\n [/#/, 'string.$S2.escape', '@interpolated'],\n [/\\\\$/, 'string.$S2.escape'],\n [/@escapes/, 'string.$S2.escape'],\n [/\\\\./, 'string.$S2.escape.invalid'],\n [\n /[`\"]/,\n {\n cases: {\n '$#==$S3': { token: 'string.$S2.delim', next: '@pop' },\n '@default': 'string.$S2'\n }\n }\n ]\n ],\n // literal documents\n // heredoc.<close> where close is the closing delimiter\n heredoc: [\n [\n /^(\\s*)(@heredelim)$/,\n {\n cases: {\n '$2==$S2': [\n 'string.heredoc',\n { token: 'string.heredoc.delimiter', next: '@pop' }\n ],\n '@default': ['string.heredoc', 'string.heredoc']\n }\n }\n ],\n [/.*/, 'string.heredoc']\n ],\n // interpolated sequence\n interpolated: [\n [/\\$\\w*/, 'global.constant', '@pop'],\n [/@\\w*/, 'namespace.class.identifier', '@pop'],\n [/@@@\\w*/, 'namespace.instance.identifier', '@pop'],\n [\n /[{]/,\n {\n token: 'string.escape.curly',\n switchTo: '@interpolated_compound'\n }\n ],\n ['', '', '@pop'] // just a # is interpreted as a #\n ],\n // any code\n interpolated_compound: [\n [/[}]/, { token: 'string.escape.curly', next: '@pop' }],\n { include: '@root' }\n ],\n // %r quoted regexp\n // pregexp.<open>.<close> where open/close are the open/close delimiter\n pregexp: [\n { include: '@whitespace' },\n // turns out that you can quote using regex control characters, aargh!\n // for example; %r|kgjgaj| is ok (even though | is used for alternation)\n // so, we need to match those first\n [\n /[^\\(\\{\\[\\\\]/,\n {\n cases: {\n '$#==$S3': { token: 'regexp.delim', next: '@pop' },\n '$#==$S2': { token: 'regexp.delim', next: '@push' },\n '~[)}\\\\]]': '@brackets.regexp.escape.control',\n '~@regexpctl': 'regexp.escape.control',\n '@default': 'regexp'\n }\n }\n ],\n { include: '@regexcontrol' }\n ],\n // We match regular expression quite precisely\n regexp: [\n { include: '@regexcontrol' },\n [/[^\\\\\\/]/, 'regexp'],\n ['/[ixmp]*', { token: 'regexp.delim' }, '@pop']\n ],\n regexcontrol: [\n [\n /(\\{)(\\d+(?:,\\d*)?)(\\})/,\n [\n '@brackets.regexp.escape.control',\n 'regexp.escape.control',\n '@brackets.regexp.escape.control'\n ]\n ],\n [\n /(\\[)(\\^?)/,\n [\n '@brackets.regexp.escape.control',\n { token: 'regexp.escape.control', next: '@regexrange' }\n ]\n ],\n [/(\\()(\\?[:=!])/, ['@brackets.regexp.escape.control', 'regexp.escape.control']],\n [/\\(\\?#/, { token: 'regexp.escape.control', next: '@regexpcomment' }],\n [/[()]/, '@brackets.regexp.escape.control'],\n [/@regexpctl/, 'regexp.escape.control'],\n [/\\\\$/, 'regexp.escape'],\n [/@regexpesc/, 'regexp.escape'],\n [/\\\\\\./, 'regexp.invalid'],\n [/#/, 'regexp.escape', '@interpolated']\n ],\n regexrange: [\n [/-/, 'regexp.escape.control'],\n [/\\^/, 'regexp.invalid'],\n [/\\\\$/, 'regexp.escape'],\n [/@regexpesc/, 'regexp.escape'],\n [/[^\\]]/, 'regexp'],\n [/\\]/, '@brackets.regexp.escape.control', '@pop']\n ],\n regexpcomment: [\n [/[^)]+/, 'comment'],\n [/\\)/, { token: 'regexp.escape.control', next: '@pop' }]\n ],\n // % quoted strings\n // A bit repetitive since we need to often special case the kind of ending delimiter\n pstring: [\n [/%([qws])\\(/, { token: 'string.$1.delim', switchTo: '@qstring.$1.(.)' }],\n [/%([qws])\\[/, { token: 'string.$1.delim', switchTo: '@qstring.$1.[.]' }],\n [/%([qws])\\{/, { token: 'string.$1.delim', switchTo: '@qstring.$1.{.}' }],\n [/%([qws])</, { token: 'string.$1.delim', switchTo: '@qstring.$1.<.>' }],\n [/%([qws])(@delim)/, { token: 'string.$1.delim', switchTo: '@qstring.$1.$2.$2' }],\n [/%r\\(/, { token: 'regexp.delim', switchTo: '@pregexp.(.)' }],\n [/%r\\[/, { token: 'regexp.delim', switchTo: '@pregexp.[.]' }],\n [/%r\\{/, { token: 'regexp.delim', switchTo: '@pregexp.{.}' }],\n [/%r</, { token: 'regexp.delim', switchTo: '@pregexp.<.>' }],\n [/%r(@delim)/, { token: 'regexp.delim', switchTo: '@pregexp.$1.$1' }],\n [/%(x|W|Q?)\\(/, { token: 'string.$1.delim', switchTo: '@qqstring.$1.(.)' }],\n [/%(x|W|Q?)\\[/, { token: 'string.$1.delim', switchTo: '@qqstring.$1.[.]' }],\n [/%(x|W|Q?)\\{/, { token: 'string.$1.delim', switchTo: '@qqstring.$1.{.}' }],\n [/%(x|W|Q?)</, { token: 'string.$1.delim', switchTo: '@qqstring.$1.<.>' }],\n [/%(x|W|Q?)(@delim)/, { token: 'string.$1.delim', switchTo: '@qqstring.$1.$2.$2' }],\n [/%([rqwsxW]|Q?)./, { token: 'invalid', next: '@pop' }],\n [/./, { token: 'invalid', next: '@pop' }] // recover\n ],\n // non-expanded quoted string.\n // qstring.<kind>.<open>.<close>\n // kind = q|w|s (single quote, array, symbol)\n // open = open delimiter\n // close = close delimiter\n qstring: [\n [/\\\\$/, 'string.$S2.escape'],\n [/\\\\./, 'string.$S2.escape'],\n [\n /./,\n {\n cases: {\n '$#==$S4': { token: 'string.$S2.delim', next: '@pop' },\n '$#==$S3': { token: 'string.$S2.delim', next: '@push' },\n '@default': 'string.$S2'\n }\n }\n ]\n ],\n // expanded quoted string.\n // qqstring.<kind>.<open>.<close>\n // kind = Q|W|x (double quote, array, command)\n // open = open delimiter\n // close = close delimiter\n qqstring: [[/#/, 'string.$S2.escape', '@interpolated'], { include: '@qstring' }],\n // whitespace & comments\n whitespace: [\n [/[ \\t\\r\\n]+/, ''],\n [/^\\s*=begin\\b/, 'comment', '@comment'],\n [/#.*$/, 'comment']\n ],\n comment: [\n [/[^=]+/, 'comment'],\n [/^\\s*=begin\\b/, 'comment.invalid'],\n [/^\\s*=end\\b.*/, 'comment', '@pop'],\n [/[=]/, 'comment']\n ]\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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d0RBQXdEO0FBQ3RGLHlCQUF5QixLQUFLLG1EQUFtRCxFQUFFLEdBQUc7QUFDdEYsNkJBQTZCLHdEQUF3RDtBQUNyRixvQ0FBb0MsMERBQTBEO0FBQzlGLGtDQUFrQyxnQ0FBZ0M7QUFDbEUsb0JBQW9CLGdDQUFnQztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyx5Q0FBeUM7QUFDOUUscUNBQXFDLDBDQUEwQztBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtFQUFrRSxxQkFBcUI7QUFDdkY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vLi4vbm9kZV9tb2R1bGVzL21vbmFjby1lZGl0b3IvZXNtL3ZzL2Jhc2ljLWxhbmd1YWdlcy9ydWJ5L3J1YnkuanM/MmEzZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIExpY2Vuc2UudHh0IGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG4gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbmV4cG9ydCB2YXIgY29uZiA9IHtcbiAgICBjb21tZW50czoge1xuICAgICAgICBsaW5lQ29tbWVudDogJyMnLFxuICAgICAgICBibG9ja0NvbW1lbnQ6IFsnPWJlZ2luJywgJz1lbmQnXVxuICAgIH0sXG4gICAgYnJhY2tldHM6IFtcbiAgICAgICAgWycoJywgJyknXSxcbiAgICAgICAgWyd7JywgJ30nXSxcbiAgICAgICAgWydbJywgJ10nXVxuICAgIF0sXG4gICAgYXV0b0Nsb3NpbmdQYWlyczogW1xuICAgICAgICB7IG9wZW46ICd7JywgY2xvc2U6ICd9JyB9LFxuICAgICAgICB7IG9wZW46ICdbJywgY2xvc2U6ICddJyB9LFxuICAgICAgICB7IG9wZW46ICcoJywgY2xvc2U6ICcpJyB9LFxuICAgICAgICB7IG9wZW46ICdcIicsIGNsb3NlOiAnXCInIH0sXG4gICAgICAgIHsgb3BlbjogXCInXCIsIGNsb3NlOiBcIidcIiB9XG4gICAgXSxcbiAgICBzdXJyb3VuZGluZ1BhaXJzOiBbXG4gICAgICAgIHsgb3BlbjogJ3snLCBjbG9zZTogJ30nIH0sXG4gICAgICAgIHsgb3BlbjogJ1snLCBjbG9zZTogJ10nIH0sXG4gICAgICAgIHsgb3BlbjogJygnLCBjbG9zZTogJyknIH0sXG4gICAgICAgIHsgb3BlbjogJ1wiJywgY2xvc2U6ICdcIicgfSxcbiAgICAgICAgeyBvcGVuOiBcIidcIiwgY2xvc2U6IFwiJ1wiIH1cbiAgICBdLFxuICAgIGluZGVudGF0aW9uUnVsZXM6IHtcbiAgICAgICAgaW5jcmVhc2VJbmRlbnRQYXR0ZXJuOiBuZXcgUmVnRXhwKCdeXFxcXHMqKChiZWdpbnxjbGFzc3wocHJpdmF0ZXxwcm90ZWN0ZWQpXFxcXHMrZGVmfGRlZnxlbHNlfGVsc2lmfGVuc3VyZXxmb3J8aWZ8bW9kdWxlfHJlc2N1ZXx1bmxlc3N8dW50aWx8d2hlbnx3aGlsZXxjYXNlKXwoW14jXSpcXFxcc2RvXFxcXGIpfChbXiNdKj1cXFxccyooY2FzZXxpZnx1bmxlc3MpKSlcXFxcYihbXiNcXFxceztdfChcInxcXCd8LykuKlxcXFw0KSooIy4qKT8kJyksXG4gICAgICAgIGRlY3JlYXNlSW5kZW50UGF0dGVybjogbmV3IFJlZ0V4cCgnXlxcXFxzKihbfVxcXFxdXShbLCldP1xcXFxzKigjfCQpfFxcXFwuW2EtekEtWl9dXFxcXHcqXFxcXGIpfChlbmR8cmVzY3VlfGVuc3VyZXxlbHNlfGVsc2lmfHdoZW4pXFxcXGIpJylcbiAgICB9XG59O1xuLypcbiAqIFJ1YnkgbGFuZ3VhZ2UgZGVmaW5pdGlvblxuICpcbiAqIFF1aXRlIGEgY29tcGxleCBsYW5ndWFnZSBkdWUgdG8gZWxhYm9yYXRlIGVzY2FwZSBzZXF1ZW5jZXNcbiAqIGFuZCBxdW90aW5nIG9mIGxpdGVyYXRlIHN0cmluZ3MvcmVndWxhciBleHByZXNzaW9ucywgYW5kXG4gKiBhbiAnZW5kJyBrZXl3b3JkIHRoYXQgZG9lcyBub3QgYWx3YXlzIGFwcGx5IHRvIG1vZGlmaWVycyBsaWtlIHVudGlsIGFuZCB3aGlsZSxcbiAqIGFuZCBhICdkbycga2V5d29yZCB0aGF0IHNvbWV0aW1lcyBzdGFydHMgYSBibG9jaywgYnV0IHNvbWV0aW1lcyBpcyBwYXJ0IG9mXG4gKiBhbm90aGVyIHN0YXRlbWVudCAobGlrZSAnd2hpbGUnKS5cbiAqXG4gKiAoMSkgZW5kIGJsb2NrczpcbiAqICdlbmQnIG1heSBlbmQgZGVjbGFyYXRpb25zIGxpa2UgaWYgb3IgdW50aWwsIGJ1dCBzb21ldGltZXMgJ2lmJyBvciAndW50aWwnXG4gKiBhcmUgbW9kaWZpZXJzIHdoZXJlIHRoZXJlIGlzIG5vICdlbmQnLiBBbHNvLCAnZG8nIHNvbWV0aW1lcyBzdGFydHMgYSBibG9ja1xuICogdGhhdCBpcyBlbmRlZCBieSAnZW5kJywgYnV0IHNvbWV0aW1lcyBpdCBpcyBwYXJ0IG9mIGEgJ3doaWxlJywgJ2ZvcicsIG9yICd1bnRpbCdcbiAqIFRvIGRvIHByb3BlciBicmFjZSBtYXRjaGluZyB3ZSBkbyBzb21lIGVsYWJvcmF0ZSBzdGF0ZSBtYW5pcHVsYXRpb24uXG4gKiBzb21lIGV4YW1wbGVzOlxuICpcbiAqICAgdW50aWwgYmxhIGRvXG4gKiAgICAgd29yayB1bnRpbCB0aXJlZFxuICogICAgIGxpc3QuZWFjaCBkb1xuICogICAgICAgc29tZXRoaW5nIGlmIHRlc3RcbiAqICAgICBlbmRcbiAqICAgZW5kXG4gKlxuICogb3JcbiAqXG4gKiBpZiB0ZXN0XG4gKiAgc29tZXRoaW5nIChpZiB0ZXN0IHRoZW4geCBlbmQpXG4gKiAgYmFyIGlmIGJsYVxuICogZW5kXG4gKlxuICogb3IsIGhvdyBhYm91dCB1c2luZyBjbGFzcyBhcyBhIHByb3BlcnR5Li5cbiAqXG4gKiBjbGFzcyBUZXN0XG4gKiAgIGRlZiBlbmRwb2ludFxuICogICAgIHNlbGYuY2xhc3MuZW5kcG9pbnQgfHwgcm91dGVzXG4gKiAgIGVuZFxuICogZW5kXG4gKlxuICogKDIpIHF1b3Rpbmc6XG4gKiB0aGVyZSBhcmUgbWFueSBraW5kcyBvZiBzdHJpbmdzIGFuZCBlc2NhcGUgc2VxdWVuY2VzLiBCdXQgYWxzbywgb25lIGNhblxuICogc3RhcnQgbWFueSBzdHJpbmctbGlrZSB0aGluZ3MgYXMgJyVxeCcgd2hlcmUgcSBzcGVjaWZpZXMgdGhlIGtpbmQgb2Ygc3RyaW5nXG4gKiAobGlrZSBhIGNvbW1hbmQsIGVzY2FwZSBleHBhbmRlZCwgcmVndWxhciBleHByZXNzaW9uLCBzeW1ib2wgZXRjLiksIGFuZCB4IGlzXG4gKiBzb21lIGNoYXJhY3RlciBhbmQgb25seSBhbm90aGVyICd4JyBlbmRzIHRoZSBzZXF1ZW5jZS4gRXhjZXB0IGZvciBicmFja2V0c1xuICogd2hlcmUgdGhlIGNsb3NpbmcgYnJhY2tldCBlbmRzIHRoZSBzZXF1ZW5jZS4uIGFuZCBleGNlcHQgZm9yIGEgbmVzdGVkIGJyYWNrZXRcbiAqIGluc2lkZSB0aGUgc3RyaW5nIGxpa2UgZW50aXR5LiBBbHNvLCBzdWNoIHN0cmluZ3MgY2FuIGNvbnRhaW4gaW50ZXJwb2xhdGVkXG4gKiBydWJ5IGV4cHJlc3Npb25zIGFnYWluIChhbmQgc3BhbiBtdWx0aXBsZSBsaW5lcykuIE1vcmVvdmVyLCBleHBhbmRlZFxuICogcmVndWxhciBleHByZXNzaW9uIGNhbiBhbHNvIGNvbnRhaW4gY29tbWVudHMuXG4gKi9cbmV4cG9ydCB2YXIgbGFuZ3VhZ2UgPSB7XG4gICAgdG9rZW5Qb3N0Zml4OiAnLnJ1YnknLFxuICAgIGtleXdvcmRzOiBbXG4gICAgICAgICdfX0xJTkVfXycsXG4gICAgICAgICdfX0VOQ09ESU5HX18nLFxuICAgICAgICAnX19GSUxFX18nLFxuICAgICAgICAnQkVHSU4nLFxuICAgICAgICAnRU5EJyxcbiAgICAgICAgJ2FsaWFzJyxcbiAgICAgICAgJ2FuZCcsXG4gICAgICAgICdiZWdpbicsXG4gICAgICAgICdicmVhaycsXG4gICAgICAgICdjYXNlJyxcbiAgICAgICAgJ2NsYXNzJyxcbiAgICAgICAgJ2RlZicsXG4gICAgICAgICdkZWZpbmVkPycsXG4gICAgICAgICdkbycsXG4gICAgICAgICdlbHNlJyxcbiAgICAgICAgJ2Vsc2lmJyxcbiAgICAgICAgJ2VuZCcsXG4gICAgICAgICdlbnN1cmUnLFxuICAgICAgICAnZm9yJyxcbiAgICAgICAgJ2ZhbHNlJyxcbiAgICAgICAgJ2lmJyxcbiAgICAgICAgJ2luJyxcbiAgICAgICAgJ21vZHVsZScsXG4gICAgICAgICduZXh0JyxcbiAgICAgICAgJ25pbCcsXG4gICAgICAgICdub3QnLFxuICAgICAgICAnb3InLFxuICAgICAgICAncmVkbycsXG4gICAgICAgICdyZXNjdWUnLFxuICAgICAgICAncmV0cnknLFxuICAgICAgICAncmV0dXJuJyxcbiAgICAgICAgJ3NlbGYnLFxuICAgICAgICAnc3VwZXInLFxuICAgICAgICAndGhlbicsXG4gICAgICAgICd0cnVlJyxcbiAgICAgICAgJ3VuZGVmJyxcbiAgICAgICAgJ3VubGVzcycsXG4gICAgICAgICd1bnRpbCcsXG4gICAgICAgICd3aGVuJyxcbiAgICAgICAgJ3doaWxlJyxcbiAgICAgICAgJ3lpZWxkJ1xuICAgIF0sXG4gICAga2V5d29yZG9wczogWyc6OicsICcuLicsICcuLi4nLCAnPycsICc6JywgJz0+J10sXG4gICAgYnVpbHRpbnM6IFtcbiAgICAgICAgJ3JlcXVpcmUnLFxuICAgICAgICAncHVibGljJyxcbiAgICAgICAgJ3ByaXZhdGUnLFxuICAgICAgICAnaW5jbHVkZScsXG4gICAgICAgICdleHRlbmQnLFxuICAgICAgICAnYXR0cl9yZWFkZXInLFxuICAgICAgICAncHJvdGVjdGVkJyxcbiAgICAgICAgJ3ByaXZhdGVfY2xhc3NfbWV0aG9kJyxcbiAgICAgICAgJ3Byb3RlY3RlZF9jbGFzc19tZXRob2QnLFxuICAgICAgICAnbmV3J1xuICAgIF0sXG4gICAgLy8gdGhlc2UgYXJlIGNsb3NlZCBieSAnZW5kJyAoaWYsIHdoaWxlIGFuZCB1bnRpbCBhcmUgaGFuZGxlZCBzZXBhcmF0ZWx5KVxuICAgIGRlY2xhcmF0aW9uczogW1xuICAgICAgICAnbW9kdWxlJyxcbiAgICAgICAgJ2NsYXNzJyxcbiAgICAgICAgJ2RlZicsXG4gICAgICAgICdjYXNlJyxcbiAgICAgICAgJ2RvJyxcbiAgICAgICAgJ2JlZ2luJyxcbiAgICAgICAgJ2ZvcicsXG4gICAgICAgICdpZicsXG4gICAgICAgICd3aGlsZScsXG4gICAgICAgICd1bnRpbCcsXG4gICAgICAgICd1bmxlc3MnXG4gICAgXSxcbiAgICBsaW5lZGVjbHM6IFsnZGVmJywgJ2Nhc2UnLCAnZG8nLCAnYmVnaW4nLCAnZm9yJywgJ2lmJywgJ3doaWxlJywgJ3VudGlsJywgJ3VubGVzcyddLFxuICAgIG9wZXJhdG9yczogW1xuICAgICAgICAnXicsXG4gICAgICAgICcmJyxcbiAgICAgICAgJ3wnLFxuICAgICAgICAnPD0+JyxcbiAgICAgICAgJz09JyxcbiAgICAgICAgJz09PScsXG4gICAgICAgICchficsXG4gICAgICAgICc9ficsXG4gICAgICAgICc+JyxcbiAgICAgICAgJz49JyxcbiAgICAgICAgJzwnLFxuICAgICAgICAnPD0nLFxuICAgICAgICAnPDwnLFxuICAgICAgICAnPj4nLFxuICAgICAgICAnKycsXG4gICAgICAgICctJyxcbiAgICAgICAgJyonLFxuICAgICAgICAnLycsXG4gICAgICAgICclJyxcbiAgICAgICAgJyoqJyxcbiAgICAgICAgJ34nLFxuICAgICAgICAnK0AnLFxuICAgICAgICAnLUAnLFxuICAgICAgICAnW10nLFxuICAgICAgICAnW109JyxcbiAgICAgICAgJ2AnLFxuICAgICAgICAnKz0nLFxuICAgICAgICAnLT0nLFxuICAgICAgICAnKj0nLFxuICAgICAgICAnKio9JyxcbiAgICAgICAgJy89JyxcbiAgICAgICAgJ149JyxcbiAgICAgICAgJyU9JyxcbiAgICAgICAgJzw8PScsXG4gICAgICAgICc+Pj0nLFxuICAgICAgICAnJj0nLFxuICAgICAgICAnJiY9JyxcbiAgICAgICAgJ3x8PScsXG4gICAgICAgICd8PSdcbiAgICBdLFxuICAgIGJyYWNrZXRzOiBbXG4gICAgICAgIHsgb3BlbjogJygnLCBjbG9zZTogJyknLCB0b2tlbjogJ2RlbGltaXRlci5wYXJlbnRoZXNpcycgfSxcbiAgICAgICAgeyBvcGVuOiAneycsIGNsb3NlOiAnfScsIHRva2VuOiAnZGVsaW1pdGVyLmN1cmx5JyB9LFxuICAgICAgICB7IG9wZW46ICdbJywgY2xvc2U6ICddJywgdG9rZW46ICdkZWxpbWl0ZXIuc3F1YXJlJyB9XG4gICAgXSxcbiAgICAvLyB3ZSBpbmNsdWRlIHRoZXNlIGNvbW1vbiByZWd1bGFyIGV4cHJlc3Npb25zXG4gICAgc3ltYm9sczogL1s9Pjwhfj86JnwrXFwtKlxcL1xcXiVcXC5dKy8sXG4gICAgLy8gZXNjYXBlIHNlcXVlbmNlc1xuICAgIGVzY2FwZTogLyg/OlthYmVmbnJzdHZcXFxcXCInXFxuXFxyXXxbMC03XXsxLDN9fHhbMC05QS1GYS1mXXsxLDJ9fHVbMC05QS1GYS1mXXs0fSkvLFxuICAgIGVzY2FwZXM6IC9cXFxcKD86Q1xcLShAZXNjYXBlfC4pfGMoQGVzY2FwZXwuKXxAZXNjYXBlKS8sXG4gICAgZGVjcGFydDogL1xcZChfP1xcZCkqLyxcbiAgICBkZWNpbWFsOiAvMHxAZGVjcGFydC8sXG4gICAgZGVsaW06IC9bXmEtekEtWjAtOVxcc1xcblxccl0vLFxuICAgIGhlcmVkZWxpbTogLyg/Olxcdyt8J1teJ10qJ3xcIlteXCJdKlwifGBbXmBdKmApLyxcbiAgICByZWdleHBjdGw6IC9bKCl7fVxcW1xcXVxcJFxcXnxcXC0qKz9cXC5dLyxcbiAgICByZWdleHBlc2M6IC9cXFxcKD86W0F6WmJCZERmbnJzdHZ3V24wXFxcXFxcL118QHJlZ2V4cGN0bHxjW0EtWl18eFswLTlhLWZBLUZdezJ9fHVbMC05YS1mQS1GXXs0fSk/LyxcbiAgICAvLyBUaGUgbWFpbiB0b2tlbml6ZXIgZm9yIG91ciBsYW5ndWFnZXNcbiAgICB0b2tlbml6ZXI6IHtcbiAgICAgICAgLy8gTWFpbiBlbnRyeS5cbiAgICAgICAgLy8gcm9vdC48ZGVjbD4gd2hlcmUgZGVjbCBpcyB0aGUgY3VycmVudCBvcGVuaW5nIGRlY2xhcmF0aW9uIChsaWtlICdjbGFzcycpXG4gICAgICAgIHJvb3Q6IFtcbiAgICAgICAgICAgIC8vIGlkZW50aWZpZXJzIGFuZCBrZXl3b3Jkc1xuICAgICAgICAgICAgLy8gbW9zdCBjb21wbGV4aXR5IGhlcmUgaXMgZHVlIHRvIG1hdGNoaW5nICdlbmQnIGNvcnJlY3RseSB3aXRoIGRlY2xhcmF0aW9ucy5cbiAgICAgICAgICAgIC8vIFdlIGRpc3Rpbmd1aXNoIGEgZGVjbGFyYXRpb24gdGhhdCBjb21lcyBmaXJzdCBvbiBhIGxpbmUsIHZlcnN1cyBkZWNsYXJhdGlvbnMgZnVydGhlciBvbiBhIGxpbmUgKHdoaWNoIGFyZSBtb3N0IGxpa2V5IG1vZGlmaWVycylcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAvXihcXHMqKShbYS16X11cXHcqWyE/PV0/KS8sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAnd2hpdGUnLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb3J8dW50aWx8d2hpbGUnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiAna2V5d29yZC4kMicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6ICdAZG9kZWNsLiQyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0BkZWNsYXJhdGlvbnMnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiAna2V5d29yZC4kMicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6ICdAcm9vdC4kMidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogeyB0b2tlbjogJ2tleXdvcmQuJFMyJywgbmV4dDogJ0Bwb3AnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0BrZXl3b3Jkcyc6ICdrZXl3b3JkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQGJ1aWx0aW5zJzogJ3ByZWRlZmluZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAZGVmYXVsdCc6ICdpZGVudGlmaWVyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAvW2Etel9dXFx3KlshPz1dPy8sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjYXNlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2lmfHVubGVzc3x3aGlsZXx1bnRpbCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogJ2tleXdvcmQuJDB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiAnQG1vZGlmaWVyLiQweCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3I6IHsgdG9rZW46ICdrZXl3b3JkLiQyJywgbmV4dDogJ0Bkb2RlY2wuJDInIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAnQGxpbmVkZWNscyc6IHsgdG9rZW46ICdrZXl3b3JkLiQwJywgbmV4dDogJ0Byb290LiQwJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiB7IHRva2VuOiAna2V5d29yZC4kUzInLCBuZXh0OiAnQHBvcCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdAa2V5d29yZHMnOiAna2V5d29yZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnQGJ1aWx0aW5zJzogJ3ByZWRlZmluZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0BkZWZhdWx0JzogJ2lkZW50aWZpZXInXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgWy9bQS1aXVtcXHddKlshPz1dPy8sICdjb25zdHJ1Y3Rvci5pZGVudGlmaWVyJ10sXG4gICAgICAgICAgICBbL1xcJFtcXHddKi8sICdnbG9iYWwuY29uc3RhbnQnXSxcbiAgICAgICAgICAgIFsvQFtcXHddKi8sICduYW1lc3BhY2UuaW5zdGFuY2UuaWRlbnRpZmllciddLFxuICAgICAgICAgICAgWy9AQEBbXFx3XSovLCAnbmFtZXNwYWNlLmNsYXNzLmlkZW50aWZpZXInXSxcbiAgICAgICAgICAgIC8vIGhlcmUgZG9jdW1lbnRcbiAgICAgICAgICAgIFsvPDxbLX5dKEBoZXJlZGVsaW0pLiovLCB7IHRva2VuOiAnc3RyaW5nLmhlcmVkb2MuZGVsaW1pdGVyJywgbmV4dDogJ0BoZXJlZG9jLiQxJyB9XSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAvWyBcXHRcXHJcXG5dKzw8KEBoZXJlZGVsaW0pLiovLFxuICAgICAgICAgICAgICAgIHsgdG9rZW46ICdzdHJpbmcuaGVyZWRvYy5kZWxpbWl0ZXInLCBuZXh0OiAnQGhlcmVkb2MuJDEnIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbL148PChAaGVyZWRlbGltKS4qLywgeyB0b2tlbjogJ3N0cmluZy5oZXJlZG9jLmRlbGltaXRlcicsIG5leHQ6ICdAaGVyZWRvYy4kMScgfV0sXG4gICAgICAgICAgICAvLyB3aGl0ZXNwYWNlXG4gICAgICAgICAgICB7IGluY2x1ZGU6ICdAd2hpdGVzcGFjZScgfSxcbiAgICAgICAgICAgIC8vIHN0cmluZ3NcbiAgICAgICAgICAgIFsvXCIvLCB7IHRva2VuOiAnc3RyaW5nLmQuZGVsaW0nLCBuZXh0OiAnQGRzdHJpbmcuZC5cIicgfV0sXG4gICAgICAgICAgICBbLycvLCB7IHRva2VuOiAnc3RyaW5nLnNxLmRlbGltJywgbmV4dDogJ0Bzc3RyaW5nLnNxJyB9XSxcbiAgICAgICAgICAgIC8vICUgbGl0ZXJhbHMuIEZvciBlZmZpY2llbmN5LCByZW1hdGNoIGluIHRoZSAncHN0cmluZycgc3RhdGVcbiAgICAgICAgICAgIFsvJShbcnNxeHdXXXxRPykvLCB7IHRva2VuOiAnQHJlbWF0Y2gnLCBuZXh0OiAncHN0cmluZycgfV0sXG4gICAgICAgICAgICAvLyBjb21tYW5kcyBhbmQgc3ltYm9sc1xuICAgICAgICAgICAgWy9gLywgeyB0b2tlbjogJ3N0cmluZy54LmRlbGltJywgbmV4dDogJ0Bkc3RyaW5nLnguYCcgfV0sXG4gICAgICAgICAgICBbLzooXFx3fFskQF0pXFx3KlshPz1dPy8sICdzdHJpbmcucyddLFxuICAgICAgICAgICAgWy86XCIvLCB7IHRva2VuOiAnc3RyaW5nLnMuZGVsaW0nLCBuZXh0OiAnQGRzdHJpbmcucy5cIicgfV0sXG4gICAgICAgICAgICBbLzonLywgeyB0b2tlbjogJ3N0cmluZy5zLmRlbGltJywgbmV4dDogJ0Bzc3RyaW5nLnMnIH1dLFxuICAgICAgICAgICAgLy8gcmVndWxhciBleHByZXNzaW9ucy4gTG9va2FoZWFkIGZvciBhIChub3QgZXNjYXBlZCkgY2xvc2luZyBmb3J3YXJkc2xhc2ggb24gdGhlIHNhbWUgbGluZVxuICAgICAgICAgICAgWy9cXC8oPz0oXFxcXFxcL3xbXlxcL1xcbl0pK1xcLykvLCB7IHRva2VuOiAncmVnZXhwLmRlbGltJywgbmV4dDogJ0ByZWdleHAnIH1dLFxuICAgICAgICAgICAgLy8gZGVsaW1pdGVycyBhbmQgb3BlcmF0b3JzXG4gICAgICAgICAgICBbL1t7fSgpXFxbXFxdXS8sICdAYnJhY2tldHMnXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAvQHN5bWJvbHMvLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdAa2V5d29yZG9wcyc6ICdrZXl3b3JkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdAb3BlcmF0b3JzJzogJ29wZXJhdG9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdAZGVmYXVsdCc6ICcnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgWy9bOyxdLywgJ2RlbGltaXRlciddLFxuICAgICAgICAgICAgLy8gbnVtYmVyc1xuICAgICAgICAgICAgWy8wW3hYXVswLTlhLWZBLUZdKF8/WzAtOWEtZkEtRl0pKi8sICdudW1iZXIuaGV4J10sXG4gICAgICAgICAgICBbLzBbX29PXVswLTddKF8/WzAtN10pKi8sICdudW1iZXIub2N0YWwnXSxcbiAgICAgICAgICAgIFsvMFtiQl1bMDFdKF8/WzAxXSkqLywgJ251bWJlci5iaW5hcnknXSxcbiAgICAgICAgICAgIFsvMFtkRF1AZGVjcGFydC8sICdudW1iZXInXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAvQGRlY2ltYWwoKFxcLkBkZWNwYXJ0KT8oW2VFXVtcXC0rXT9AZGVjcGFydCk/KS8sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjYXNlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJDE6ICdudW1iZXIuZmxvYXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0BkZWZhdWx0JzogJ251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgXSxcbiAgICAgICAgLy8gdXNlZCB0byBub3QgdHJlYXQgYSAnZG8nIGFzIGEgYmxvY2sgb3BlbmVyIGlmIGl0IG9jY3VycyBvbiB0aGUgc2FtZVxuICAgICAgICAvLyBsaW5lIGFzIGEgJ2RvJyBzdGF0ZW1lbnQ6ICd3aGlsZXx1bnRpbHxmb3InXG4gICAgICAgIC8vIGRvZGVjbC48ZGVjbD4gd2hlcmUgZGVjbCBpcyB0aGUgZGVjbGFyYXRpb25zIHN0YXJ0ZWQsIGxpa2UgJ3doaWxlJ1xuICAgICAgICBkb2RlY2w6IFtcbiAgICAgICAgICAgIFsvXi8sIHsgdG9rZW46ICcnLCBzd2l0Y2hUbzogJ0Byb290LiRTMicgfV0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgL1thLXpfXVxcdypbIT89XT8vLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogeyB0b2tlbjogJ2tleXdvcmQuJFMyJywgbmV4dDogJ0Bwb3AnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBkbzogeyB0b2tlbjogJ2tleXdvcmQnLCBzd2l0Y2hUbzogJ0Byb290LiRTMicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdAbGluZWRlY2xzJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiAnQHJlbWF0Y2gnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaFRvOiAnQHJvb3QuJFMyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdAa2V5d29yZHMnOiAna2V5d29yZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnQGJ1aWx0aW5zJzogJ3ByZWRlZmluZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0BkZWZhdWx0JzogJ2lkZW50aWZpZXInXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgeyBpbmNsdWRlOiAnQHJvb3QnIH1cbiAgICAgICAgXSxcbiAgICAgICAgLy8gdXNlZCB0byBwcmV2ZW50IHBvdGVudGlhbCBtb2RpZmllcnMgKCdpZnx1bnRpbHx3aGlsZXx1bmxlc3MnKSB0byBtYXRjaFxuICAgICAgICAvLyB3aXRoICdlbmQnIGtleXdvcmRzLlxuICAgICAgICAvLyBtb2RpZmllci48ZGVjbD54IHdoZXJlIGRlY2wgaXMgdGhlIGRlY2xhcmF0aW9uIHN0YXJ0ZXIsIGxpa2UgJ2lmJ1xuICAgICAgICBtb2RpZmllcjogW1xuICAgICAgICAgICAgWy9eLywgJycsICdAcG9wJ10sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgL1thLXpfXVxcdypbIT89XT8vLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogeyB0b2tlbjogJ2tleXdvcmQuJFMyJywgbmV4dDogJ0Bwb3AnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAndGhlbnxlbHNlfGVsc2lmfGRvJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiAna2V5d29yZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoVG86ICdAcm9vdC4kUzInXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0BsaW5lZGVjbHMnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46ICdAcmVtYXRjaCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoVG86ICdAcm9vdC4kUzInXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0BrZXl3b3Jkcyc6ICdrZXl3b3JkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdAYnVpbHRpbnMnOiAncHJlZGVmaW5lZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnQGRlZmF1bHQnOiAnaWRlbnRpZmllcidcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB7IGluY2x1ZGU6ICdAcm9vdCcgfVxuICAgICAgICBdLFxuICAgICAgICAvLyBzaW5nbGUgcXVvdGUgc3RyaW5ncyAoYWxzbyB1c2VkIGZvciBzeW1ib2xzKVxuICAgICAgICAvLyBzc3RyaW5nLjxraW5kPiAgd2hlcmUga2luZCBpcyAnc3EnIChzaW5nbGUgcXVvdGUpIG9yICdzJyAoc3ltYm9sKVxuICAgICAgICBzc3RyaW5nOiBbXG4gICAgICAgICAgICBbL1teXFxcXCddKy8sICdzdHJpbmcuJFMyJ10sXG4gICAgICAgICAgICBbL1xcXFxcXFxcfFxcXFwnfFxcXFwkLywgJ3N0cmluZy4kUzIuZXNjYXBlJ10sXG4gICAgICAgICAgICBbL1xcXFwuLywgJ3N0cmluZy4kUzIuaW52YWxpZCddLFxuICAgICAgICAgICAgWy8nLywgeyB0b2tlbjogJ3N0cmluZy4kUzIuZGVsaW0nLCBuZXh0OiAnQHBvcCcgfV1cbiAgICAgICAgXSxcbiAgICAgICAgLy8gZG91YmxlIHF1b3RlZCBcInN0cmluZ1wiLlxuICAgICAgICAvLyBkc3RyaW5nLjxraW5kPi48ZGVsaW0+IHdoZXJlIGtpbmQgaXMgJ2QnIChkb3VibGUgcXVvdGVkKSwgJ3gnIChjb21tYW5kKSwgb3IgJ3MnIChzeW1ib2wpXG4gICAgICAgIC8vIGFuZCBkZWxpbSBpcyB0aGUgZW5kaW5nIGRlbGltaXRlciAoXCIgb3IgYClcbiAgICAgICAgZHN0cmluZzogW1xuICAgICAgICAgICAgWy9bXlxcXFxgXCIjXSsvLCAnc3RyaW5nLiRTMiddLFxuICAgICAgICAgICAgWy8jLywgJ3N0cmluZy4kUzIuZXNjYXBlJywgJ0BpbnRlcnBvbGF0ZWQnXSxcbiAgICAgICAgICAgIFsvXFxcXCQvLCAnc3RyaW5nLiRTMi5lc2NhcGUnXSxcbiAgICAgICAgICAgIFsvQGVzY2FwZXMvLCAnc3RyaW5nLiRTMi5lc2NhcGUnXSxcbiAgICAgICAgICAgIFsvXFxcXC4vLCAnc3RyaW5nLiRTMi5lc2NhcGUuaW52YWxpZCddLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIC9bYFwiXS8sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjYXNlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJyQjPT0kUzMnOiB7IHRva2VuOiAnc3RyaW5nLiRTMi5kZWxpbScsIG5leHQ6ICdAcG9wJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0BkZWZhdWx0JzogJ3N0cmluZy4kUzInXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIF0sXG4gICAgICAgIC8vIGxpdGVyYWwgZG9jdW1lbnRzXG4gICAgICAgIC8vIGhlcmVkb2MuPGNsb3NlPiB3aGVyZSBjbG9zZSBpcyB0aGUgY2xvc2luZyBkZWxpbWl0ZXJcbiAgICAgICAgaGVyZWRvYzogW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIC9eKFxccyopKEBoZXJlZGVsaW0pJC8sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjYXNlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJyQyPT0kUzInOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0cmluZy5oZXJlZG9jJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHRva2VuOiAnc3RyaW5nLmhlcmVkb2MuZGVsaW1pdGVyJywgbmV4dDogJ0Bwb3AnIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAnQGRlZmF1bHQnOiBbJ3N0cmluZy5oZXJlZG9jJywgJ3N0cmluZy5oZXJlZG9jJ11cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbLy4qLywgJ3N0cmluZy5oZXJlZG9jJ11cbiAgICAgICAgXSxcbiAgICAgICAgLy8gaW50ZXJwb2xhdGVkIHNlcXVlbmNlXG4gICAgICAgIGludGVycG9sYXRlZDogW1xuICAgICAgICAgICAgWy9cXCRcXHcqLywgJ2dsb2JhbC5jb25zdGFudCcsICdAcG9wJ10sXG4gICAgICAgICAgICBbL0BcXHcqLywgJ25hbWVzcGFjZS5jbGFzcy5pZGVudGlmaWVyJywgJ0Bwb3AnXSxcbiAgICAgICAgICAgIFsvQEBAXFx3Ki8sICduYW1lc3BhY2UuaW5zdGFuY2UuaWRlbnRpZmllcicsICdAcG9wJ10sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgL1t7XS8sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0b2tlbjogJ3N0cmluZy5lc2NhcGUuY3VybHknLFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hUbzogJ0BpbnRlcnBvbGF0ZWRfY29tcG91bmQnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFsnJywgJycsICdAcG9wJ10gLy8ganVzdCBhICMgaXMgaW50ZXJwcmV0ZWQgYXMgYSAjXG4gICAgICAgIF0sXG4gICAgICAgIC8vIGFueSBjb2RlXG4gICAgICAgIGludGVycG9sYXRlZF9jb21wb3VuZDogW1xuICAgICAgICAgICAgWy9bfV0vLCB7IHRva2VuOiAnc3RyaW5nLmVzY2FwZS5jdXJseScsIG5leHQ6ICdAcG9wJyB9XSxcbiAgICAgICAgICAgIHsgaW5jbHVkZTogJ0Byb290JyB9XG4gICAgICAgIF0sXG4gICAgICAgIC8vICVyIHF1b3RlZCByZWdleHBcbiAgICAgICAgLy8gcHJlZ2V4cC48b3Blbj4uPGNsb3NlPiB3aGVyZSBvcGVuL2Nsb3NlIGFyZSB0aGUgb3Blbi9jbG9zZSBkZWxpbWl0ZXJcbiAgICAgICAgcHJlZ2V4cDogW1xuICAgICAgICAgICAgeyBpbmNsdWRlOiAnQHdoaXRlc3BhY2UnIH0sXG4gICAgICAgICAgICAvLyB0dXJucyBvdXQgdGhhdCB5b3UgY2FuIHF1b3RlIHVzaW5nIHJlZ2V4IGNvbnRyb2wgY2hhcmFjdGVycywgYWFyZ2ghXG4gICAgICAgICAgICAvLyBmb3IgZXhhbXBsZTsgJXJ8a2dqZ2FqfCBpcyBvayAoZXZlbiB0aG91Z2ggfCBpcyB1c2VkIGZvciBhbHRlcm5hdGlvbilcbiAgICAgICAgICAgIC8vIHNvLCB3ZSBuZWVkIHRvIG1hdGNoIHRob3NlIGZpcnN0XG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgL1teXFwoXFx7XFxbXFxcXF0vLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICckIz09JFMzJzogeyB0b2tlbjogJ3JlZ2V4cC5kZWxpbScsIG5leHQ6ICdAcG9wJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgJyQjPT0kUzInOiB7IHRva2VuOiAncmVnZXhwLmRlbGltJywgbmV4dDogJ0BwdXNoJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ35bKX1cXFxcXV0nOiAnQGJyYWNrZXRzLnJlZ2V4cC5lc2NhcGUuY29udHJvbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnfkByZWdleHBjdGwnOiAncmVnZXhwLmVzY2FwZS5jb250cm9sJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdAZGVmYXVsdCc6ICdyZWdleHAnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgeyBpbmNsdWRlOiAnQHJlZ2V4Y29udHJvbCcgfVxuICAgICAgICBdLFxuICAgICAgICAvLyBXZSBtYXRjaCByZWd1bGFyIGV4cHJlc3Npb24gcXVpdGUgcHJlY2lzZWx5XG4gICAgICAgIHJlZ2V4cDogW1xuICAgICAgICAgICAgeyBpbmNsdWRlOiAnQHJlZ2V4Y29udHJvbCcgfSxcbiAgICAgICAgICAgIFsvW15cXFxcXFwvXS8sICdyZWdleHAnXSxcbiAgICAgICAgICAgIFsnL1tpeG1wXSonLCB7IHRva2VuOiAncmVnZXhwLmRlbGltJyB9LCAnQHBvcCddXG4gICAgICAgIF0sXG4gICAgICAgIHJlZ2V4Y29udHJvbDogW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIC8oXFx7KShcXGQrKD86LFxcZCopPykoXFx9KS8sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAnQGJyYWNrZXRzLnJlZ2V4cC5lc2NhcGUuY29udHJvbCcsXG4gICAgICAgICAgICAgICAgICAgICdyZWdleHAuZXNjYXBlLmNvbnRyb2wnLFxuICAgICAgICAgICAgICAgICAgICAnQGJyYWNrZXRzLnJlZ2V4cC5lc2NhcGUuY29udHJvbCdcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIC8oXFxbKShcXF4/KS8sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAnQGJyYWNrZXRzLnJlZ2V4cC5lc2NhcGUuY29udHJvbCcsXG4gICAgICAgICAgICAgICAgICAgIHsgdG9rZW46ICdyZWdleHAuZXNjYXBlLmNvbnRyb2wnLCBuZXh0OiAnQHJlZ2V4cmFuZ2UnIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgWy8oXFwoKShcXD9bOj0hXSkvLCBbJ0BicmFja2V0cy5yZWdleHAuZXNjYXBlLmNvbnRyb2wnLCAncmVnZXhwLmVzY2FwZS5jb250cm9sJ11dLFxuICAgICAgICAgICAgWy9cXChcXD8jLywgeyB0b2tlbjogJ3JlZ2V4cC5lc2NhcGUuY29udHJvbCcsIG5leHQ6ICdAcmVnZXhwY29tbWVudCcgfV0sXG4gICAgICAgICAgICBbL1soKV0vLCAnQGJyYWNrZXRzLnJlZ2V4cC5lc2NhcGUuY29udHJvbCddLFxuICAgICAgICAgICAgWy9AcmVnZXhwY3RsLywgJ3JlZ2V4cC5lc2NhcGUuY29udHJvbCddLFxuICAgICAgICAgICAgWy9cXFxcJC8sICdyZWdleHAuZXNjYXBlJ10sXG4gICAgICAgICAgICBbL0ByZWdleHBlc2MvLCAncmVnZXhwLmVzY2FwZSddLFxuICAgICAgICAgICAgWy9cXFxcXFwuLywgJ3JlZ2V4cC5pbnZhbGlkJ10sXG4gICAgICAgICAgICBbLyMvLCAncmVnZXhwLmVzY2FwZScsICdAaW50ZXJwb2xhdGVkJ11cbiAgICAgICAgXSxcbiAgICAgICAgcmVnZXhyYW5nZTogW1xuICAgICAgICAgICAgWy8tLywgJ3JlZ2V4cC5lc2NhcGUuY29udHJvbCddLFxuICAgICAgICAgICAgWy9cXF4vLCAncmVnZXhwLmludmFsaWQnXSxcbiAgICAgICAgICAgIFsvXFxcXCQvLCAncmVnZXhwLmVzY2FwZSddLFxuICAgICAgICAgICAgWy9AcmVnZXhwZXNjLywgJ3JlZ2V4cC5lc2NhcGUnXSxcbiAgICAgICAgICAgIFsvW15cXF1dLywgJ3JlZ2V4cCddLFxuICAgICAgICAgICAgWy9cXF0vLCAnQGJyYWNrZXRzLnJlZ2V4cC5lc2NhcGUuY29udHJvbCcsICdAcG9wJ11cbiAgICAgICAgXSxcbiAgICAgICAgcmVnZXhwY29tbWVudDogW1xuICAgICAgICAgICAgWy9bXildKy8sICdjb21tZW50J10sXG4gICAgICAgICAgICBbL1xcKS8sIHsgdG9rZW46ICdyZWdleHAuZXNjYXBlLmNvbnRyb2wnLCBuZXh0OiAnQHBvcCcgfV1cbiAgICAgICAgXSxcbiAgICAgICAgLy8gJSBxdW90ZWQgc3RyaW5nc1xuICAgICAgICAvLyBBIGJpdCB