@glimmer/compiler
Version:
221 lines (169 loc) • 21.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.SymbolAllocator = undefined;
var _util = require("@glimmer/util");
var _createClass = function () {
function defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);
}
}return function (Constructor, protoProps, staticProps) {
if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;
};
}();
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
var SymbolAllocator = exports.SymbolAllocator = function () {
function SymbolAllocator(ops) {
_classCallCheck(this, SymbolAllocator);
this.ops = ops;
this.symbolStack = new _util.Stack();
}
SymbolAllocator.prototype.process = function process() {
var out = [];
var ops = this.ops;
for (var i = 0; i < ops.length; i++) {
var op = ops[i];
var result = this.dispatch(op);
if (result === undefined) {
out.push(op);
} else {
out.push(result);
}
}
return out;
};
SymbolAllocator.prototype.dispatch = function dispatch(op) {
var name = op[0];
var operand = op[1];
return this[name](operand);
};
SymbolAllocator.prototype.startProgram = function startProgram(op) {
this.symbolStack.push(op.symbols);
};
SymbolAllocator.prototype.endProgram = function endProgram(_op) {
this.symbolStack.pop();
};
SymbolAllocator.prototype.startBlock = function startBlock(op) {
this.symbolStack.push(op.symbols);
};
SymbolAllocator.prototype.endBlock = function endBlock(_op) {
this.symbolStack.pop();
};
SymbolAllocator.prototype.openNamedBlock = function openNamedBlock(op) {
this.symbolStack.push(op.symbols);
};
SymbolAllocator.prototype.closeNamedBlock = function closeNamedBlock(_op) {
this.symbolStack.pop();
};
SymbolAllocator.prototype.flushElement = function flushElement(op) {
this.symbolStack.push(op.symbols);
};
SymbolAllocator.prototype.closeElement = function closeElement(_op) {
this.symbolStack.pop();
};
SymbolAllocator.prototype.closeComponent = function closeComponent(_op) {
this.symbolStack.pop();
};
SymbolAllocator.prototype.closeDynamicComponent = function closeDynamicComponent(_op) {
this.symbolStack.pop();
};
SymbolAllocator.prototype.attrSplat = function attrSplat(_op) {
return ['attrSplat', this.symbols.allocateBlock('attrs')];
};
SymbolAllocator.prototype.get = function get(op) {
var name = op[0],
rest = op[1];
if (name === 0) {
return ['get', [0, rest]];
}
if (isLocal(name, this.symbols)) {
var head = this.symbols.get(name);
return ['get', [head, rest]];
} else if (name[0] === '@') {
var _head = this.symbols.allocateNamed(name);
return ['get', [_head, rest]];
} else {
return ['maybeLocal', [name].concat(rest)];
}
};
SymbolAllocator.prototype.maybeGet = function maybeGet(op) {
var name = op[0],
rest = op[1];
if (name === 0) {
return ['get', [0, rest]];
}
if (isLocal(name, this.symbols)) {
var head = this.symbols.get(name);
return ['get', [head, rest]];
} else if (name[0] === '@') {
var _head2 = this.symbols.allocateNamed(name);
return ['get', [_head2, rest]];
} else if (rest.length === 0) {
return ['unknown', name];
} else {
return ['maybeLocal', [name].concat(rest)];
}
};
SymbolAllocator.prototype.yield = function _yield(op) {
if (op === 0) {
throw new Error('Cannot yield to this');
}
return ['yield', this.symbols.allocateBlock(op)];
};
SymbolAllocator.prototype.debugger = function _debugger(_op) {
return ['debugger', this.symbols.getEvalInfo()];
};
SymbolAllocator.prototype.hasBlock = function hasBlock(op) {
if (op === 0) {
throw new Error('Cannot hasBlock this');
}
return ['hasBlock', this.symbols.allocateBlock(op)];
};
SymbolAllocator.prototype.hasBlockParams = function hasBlockParams(op) {
if (op === 0) {
throw new Error('Cannot hasBlockParams this');
}
return ['hasBlockParams', this.symbols.allocateBlock(op)];
};
SymbolAllocator.prototype.partial = function partial(_op) {
return ['partial', this.symbols.getEvalInfo()];
};
SymbolAllocator.prototype.text = function text(_op) {};
SymbolAllocator.prototype.comment = function comment(_op) {};
SymbolAllocator.prototype.openComponent = function openComponent(_op) {};
SymbolAllocator.prototype.openElement = function openElement(_op) {};
SymbolAllocator.prototype.staticArg = function staticArg(_op) {};
SymbolAllocator.prototype.dynamicArg = function dynamicArg(_op) {};
SymbolAllocator.prototype.staticAttr = function staticAttr(_op) {};
SymbolAllocator.prototype.trustingAttr = function trustingAttr(_op) {};
SymbolAllocator.prototype.dynamicAttr = function dynamicAttr(_op) {};
SymbolAllocator.prototype.componentAttr = function componentAttr(_op) {};
SymbolAllocator.prototype.trustingComponentAttr = function trustingComponentAttr(_op) {};
SymbolAllocator.prototype.modifier = function modifier(_op) {};
SymbolAllocator.prototype.append = function append(_op) {};
SymbolAllocator.prototype.block = function block(_op) {};
SymbolAllocator.prototype.literal = function literal(_op) {};
SymbolAllocator.prototype.helper = function helper(_op) {};
SymbolAllocator.prototype.unknown = function unknown(_op) {};
SymbolAllocator.prototype.maybeLocal = function maybeLocal(_op) {};
SymbolAllocator.prototype.prepareArray = function prepareArray(_op) {};
SymbolAllocator.prototype.prepareObject = function prepareObject(_op) {};
SymbolAllocator.prototype.concat = function concat(_op) {};
_createClass(SymbolAllocator, [{
key: 'symbols',
get: function get() {
return this.symbolStack.current;
}
}]);
return SymbolAllocator;
}();
function isLocal(name, symbols) {
return symbols && symbols.has(name);
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi9hbGxvY2F0ZS1zeW1ib2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFHQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0JBLElBQUEsNENBQUEsWUFBQTtBQUlFLGFBQUEsZUFBQSxDQUFBLEdBQUEsRUFBb0M7QUFBQSx3QkFBQSxJQUFBLEVBQUEsZUFBQTs7QUFBaEIsYUFBQSxHQUFBLEdBQUEsR0FBQTtBQUZaLGFBQUEsV0FBQSxHQUFjLElBQWQsV0FBYyxFQUFkO0FBRWdDOztBQUoxQyxvQkFBQSxTQUFBLENBQUEsT0FBQSxHQUFBLFNBQUEsT0FBQSxHQU1TO0FBQ0wsWUFBSSxNQUFKLEVBQUE7QUFESyxZQUFBLE1BQUEsS0FBQSxHQUFBOztBQUlMLGFBQUssSUFBSSxJQUFULENBQUEsRUFBZ0IsSUFBSSxJQUFwQixNQUFBLEVBQUEsR0FBQSxFQUFxQztBQUNuQyxnQkFBSSxLQUFLLElBQVQsQ0FBUyxDQUFUO0FBQ0EsZ0JBQUksU0FBUyxLQUFBLFFBQUEsQ0FBYixFQUFhLENBQWI7QUFFQSxnQkFBSSxXQUFKLFNBQUEsRUFBMEI7QUFDeEIsb0JBQUEsSUFBQSxDQUFBLEVBQUE7QUFERixhQUFBLE1BRU87QUFDTCxvQkFBQSxJQUFBLENBQUEsTUFBQTtBQUNEO0FBQ0Y7QUFFRCxlQUFBLEdBQUE7QUFyQkosS0FBQTs7QUFBQSxvQkFBQSxTQUFBLENBQUEsUUFBQSxHQUFBLFNBQUEsUUFBQSxDQUFBLEVBQUEsRUF3QmdDO0FBQzVCLFlBQUksT0FBTyxHQUFYLENBQVcsQ0FBWDtBQUNBLFlBQUksVUFBVSxHQUFkLENBQWMsQ0FBZDtBQUVBLGVBQVEsS0FBQSxJQUFBLEVBQVIsT0FBUSxDQUFSO0FBNUJKLEtBQUE7O0FBQUEsb0JBQUEsU0FBQSxDQUFBLFlBQUEsR0FBQSxTQUFBLFlBQUEsQ0FBQSxFQUFBLEVBbUMrQjtBQUMzQixhQUFBLFdBQUEsQ0FBQSxJQUFB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VUFBQSxHQUFBLFNBQUEsVUFBQSxDQUFBLEdBQUEsRUFzSzBCLENBdEsxQixDQUFBOztBQUFBLG9CQUFBLFNBQUEsQ0FBQSxZQUFBLEdBQUEsU0FBQSxZQUFBLENBQUEsR0FBQSxFQXVLMEIsQ0F2SzFCLENBQUE7O0FBQUEsb0JBQUEsU0FBQSxDQUFBLGFBQUEsR0FBQSxTQUFBLGFBQUEsQ0FBQSxHQUFBLEVBd0syQixDQXhLM0IsQ0FBQTs7QUFBQSxvQkFBQSxTQUFBLENBQUEsTUFBQSxHQUFBLFNBQUEsTUFBQSxDQUFBLEdBQUEsRUF5S2tCLENBektsQixDQUFBOztBQUFBLGlCQUFBLGVBQUEsRUFBQSxDQUFBO0FBQUEsYUFBQSxTQUFBO0FBQUEsYUFBQSxTQUFBLEdBQUEsR0ErQmE7QUFDVCxtQkFBYyxLQUFBLFdBQUEsQ0FBZCxPQUFBO0FBQ0Q7QUFqQ0gsS0FBQSxDQUFBOztBQUFBLFdBQUEsZUFBQTtBQUFBLENBQUEsRUFBQTtBQTRLQSxTQUFBLE9BQUEsQ0FBQSxJQUFBLEVBQUEsT0FBQSxFQUFtRDtBQUNqRCxXQUFPLFdBQVcsUUFBQSxHQUFBLENBQWxCLElBQWtCLENBQWxCO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21waWxlck9wcywgUHJvY2Vzc29yLCBPcCwgT3BOYW1lLCBUZW1wbGF0ZUNvbXBpbGVyT3BzLCBQYXRoSGVhZCB9IGZyb20gJy4vY29tcGlsZXItb3BzJztcbmltcG9ydCB7IEFTVCB9IGZyb20gJ0BnbGltbWVyL3N5bnRheCc7XG5pbXBvcnQgeyBPcHRpb24gfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFN0YWNrLCBleHBlY3QgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcblxuZXhwb3J0IHR5cGUgSW5WYXJpYWJsZSA9IFBhdGhIZWFkO1xuZXhwb3J0IHR5cGUgT3V0VmFyaWFibGUgPSBudW1iZXI7XG5cbmV4cG9ydCB0eXBlIE91dE9wPEsgZXh0ZW5kcyBrZXlvZiBDb21waWxlck9wczxPdXRWYXJpYWJsZT4gPSBPcE5hbWU+ID0gT3A8XG4gIE91dFZhcmlhYmxlLFxuICBDb21waWxlck9wczxPdXRWYXJpYWJsZT4sXG4gIEtcbj47XG5leHBvcnQgdHlwZSBJbk9wPEsgZXh0ZW5kcyBrZXlvZiBUZW1wbGF0ZUNvbXBpbGVyT3BzID0ga2V5b2YgVGVtcGxhdGVDb21waWxlck9wcz4gPSBPcDxcbiAgUGF0aEhlYWQsXG4gIFRlbXBsYXRlQ29tcGlsZXJPcHMsXG4gIEtcbj47XG5cbmV4cG9ydCBjbGFzcyBTeW1ib2xBbGxvY2F0b3JcbiAgaW1wbGVtZW50cyBQcm9jZXNzb3I8Q29tcGlsZXJPcHM8SW5WYXJpYWJsZT4sIE91dFZhcmlhYmxlLCBDb21waWxlck9wczxPdXRWYXJpYWJsZT4+IHtcbiAgcHJpdmF0ZSBzeW1ib2xTdGFjayA9IG5ldyBTdGFjazxBU1QuU3ltYm9scz4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG9wczogQXJyYXk8SW5PcD4pIHt9XG5cbiAgcHJvY2VzcygpOiBPdXRPcFtdIHtcbiAgICBsZXQgb3V0OiBPdXRPcFtdID0gW107XG4gICAgbGV0IHsgb3BzIH0gPSB0aGlzO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBvcCA9IG9wc1tpXTtcbiAgICAgIGxldCByZXN1bHQgPSB0aGlzLmRpc3BhdGNoKG9wKTtcblxuICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG91dC5wdXNoKG9wIGFzIE91dE9wKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dC5wdXNoKHJlc3VsdCBhcyBhbnkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBkaXNwYXRjaDxPIGV4dGVuZHMgSW5PcD4ob3A6IE8pOiB1bmtub3duIHtcbiAgICBsZXQgbmFtZSA9IG9wWzBdO1xuICAgIGxldCBvcGVyYW5kID0gb3BbMV07XG5cbiAgICByZXR1cm4gKHRoaXNbbmFtZV0gYXMgYW55KShvcGVyYW5kKTtcbiAgfVxuXG4gIGdldCBzeW1ib2xzKCk6IEFTVC5TeW1ib2xzIHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMuc3ltYm9sU3RhY2suY3VycmVudCwgJ0V4cGVjdGVkIGEgc3ltYm9sIHRhYmxlIG9uIHRoZSBzdGFjaycpO1xuICB9XG5cbiAgc3RhcnRQcm9ncmFtKG9wOiBBU1QuVGVtcGxhdGUpIHtcbiAgICB0aGlzLnN5bWJvbFN0YWNrLnB1c2gob3Auc3ltYm9scyEpO1xuICB9XG5cbiAgZW5kUHJvZ3JhbShfb3A6IG51bGwpIHtcbiAgICB0aGlzLnN5bWJvbFN0YWNrLnBvcCgpO1xuICB9XG5cbiAgc3RhcnRCbG9jayhvcDogQVNULkJsb2NrKSB7XG4gICAgdGhpcy5zeW1ib2xTdGFjay5wdXNoKG9wLnN5bWJvbHMhKTtcbiAgfVxuXG4gIGVuZEJsb2NrKF9vcDogbnVsbCkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucG9wKCk7XG4gIH1cblxuICBvcGVuTmFtZWRCbG9jayhvcDogQVNULkVsZW1lbnROb2RlKSB7XG4gICAgdGhpcy5zeW1ib2xTdGFjay5wdXNoKG9wLnN5bWJvbHMhKTtcbiAgfVxuXG4gIGNsb3NlTmFtZWRCbG9jayhfb3A6IEFTVC5FbGVtZW50Tm9kZSkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucG9wKCk7XG4gIH1cblxuICBmbHVzaEVsZW1lbnQob3A6IEFTVC5FbGVtZW50Tm9kZSkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucHVzaChvcC5zeW1ib2xzISk7XG4gIH1cblxuICBjbG9zZUVsZW1lbnQoX29wOiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICB0aGlzLnN5bWJvbFN0YWNrLnBvcCgpO1xuICB9XG5cbiAgY2xvc2VDb21wb25lbnQoX29wOiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICB0aGlzLnN5bWJvbFN0YWNrLnBvcCgpO1xuICB9XG5cbiAgY2xvc2VEeW5hbWljQ29tcG9uZW50KF9vcDogQVNULkVsZW1lbnROb2RlKSB7XG4gICAgdGhpcy5zeW1ib2xTdGFjay5wb3AoKTtcbiAgfVxuXG4gIGF0dHJTcGxhdChfb3A6IE9wdGlvbjxJblZhcmlhYmxlPik6IE91dE9wPCdhdHRyU3BsYXQnPiB7XG4gICAgcmV0dXJuIFsnYXR0clNwbGF0JywgdGhpcy5zeW1ib2xzLmFsbG9jYXRlQmxvY2soJ2F0dHJzJyldO1xuICB9XG5cbiAgZ2V0KG9wOiBbSW5WYXJpYWJsZSwgc3RyaW5nW11dKTogT3V0T3A8J2dldCcgfCAnbWF5YmVMb2NhbCc+IHtcbiAgICBsZXQgW25hbWUsIHJlc3RdID0gb3A7XG5cbiAgICBpZiAobmFtZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIFsnZ2V0JywgWzAsIHJlc3RdXTtcbiAgICB9XG5cbiAgICBpZiAoaXNMb2NhbChuYW1lLCB0aGlzLnN5bWJvbHMpKSB7XG4gICAgICBsZXQgaGVhZCA9IHRoaXMuc3ltYm9scy5nZXQobmFtZSk7XG4gICAgICByZXR1cm4gWydnZXQnLCBbaGVhZCwgcmVzdF1dO1xuICAgIH0gZWxzZSBpZiAobmFtZVswXSA9PT0gJ0AnKSB7XG4gICAgICBsZXQgaGVhZCA9IHRoaXMuc3ltYm9scy5hbGxvY2F0ZU5hbWVkKG5hbWUpO1xuICAgICAgcmV0dXJuIFsnZ2V0JywgW2hlYWQsIHJlc3RdXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFsnbWF5YmVMb2NhbCcsIFtuYW1lLCAuLi5yZXN0XV07XG4gICAgfVxuICB9XG5cbiAgbWF5YmVHZXQob3A6IFtJblZhcmlhYmxlLCBzdHJpbmdbXV0pOiBPdXRPcDwnZ2V0JyB8ICd1bmtub3duJyB8ICdtYXliZUxvY2FsJz4ge1xuICAgIGxldCBbbmFtZSwgcmVzdF0gPSBvcDtcblxuICAgIGlmIChuYW1lID09PSAwKSB7XG4gICAgICByZXR1cm4gWydnZXQnLCBbMCwgcmVzdF1dO1xuICAgIH1cblxuICAgIGlmIChpc0xvY2FsKG5hbWUsIHRoaXMuc3ltYm9scykpIHtcbiAgICAgIGxldCBoZWFkID0gdGhpcy5zeW1ib2xzLmdldChuYW1lKTtcbiAgICAgIHJldHVybiBbJ2dldCcsIFtoZWFkLCByZXN0XV07XG4gICAgfSBlbHNlIGlmIChuYW1lWzBdID09PSAnQCcpIHtcbiAgICAgIGxldCBoZWFkID0gdGhpcy5zeW1ib2xzLmFsbG9jYXRlTmFtZWQobmFtZSk7XG4gICAgICByZXR1cm4gWydnZXQnLCBbaGVhZCwgcmVzdF1dO1xuICAgIH0gZWxzZSBpZiAocmVzdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbJ3Vua25vd24nLCBuYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFsnbWF5YmVMb2NhbCcsIFtuYW1lLCAuLi5yZXN0XV07XG4gICAgfVxuICB9XG5cbiAgeWllbGQob3A6IEluVmFyaWFibGUpOiBPdXRPcDwneWllbGQnPiB7XG4gICAgaWYgKG9wID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCB5aWVsZCB0byB0aGlzJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFsneWllbGQnLCB0aGlzLnN5bWJvbHMuYWxsb2NhdGVCbG9jayhvcCldO1xuICB9XG5cbiAgZGVidWdnZXIoX29wOiBPcHRpb248SW5WYXJpYWJsZVtdPik6IE91dE9wPCdkZWJ1Z2dlcic+IHtcbiAgICByZXR1cm4gWydkZWJ1Z2dlcicsIHRoaXMuc3ltYm9scy5nZXRFdmFsSW5mbygpXTtcbiAgfVxuXG4gIGhhc0Jsb2NrKG9wOiBJblZhcmlhYmxlKTogT3V0T3A8J2hhc0Jsb2NrJz4ge1xuICAgIGlmIChvcCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaGFzQmxvY2sgdGhpcycpO1xuICAgIH1cblxuICAgIHJldHVybiBbJ2hhc0Jsb2NrJywgdGhpcy5zeW1ib2xzLmFsbG9jYXRlQmxvY2sob3ApXTtcbiAgfVxuXG4gIGhhc0Jsb2NrUGFyYW1zKG9wOiBJblZhcmlhYmxlKTogT3V0T3A8J2hhc0Jsb2NrUGFyYW1zJz4ge1xuICAgIGlmIChvcCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaGFzQmxvY2tQYXJhbXMgdGhpcycpO1xuICAgIH1cblxuICAgIHJldHVybiBbJ2hhc0Jsb2NrUGFyYW1zJywgdGhpcy5zeW1ib2xzLmFsbG9jYXRlQmxvY2sob3ApXTtcbiAgfVxuXG4gIHBhcnRpYWwoX29wOiBPcHRpb248SW5WYXJpYWJsZVtdPik6IE91dE9wPCdwYXJ0aWFsJz4ge1xuICAgIHJldHVybiBbJ3BhcnRpYWwnLCB0aGlzLnN5bWJvbHMuZ2V0RXZhbEluZm8oKV07XG4gIH1cblxuICB0ZXh0KF9vcDogc3RyaW5nKSB7fVxuICBjb21tZW50KF9vcDogc3RyaW5nKSB7fVxuICBvcGVuQ29tcG9uZW50KF9vcDogQVNULkVsZW1lbnROb2RlKSB7fVxuICBvcGVuRWxlbWVudChfb3A6IFtBU1QuRWxlbWVudE5vZGUsIGJvb2xlYW5dKSB7fVxuICBzdGF0aWNBcmcoX29wOiBzdHJpbmcpIHt9XG4gIGR5bmFtaWNBcmcoX29wOiBzdHJpbmcpIHt9XG4gIHN0YXRpY0F0dHIoX29wOiBbc3RyaW5nLCBPcHRpb248c3RyaW5nPl0pIHt9XG4gIHRydXN0aW5nQXR0cihfb3A6IFtzdHJpbmcsIE9wdGlvbjxzdHJpbmc+XSkge31cbiAgZHluYW1pY0F0dHIoX29wOiBbc3RyaW5nLCBPcHRpb248c3RyaW5nPl0pIHt9XG4gIGNvbXBvbmVudEF0dHIoX29wOiBbc3RyaW5nLCBPcHRpb248c3RyaW5nPl0pIHt9XG4gIHRydXN0aW5nQ29tcG9uZW50QXR0cihfb3A6IFtzdHJpbmcsIE9wdGlvbjxzdHJpbmc+XSkge31cbiAgbW9kaWZpZXIoX29wOiBzdHJpbmcpIHt9XG4gIGFwcGVuZChfb3A6IGJvb2xlYW4pIHt9XG4gIGJsb2NrKF9vcDogW3N0cmluZywgbnVtYmVyLCBPcHRpb248bnVtYmVyPl0pIHt9XG4gIGxpdGVyYWwoX29wOiBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCkge31cbiAgaGVscGVyKF9vcDogc3RyaW5nKSB7fVxuICB1bmtub3duKF9vcDogc3RyaW5nKSB7fVxuICBtYXliZUxvY2FsKF9vcDogc3RyaW5nW10pIHt9XG4gIHByZXBhcmVBcnJheShfb3A6IG51bWJlcikge31cbiAgcHJlcGFyZU9iamVjdChfb3A6IG51bWJlcikge31cbiAgY29uY2F0KF9vcDogbnVsbCkge31cbn1cblxuZnVuY3Rpb24gaXNMb2NhbChuYW1lOiBzdHJpbmcsIHN5bWJvbHM6IEFTVC5TeW1ib2xzKTogYm9vbGVhbiB7XG4gIHJldHVybiBzeW1ib2xzICYmIHN5bWJvbHMuaGFzKG5hbWUpO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==