UNPKG

ember-legacy-class-transform

Version:
347 lines (300 loc) 31.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LabelOpcode = exports.DidModifyOpcode = exports.JumpIfNotModifiedOpcode = exports.Assert = exports.EnvironmentTest = exports.SimpleTest = exports.ConstTest = undefined; var _reference = require("@glimmer/reference"); var _util = require("@glimmer/util"); var _opcodes = require("../../opcodes"); var _references = require("../../references"); function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults);for (var i = 0; i < keys.length; i++) { var key = keys[i];var value = Object.getOwnPropertyDescriptor(defaults, key);if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } }return obj; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); }return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); } _opcodes.APPEND_OPCODES.add(20 /* ChildScope */, function (vm) { return vm.pushChildScope(); }); _opcodes.APPEND_OPCODES.add(21 /* PopScope */, function (vm) { return vm.popScope(); }); _opcodes.APPEND_OPCODES.add(39 /* PushDynamicScope */, function (vm) { return vm.pushDynamicScope(); }); _opcodes.APPEND_OPCODES.add(40 /* PopDynamicScope */, function (vm) { return vm.popDynamicScope(); }); _opcodes.APPEND_OPCODES.add(12 /* Immediate */, function (vm, _ref) { var number = _ref.op1; vm.stack.push(number); }); _opcodes.APPEND_OPCODES.add(13 /* Constant */, function (vm, _ref2) { var other = _ref2.op1; vm.stack.push(vm.constants.getOther(other)); }); _opcodes.APPEND_OPCODES.add(14 /* PrimitiveReference */, function (vm, _ref3) { var primitive = _ref3.op1; var stack = vm.stack; var flag = (primitive & 3 << 30) >>> 30; var value = primitive & ~(3 << 30); switch (flag) { case 0: stack.push(_references.PrimitiveReference.create(value)); break; case 1: stack.push(_references.PrimitiveReference.create(vm.constants.getFloat(value))); break; case 2: stack.push(_references.PrimitiveReference.create(vm.constants.getString(value))); break; case 3: switch (value) { case 0: stack.push(_references.FALSE_REFERENCE); break; case 1: stack.push(_references.TRUE_REFERENCE); break; case 2: stack.push(_references.NULL_REFERENCE); break; case 3: stack.push(_references.UNDEFINED_REFERENCE); break; } break; } }); _opcodes.APPEND_OPCODES.add(15 /* Dup */, function (vm, _ref4) { var register = _ref4.op1, offset = _ref4.op2; var position = vm.fetchValue(register) - offset; vm.stack.dup(position); }); _opcodes.APPEND_OPCODES.add(16 /* Pop */, function (vm, _ref5) { var count = _ref5.op1; return vm.stack.pop(count); }); _opcodes.APPEND_OPCODES.add(17 /* Load */, function (vm, _ref6) { var register = _ref6.op1; return vm.load(register); }); _opcodes.APPEND_OPCODES.add(18 /* Fetch */, function (vm, _ref7) { var register = _ref7.op1; return vm.fetch(register); }); _opcodes.APPEND_OPCODES.add(38 /* BindDynamicScope */, function (vm, _ref8) { var _names = _ref8.op1; var names = vm.constants.getArray(_names); vm.bindDynamicScope(names); }); _opcodes.APPEND_OPCODES.add(47 /* PushFrame */, function (vm) { return vm.pushFrame(); }); _opcodes.APPEND_OPCODES.add(48 /* PopFrame */, function (vm) { return vm.popFrame(); }); _opcodes.APPEND_OPCODES.add(49 /* Enter */, function (vm, _ref9) { var args = _ref9.op1; return vm.enter(args); }); _opcodes.APPEND_OPCODES.add(50 /* Exit */, function (vm) { return vm.exit(); }); _opcodes.APPEND_OPCODES.add(41 /* CompileDynamicBlock */, function (vm) { var stack = vm.stack; var block = stack.pop(); stack.push(block ? block.compileDynamic(vm.env) : null); }); _opcodes.APPEND_OPCODES.add(42 /* InvokeStatic */, function (vm, _ref10) { var _block = _ref10.op1; var block = vm.constants.getBlock(_block); var compiled = block.compileStatic(vm.env); vm.call(compiled.handle); }); _opcodes.APPEND_OPCODES.add(43 /* InvokeDynamic */, function (vm, _ref11) { var _invoker = _ref11.op1; var invoker = vm.constants.getOther(_invoker); var block = vm.stack.pop(); invoker.invoke(vm, block); }); _opcodes.APPEND_OPCODES.add(44 /* Jump */, function (vm, _ref12) { var target = _ref12.op1; return vm.goto(target); }); _opcodes.APPEND_OPCODES.add(45 /* JumpIf */, function (vm, _ref13) { var target = _ref13.op1; var reference = vm.stack.pop(); if ((0, _reference.isConst)(reference)) { if (reference.value()) { vm.goto(target); } } else { var cache = new _reference.ReferenceCache(reference); if (cache.peek()) { vm.goto(target); } vm.updateWith(new Assert(cache)); } }); _opcodes.APPEND_OPCODES.add(46 /* JumpUnless */, function (vm, _ref14) { var target = _ref14.op1; var reference = vm.stack.pop(); if ((0, _reference.isConst)(reference)) { if (!reference.value()) { vm.goto(target); } } else { var cache = new _reference.ReferenceCache(reference); if (!cache.peek()) { vm.goto(target); } vm.updateWith(new Assert(cache)); } }); _opcodes.APPEND_OPCODES.add(22 /* Return */, function (vm) { return vm.return(); }); _opcodes.APPEND_OPCODES.add(23 /* ReturnTo */, function (vm, _ref15) { var relative = _ref15.op1; vm.returnTo(relative); }); var ConstTest = exports.ConstTest = function (ref, _env) { return new _reference.ConstReference(!!ref.value()); }; var SimpleTest = exports.SimpleTest = function (ref, _env) { return ref; }; var EnvironmentTest = exports.EnvironmentTest = function (ref, env) { return env.toConditionalReference(ref); }; _opcodes.APPEND_OPCODES.add(51 /* Test */, function (vm, _ref16) { var _func = _ref16.op1; var stack = vm.stack; var operand = stack.pop(); var func = vm.constants.getFunction(_func); stack.push(func(operand, vm.env)); }); var Assert = exports.Assert = function (_UpdatingOpcode) { _inherits(Assert, _UpdatingOpcode); function Assert(cache) { _classCallCheck(this, Assert); var _this = _possibleConstructorReturn(this, _UpdatingOpcode.call(this)); _this.type = 'assert'; _this.tag = cache.tag; _this.cache = cache; return _this; } Assert.prototype.evaluate = function evaluate(vm) { var cache = this.cache; if ((0, _reference.isModified)(cache.revalidate())) { vm.throw(); } }; Assert.prototype.toJSON = function toJSON() { var type = this.type, _guid = this._guid, cache = this.cache; var expected = void 0; try { expected = JSON.stringify(cache.peek()); } catch (e) { expected = String(cache.peek()); } return { args: [], details: { expected: expected }, guid: _guid, type: type }; }; return Assert; }(_opcodes.UpdatingOpcode); var JumpIfNotModifiedOpcode = exports.JumpIfNotModifiedOpcode = function (_UpdatingOpcode2) { _inherits(JumpIfNotModifiedOpcode, _UpdatingOpcode2); function JumpIfNotModifiedOpcode(tag, target) { _classCallCheck(this, JumpIfNotModifiedOpcode); var _this2 = _possibleConstructorReturn(this, _UpdatingOpcode2.call(this)); _this2.target = target; _this2.type = 'jump-if-not-modified'; _this2.tag = tag; _this2.lastRevision = tag.value(); return _this2; } JumpIfNotModifiedOpcode.prototype.evaluate = function evaluate(vm) { var tag = this.tag, target = this.target, lastRevision = this.lastRevision; if (!vm.alwaysRevalidate && tag.validate(lastRevision)) { vm.goto(target); } }; JumpIfNotModifiedOpcode.prototype.didModify = function didModify() { this.lastRevision = this.tag.value(); }; JumpIfNotModifiedOpcode.prototype.toJSON = function toJSON() { return { args: [JSON.stringify(this.target.inspect())], guid: this._guid, type: this.type }; }; return JumpIfNotModifiedOpcode; }(_opcodes.UpdatingOpcode); var DidModifyOpcode = exports.DidModifyOpcode = function (_UpdatingOpcode3) { _inherits(DidModifyOpcode, _UpdatingOpcode3); function DidModifyOpcode(target) { _classCallCheck(this, DidModifyOpcode); var _this3 = _possibleConstructorReturn(this, _UpdatingOpcode3.call(this)); _this3.target = target; _this3.type = 'did-modify'; _this3.tag = _reference.CONSTANT_TAG; return _this3; } DidModifyOpcode.prototype.evaluate = function evaluate() { this.target.didModify(); }; return DidModifyOpcode; }(_opcodes.UpdatingOpcode); var LabelOpcode = exports.LabelOpcode = function () { function LabelOpcode(label) { _classCallCheck(this, LabelOpcode); this.tag = _reference.CONSTANT_TAG; this.type = 'label'; this.label = null; this.prev = null; this.next = null; (0, _util.initializeGuid)(this); this.label = label; } LabelOpcode.prototype.evaluate = function evaluate() {}; LabelOpcode.prototype.inspect = function inspect() { return this.label + ' [' + this._guid + ']'; }; LabelOpcode.prototype.toJSON = function toJSON() { return { args: [JSON.stringify(this.inspect())], guid: this._guid, type: this.type }; }; return LabelOpcode; }(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21waWxlZC9vcGNvZGVzL3ZtLmpzIl0sIm5hbWVzIjpbIkNPTlNUQU5UX1RBRyIsImlzQ29uc3QiLCJpc01vZGlmaWVkIiwiUmVmZXJlbmNlQ2FjaGUiLCJDb25zdFJlZmVyZW5jZSIsImluaXRpYWxpemVHdWlkIiwiQVBQRU5EX09QQ09ERVMiLCJVcGRhdGluZ09wY29kZSIsIkZBTFNFX1JFRkVSRU5DRSIsIk5VTExfUkVGRVJFTkNFIiwiUHJpbWl0aXZlUmVmZXJlbmNlIiwiVFJVRV9SRUZFUkVOQ0UiLCJVTkRFRklORURfUkVGRVJFTkNFIiwiYWRkIiwidm0iLCJwdXNoQ2hpbGRTY29wZSIsInBvcFNjb3BlIiwicHVzaER5bmFtaWNTY29wZSIsInBvcER5bmFtaWNTY29wZSIsIm51bWJlciIsIm9wMSIsInN0YWNrIiwicHVzaCIsIm90aGVyIiwiY29uc3RhbnRzIiwiZ2V0T3RoZXIiLCJwcmltaXRpdmUiLCJmbGFnIiwidmFsdWUiLCJjcmVhdGUiLCJnZXRGbG9hdCIsImdldFN0cmluZyIsInJlZ2lzdGVyIiwib2Zmc2V0Iiwib3AyIiwicG9zaXRpb24iLCJmZXRjaFZhbHVlIiwiZHVwIiwiY291bnQiLCJwb3AiLCJsb2FkIiwiZmV0Y2giLCJfbmFtZXMiLCJuYW1lcyIsImdldEFycmF5IiwiYmluZER5bmFtaWNTY29wZSIsInB1c2hGcmFtZSIsInBvcEZyYW1lIiwiYXJncyIsImVudGVyIiwiZXhpdCIsImJsb2NrIiwiY29tcGlsZUR5bmFtaWMiLCJlbnYiLCJfYmxvY2siLCJnZXRCbG9jayIsImNvbXBpbGVkIiwiY29tcGlsZVN0YXRpYyIsImNhbGwiLCJoYW5kbGUiLCJfaW52b2tlciIsImludm9rZXIiLCJpbnZva2UiLCJ0YXJnZXQiLCJnb3RvIiwicmVmZXJlbmNlIiwiY2FjaGUiLCJwZWVrIiwidXBkYXRlV2l0aCIsIkFzc2VydCIsInJldHVybiIsInJlbGF0aXZlIiwicmV0dXJuVG8iLCJDb25zdFRlc3QiLCJyZWYiLCJfZW52IiwiU2ltcGxlVGVzdCIsIkVudmlyb25tZW50VGVzdCIsInRvQ29uZGl0aW9uYWxSZWZlcmVuY2UiLCJfZnVuYyIsIm9wZXJhbmQiLCJmdW5jIiwiZ2V0RnVuY3Rpb24iLCJ0eXBlIiwidGFnIiwiZXZhbHVhdGUiLCJyZXZhbGlkYXRlIiwidGhyb3ciLCJ0b0pTT04iLCJfZ3VpZCIsImV4cGVjdGVkIiwiSlNPTiIsInN0cmluZ2lmeSIsImUiLCJTdHJpbmciLCJkZXRhaWxzIiwiZ3VpZCIsIkp1bXBJZk5vdE1vZGlmaWVkT3Bjb2RlIiwibGFzdFJldmlzaW9uIiwiYWx3YXlzUmV2YWxpZGF0ZSIsInZhbGlkYXRlIiwiZGlkTW9kaWZ5IiwiaW5zcGVjdCIsIkRpZE1vZGlmeU9wY29kZSIsIkxhYmVsT3Bjb2RlIiwibGFiZWwiLCJwcmV2IiwibmV4dCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLEFBQVMsQUFBYyxBQUFTLEFBQVksQUFBZ0IsQUFBc0I7O0FBQ2xGLEFBQVMsQUFBc0I7O0FBQy9CLEFBQVMsQUFBZ0IsQUFBc0I7O0FBQy9DLEFBQVMsQUFBaUIsQUFBZ0IsQUFBb0IsQUFBZ0IsQUFBMkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDekcsd0JBQUEsQUFBZSxJQUFmLEFBQW1CLEdBQW5CLEFBQXNCLGtCQUFrQixjQUFBO1dBQU0sR0FBTixBQUFNLEFBQUc7QUFBakQ7QUFDQSx3QkFBQSxBQUFlLElBQWYsQUFBbUIsR0FBbkIsQUFBc0IsZ0JBQWdCLGNBQUE7V0FBTSxHQUFOLEFBQU0sQUFBRztBQUEvQztBQUNBLHdCQUFBLEFBQWUsSUFBZixBQUFtQixHQUFuQixBQUFzQix3QkFBd0IsY0FBQTtXQUFNLEdBQU4sQUFBTSxBQUFHO0FBQXZEO0FBQ0Esd0JBQUEsQUFBZSxJQUFmLEFBQW1CLEdBQW5CLEFBQXNCLHVCQUF1QixjQUFBO1dBQU0sR0FBTixBQUFNLEFBQUc7QUFBdEQ7QUFDQSx3QkFBQSxBQUFlLElBQWYsQUFBbUIsR0FBbkIsQUFBc0IsaUJBQWlCLFVBQUEsQUFBQyxVQUF3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S0FEbkIsQUFDRyxBQUFDLEFBQWUsQUFBSyxBQUMzQjtrQkFBTSxLQUZILEFBRVEsQUFDWDtrQkFBTSxLQUhWLEFBQU8sQUFHUSxBQUVsQjtBQUxVLEFBQ0g7QUFoQlo7O1dBQUEiLCJmaWxlIjoibGliL2NvbXBpbGVkL29wY29kZXMvdm0uanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDT05TVEFOVF9UQUcsIGlzQ29uc3QsIGlzTW9kaWZpZWQsIFJlZmVyZW5jZUNhY2hlLCBDb25zdFJlZmVyZW5jZSB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5pbXBvcnQgeyBpbml0aWFsaXplR3VpZCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgQVBQRU5EX09QQ09ERVMsIFVwZGF0aW5nT3Bjb2RlIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBGQUxTRV9SRUZFUkVOQ0UsIE5VTExfUkVGRVJFTkNFLCBQcmltaXRpdmVSZWZlcmVuY2UsIFRSVUVfUkVGRVJFTkNFLCBVTkRFRklORURfUkVGRVJFTkNFIH0gZnJvbSAnLi4vLi4vcmVmZXJlbmNlcyc7XG5BUFBFTkRfT1BDT0RFUy5hZGQoMjAgLyogQ2hpbGRTY29wZSAqLywgdm0gPT4gdm0ucHVzaENoaWxkU2NvcGUoKSk7XG5BUFBFTkRfT1BDT0RFUy5hZGQoMjEgLyogUG9wU2NvcGUgKi8sIHZtID0+IHZtLnBvcFNjb3BlKCkpO1xuQVBQRU5EX09QQ09ERVMuYWRkKDM5IC8qIFB1c2hEeW5hbWljU2NvcGUgKi8sIHZtID0+IHZtLnB1c2hEeW5hbWljU2NvcGUoKSk7XG5BUFBFTkRfT1BDT0RFUy5hZGQoNDAgLyogUG9wRHluYW1pY1Njb3BlICovLCB2bSA9PiB2bS5wb3BEeW5hbWljU2NvcGUoKSk7XG5BUFBFTkRfT1BDT0RFUy5hZGQoMTIgLyogSW1tZWRpYXRlICovLCAodm0sIHsgb3AxOiBudW1iZXIgfSkgPT4ge1xuICAgIHZtLnN0YWNrLnB1c2gobnVtYmVyKTtcbn0pO1xuQVBQRU5EX09QQ09ERVMuYWRkKDEzIC8qIENvbnN0YW50ICovLCAodm0sIHsgb3AxOiBvdGhlciB9KSA9PiB7XG4gICAgdm0uc3RhY2sucHVzaCh2bS5jb25zdGFudHMuZ2V0T3RoZXIob3RoZXIpKTtcbn0pO1xuQVBQRU5EX09QQ09ERVMuYWRkKDE0IC8qIFByaW1pdGl2ZVJlZmVyZW5jZSAqLywgKHZtLCB7IG9wMTogcHJpbWl0aXZlIH0pID0+IHtcbiAgICBsZXQgc3RhY2sgPSB2bS5zdGFjaztcbiAgICBsZXQgZmxhZyA9IChwcmltaXRpdmUgJiAzIDw8IDMwKSA+Pj4gMzA7XG4gICAgbGV0IHZhbHVlID0gcHJpbWl0aXZlICYgfigzIDw8IDMwKTtcbiAgICBzd2l0Y2ggKGZsYWcpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgc3RhY2sucHVzaChQcmltaXRpdmVSZWZlcmVuY2UuY3JlYXRlKHZhbHVlKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgc3RhY2sucHVzaChQcmltaXRpdmVSZWZlcmVuY2UuY3JlYXRlKHZtLmNvbnN0YW50cy5nZXRGbG9hdCh2YWx1ZSkpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBzdGFjay5wdXNoKFByaW1pdGl2ZVJlZmVyZW5jZS5jcmVhdGUodm0uY29uc3RhbnRzLmdldFN0cmluZyh2YWx1ZSkpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKEZBTFNFX1JFRkVSRU5DRSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChUUlVFX1JFRkVSRU5DRSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChOVUxMX1JFRkVSRU5DRSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChVTkRFRklORURfUkVGRVJFTkNFKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59KTtcbkFQUEVORF9PUENPREVTLmFkZCgxNSAvKiBEdXAgKi8sICh2bSwgeyBvcDE6IHJlZ2lzdGVyLCBvcDI6IG9mZnNldCB9KSA9PiB7XG4gICAgbGV0IHBvc2l0aW9uID0gdm0uZmV0Y2hWYWx1ZShyZWdpc3RlcikgLSBvZmZzZXQ7XG4gICAgdm0uc3RhY2suZHVwKHBvc2l0aW9uKTtcbn0pO1xuQVBQRU5EX09QQ09ERVMuYWRkKDE2IC8qIFBvcCAqLywgKHZtLCB7IG9wMTogY291bnQgfSkgPT4gdm0uc3RhY2sucG9wKGNvdW50KSk7XG5BUFBFTkRfT1BDT0RFUy5hZGQoMTcgLyogTG9hZCAqLywgKHZtLCB7IG9wMTogcmVnaXN0ZXIgfSkgPT4gdm0ubG9hZChyZWdpc3RlcikpO1xuQVBQRU5EX09QQ09ERVMuYWRkKDE4IC8qIEZldGNoICovLCAodm0sIHsgb3AxOiByZWdpc3RlciB9KSA9PiB2bS5mZXRjaChyZWdpc3RlcikpO1xuQVBQRU5EX09QQ09ERVMuYWRkKDM4IC8qIEJpbmREeW5hbWljU2NvcGUgKi8sICh2bSwgeyBvcDE6IF9uYW1lcyB9KSA9PiB7XG4gICAgbGV0IG5hbWVzID0gdm0uY29uc3RhbnRzLmdldEFycmF5KF9uYW1lcyk7XG4gICAgdm0uYmluZER5bmFtaWNTY29wZShuYW1lcyk7XG59KTtcbkFQUEVORF9PUENPREVTLmFkZCg0NyAvKiBQdXNoRnJhbWUgKi8sIHZtID0+IHZtLnB1c2hGcmFtZSgpKTtcbkFQUEVORF9PUENPREVTLmFkZCg0OCAvKiBQb3BGcmFtZSAqLywgdm0gPT4gdm0ucG9wRnJhbWUoKSk7XG5BUFBFTkRfT1BDT0RFUy5hZGQoNDkgLyogRW50ZXIgKi8sICh2bSwgeyBvcDE6IGFyZ3MgfSkgPT4gdm0uZW50ZXIoYXJncykpO1xuQVBQRU5EX09QQ09ERVMuYWRkKDUwIC8qIEV4aXQgKi8sIHZtID0+IHZtLmV4aXQoKSk7XG5BUFBFTkRfT1BDT0RFUy5hZGQoNDEgLyogQ29tcGlsZUR5bmFtaWNCbG9jayAqLywgdm0gPT4ge1xuICAgIGxldCBzdGFjayA9IHZtLnN0YWNrO1xuICAgIGxldCBibG9jayA9IHN0YWNrLnBvcCgpO1xuICAgIHN0YWNrLnB1c2goYmxvY2sgPyBibG9jay5jb21waWxlRHluYW1pYyh2bS5lbnYpIDogbnVsbCk7XG59KTtcbkFQUEVORF9PUENPREVTLmFkZCg0MiAvKiBJbnZva2VTdGF0aWMgKi8sICh2bSwgeyBvcDE6IF9ibG9jayB9KSA9PiB7XG4gICAgbGV0IGJsb2NrID0gdm0uY29uc3RhbnRzLmdldEJsb2NrKF9ibG9jayk7XG4gICAgbGV0IGNvbXBpbGVkID0gYmxvY2suY29tcGlsZVN0YXRpYyh2bS5lbnYpO1xuICAgIHZtLmNhbGwoY29tcGlsZWQuaGFuZGxlKTtcbn0pO1xuQVBQRU5EX09QQ09ERVMuYWRkKDQzIC8qIEludm9rZUR5bmFtaWMgKi8sICh2bSwgeyBvcDE6IF9pbnZva2VyIH0pID0+IHtcbiAgICBsZXQgaW52b2tlciA9IHZtLmNvbnN0YW50cy5nZXRPdGhlcihfaW52b2tlcik7XG4gICAgbGV0IGJsb2NrID0gdm0uc3RhY2sucG9wKCk7XG4gICAgaW52b2tlci5pbnZva2Uodm0sIGJsb2NrKTtcbn0pO1xuQVBQRU5EX09QQ09ERVMuYWRkKDQ0IC8qIEp1bXAgKi8sICh2bSwgeyBvcDE6IHRhcmdldCB9KSA9PiB2bS5nb3RvKHRhcmdldCkpO1xuQVBQRU5EX09QQ09ERVMuYWRkKDQ1IC8qIEp1bXBJZiAqLywgKHZtLCB7IG9wMTogdGFyZ2V0IH0pID0+IHtcbiAgICBsZXQgcmVmZXJlbmNlID0gdm0uc3RhY2sucG9wKCk7XG4gICAgaWYgKGlzQ29uc3QocmVmZXJlbmNlKSkge1xuICAgICAgICBpZiAocmVmZXJlbmNlLnZhbHVlKCkpIHtcbiAgICAgICAgICAgIHZtLmdvdG8odGFyZ2V0KTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBjYWNoZSA9IG5ldyBSZWZlcmVuY2VDYWNoZShyZWZlcmVuY2UpO1xuICAgICAgICBpZiAoY2FjaGUucGVlaygpKSB7XG4gICAgICAgICAgICB2bS5nb3RvKHRhcmdldCk7XG4gICAgICAgIH1cbiAgICAgICAgdm0udXBkYXRlV2l0aChuZXcgQXNzZXJ0KGNhY2hlKSk7XG4gICAgfVxufSk7XG5BUFBFTkRfT1BDT0RFUy5hZGQoNDYgLyogSnVtcFVubGVzcyAqLywgKHZtLCB7IG9wMTogdGFyZ2V0IH0pID0+IHtcbiAgICBsZXQgcmVmZXJlbmNlID0gdm0uc3RhY2sucG9wKCk7XG4gICAgaWYgKGlzQ29uc3QocmVmZXJlbmNlKSkge1xuICAgICAgICBpZiAoIXJlZmVyZW5jZS52YWx1ZSgpKSB7XG4gICAgICAgICAgICB2bS5nb3RvKHRhcmdldCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgY2FjaGUgPSBuZXcgUmVmZXJlbmNlQ2FjaGUocmVmZXJlbmNlKTtcbiAgICAgICAgaWYgKCFjYWNoZS5wZWVrKCkpIHtcbiAgICAgICAgICAgIHZtLmdvdG8odGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgICB2bS51cGRhdGVXaXRoKG5ldyBBc3NlcnQoY2FjaGUpKTtcbiAgICB9XG59KTtcbkFQUEVORF9PUENPREVTLmFkZCgyMiAvKiBSZXR1cm4gKi8sIHZtID0+IHZtLnJldHVybigpKTtcbkFQUEVORF9PUENPREVTLmFkZCgyMyAvKiBSZXR1cm5UbyAqLywgKHZtLCB7IG9wMTogcmVsYXRpdmUgfSkgPT4ge1xuICAgIHZtLnJldHVyblRvKHJlbGF0aXZlKTtcbn0pO1xuZXhwb3J0IGNvbnN0IENvbnN0VGVzdCA9IGZ1bmN0aW9uIChyZWYsIF9lbnYpIHtcbiAgICByZXR1cm4gbmV3IENvbnN0UmVmZXJlbmNlKCEhcmVmLnZhbHVlKCkpO1xufTtcbmV4cG9ydCBjb25zdCBTaW1wbGVUZXN0ID0gZnVuY3Rpb24gKHJlZiwgX2Vudikge1xuICAgIHJldHVybiByZWY7XG59O1xuZXhwb3J0IGNvbnN0IEVudmlyb25tZW50VGVzdCA9IGZ1bmN0aW9uIChyZWYsIGVudikge1xuICAgIHJldHVybiBlbnYudG9Db25kaXRpb25hbFJlZmVyZW5jZShyZWYpO1xufTtcbkFQUEVORF9PUENPREVTLmFkZCg1MSAvKiBUZXN0ICovLCAodm0sIHsgb3AxOiBfZnVuYyB9KSA9PiB7XG4gICAgbGV0IHN0YWNrID0gdm0uc3RhY2s7XG4gICAgbGV0IG9wZXJhbmQgPSBzdGFjay5wb3AoKTtcbiAgICBsZXQgZnVuYyA9IHZtLmNvbnN0YW50cy5nZXRGdW5jdGlvbihfZnVuYyk7XG4gICAgc3RhY2sucHVzaChmdW5jKG9wZXJhbmQsIHZtLmVudikpO1xufSk7XG5leHBvcnQgY2xhc3MgQXNzZXJ0IGV4dGVuZHMgVXBkYXRpbmdPcGNvZGUge1xuICAgIGNvbnN0cnVjdG9yKGNhY2hlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdhc3NlcnQnO1xuICAgICAgICB0aGlzLnRhZyA9IGNhY2hlLnRhZztcbiAgICAgICAgdGhpcy5jYWNoZSA9IGNhY2hlO1xuICAgIH1cbiAgICBldmFsdWF0ZSh2bSkge1xuICAgICAgICBsZXQgeyBjYWNoZSB9ID0gdGhpcztcbiAgICAgICAgaWYgKGlzTW9kaWZpZWQoY2FjaGUucmV2YWxpZGF0ZSgpKSkge1xuICAgICAgICAgICAgdm0udGhyb3coKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGxldCB7IHR5cGUsIF9ndWlkLCBjYWNoZSB9ID0gdGhpcztcbiAgICAgICAgbGV0IGV4cGVjdGVkO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZXhwZWN0ZWQgPSBKU09OLnN0cmluZ2lmeShjYWNoZS5wZWVrKCkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBleHBlY3RlZCA9IFN0cmluZyhjYWNoZS5wZWVrKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhcmdzOiBbXSxcbiAgICAgICAgICAgIGRldGFpbHM6IHsgZXhwZWN0ZWQgfSxcbiAgICAgICAgICAgIGd1aWQ6IF9ndWlkLFxuICAgICAgICAgICAgdHlwZVxuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBKdW1wSWZOb3RNb2RpZmllZE9wY29kZSBleHRlbmRzIFVwZGF0aW5nT3Bjb2RlIHtcbiAgICBjb25zdHJ1Y3Rvcih0YWcsIHRhcmdldCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICAgICAgdGhpcy50eXBlID0gJ2p1bXAtaWYtbm90LW1vZGlmaWVkJztcbiAgICAgICAgdGhpcy50YWcgPSB0YWc7XG4gICAgICAgIHRoaXMubGFzdFJldmlzaW9uID0gdGFnLnZhbHVlKCk7XG4gICAgfVxuICAgIGV2YWx1YXRlKHZtKSB7XG4gICAgICAgIGxldCB7IHRhZywgdGFyZ2V0LCBsYXN0UmV2aXNpb24gfSA9IHRoaXM7XG4gICAgICAgIGlmICghdm0uYWx3YXlzUmV2YWxpZGF0ZSAmJiB0YWcudmFsaWRhdGUobGFzdFJldmlzaW9uKSkge1xuICAgICAgICAgICAgdm0uZ290byh0YXJnZXQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRpZE1vZGlmeSgpIHtcbiAgICAgICAgdGhpcy5sYXN0UmV2aXNpb24gPSB0aGlzLnRhZy52YWx1ZSgpO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhcmdzOiBbSlNPTi5zdHJpbmdpZnkodGhpcy50YXJnZXQuaW5zcGVjdCgpKV0sXG4gICAgICAgICAgICBndWlkOiB0aGlzLl9ndWlkLFxuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlXG4gICAgICAgIH07XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIERpZE1vZGlmeU9wY29kZSBleHRlbmRzIFVwZGF0aW5nT3Bjb2RlIHtcbiAgICBjb25zdHJ1Y3Rvcih0YXJnZXQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XG4gICAgICAgIHRoaXMudHlwZSA9ICdkaWQtbW9kaWZ5JztcbiAgICAgICAgdGhpcy50YWcgPSBDT05TVEFOVF9UQUc7XG4gICAgfVxuICAgIGV2YWx1YXRlKCkge1xuICAgICAgICB0aGlzLnRhcmdldC5kaWRNb2RpZnkoKTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgTGFiZWxPcGNvZGUge1xuICAgIGNvbnN0cnVjdG9yKGxhYmVsKSB7XG4gICAgICAgIHRoaXMudGFnID0gQ09OU1RBTlRfVEFHO1xuICAgICAgICB0aGlzLnR5cGUgPSAnbGFiZWwnO1xuICAgICAgICB0aGlzLmxhYmVsID0gbnVsbDtcbiAgICAgICAgdGhpcy5wcmV2ID0gbnVsbDtcbiAgICAgICAgdGhpcy5uZXh0ID0gbnVsbDtcbiAgICAgICAgaW5pdGlhbGl6ZUd1aWQodGhpcyk7XG4gICAgICAgIHRoaXMubGFiZWwgPSBsYWJlbDtcbiAgICB9XG4gICAgZXZhbHVhdGUoKSB7fVxuICAgIGluc3BlY3QoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmxhYmVsfSBbJHt0aGlzLl9ndWlkfV1gO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhcmdzOiBbSlNPTi5zdHJpbmdpZnkodGhpcy5pbnNwZWN0KCkpXSxcbiAgICAgICAgICAgIGd1aWQ6IHRoaXMuX2d1aWQsXG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGVcbiAgICAgICAgfTtcbiAgICB9XG59Il19