UNPKG

@angular/core

Version:

Angular - the core framework

392 lines 21 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @license * Copyright Google Inc. All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ /** * The goal here is to make sure that the browser DOM API is the Renderer. * We do this by defining a subset of DOM API to be the renderer and than * use that time for rendering. * * At runtime we can then use the DOM api directly, in server or web-worker * it will be easy to implement such API. */ /** @enum {number} */ const RendererStyleFlags3 = { Important: 1, DashCase: 2, }; export { RendererStyleFlags3 }; RendererStyleFlags3[RendererStyleFlags3.Important] = 'Important'; RendererStyleFlags3[RendererStyleFlags3.DashCase] = 'DashCase'; /** * Object Oriented style of API needed to create elements and text nodes. * * This is the native browser API style, e.g. operations are methods on individual objects * like HTMLElement. With this style, no additional code is needed as a facade * (reducing payload size). * * @record */ export function ObjectOrientedRenderer3() { } if (false) { /** * @param {?} data * @return {?} */ ObjectOrientedRenderer3.prototype.createComment = function (data) { }; /** * @param {?} tagName * @return {?} */ ObjectOrientedRenderer3.prototype.createElement = function (tagName) { }; /** * @param {?} namespace * @param {?} tagName * @return {?} */ ObjectOrientedRenderer3.prototype.createElementNS = function (namespace, tagName) { }; /** * @param {?} data * @return {?} */ ObjectOrientedRenderer3.prototype.createTextNode = function (data) { }; /** * @param {?} selectors * @return {?} */ ObjectOrientedRenderer3.prototype.querySelector = function (selectors) { }; } /** * Returns whether the `renderer` is a `ProceduralRenderer3` * @param {?} renderer * @return {?} */ export function isProceduralRenderer(renderer) { return !!(((/** @type {?} */ (renderer))).listen); } /** * Procedural style of API needed to create elements and text nodes. * * In non-native browser environments (e.g. platforms such as web-workers), this is the * facade that enables element manipulation. This also facilitates backwards compatibility * with Renderer2. * @record */ export function ProceduralRenderer3() { } if (false) { /** * This property is allowed to be null / undefined, * in which case the view engine won't call it. * This is used as a performance optimization for production mode. * @type {?|undefined} */ ProceduralRenderer3.prototype.destroyNode; /** * @return {?} */ ProceduralRenderer3.prototype.destroy = function () { }; /** * @param {?} value * @return {?} */ ProceduralRenderer3.prototype.createComment = function (value) { }; /** * @param {?} name * @param {?=} namespace * @return {?} */ ProceduralRenderer3.prototype.createElement = function (name, namespace) { }; /** * @param {?} value * @return {?} */ ProceduralRenderer3.prototype.createText = function (value) { }; /** * @param {?} parent * @param {?} newChild * @return {?} */ ProceduralRenderer3.prototype.appendChild = function (parent, newChild) { }; /** * @param {?} parent * @param {?} newChild * @param {?} refChild * @return {?} */ ProceduralRenderer3.prototype.insertBefore = function (parent, newChild, refChild) { }; /** * @param {?} parent * @param {?} oldChild * @param {?=} isHostElement * @return {?} */ ProceduralRenderer3.prototype.removeChild = function (parent, oldChild, isHostElement) { }; /** * @param {?} selectorOrNode * @return {?} */ ProceduralRenderer3.prototype.selectRootElement = function (selectorOrNode) { }; /** * @param {?} node * @return {?} */ ProceduralRenderer3.prototype.parentNode = function (node) { }; /** * @param {?} node * @return {?} */ ProceduralRenderer3.prototype.nextSibling = function (node) { }; /** * @param {?} el * @param {?} name * @param {?} value * @param {?=} namespace * @return {?} */ ProceduralRenderer3.prototype.setAttribute = function (el, name, value, namespace) { }; /** * @param {?} el * @param {?} name * @param {?=} namespace * @return {?} */ ProceduralRenderer3.prototype.removeAttribute = function (el, name, namespace) { }; /** * @param {?} el * @param {?} name * @return {?} */ ProceduralRenderer3.prototype.addClass = function (el, name) { }; /** * @param {?} el * @param {?} name * @return {?} */ ProceduralRenderer3.prototype.removeClass = function (el, name) { }; /** * @param {?} el * @param {?} style * @param {?} value * @param {?=} flags * @return {?} */ ProceduralRenderer3.prototype.setStyle = function (el, style, value, flags) { }; /** * @param {?} el * @param {?} style * @param {?=} flags * @return {?} */ ProceduralRenderer3.prototype.removeStyle = function (el, style, flags) { }; /** * @param {?} el * @param {?} name * @param {?} value * @return {?} */ ProceduralRenderer3.prototype.setProperty = function (el, name, value) { }; /** * @param {?} node * @param {?} value * @return {?} */ ProceduralRenderer3.prototype.setValue = function (node, value) { }; /** * @param {?} target * @param {?} eventName * @param {?} callback * @return {?} */ ProceduralRenderer3.prototype.listen = function (target, eventName, callback) { }; } /** * @record */ export function RendererFactory3() { } if (false) { /** * @param {?} hostElement * @param {?} rendererType * @return {?} */ RendererFactory3.prototype.createRenderer = function (hostElement, rendererType) { }; /** * @return {?} */ RendererFactory3.prototype.begin = function () { }; /** * @return {?} */ RendererFactory3.prototype.end = function () { }; } const ɵ0 = /** * @param {?} hostElement * @param {?} rendererType * @return {?} */ (hostElement, rendererType) => { return document; }; /** @type {?} */ export const domRendererFactory3 = { createRenderer: (ɵ0) }; /** * Subset of API needed for appending elements and text nodes. * @record */ export function RNode() { } if (false) { /** * Returns the parent Element, Document, or DocumentFragment * @type {?} */ RNode.prototype.parentNode; /** * Returns the parent Element if there is one * @type {?} */ RNode.prototype.parentElement; /** * Gets the Node immediately following this one in the parent's childNodes * @type {?} */ RNode.prototype.nextSibling; /** * Removes a child from the current node and returns the removed node * @param {?} oldChild the child node to remove * @return {?} */ RNode.prototype.removeChild = function (oldChild) { }; /** * Insert a child node. * * Used exclusively for adding View root nodes into ViewAnchor location. * @param {?} newChild * @param {?} refChild * @param {?} isViewRoot * @return {?} */ RNode.prototype.insertBefore = function (newChild, refChild, isViewRoot) { }; /** * Append a child node. * * Used exclusively for building up DOM which are static (ie not View roots) * @param {?} newChild * @return {?} */ RNode.prototype.appendChild = function (newChild) { }; } /** * Subset of API needed for writing attributes, properties, and setting up * listeners on Element. * @record */ export function RElement() { } if (false) { /** @type {?} */ RElement.prototype.style; /** @type {?} */ RElement.prototype.classList; /** @type {?} */ RElement.prototype.className; /** * @param {?} name * @param {?} value * @return {?} */ RElement.prototype.setAttribute = function (name, value) { }; /** * @param {?} name * @return {?} */ RElement.prototype.removeAttribute = function (name) { }; /** * @param {?} namespaceURI * @param {?} qualifiedName * @param {?} value * @return {?} */ RElement.prototype.setAttributeNS = function (namespaceURI, qualifiedName, value) { }; /** * @param {?} type * @param {?} listener * @param {?=} useCapture * @return {?} */ RElement.prototype.addEventListener = function (type, listener, useCapture) { }; /** * @param {?} type * @param {?=} listener * @param {?=} options * @return {?} */ RElement.prototype.removeEventListener = function (type, listener, options) { }; /** * @param {?} name * @param {?} value * @return {?} */ RElement.prototype.setProperty = function (name, value) { }; } /** * @record */ export function RCssStyleDeclaration() { } if (false) { /** * @param {?} propertyName * @return {?} */ RCssStyleDeclaration.prototype.removeProperty = function (propertyName) { }; /** * @param {?} propertyName * @param {?} value * @param {?=} priority * @return {?} */ RCssStyleDeclaration.prototype.setProperty = function (propertyName, value, priority) { }; } /** * @record */ export function RDomTokenList() { } if (false) { /** * @param {?} token * @return {?} */ RDomTokenList.prototype.add = function (token) { }; /** * @param {?} token * @return {?} */ RDomTokenList.prototype.remove = function (token) { }; } /** * @record */ export function RText() { } if (false) { /** @type {?} */ RText.prototype.textContent; } /** * @record */ export function RComment() { } if (false) { /** @type {?} */ RComment.prototype.textContent; } // Note: This hack is necessary so we don't erroneously get a circular dependency // failure based on types. /** @type {?} */ export const unusedValueExportToPlacateAjd = 1; export { ɵ0 }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9yZW5kZXIzL2ludGVyZmFjZXMvcmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBc0JFLFlBQWtCO0lBQ2xCLFdBQWlCOzs7Ozs7Ozs7Ozs7OztBQWtCbkIsNkNBT0M7Ozs7OztJQU5DLHNFQUFzQzs7Ozs7SUFDdEMseUVBQXlDOzs7Ozs7SUFDekMsc0ZBQThEOzs7OztJQUM5RCx1RUFBb0M7Ozs7O0lBRXBDLDJFQUFnRDs7Ozs7OztBQUlsRCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsUUFBdUQ7SUFFMUYsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFBLFFBQVEsRUFBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEMsQ0FBQzs7Ozs7Ozs7O0FBU0QseUNBa0NDOzs7Ozs7OztJQXhCQywwQ0FBMkM7Ozs7SUFUM0Msd0RBQWdCOzs7OztJQUNoQixtRUFBdUM7Ozs7OztJQUN2Qyw2RUFBK0Q7Ozs7O0lBQy9ELGdFQUFpQzs7Ozs7O0lBT2pDLDRFQUFxRDs7Ozs7OztJQUNyRCx1RkFBeUU7Ozs7Ozs7SUFDekUsMkZBQThFOzs7OztJQUM5RSxnRkFBd0Q7Ozs7O0lBRXhELCtEQUF1Qzs7Ozs7SUFDdkMsZ0VBQXFDOzs7Ozs7OztJQUVyQyx1RkFBdUY7Ozs7Ozs7SUFDdkYsbUZBQTJFOzs7Ozs7SUFDM0UsaUVBQTJDOzs7Ozs7SUFDM0Msb0VBQThDOzs7Ozs7OztJQUM5QyxnRkFFMkQ7Ozs7Ozs7SUFDM0QsNEVBQWdHOzs7Ozs7O0lBQ2hHLDJFQUEwRDs7Ozs7O0lBQzFELG9FQUFvRDs7Ozs7OztJQUdwRCxrRkFFMEQ7Ozs7O0FBRzVELHNDQUlDOzs7Ozs7O0lBSEMscUZBQXdGOzs7O0lBQ3hGLG1EQUFlOzs7O0lBQ2YsaURBQWE7Ozs7Ozs7QUFJRyxDQUFDLFdBQTRCLEVBQUUsWUFBa0MsRUFDbkQsRUFBRSxHQUFHLE9BQU8sUUFBUSxDQUFDLENBQUEsQ0FBQzs7QUFGdEQsTUFBTSxPQUFPLG1CQUFtQixHQUFxQjtJQUNuRCxjQUFjLE1BQ3NDO0NBQ3JEOzs7OztBQUdELDJCQW9DQzs7Ozs7O0lBaENDLDJCQUF1Qjs7Ozs7SUFNdkIsOEJBQTZCOzs7OztJQUs3Qiw0QkFBd0I7Ozs7OztJQU14QixzREFBb0M7Ozs7Ozs7Ozs7SUFPcEMsNkVBQStFOzs7Ozs7OztJQU8vRSxzREFBb0M7Ozs7Ozs7QUFPdEMsOEJBV0M7OztJQVZDLHlCQUE0Qjs7SUFDNUIsNkJBQXlCOztJQUN6Qiw2QkFBa0I7Ozs7OztJQUNsQiw2REFBZ0Q7Ozs7O0lBQ2hELHlEQUFvQzs7Ozs7OztJQUNwQyxzRkFBaUY7Ozs7Ozs7SUFDakYsZ0ZBQW9GOzs7Ozs7O0lBQ3BGLGdGQUFxRjs7Ozs7O0lBRXJGLDREQUE2Qzs7Ozs7QUFHL0MsMENBR0M7Ozs7OztJQUZDLDRFQUE2Qzs7Ozs7OztJQUM3QywwRkFBK0U7Ozs7O0FBR2pGLG1DQUdDOzs7Ozs7SUFGQyxtREFBeUI7Ozs7O0lBQ3pCLHNEQUE0Qjs7Ozs7QUFHOUIsMkJBQWtFOzs7SUFBM0IsNEJBQXlCOzs7OztBQUVoRSw4QkFBcUU7OztJQUEzQiwrQkFBeUI7Ozs7O0FBSW5FLE1BQU0sT0FBTyw2QkFBNkIsR0FBRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vKipcbiAqIFRoZSBnb2FsIGhlcmUgaXMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJyb3dzZXIgRE9NIEFQSSBpcyB0aGUgUmVuZGVyZXIuXG4gKiBXZSBkbyB0aGlzIGJ5IGRlZmluaW5nIGEgc3Vic2V0IG9mIERPTSBBUEkgdG8gYmUgdGhlIHJlbmRlcmVyIGFuZCB0aGFuXG4gKiB1c2UgdGhhdCB0aW1lIGZvciByZW5kZXJpbmcuXG4gKlxuICogQXQgcnVudGltZSB3ZSBjYW4gdGhlbiB1c2UgdGhlIERPTSBhcGkgZGlyZWN0bHksIGluIHNlcnZlciBvciB3ZWItd29ya2VyXG4gKiBpdCB3aWxsIGJlIGVhc3kgdG8gaW1wbGVtZW50IHN1Y2ggQVBJLlxuICovXG5cbmltcG9ydCB7UmVuZGVyZXJTdHlsZUZsYWdzMiwgUmVuZGVyZXJUeXBlMn0gZnJvbSAnLi4vLi4vcmVuZGVyL2FwaSc7XG5cblxuLy8gVE9ETzogY2xlYW51cCBvbmNlIHRoZSBjb2RlIGlzIG1lcmdlZCBpbiBhbmd1bGFyL2FuZ3VsYXJcbmV4cG9ydCBlbnVtIFJlbmRlcmVyU3R5bGVGbGFnczMge1xuICBJbXBvcnRhbnQgPSAxIDw8IDAsXG4gIERhc2hDYXNlID0gMSA8PCAxXG59XG5cbmV4cG9ydCB0eXBlIFJlbmRlcmVyMyA9IE9iamVjdE9yaWVudGVkUmVuZGVyZXIzIHwgUHJvY2VkdXJhbFJlbmRlcmVyMztcblxuZXhwb3J0IHR5cGUgR2xvYmFsVGFyZ2V0TmFtZSA9ICdkb2N1bWVudCcgfCAnd2luZG93JyB8ICdib2R5JztcblxuZXhwb3J0IHR5cGUgR2xvYmFsVGFyZ2V0UmVzb2x2ZXIgPSAoZWxlbWVudDogYW55KSA9PiB7XG4gIG5hbWU6IEdsb2JhbFRhcmdldE5hbWUsIHRhcmdldDogRXZlbnRUYXJnZXRcbn07XG5cbi8qKlxuICogT2JqZWN0IE9yaWVudGVkIHN0eWxlIG9mIEFQSSBuZWVkZWQgdG8gY3JlYXRlIGVsZW1lbnRzIGFuZCB0ZXh0IG5vZGVzLlxuICpcbiAqIFRoaXMgaXMgdGhlIG5hdGl2ZSBicm93c2VyIEFQSSBzdHlsZSwgZS5nLiBvcGVyYXRpb25zIGFyZSBtZXRob2RzIG9uIGluZGl2aWR1YWwgb2JqZWN0c1xuICogbGlrZSBIVE1MRWxlbWVudC4gV2l0aCB0aGlzIHN0eWxlLCBubyBhZGRpdGlvbmFsIGNvZGUgaXMgbmVlZGVkIGFzIGEgZmFjYWRlXG4gKiAocmVkdWNpbmcgcGF5bG9hZCBzaXplKS5cbiAqICovXG5leHBvcnQgaW50ZXJmYWNlIE9iamVjdE9yaWVudGVkUmVuZGVyZXIzIHtcbiAgY3JlYXRlQ29tbWVudChkYXRhOiBzdHJpbmcpOiBSQ29tbWVudDtcbiAgY3JlYXRlRWxlbWVudCh0YWdOYW1lOiBzdHJpbmcpOiBSRWxlbWVudDtcbiAgY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZTogc3RyaW5nLCB0YWdOYW1lOiBzdHJpbmcpOiBSRWxlbWVudDtcbiAgY3JlYXRlVGV4dE5vZGUoZGF0YTogc3RyaW5nKTogUlRleHQ7XG5cbiAgcXVlcnlTZWxlY3RvcihzZWxlY3RvcnM6IHN0cmluZyk6IFJFbGVtZW50fG51bGw7XG59XG5cbi8qKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGByZW5kZXJlcmAgaXMgYSBgUHJvY2VkdXJhbFJlbmRlcmVyM2AgKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb2NlZHVyYWxSZW5kZXJlcihyZW5kZXJlcjogUHJvY2VkdXJhbFJlbmRlcmVyMyB8IE9iamVjdE9yaWVudGVkUmVuZGVyZXIzKTpcbiAgICByZW5kZXJlciBpcyBQcm9jZWR1cmFsUmVuZGVyZXIzIHtcbiAgcmV0dXJuICEhKChyZW5kZXJlciBhcyBhbnkpLmxpc3Rlbik7XG59XG5cbi8qKlxuICogUHJvY2VkdXJhbCBzdHlsZSBvZiBBUEkgbmVlZGVkIHRvIGNyZWF0ZSBlbGVtZW50cyBhbmQgdGV4dCBub2Rlcy5cbiAqXG4gKiBJbiBub24tbmF0aXZlIGJyb3dzZXIgZW52aXJvbm1lbnRzIChlLmcuIHBsYXRmb3JtcyBzdWNoIGFzIHdlYi13b3JrZXJzKSwgdGhpcyBpcyB0aGVcbiAqIGZhY2FkZSB0aGF0IGVuYWJsZXMgZWxlbWVudCBtYW5pcHVsYXRpb24uIFRoaXMgYWxzbyBmYWNpbGl0YXRlcyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICogd2l0aCBSZW5kZXJlcjIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2VkdXJhbFJlbmRlcmVyMyB7XG4gIGRlc3Ryb3koKTogdm9pZDtcbiAgY3JlYXRlQ29tbWVudCh2YWx1ZTogc3RyaW5nKTogUkNvbW1lbnQ7XG4gIGNyZWF0ZUVsZW1lbnQobmFtZTogc3RyaW5nLCBuYW1lc3BhY2U/OiBzdHJpbmd8bnVsbCk6IFJFbGVtZW50O1xuICBjcmVhdGVUZXh0KHZhbHVlOiBzdHJpbmcpOiBSVGV4dDtcbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgaXMgYWxsb3dlZCB0byBiZSBudWxsIC8gdW5kZWZpbmVkLFxuICAgKiBpbiB3aGljaCBjYXNlIHRoZSB2aWV3IGVuZ2luZSB3b24ndCBjYWxsIGl0LlxuICAgKiBUaGlzIGlzIHVzZWQgYXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gZm9yIHByb2R1Y3Rpb24gbW9kZS5cbiAgICovXG4gIGRlc3Ryb3lOb2RlPzogKChub2RlOiBSTm9kZSkgPT4gdm9pZCl8bnVsbDtcbiAgYXBwZW5kQ2hpbGQocGFyZW50OiBSRWxlbWVudCwgbmV3Q2hpbGQ6IFJOb2RlKTogdm9pZDtcbiAgaW5zZXJ0QmVmb3JlKHBhcmVudDogUk5vZGUsIG5ld0NoaWxkOiBSTm9kZSwgcmVmQ2hpbGQ6IFJOb2RlfG51bGwpOiB2b2lkO1xuICByZW1vdmVDaGlsZChwYXJlbnQ6IFJFbGVtZW50LCBvbGRDaGlsZDogUk5vZGUsIGlzSG9zdEVsZW1lbnQ/OiBib29sZWFuKTogdm9pZDtcbiAgc2VsZWN0Um9vdEVsZW1lbnQoc2VsZWN0b3JPck5vZGU6IHN0cmluZ3xhbnkpOiBSRWxlbWVudDtcblxuICBwYXJlbnROb2RlKG5vZGU6IFJOb2RlKTogUkVsZW1lbnR8bnVsbDtcbiAgbmV4dFNpYmxpbmcobm9kZTogUk5vZGUpOiBSTm9kZXxudWxsO1xuXG4gIHNldEF0dHJpYnV0ZShlbDogUkVsZW1lbnQsIG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZywgbmFtZXNwYWNlPzogc3RyaW5nfG51bGwpOiB2b2lkO1xuICByZW1vdmVBdHRyaWJ1dGUoZWw6IFJFbGVtZW50LCBuYW1lOiBzdHJpbmcsIG5hbWVzcGFjZT86IHN0cmluZ3xudWxsKTogdm9pZDtcbiAgYWRkQ2xhc3MoZWw6IFJFbGVtZW50LCBuYW1lOiBzdHJpbmcpOiB2b2lkO1xuICByZW1vdmVDbGFzcyhlbDogUkVsZW1lbnQsIG5hbWU6IHN0cmluZyk6IHZvaWQ7XG4gIHNldFN0eWxlKFxuICAgICAgZWw6IFJFbGVtZW50LCBzdHlsZTogc3RyaW5nLCB2YWx1ZTogYW55LFxuICAgICAgZmxhZ3M/OiBSZW5kZXJlclN0eWxlRmxhZ3MyfFJlbmRlcmVyU3R5bGVGbGFnczMpOiB2b2lkO1xuICByZW1vdmVTdHlsZShlbDogUkVsZW1lbnQsIHN0eWxlOiBzdHJpbmcsIGZsYWdzPzogUmVuZGVyZXJTdHlsZUZsYWdzMnxSZW5kZXJlclN0eWxlRmxhZ3MzKTogdm9pZDtcbiAgc2V0UHJvcGVydHkoZWw6IFJFbGVtZW50LCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkO1xuICBzZXRWYWx1ZShub2RlOiBSVGV4dHxSQ29tbWVudCwgdmFsdWU6IHN0cmluZyk6IHZvaWQ7XG5cbiAgLy8gVE9ETyhtaXNrbyk6IERlcHJlY2F0ZSBpbiBmYXZvciBvZiBhZGRFdmVudExpc3RlbmVyL3JlbW92ZUV2ZW50TGlzdGVuZXJcbiAgbGlzdGVuKFxuICAgICAgdGFyZ2V0OiBHbG9iYWxUYXJnZXROYW1lfFJOb2RlLCBldmVudE5hbWU6IHN0cmluZyxcbiAgICAgIGNhbGxiYWNrOiAoZXZlbnQ6IGFueSkgPT4gYm9vbGVhbiB8IHZvaWQpOiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlcmVyRmFjdG9yeTMge1xuICBjcmVhdGVSZW5kZXJlcihob3N0RWxlbWVudDogUkVsZW1lbnR8bnVsbCwgcmVuZGVyZXJUeXBlOiBSZW5kZXJlclR5cGUyfG51bGwpOiBSZW5kZXJlcjM7XG4gIGJlZ2luPygpOiB2b2lkO1xuICBlbmQ/KCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBkb21SZW5kZXJlckZhY3RvcnkzOiBSZW5kZXJlckZhY3RvcnkzID0ge1xuICBjcmVhdGVSZW5kZXJlcjogKGhvc3RFbGVtZW50OiBSRWxlbWVudCB8IG51bGwsIHJlbmRlcmVyVHlwZTogUmVuZGVyZXJUeXBlMiB8IG51bGwpOlxuICAgICAgICAgICAgICAgICAgICAgIFJlbmRlcmVyMyA9PiB7IHJldHVybiBkb2N1bWVudDt9XG59O1xuXG4vKiogU3Vic2V0IG9mIEFQSSBuZWVkZWQgZm9yIGFwcGVuZGluZyBlbGVtZW50cyBhbmQgdGV4dCBub2Rlcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUk5vZGUge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgcGFyZW50IEVsZW1lbnQsIERvY3VtZW50LCBvciBEb2N1bWVudEZyYWdtZW50XG4gICAqL1xuICBwYXJlbnROb2RlOiBSTm9kZXxudWxsO1xuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHBhcmVudCBFbGVtZW50IGlmIHRoZXJlIGlzIG9uZVxuICAgKi9cbiAgcGFyZW50RWxlbWVudDogUkVsZW1lbnR8bnVsbDtcblxuICAvKipcbiAgICogR2V0cyB0aGUgTm9kZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhpcyBvbmUgaW4gdGhlIHBhcmVudCdzIGNoaWxkTm9kZXNcbiAgICovXG4gIG5leHRTaWJsaW5nOiBSTm9kZXxudWxsO1xuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSB0aGUgY3VycmVudCBub2RlIGFuZCByZXR1cm5zIHRoZSByZW1vdmVkIG5vZGVcbiAgICogQHBhcmFtIG9sZENoaWxkIHRoZSBjaGlsZCBub2RlIHRvIHJlbW92ZVxuICAgKi9cbiAgcmVtb3ZlQ2hpbGQob2xkQ2hpbGQ6IFJOb2RlKTogUk5vZGU7XG5cbiAgLyoqXG4gICAqIEluc2VydCBhIGNoaWxkIG5vZGUuXG4gICAqXG4gICAqIFVzZWQgZXhjbHVzaXZlbHkgZm9yIGFkZGluZyBWaWV3IHJvb3Qgbm9kZXMgaW50byBWaWV3QW5jaG9yIGxvY2F0aW9uLlxuICAgKi9cbiAgaW5zZXJ0QmVmb3JlKG5ld0NoaWxkOiBSTm9kZSwgcmVmQ2hpbGQ6IFJOb2RlfG51bGwsIGlzVmlld1Jvb3Q6IGJvb2xlYW4pOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBBcHBlbmQgYSBjaGlsZCBub2RlLlxuICAgKlxuICAgKiBVc2VkIGV4Y2x1c2l2ZWx5IGZvciBidWlsZGluZyB1cCBET00gd2hpY2ggYXJlIHN0YXRpYyAoaWUgbm90IFZpZXcgcm9vdHMpXG4gICAqL1xuICBhcHBlbmRDaGlsZChuZXdDaGlsZDogUk5vZGUpOiBSTm9kZTtcbn1cblxuLyoqXG4gKiBTdWJzZXQgb2YgQVBJIG5lZWRlZCBmb3Igd3JpdGluZyBhdHRyaWJ1dGVzLCBwcm9wZXJ0aWVzLCBhbmQgc2V0dGluZyB1cFxuICogbGlzdGVuZXJzIG9uIEVsZW1lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUkVsZW1lbnQgZXh0ZW5kcyBSTm9kZSB7XG4gIHN0eWxlOiBSQ3NzU3R5bGVEZWNsYXJhdGlvbjtcbiAgY2xhc3NMaXN0OiBSRG9tVG9rZW5MaXN0O1xuICBjbGFzc05hbWU6IHN0cmluZztcbiAgc2V0QXR0cmlidXRlKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQ7XG4gIHJlbW92ZUF0dHJpYnV0ZShuYW1lOiBzdHJpbmcpOiB2b2lkO1xuICBzZXRBdHRyaWJ1dGVOUyhuYW1lc3BhY2VVUkk6IHN0cmluZywgcXVhbGlmaWVkTmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZDtcbiAgYWRkRXZlbnRMaXN0ZW5lcih0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyLCB1c2VDYXB0dXJlPzogYm9vbGVhbik6IHZvaWQ7XG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZTogc3RyaW5nLCBsaXN0ZW5lcj86IEV2ZW50TGlzdGVuZXIsIG9wdGlvbnM/OiBib29sZWFuKTogdm9pZDtcblxuICBzZXRQcm9wZXJ0eT8obmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSQ3NzU3R5bGVEZWNsYXJhdGlvbiB7XG4gIHJlbW92ZVByb3BlcnR5KHByb3BlcnR5TmFtZTogc3RyaW5nKTogc3RyaW5nO1xuICBzZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZ3xudWxsLCBwcmlvcml0eT86IHN0cmluZyk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUkRvbVRva2VuTGlzdCB7XG4gIGFkZCh0b2tlbjogc3RyaW5nKTogdm9pZDtcbiAgcmVtb3ZlKHRva2VuOiBzdHJpbmcpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJUZXh0IGV4dGVuZHMgUk5vZGUgeyB0ZXh0Q29udGVudDogc3RyaW5nfG51bGw7IH1cblxuZXhwb3J0IGludGVyZmFjZSBSQ29tbWVudCBleHRlbmRzIFJOb2RlIHsgdGV4dENvbnRlbnQ6IHN0cmluZ3xudWxsOyB9XG5cbi8vIE5vdGU6IFRoaXMgaGFjayBpcyBuZWNlc3Nhcnkgc28gd2UgZG9uJ3QgZXJyb25lb3VzbHkgZ2V0IGEgY2lyY3VsYXIgZGVwZW5kZW5jeVxuLy8gZmFpbHVyZSBiYXNlZCBvbiB0eXBlcy5cbmV4cG9ydCBjb25zdCB1bnVzZWRWYWx1ZUV4cG9ydFRvUGxhY2F0ZUFqZCA9IDE7XG4iXX0=