UNPKG

ember-legacy-class-transform

Version:
245 lines (237 loc) 22.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SYNTHETIC = undefined; var _nodes = require("./types/nodes"); var AST = _interopRequireWildcard(_nodes); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function buildMustache(path, params, hash, raw, loc) { if (!AST.isLiteral(path)) { path = buildPath(path); } return { type: "MustacheStatement", path: path, params: params || [], hash: hash || buildHash([]), escaped: !raw, loc: buildLoc(loc || null) }; } function buildBlock(path, params, hash, program, inverse, loc) { return { type: "BlockStatement", path: buildPath(path), params: params || [], hash: hash || buildHash([]), program: program || null, inverse: inverse || null, loc: buildLoc(loc || null) }; } function buildElementModifier(path, params, hash, loc) { return { type: "ElementModifierStatement", path: buildPath(path), params: params || [], hash: hash || buildHash([]), loc: buildLoc(loc || null) }; } function buildPartial(name, params, hash, indent, loc) { return { type: "PartialStatement", name: name, params: params || [], hash: hash || buildHash([]), indent: indent || '', strip: { open: false, close: false }, loc: buildLoc(loc || null) }; } function buildComment(value, loc) { return { type: "CommentStatement", value: value, loc: buildLoc(loc || null) }; } function buildMustacheComment(value, loc) { return { type: "MustacheCommentStatement", value: value, loc: buildLoc(loc || null) }; } function buildConcat(parts, loc) { return { type: "ConcatStatement", parts: parts || [], loc: buildLoc(loc || null) }; } function buildElement(tag, attributes, modifiers, children, comments, loc) { // this is used for backwards compat prior to `comments` being added to the AST if (!Array.isArray(comments)) { loc = comments; comments = []; } return { type: "ElementNode", tag: tag || "", attributes: attributes || [], blockParams: [], modifiers: modifiers || [], comments: comments || [], children: children || [], loc: buildLoc(loc || null) }; } function buildAttr(name, value, loc) { return { type: "AttrNode", name: name, value: value, loc: buildLoc(loc || null) }; } function buildText(chars, loc) { return { type: "TextNode", chars: chars || "", loc: buildLoc(loc || null) }; } // Expressions function buildSexpr(path, params, hash, loc) { return { type: "SubExpression", path: buildPath(path), params: params || [], hash: hash || buildHash([]), loc: buildLoc(loc || null) }; } function buildPath(original, loc) { if (typeof original !== 'string') return original; var parts = original.split('.'); var thisHead = false; if (parts[0] === 'this') { thisHead = true; parts = parts.slice(1); } return { type: "PathExpression", original: original, this: thisHead, parts: parts, data: false, loc: buildLoc(loc || null) }; } function buildLiteral(type, value, loc) { return { type: type, value: value, original: value, loc: buildLoc(loc || null) }; } // Miscellaneous function buildHash(pairs, loc) { return { type: "Hash", pairs: pairs || [], loc: buildLoc(loc || null) }; } function buildPair(key, value, loc) { return { type: "HashPair", key: key, value: value, loc: buildLoc(loc || null) }; } function buildProgram(body, blockParams, loc) { return { type: "Program", body: body || [], blockParams: blockParams || [], loc: buildLoc(loc || null) }; } function buildSource(source) { return source || null; } function buildPosition(line, column) { return { line: line, column: column }; } var SYNTHETIC = exports.SYNTHETIC = { source: '(synthetic)', start: { line: 1, column: 0 }, end: { line: 1, column: 0 } }; function buildLoc() { for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } if (args.length === 1) { var loc = args[0]; if (loc && typeof loc === 'object') { return { source: buildSource(loc.source), start: buildPosition(loc.start.line, loc.start.column), end: buildPosition(loc.end.line, loc.end.column) }; } else { return SYNTHETIC; } } else { var startLine = args[0], startColumn = args[1], endLine = args[2], endColumn = args[3], source = args[4]; return { source: buildSource(source), start: buildPosition(startLine, startColumn), end: buildPosition(endLine, endColumn) }; } } exports.default = { mustache: buildMustache, block: buildBlock, partial: buildPartial, comment: buildComment, mustacheComment: buildMustacheComment, element: buildElement, elementModifier: buildElementModifier, attr: buildAttr, text: buildText, sexpr: buildSexpr, path: buildPath, concat: buildConcat, hash: buildHash, pair: buildPair, literal: buildLiteral, program: buildProgram, loc: buildLoc, pos: buildPosition, string: literal('StringLiteral'), boolean: literal('BooleanLiteral'), number: literal('NumberLiteral'), undefined: function () { return buildLiteral('UndefinedLiteral', undefined); }, null: function () { return buildLiteral('NullLiteral', null); } }; function literal(type) { return function (value) { return buildLiteral(type, value); }; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9idWlsZGVycy5qcyJdLCJuYW1lcyI6WyJBU1QiLCJidWlsZE11c3RhY2hlIiwicGF0aCIsInBhcmFtcyIsImhhc2giLCJyYXciLCJsb2MiLCJpc0xpdGVyYWwiLCJidWlsZFBhdGgiLCJ0eXBlIiwiYnVpbGRIYXNoIiwiZXNjYXBlZCIsImJ1aWxkTG9jIiwiYnVpbGRCbG9jayIsInByb2dyYW0iLCJpbnZlcnNlIiwiYnVpbGRFbGVtZW50TW9kaWZpZXIiLCJidWlsZFBhcnRpYWwiLCJuYW1lIiwiaW5kZW50Iiwic3RyaXAiLCJvcGVuIiwiY2xvc2UiLCJidWlsZENvbW1lbnQiLCJ2YWx1ZSIsImJ1aWxkTXVzdGFjaGVDb21tZW50IiwiYnVpbGRDb25jYXQiLCJwYXJ0cyIsImJ1aWxkRWxlbWVudCIsInRhZyIsImF0dHJpYnV0ZXMiLCJtb2RpZmllcnMiLCJjaGlsZHJlbiIsImNvbW1lbnRzIiwiQXJyYXkiLCJpc0FycmF5IiwiYmxvY2tQYXJhbXMiLCJidWlsZEF0dHIiLCJidWlsZFRleHQiLCJjaGFycyIsImJ1aWxkU2V4cHIiLCJvcmlnaW5hbCIsInNwbGl0IiwidGhpc0hlYWQiLCJzbGljZSIsInRoaXMiLCJkYXRhIiwiYnVpbGRMaXRlcmFsIiwicGFpcnMiLCJidWlsZFBhaXIiLCJrZXkiLCJidWlsZFByb2dyYW0iLCJib2R5IiwiYnVpbGRTb3VyY2UiLCJzb3VyY2UiLCJidWlsZFBvc2l0aW9uIiwibGluZSIsImNvbHVtbiIsIlNZTlRIRVRJQyIsInN0YXJ0IiwiZW5kIiwiYXJncyIsImxlbmd0aCIsInN0YXJ0TGluZSIsInN0YXJ0Q29sdW1uIiwiZW5kTGluZSIsImVuZENvbHVtbiIsIm11c3RhY2hlIiwiYmxvY2siLCJwYXJ0aWFsIiwiY29tbWVudCIsIm11c3RhY2hlQ29tbWVudCIsImVsZW1lbnQiLCJlbGVtZW50TW9kaWZpZXIiLCJhdHRyIiwidGV4dCIsInNleHByIiwiY29uY2F0IiwicGFpciIsImxpdGVyYWwiLCJwb3MiLCJzdHJp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LEFBTUYsQUFDVDtxQkFQVyxBQU9NLEFBQ2pCO1VBUlcsQUFRTCxBQUNOO1VBVFcsQUFTTCxBQUNOO1dBVlcsQUFVSixBQUNQO1VBWFcsQUFXTCxBQUNOO1lBWlcsQUFZSCxBQUNSO1VBYlcsQUFhTCxBQUNOO1VBZFcsQUFjTCxBQUNOO2FBZlcsQUFlRixBQUNUO2FBaEJXLEFBZ0JGLEFBQ1Q7U0FqQlcsQUFpQk4sQUFDTDtTQWxCVyxBQWtCTixBQUNMO1lBQVEsUUFuQkcsQUFtQkgsQUFBUSxBQUNoQjthQUFTLFFBcEJFLEFBb0JGLEFBQVEsQUFDakI7WUFBUSxRQXJCRyxBQXFCSCxBQUFRLEFBQ2hCO0FBdEJXLDJCQXNCQyxBQUNSO2VBQU8sYUFBQSxBQUFhLG9CQUFwQixBQUFPLEFBQWlDLEFBQzNDO0FBeEJVLEFBeUJYO0FBekJXLHNCQXlCSixBQUNIO2VBQU8sYUFBQSxBQUFhLGVBQXBCLEFBQU8sQUFBNEIsQUFDdEM7QUEzQkwsQUFBZTtBQUFBLEFBQ1g7O0FBNEJKLFNBQUEsQUFBUyxRQUFULEFBQWlCLE1BQU0sQUFDbkI7V0FBTyxVQUFBLEFBQVUsT0FBTyxBQUNwQjtlQUFPLGFBQUEsQUFBYSxNQUFwQixBQUFPLEFBQW1CLEFBQzdCO0FBRkQsQUFHSCIsImZpbGUiOiJsaWIvYnVpbGRlcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBBU1QgZnJvbSAnLi90eXBlcy9ub2Rlcyc7XG5mdW5jdGlvbiBidWlsZE11c3RhY2hlKHBhdGgsIHBhcmFtcywgaGFzaCwgcmF3LCBsb2MpIHtcbiAgICBpZiAoIUFTVC5pc0xpdGVyYWwocGF0aCkpIHtcbiAgICAgICAgcGF0aCA9IGJ1aWxkUGF0aChwYXRoKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJNdXN0YWNoZVN0YXRlbWVudFwiLFxuICAgICAgICBwYXRoLFxuICAgICAgICBwYXJhbXM6IHBhcmFtcyB8fCBbXSxcbiAgICAgICAgaGFzaDogaGFzaCB8fCBidWlsZEhhc2goW10pLFxuICAgICAgICBlc2NhcGVkOiAhcmF3LFxuICAgICAgICBsb2M6IGJ1aWxkTG9jKGxvYyB8fCBudWxsKVxuICAgIH07XG59XG5mdW5jdGlvbiBidWlsZEJsb2NrKHBhdGgsIHBhcmFtcywgaGFzaCwgcHJvZ3JhbSwgaW52ZXJzZSwgbG9jKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJCbG9ja1N0YXRlbWVudFwiLFxuICAgICAgICBwYXRoOiBidWlsZFBhdGgocGF0aCksXG4gICAgICAgIHBhcmFtczogcGFyYW1zIHx8IFtdLFxuICAgICAgICBoYXNoOiBoYXNoIHx8IGJ1aWxkSGFzaChbXSksXG4gICAgICAgIHByb2dyYW06IHByb2dyYW0gfHwgbnVsbCxcbiAgICAgICAgaW52ZXJzZTogaW52ZXJzZSB8fCBudWxsLFxuICAgICAgICBsb2M6IGJ1aWxkTG9jKGxvYyB8fCBudWxsKVxuICAgIH07XG59XG5mdW5jdGlvbiBidWlsZEVsZW1lbnRNb2RpZmllcihwYXRoLCBwYXJhbXMsIGhhc2gsIGxvYykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiRWxlbWVudE1vZGlmaWVyU3RhdGVtZW50XCIsXG4gICAgICAgIHBhdGg6IGJ1aWxkUGF0aChwYXRoKSxcbiAgICAgICAgcGFyYW1zOiBwYXJhbXMgfHwgW10sXG4gICAgICAgIGhhc2g6IGhhc2ggfHwgYnVpbGRIYXNoKFtdKSxcbiAgICAgICAgbG9jOiBidWlsZExvYyhsb2MgfHwgbnVsbClcbiAgICB9O1xufVxuZnVuY3Rpb24gYnVpbGRQYXJ0aWFsKG5hbWUsIHBhcmFtcywgaGFzaCwgaW5kZW50LCBsb2MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIlBhcnRpYWxTdGF0ZW1lbnRcIixcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgcGFyYW1zOiBwYXJhbXMgfHwgW10sXG4gICAgICAgIGhhc2g6IGhhc2ggfHwgYnVpbGRIYXNoKFtdKSxcbiAgICAgICAgaW5kZW50OiBpbmRlbnQgfHwgJycsXG4gICAgICAgIHN0cmlwOiB7IG9wZW46IGZhbHNlLCBjbG9zZTogZmFsc2UgfSxcbiAgICAgICAgbG9jOiBidWlsZExvYyhsb2MgfHwgbnVsbClcbiAgICB9O1xufVxuZnVuY3Rpb24gYnVpbGRDb21tZW50KHZhbHVlLCBsb2MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIkNvbW1lbnRTdGF0ZW1lbnRcIixcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBsb2M6IGJ1aWxkTG9jKGxvYyB8fCBudWxsKVxuICAgIH07XG59XG5mdW5jdGlvbiBidWlsZE11c3RhY2hlQ29tbWVudCh2YWx1ZSwgbG9jKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJNdXN0YWNoZUNvbW1lbnRTdGF0ZW1lbnRcIixcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBsb2M6IGJ1aWxkTG9jKGxvYyB8fCBudWxsKVxuICAgIH07XG59XG5mdW5jdGlvbiBidWlsZENvbmNhdChwYXJ0cywgbG9jKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJDb25jYXRTdGF0ZW1lbnRcIixcbiAgICAgICAgcGFydHM6IHBhcnRzIHx8IFtdLFxuICAgICAgICBsb2M6IGJ1aWxkTG9jKGxvYyB8fCBudWxsKVxuICAgIH07XG59XG5mdW5jdGlvbiBidWlsZEVsZW1lbnQodGFnLCBhdHRyaWJ1dGVzLCBtb2RpZmllcnMsIGNoaWxkcmVuLCBjb21tZW50cywgbG9jKSB7XG4gICAgLy8gdGhpcyBpcyB1c2VkIGZvciBiYWNrd2FyZHMgY29tcGF0IHByaW9yIHRvIGBjb21tZW50c2AgYmVpbmcgYWRkZWQgdG8gdGhlIEFTVFxuICAgIGlmICghQXJyYXkuaXNBcnJheShjb21tZW50cykpIHtcbiAgICAgICAgbG9jID0gY29tbWVudHM7XG4gICAgICAgIGNvbW1lbnRzID0gW107XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiRWxlbWVudE5vZGVcIixcbiAgICAgICAgdGFnOiB0YWcgfHwgXCJcIixcbiAgICAgICAgYXR0cmlidXRlczogYXR0cmlidXRlcyB8fCBbXSxcbiAgICAgICAgYmxvY2tQYXJhbXM6IFtdLFxuICAgICAgICBtb2RpZmllcnM6IG1vZGlmaWVycyB8fCBbXSxcbiAgICAgICAgY29tbWVudHM6IGNvbW1lbnRzIHx8IFtdLFxuICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW4gfHwgW10sXG4gICAgICAgIGxvYzogYnVpbGRMb2MobG9jIHx8IG51bGwpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJ1aWxkQXR0cihuYW1lLCB2YWx1ZSwgbG9jKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJBdHRyTm9kZVwiLFxuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGxvYzogYnVpbGRMb2MobG9jIHx8IG51bGwpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJ1aWxkVGV4dChjaGFycywgbG9jKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJUZXh0Tm9kZVwiLFxuICAgICAgICBjaGFyczogY2hhcnMgfHwgXCJcIixcbiAgICAgICAgbG9jOiBidWlsZExvYyhsb2MgfHwgbnVsbClcbiAgICB9O1xufVxuLy8gRXhwcmVzc2lvbnNcbmZ1bmN0aW9uIGJ1aWxkU2V4cHIocGF0aCwgcGFyYW1zLCBoYXNoLCBsb2MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIlN1YkV4cHJlc3Npb25cIixcbiAgICAgICAgcGF0aDogYnVpbGRQYXRoKHBhdGgpLFxuICAgICAgICBwYXJhbXM6IHBhcmFtcyB8fCBbXSxcbiAgICAgICAgaGFzaDogaGFzaCB8fCBidWlsZEhhc2goW10pLFxuICAgICAgICBsb2M6IGJ1aWxkTG9jKGxvYyB8fCBudWxsKVxuICAgIH07XG59XG5mdW5jdGlvbiBidWlsZFBhdGgob3JpZ2luYWwsIGxvYykge1xuICAgIGlmICh0eXBlb2Ygb3JpZ2luYWwgIT09ICdzdHJpbmcnKSByZXR1cm4gb3JpZ2luYWw7XG4gICAgbGV0IHBhcnRzID0gb3JpZ2luYWwuc3BsaXQoJy4nKTtcbiAgICBsZXQgdGhpc0hlYWQgPSBmYWxzZTtcbiAgICBpZiAocGFydHNbMF0gPT09ICd0aGlzJykge1xuICAgICAgICB0aGlzSGVhZCA9IHRydWU7XG4gICAgICAgIHBhcnRzID0gcGFydHMuc2xpY2UoMSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiUGF0aEV4cHJlc3Npb25cIixcbiAgICAgICAgb3JpZ2luYWwsXG4gICAgICAgIHRoaXM6IHRoaXNIZWFkLFxuICAgICAgICBwYXJ0cyxcbiAgICAgICAgZGF0YTogZmFsc2UsXG4gICAgICAgIGxvYzogYnVpbGRMb2MobG9jIHx8IG51bGwpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJ1aWxkTGl0ZXJhbCh0eXBlLCB2YWx1ZSwgbG9jKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIG9yaWdpbmFsOiB2YWx1ZSxcbiAgICAgICAgbG9jOiBidWlsZExvYyhsb2MgfHwgbnVsbClcbiAgICB9O1xufVxuLy8gTWlzY2VsbGFuZW91c1xuZnVuY3Rpb24gYnVpbGRIYXNoKHBhaXJzLCBsb2MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIkhhc2hcIixcbiAgICAgICAgcGFpcnM6IHBhaXJzIHx8IFtdLFxuICAgICAgICBsb2M6IGJ1aWxkTG9jKGxvYyB8fCBudWxsKVxuICAgIH07XG59XG5mdW5jdGlvbiBidWlsZFBhaXIoa2V5LCB2YWx1ZSwgbG9jKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJIYXNoUGFpclwiLFxuICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGxvYzogYnVpbGRMb2MobG9jIHx8IG51bGwpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJ1aWxkUHJvZ3JhbShib2R5LCBibG9ja1BhcmFtcywgbG9jKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJQcm9ncmFtXCIsXG4gICAgICAgIGJvZHk6IGJvZHkgfHwgW10sXG4gICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyB8fCBbXSxcbiAgICAgICAgbG9jOiBidWlsZExvYyhsb2MgfHwgbnVsbClcbiAgICB9O1xufVxuZnVuY3Rpb24gYnVpbGRTb3VyY2Uoc291cmNlKSB7XG4gICAgcmV0dXJuIHNvdXJjZSB8fCBudWxsO1xufVxuZnVuY3Rpb24gYnVpbGRQb3NpdGlvbihsaW5lLCBjb2x1bW4pIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsaW5lLFxuICAgICAgICBjb2x1bW5cbiAgICB9O1xufVxuZXhwb3J0IGNvbnN0IFNZTlRIRVRJQyA9IHsgc291cmNlOiAnKHN5bnRoZXRpYyknLCBzdGFydDogeyBsaW5lOiAxLCBjb2x1bW46IDAgfSwgZW5kOiB7IGxpbmU6IDEsIGNvbHVtbjogMCB9IH07XG5mdW5jdGlvbiBidWlsZExvYyguLi5hcmdzKSB7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGxldCBsb2MgPSBhcmdzWzBdO1xuICAgICAgICBpZiAobG9jICYmIHR5cGVvZiBsb2MgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHNvdXJjZTogYnVpbGRTb3VyY2UobG9jLnNvdXJjZSksXG4gICAgICAgICAgICAgICAgc3RhcnQ6IGJ1aWxkUG9zaXRpb24obG9jLnN0YXJ0LmxpbmUsIGxvYy5zdGFydC5jb2x1bW4pLFxuICAgICAgICAgICAgICAgIGVuZDogYnVpbGRQb3NpdGlvbihsb2MuZW5kLmxpbmUsIGxvYy5lbmQuY29sdW1uKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBTWU5USEVUSUM7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgW3N0YXJ0TGluZSwgc3RhcnRDb2x1bW4sIGVuZExpbmUsIGVuZENvbHVtbiwgc291cmNlXSA9IGFyZ3M7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzb3VyY2U6IGJ1aWxkU291cmNlKHNvdXJjZSksXG4gICAgICAgICAgICBzdGFydDogYnVpbGRQb3NpdGlvbihzdGFydExpbmUsIHN0YXJ0Q29sdW1uKSxcbiAgICAgICAgICAgIGVuZDogYnVpbGRQb3NpdGlvbihlbmRMaW5lLCBlbmRDb2x1bW4pXG4gICAgICAgIH07XG4gICAgfVxufVxuZXhwb3J0IGRlZmF1bHQge1xuICAgIG11c3RhY2hlOiBidWlsZE11c3RhY2hlLFxuICAgIGJsb2NrOiBidWlsZEJsb2NrLFxuICAgIHBhcnRpYWw6IGJ1aWxkUGFydGlhbCxcbiAgICBjb21tZW50OiBidWlsZENvbW1lbnQsXG4gICAgbXVzdGFjaGVDb21tZW50OiBidWlsZE11c3RhY2hlQ29tbWVudCxcbiAgICBlbGVtZW50OiBidWlsZEVsZW1lbnQsXG4gICAgZWxlbWVudE1vZGlmaWVyOiBidWlsZEVsZW1lbnRNb2RpZmllcixcbiAgICBhdHRyOiBidWlsZEF0dHIsXG4gICAgdGV4dDogYnVpbGRUZXh0LFxuICAgIHNleHByOiBidWlsZFNleHByLFxuICAgIHBhdGg6IGJ1aWxkUGF0aCxcbiAgICBjb25jYXQ6IGJ1aWxkQ29uY2F0LFxuICAgIGhhc2g6IGJ1aWxkSGFzaCxcbiAgICBwYWlyOiBidWlsZFBhaXIsXG4gICAgbGl0ZXJhbDogYnVpbGRMaXRlcmFsLFxuICAgIHByb2dyYW06IGJ1aWxkUHJvZ3JhbSxcbiAgICBsb2M6IGJ1aWxkTG9jLFxuICAgIHBvczogYnVpbGRQb3NpdGlvbixcbiAgICBzdHJpbmc6IGxpdGVyYWwoJ1N0cmluZ0xpdGVyYWwnKSxcbiAgICBib29sZWFuOiBsaXRlcmFsKCdCb29sZWFuTGl0ZXJhbCcpLFxuICAgIG51bWJlcjogbGl0ZXJhbCgnTnVtYmVyTGl0ZXJhbCcpLFxuICAgIHVuZGVmaW5lZCgpIHtcbiAgICAgICAgcmV0dXJuIGJ1aWxkTGl0ZXJhbCgnVW5kZWZpbmVkTGl0ZXJhbCcsIHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBudWxsKCkge1xuICAgICAgICByZXR1cm4gYnVpbGRMaXRlcmFsKCdOdWxsTGl0ZXJhbCcsIG51bGwpO1xuICAgIH1cbn07XG5mdW5jdGlvbiBsaXRlcmFsKHR5cGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBidWlsZExpdGVyYWwodHlwZSwgdmFsdWUpO1xuICAgIH07XG59Il19