UNPKG

ember-legacy-class-transform

Version:
288 lines (236 loc) 26 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.OPTION_SELECTED_MANAGER = exports.INPUT_VALUE_PROPERTY_MANAGER = exports.PropertyManager = exports.AttributeManager = undefined; exports.defaultManagers = defaultManagers; exports.defaultPropertyManagers = defaultPropertyManagers; exports.defaultAttributeManagers = defaultAttributeManagers; exports.readDOMAttr = readDOMAttr; var _sanitizedValues = require("./sanitized-values"); var _props = require("./props"); var _helper = require("./helper"); var _content = require("../compiled/opcodes/content"); 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 _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); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function defaultManagers(element, attr, _isTrusting, _namespace) { var tagName = element.tagName; var isSVG = element.namespaceURI === _helper.SVG_NAMESPACE; if (isSVG) { return defaultAttributeManagers(tagName, attr); } var _normalizeProperty = (0, _props.normalizeProperty)(element, attr), type = _normalizeProperty.type, normalized = _normalizeProperty.normalized; if (type === 'attr') { return defaultAttributeManagers(tagName, normalized); } else { return defaultPropertyManagers(tagName, normalized); } } function defaultPropertyManagers(tagName, attr) { if ((0, _sanitizedValues.requiresSanitization)(tagName, attr)) { return new SafePropertyManager(attr); } if (isUserInputValue(tagName, attr)) { return INPUT_VALUE_PROPERTY_MANAGER; } if (isOptionSelected(tagName, attr)) { return OPTION_SELECTED_MANAGER; } return new PropertyManager(attr); } function defaultAttributeManagers(tagName, attr) { if ((0, _sanitizedValues.requiresSanitization)(tagName, attr)) { return new SafeAttributeManager(attr); } return new AttributeManager(attr); } function readDOMAttr(element, attr) { var isSVG = element.namespaceURI === _helper.SVG_NAMESPACE; var _normalizeProperty2 = (0, _props.normalizeProperty)(element, attr), type = _normalizeProperty2.type, normalized = _normalizeProperty2.normalized; if (isSVG) { return element.getAttribute(normalized); } if (type === 'attr') { return element.getAttribute(normalized); } { return element[normalized]; } } ; var AttributeManager = exports.AttributeManager = function () { function AttributeManager(attr) { _classCallCheck(this, AttributeManager); this.attr = attr; } AttributeManager.prototype.setAttribute = function setAttribute(env, element, value, namespace) { var dom = env.getAppendOperations(); var normalizedValue = normalizeAttributeValue(value); if (!isAttrRemovalValue(normalizedValue)) { dom.setAttribute(element, this.attr, normalizedValue, namespace); } }; AttributeManager.prototype.updateAttribute = function updateAttribute(env, element, value, namespace) { if (value === null || value === undefined || value === false) { if (namespace) { env.getDOM().removeAttributeNS(element, namespace, this.attr); } else { env.getDOM().removeAttribute(element, this.attr); } } else { this.setAttribute(env, element, value); } }; return AttributeManager; }(); ; var PropertyManager = exports.PropertyManager = function (_AttributeManager) { _inherits(PropertyManager, _AttributeManager); function PropertyManager() { _classCallCheck(this, PropertyManager); return _possibleConstructorReturn(this, _AttributeManager.apply(this, arguments)); } PropertyManager.prototype.setAttribute = function setAttribute(_env, element, value, _namespace) { if (!isAttrRemovalValue(value)) { element[this.attr] = value; } }; PropertyManager.prototype.removeAttribute = function removeAttribute(env, element, namespace) { // TODO this sucks but to preserve properties first and to meet current // semantics we must do this. var attr = this.attr; if (namespace) { env.getDOM().removeAttributeNS(element, namespace, attr); } else { env.getDOM().removeAttribute(element, attr); } }; PropertyManager.prototype.updateAttribute = function updateAttribute(env, element, value, namespace) { // ensure the property is always updated element[this.attr] = value; if (isAttrRemovalValue(value)) { this.removeAttribute(env, element, namespace); } }; return PropertyManager; }(AttributeManager); ; function normalizeAttributeValue(value) { if (value === false || value === undefined || value === null) { return null; } if (value === true) { return ''; } // onclick function etc in SSR if (typeof value === 'function') { return null; } return String(value); } function isAttrRemovalValue(value) { return value === null || value === undefined; } var SafePropertyManager = function (_PropertyManager) { _inherits(SafePropertyManager, _PropertyManager); function SafePropertyManager() { _classCallCheck(this, SafePropertyManager); return _possibleConstructorReturn(this, _PropertyManager.apply(this, arguments)); } SafePropertyManager.prototype.setAttribute = function setAttribute(env, element, value) { _PropertyManager.prototype.setAttribute.call(this, env, element, (0, _sanitizedValues.sanitizeAttributeValue)(env, element, this.attr, value)); }; SafePropertyManager.prototype.updateAttribute = function updateAttribute(env, element, value) { _PropertyManager.prototype.updateAttribute.call(this, env, element, (0, _sanitizedValues.sanitizeAttributeValue)(env, element, this.attr, value)); }; return SafePropertyManager; }(PropertyManager); function isUserInputValue(tagName, attribute) { return (tagName === 'INPUT' || tagName === 'TEXTAREA') && attribute === 'value'; } var InputValuePropertyManager = function (_AttributeManager2) { _inherits(InputValuePropertyManager, _AttributeManager2); function InputValuePropertyManager() { _classCallCheck(this, InputValuePropertyManager); return _possibleConstructorReturn(this, _AttributeManager2.apply(this, arguments)); } InputValuePropertyManager.prototype.setAttribute = function setAttribute(_env, element, value) { var input = element; input.value = (0, _content.normalizeTextValue)(value); }; InputValuePropertyManager.prototype.updateAttribute = function updateAttribute(_env, element, value) { var input = element; var currentValue = input.value; var normalizedValue = (0, _content.normalizeTextValue)(value); if (currentValue !== normalizedValue) { input.value = normalizedValue; } }; return InputValuePropertyManager; }(AttributeManager); var INPUT_VALUE_PROPERTY_MANAGER = exports.INPUT_VALUE_PROPERTY_MANAGER = new InputValuePropertyManager('value'); function isOptionSelected(tagName, attribute) { return tagName === 'OPTION' && attribute === 'selected'; } var OptionSelectedManager = function (_PropertyManager2) { _inherits(OptionSelectedManager, _PropertyManager2); function OptionSelectedManager() { _classCallCheck(this, OptionSelectedManager); return _possibleConstructorReturn(this, _PropertyManager2.apply(this, arguments)); } OptionSelectedManager.prototype.setAttribute = function setAttribute(_env, element, value) { if (value !== null && value !== undefined && value !== false) { var option = element; option.selected = true; } }; OptionSelectedManager.prototype.updateAttribute = function updateAttribute(_env, element, value) { var option = element; if (value) { option.selected = true; } else { option.selected = false; } }; return OptionSelectedManager; }(PropertyManager); var OPTION_SELECTED_MANAGER = exports.OPTION_SELECTED_MANAGER = new OptionSelectedManager('selected'); var SafeAttributeManager = function (_AttributeManager3) { _inherits(SafeAttributeManager, _AttributeManager3); function SafeAttributeManager() { _classCallCheck(this, SafeAttributeManager); return _possibleConstructorReturn(this, _AttributeManager3.apply(this, arguments)); } SafeAttributeManager.prototype.setAttribute = function setAttribute(env, element, value) { _AttributeManager3.prototype.setAttribute.call(this, env, element, (0, _sanitizedValues.sanitizeAttributeValue)(env, element, this.attr, value)); }; SafeAttributeManager.prototype.updateAttribute = function updateAttribute(env, element, value, _namespace) { _AttributeManager3.prototype.updateAttribute.call(this, env, element, (0, _sanitizedValues.sanitizeAttributeValue)(env, element, this.attr, value)); }; return SafeAttributeManager; }(AttributeManager); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kb20vYXR0cmlidXRlLW1hbmFnZXJzLmpzIl0sIm5hbWVzIjpbInNhbml0aXplQXR0cmlidXRlVmFsdWUiLCJyZXF1aXJlc1Nhbml0aXphdGlvbiIsIm5vcm1hbGl6ZVByb3BlcnR5IiwiU1ZHX05BTUVTUEFDRSIsIm5vcm1hbGl6ZVRleHRWYWx1ZSIsImRlZmF1bHRNYW5hZ2VycyIsImVsZW1lbnQiLCJhdHRyIiwiX2lzVHJ1c3RpbmciLCJfbmFtZXNwYWNlIiwidGFnTmFtZSIsImlzU1ZHIiwibmFtZXNwYWNlVVJJIiwiZGVmYXVsdEF0dHJpYnV0ZU1hbmFnZXJzIiwidHlwZSIsIm5vcm1hbGl6ZWQiLCJkZWZhdWx0UHJvcGVydHlNYW5hZ2VycyIsIlNhZmVQcm9wZXJ0eU1hbmFnZXIiLCJpc1VzZXJJbnB1dFZhbHVlIiwiSU5QVVRfVkFMVUVfUFJPUEVSVFlfTUFOQUdFUiIsImlzT3B0aW9uU2VsZWN0ZWQiLCJPUFRJT05fU0VMRUNURURfTUFOQUdFUiIsIlByb3BlcnR5TWFuYWdlciIsIlNhZmVBdHRyaWJ1dGVNYW5hZ2VyIiwiQXR0cmlidXRlTWFuYWdlciIsInJlYWRET01BdHRyIiwiZ2V0QXR0cmlidXRlIiwic2V0QXR0cmlidXRlIiwiZW52IiwidmFsdWUiLCJuYW1lc3BhY2UiLCJkb20iLCJnZXRBcHBlbmRPcGVyYXRpb25zIiwibm9ybWFsaXplZFZhbHVlIiwibm9ybWFsaXplQXR0cmlidXRlVmFsdWUiLCJpc0F0dHJSZW1vdmFsVmFsdWUiLCJ1cGRhdGVBdHRyaWJ1dGUiLCJ1bmRlZmluZWQiLCJnZXRET00iLCJyZW1vdmVBdHRyaWJ1dGVOUyIsInJlbW92ZUF0dHJpYnV0ZSIsIl9lbnYiLCJTdHJpbmciLCJhdHRyaWJ1dGUiLCJJbnB1dFZhbHVlUHJvcGVydHlNYW5hZ2VyIiwiaW5wdXQiLCJjdXJyZW50VmFsdWUiLCJPcHRpb25TZWxlY3RlZE1hbmFnZXIiLCJvcHRpb24iLCJzZWxlY3RlZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7O1FB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QUFBLEFBQU0sd0JBQU4sQUFBbUIsS0FBbkIsQUFBd0IsU0FBUyw2Q0FBQSxBQUF1QixLQUF2QixBQUE0QixTQUFTLEtBQXJDLEFBQTBDLE1BQTNFLEFBQWlDLEFBQWdELEFBQ3BGO0E7O21DQUNELEEsMkMsQUFBZ0IsS0FBSyxBLFMsQUFBUyxPQUFPLEEsWUFBWSxBQUM3QztxQ0FBQSxBQUFNLDJCQUFOLEFBQXNCLEtBQXRCLEFBQTJCLFNBQVMsNkNBQUEsQUFBdUIsS0FBdkIsQUFBNEIsU0FBUyxLQUFyQyxBQUEwQyxNQUE5RSxBQUFvQyxBQUFnRCxBQUN2RjtBOzs7RUFOOEIsQSIsImZpbGUiOiJsaWIvZG9tL2F0dHJpYnV0ZS1tYW5hZ2Vycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNhbml0aXplQXR0cmlidXRlVmFsdWUsIHJlcXVpcmVzU2FuaXRpemF0aW9uIH0gZnJvbSAnLi9zYW5pdGl6ZWQtdmFsdWVzJztcbmltcG9ydCB7IG5vcm1hbGl6ZVByb3BlcnR5IH0gZnJvbSAnLi9wcm9wcyc7XG5pbXBvcnQgeyBTVkdfTkFNRVNQQUNFIH0gZnJvbSAnLi9oZWxwZXInO1xuaW1wb3J0IHsgbm9ybWFsaXplVGV4dFZhbHVlIH0gZnJvbSAnLi4vY29tcGlsZWQvb3Bjb2Rlcy9jb250ZW50JztcbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0TWFuYWdlcnMoZWxlbWVudCwgYXR0ciwgX2lzVHJ1c3RpbmcsIF9uYW1lc3BhY2UpIHtcbiAgICBsZXQgdGFnTmFtZSA9IGVsZW1lbnQudGFnTmFtZTtcbiAgICBsZXQgaXNTVkcgPSBlbGVtZW50Lm5hbWVzcGFjZVVSSSA9PT0gU1ZHX05BTUVTUEFDRTtcbiAgICBpZiAoaXNTVkcpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRBdHRyaWJ1dGVNYW5hZ2Vycyh0YWdOYW1lLCBhdHRyKTtcbiAgICB9XG4gICAgbGV0IHsgdHlwZSwgbm9ybWFsaXplZCB9ID0gbm9ybWFsaXplUHJvcGVydHkoZWxlbWVudCwgYXR0cik7XG4gICAgaWYgKHR5cGUgPT09ICdhdHRyJykge1xuICAgICAgICByZXR1cm4gZGVmYXVsdEF0dHJpYnV0ZU1hbmFnZXJzKHRhZ05hbWUsIG5vcm1hbGl6ZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0UHJvcGVydHlNYW5hZ2Vycyh0YWdOYW1lLCBub3JtYWxpemVkKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdFByb3BlcnR5TWFuYWdlcnModGFnTmFtZSwgYXR0cikge1xuICAgIGlmIChyZXF1aXJlc1Nhbml0aXphdGlvbih0YWdOYW1lLCBhdHRyKSkge1xuICAgICAgICByZXR1cm4gbmV3IFNhZmVQcm9wZXJ0eU1hbmFnZXIoYXR0cik7XG4gICAgfVxuICAgIGlmIChpc1VzZXJJbnB1dFZhbHVlKHRhZ05hbWUsIGF0dHIpKSB7XG4gICAgICAgIHJldHVybiBJTlBVVF9WQUxVRV9QUk9QRVJUWV9NQU5BR0VSO1xuICAgIH1cbiAgICBpZiAoaXNPcHRpb25TZWxlY3RlZCh0YWdOYW1lLCBhdHRyKSkge1xuICAgICAgICByZXR1cm4gT1BUSU9OX1NFTEVDVEVEX01BTkFHRVI7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvcGVydHlNYW5hZ2VyKGF0dHIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRBdHRyaWJ1dGVNYW5hZ2Vycyh0YWdOYW1lLCBhdHRyKSB7XG4gICAgaWYgKHJlcXVpcmVzU2FuaXRpemF0aW9uKHRhZ05hbWUsIGF0dHIpKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2FmZUF0dHJpYnV0ZU1hbmFnZXIoYXR0cik7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQXR0cmlidXRlTWFuYWdlcihhdHRyKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZWFkRE9NQXR0cihlbGVtZW50LCBhdHRyKSB7XG4gICAgbGV0IGlzU1ZHID0gZWxlbWVudC5uYW1lc3BhY2VVUkkgPT09IFNWR19OQU1FU1BBQ0U7XG4gICAgbGV0IHsgdHlwZSwgbm9ybWFsaXplZCB9ID0gbm9ybWFsaXplUHJvcGVydHkoZWxlbWVudCwgYXR0cik7XG4gICAgaWYgKGlzU1ZHKSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LmdldEF0dHJpYnV0ZShub3JtYWxpemVkKTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICdhdHRyJykge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5nZXRBdHRyaWJ1dGUobm9ybWFsaXplZCk7XG4gICAgfVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRbbm9ybWFsaXplZF07XG4gICAgfVxufVxuO1xuZXhwb3J0IGNsYXNzIEF0dHJpYnV0ZU1hbmFnZXIge1xuICAgIGNvbnN0cnVjdG9yKGF0dHIpIHtcbiAgICAgICAgdGhpcy5hdHRyID0gYXR0cjtcbiAgICB9XG4gICAgc2V0QXR0cmlidXRlKGVudiwgZWxlbWVudCwgdmFsdWUsIG5hbWVzcGFjZSkge1xuICAgICAgICBsZXQgZG9tID0gZW52LmdldEFwcGVuZE9wZXJhdGlvbnMoKTtcbiAgICAgICAgbGV0IG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZUF0dHJpYnV0ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgaWYgKCFpc0F0dHJSZW1vdmFsVmFsdWUobm9ybWFsaXplZFZhbHVlKSkge1xuICAgICAgICAgICAgZG9tLnNldEF0dHJpYnV0ZShlbGVtZW50LCB0aGlzLmF0dHIsIG5vcm1hbGl6ZWRWYWx1ZSwgbmFtZXNwYWNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB1cGRhdGVBdHRyaWJ1dGUoZW52LCBlbGVtZW50LCB2YWx1ZSwgbmFtZXNwYWNlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgaWYgKG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgICAgIGVudi5nZXRET00oKS5yZW1vdmVBdHRyaWJ1dGVOUyhlbGVtZW50LCBuYW1lc3BhY2UsIHRoaXMuYXR0cik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVudi5nZXRET00oKS5yZW1vdmVBdHRyaWJ1dGUoZWxlbWVudCwgdGhpcy5hdHRyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKGVudiwgZWxlbWVudCwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxufVxuO1xuZXhwb3J0IGNsYXNzIFByb3BlcnR5TWFuYWdlciBleHRlbmRzIEF0dHJpYnV0ZU1hbmFnZXIge1xuICAgIHNldEF0dHJpYnV0ZShfZW52LCBlbGVtZW50LCB2YWx1ZSwgX25hbWVzcGFjZSkge1xuICAgICAgICBpZiAoIWlzQXR0clJlbW92YWxWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGVsZW1lbnRbdGhpcy5hdHRyXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlbW92ZUF0dHJpYnV0ZShlbnYsIGVsZW1lbnQsIG5hbWVzcGFjZSkge1xuICAgICAgICAvLyBUT0RPIHRoaXMgc3Vja3MgYnV0IHRvIHByZXNlcnZlIHByb3BlcnRpZXMgZmlyc3QgYW5kIHRvIG1lZXQgY3VycmVudFxuICAgICAgICAvLyBzZW1hbnRpY3Mgd2UgbXVzdCBkbyB0aGlzLlxuICAgICAgICBsZXQgeyBhdHRyIH0gPSB0aGlzO1xuICAgICAgICBpZiAobmFtZXNwYWNlKSB7XG4gICAgICAgICAgICBlbnYuZ2V0RE9NKCkucmVtb3ZlQXR0cmlidXRlTlMoZWxlbWVudCwgbmFtZXNwYWNlLCBhdHRyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVudi5nZXRET00oKS5yZW1vdmVBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlQXR0cmlidXRlKGVudiwgZWxlbWVudCwgdmFsdWUsIG5hbWVzcGFjZSkge1xuICAgICAgICAvLyBlbnN1cmUgdGhlIHByb3BlcnR5IGlzIGFsd2F5cyB1cGRhdGVkXG4gICAgICAgIGVsZW1lbnRbdGhpcy5hdHRyXSA9IHZhbHVlO1xuICAgICAgICBpZiAoaXNBdHRyUmVtb3ZhbFZhbHVlKHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoZW52LCBlbGVtZW50LCBuYW1lc3BhY2UpO1xuICAgICAgICB9XG4gICAgfVxufVxuO1xuZnVuY3Rpb24gbm9ybWFsaXplQXR0cmlidXRlVmFsdWUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IGZhbHNlIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIC8vIG9uY2xpY2sgZnVuY3Rpb24gZXRjIGluIFNTUlxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xufVxuZnVuY3Rpb24gaXNBdHRyUmVtb3ZhbFZhbHVlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5jbGFzcyBTYWZlUHJvcGVydHlNYW5hZ2VyIGV4dGVuZHMgUHJvcGVydHlNYW5hZ2VyIHtcbiAgICBzZXRBdHRyaWJ1dGUoZW52LCBlbGVtZW50LCB2YWx1ZSkge1xuICAgICAgICBzdXBlci5zZXRBdHRyaWJ1dGUoZW52LCBlbGVtZW50LCBzYW5pdGl6ZUF0dHJpYnV0ZVZhbHVlKGVudiwgZWxlbWVudCwgdGhpcy5hdHRyLCB2YWx1ZSkpO1xuICAgIH1cbiAgICB1cGRhdGVBdHRyaWJ1dGUoZW52LCBlbGVtZW50LCB2YWx1ZSkge1xuICAgICAgICBzdXBlci51cGRhdGVBdHRyaWJ1dGUoZW52LCBlbGVtZW50LCBzYW5pdGl6ZUF0dHJpYnV0ZVZhbHVlKGVudiwgZWxlbWVudCwgdGhpcy5hdHRyLCB2YWx1ZSkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGlzVXNlcklucHV0VmFsdWUodGFnTmFtZSwgYXR0cmlidXRlKSB7XG4gICAgcmV0dXJuICh0YWdOYW1lID09PSAnSU5QVVQnIHx8IHRhZ05hbWUgPT09ICdURVhUQVJFQScpICYmIGF0dHJpYnV0ZSA9PT0gJ3ZhbHVlJztcbn1cbmNsYXNzIElucHV0VmFsdWVQcm9wZXJ0eU1hbmFnZXIgZXh0ZW5kcyBBdHRyaWJ1dGVNYW5hZ2VyIHtcbiAgICBzZXRBdHRyaWJ1dGUoX2VudiwgZWxlbWVudCwgdmFsdWUpIHtcbiAgICAgICAgbGV0IGlucHV0ID0gZWxlbWVudDtcbiAgICAgICAgaW5wdXQudmFsdWUgPSBub3JtYWxpemVUZXh0VmFsdWUodmFsdWUpO1xuICAgIH1cbiAgICB1cGRhdGVBdHRyaWJ1dGUoX2VudiwgZWxlbWVudCwgdmFsdWUpIHtcbiAgICAgICAgbGV0IGlucHV0ID0gZWxlbWVudDtcbiAgICAgICAgbGV0IGN1cnJlbnRWYWx1ZSA9IGlucHV0LnZhbHVlO1xuICAgICAgICBsZXQgbm9ybWFsaXplZFZhbHVlID0gbm9ybWFsaXplVGV4dFZhbHVlKHZhbHVlKTtcbiAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAhPT0gbm9ybWFsaXplZFZhbHVlKSB7XG4gICAgICAgICAgICBpbnB1dC52YWx1ZSA9IG5vcm1hbGl6ZWRWYWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydCBjb25zdCBJTlBVVF9WQUxVRV9QUk9QRVJUWV9NQU5BR0VSID0gbmV3IElucHV0VmFsdWVQcm9wZXJ0eU1hbmFnZXIoJ3ZhbHVlJyk7XG5mdW5jdGlvbiBpc09wdGlvblNlbGVjdGVkKHRhZ05hbWUsIGF0dHJpYnV0ZSkge1xuICAgIHJldHVybiB0YWdOYW1lID09PSAnT1BUSU9OJyAmJiBhdHRyaWJ1dGUgPT09ICdzZWxlY3RlZCc7XG59XG5jbGFzcyBPcHRpb25TZWxlY3RlZE1hbmFnZXIgZXh0ZW5kcyBQcm9wZXJ0eU1hbmFnZXIge1xuICAgIHNldEF0dHJpYnV0ZShfZW52LCBlbGVtZW50LCB2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGxldCBvcHRpb24gPSBlbGVtZW50O1xuICAgICAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB1cGRhdGVBdHRyaWJ1dGUoX2VudiwgZWxlbWVudCwgdmFsdWUpIHtcbiAgICAgICAgbGV0IG9wdGlvbiA9IGVsZW1lbnQ7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGNvbnN0IE9QVElPTl9TRUxFQ1RFRF9NQU5BR0VSID0gbmV3IE9wdGlvblNlbGVjdGVkTWFuYWdlcignc2VsZWN0ZWQnKTtcbmNsYXNzIFNhZmVBdHRyaWJ1dGVNYW5hZ2VyIGV4dGVuZHMgQXR0cmlidXRlTWFuYWdlciB7XG4gICAgc2V0QXR0cmlidXRlKGVudiwgZWxlbWVudCwgdmFsdWUpIHtcbiAgICAgICAgc3VwZXIuc2V0QXR0cmlidXRlKGVudiwgZWxlbWVudCwgc2FuaXRpemVBdHRyaWJ1dGVWYWx1ZShlbnYsIGVsZW1lbnQsIHRoaXMuYXR0ciwgdmFsdWUpKTtcbiAgICB9XG4gICAgdXBkYXRlQXR0cmlidXRlKGVudiwgZWxlbWVudCwgdmFsdWUsIF9uYW1lc3BhY2UpIHtcbiAgICAgICAgc3VwZXIudXBkYXRlQXR0cmlidXRlKGVudiwgZWxlbWVudCwgc2FuaXRpemVBdHRyaWJ1dGVWYWx1ZShlbnYsIGVsZW1lbnQsIHRoaXMuYXR0ciwgdmFsdWUpKTtcbiAgICB9XG59Il19