UNPKG

@selfage/element

Version:

Create vanilla HTML elements/tags with visual structures.

298 lines 42.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.E = exports.ElementFactory = void 0; const ref_1 = require("@selfage/ref"); class ElementFactory { static applyAttributes(ele, attributes) { for (let [key, value] of Object.entries(attributes)) { if (key === "ref") { if (value) { (0, ref_1.assign)(value, ele); } } else if (value != null) { ele.setAttribute(key, value); } } } meta(attributes) { let ele = document.createElement("meta"); ElementFactory.applyAttributes(ele, attributes); return ele; } script(attributes, ...childNodes) { let ele = document.createElement("script"); ElementFactory.applyAttributes(ele, attributes); ele.append(...childNodes); return ele; } text(content = "") { let node = document.createTextNode(content); return node; } h1(attributes, ...childNodes) { let ele = document.createElement("h1"); ElementFactory.applyAttributes(ele, attributes); ele.append(...childNodes); return ele; } h2(attributes, ...childNodes) { let ele = document.createElement("h2"); ElementFactory.applyAttributes(ele, attributes); ele.append(...childNodes); return ele; } h3(attributes, ...childNodes) { let ele = document.createElement("h3"); ElementFactory.applyAttributes(ele, attributes); ele.append(...childNodes); return ele; } h4(attributes, ...childNodes) { let ele = document.createElement("h4"); ElementFactory.applyAttributes(ele, attributes); ele.append(...childNodes); return ele; } h5(attributes, ...childNodes) { let ele = document.createElement("h5"); ElementFactory.applyAttributes(ele, attributes); ele.append(...childNodes); return ele; } h6(attributes, ...childNodes) { let ele = document.createElement("h6"); ElementFactory.applyAttributes(ele, attributes); ele.append(...childNodes); return ele; } p(attributes, ...childNodes) { let ele = document.createElement("p"); ElementFactory.applyAttributes(ele, attributes); ele.append(...childNodes); return ele; } br(attributes) { let ele = document.createElement("br"); ElementFactory.applyAttributes(ele, attributes); return ele; } div(attributes, ...childNodes) { let ele = document.createElement("div"); ElementFactory.applyAttributes(ele, attributes); ele.append(...childNodes); return ele; } span(attributes, ...childNodes) { let ele = document.createElement("span"); ElementFactory.applyAttributes(ele, attributes); ele.append(...childNodes); return ele; } ol(attributes, ...childNodes) { let ele = document.createElement("ol"); ElementFactory.applyAttributes(ele, attributes); ele.append(...childNodes); return ele; } ul(attributes, ...childNodes) { let ele = document.createElement("ul"); ElementFactory.applyAttributes(ele, attributes); ele.append(...childNodes); return ele; } li(attributes, ...childNodes) { let ele = document.createElement("li"); ElementFactory.applyAttributes(ele, attributes); ele.append(...childNodes); return ele; } label(attributes, ...childNodes) { let ele = document.createElement("label"); ElementFactory.applyAttributes(ele, attributes); ele.append(...childNodes); return ele; } image(attributes) { let ele = document.createElement("img"); ElementFactory.applyAttributes(ele, attributes); return ele; } form(attributes, ...childNodes) { let ele = document.createElement("form"); ElementFactory.applyAttributes(ele, attributes); ele.append(...childNodes); return ele; } input(attributes) { let ele = document.createElement("input"); ElementFactory.applyAttributes(ele, attributes); return ele; } textarea(attributes, ...childNodes) { let ele = document.createElement("textarea"); ElementFactory.applyAttributes(ele, attributes); ele.append(...childNodes); return ele; } button(attributes, ...childNodes) { let ele = document.createElement("button"); ElementFactory.applyAttributes(ele, attributes); ele.append(...childNodes); return ele; } a(attributes, ...childNodes) { let ele = document.createElement("a"); ElementFactory.applyAttributes(ele, attributes); ele.append(...childNodes); return ele; } iframe(attributes) { let ele = document.createElement("iframe"); ElementFactory.applyAttributes(ele, attributes); return ele; } video(attributes) { let ele = document.createElement("video"); ElementFactory.applyAttributes(ele, attributes); return ele; } canvas(attributes) { let ele = document.createElement("canvas"); ElementFactory.applyAttributes(ele, attributes); return ele; } svg(attributes, ...childNodes) { let ele = document.createElementNS("http://www.w3.org/2000/svg", "svg"); ElementFactory.applyAttributes(ele, attributes); ele.append(...childNodes); return ele; } svgTitle(attributes, ...childNodes) { let ele = document.createElementNS("http://www.w3.org/2000/svg", "title"); ElementFactory.applyAttributes(ele, attributes); ele.append(...childNodes); return ele; } svgDesc(attributes, ...childNodes) { let ele = document.createElementNS("http://www.w3.org/2000/svg", "desc"); ElementFactory.applyAttributes(ele, attributes); ele.append(...childNodes); return ele; } path(attributes) { let ele = document.createElementNS("http://www.w3.org/2000/svg", "path"); ElementFactory.applyAttributes(ele, attributes); return ele; } circle(attributes) { let ele = document.createElementNS("http://www.w3.org/2000/svg", "circle"); ElementFactory.applyAttributes(ele, attributes); return ele; } ellipse(attributes) { let ele = document.createElementNS("http://www.w3.org/2000/svg", "ellipse"); ElementFactory.applyAttributes(ele, attributes); return ele; } rect(attributes) { let ele = document.createElementNS("http://www.w3.org/2000/svg", "rect"); ElementFactory.applyAttributes(ele, attributes); return ele; } line(attributes) { let ele = document.createElementNS("http://www.w3.org/2000/svg", "line"); ElementFactory.applyAttributes(ele, attributes); return ele; } polygon(attributes) { let ele = document.createElementNS("http://www.w3.org/2000/svg", "polygon"); ElementFactory.applyAttributes(ele, attributes); return ele; } polyline(attributes) { let ele = document.createElementNS("http://www.w3.org/2000/svg", "polyline"); ElementFactory.applyAttributes(ele, attributes); return ele; } g(attributes, ...childNodes) { let ele = document.createElementNS("http://www.w3.org/2000/svg", "g"); ElementFactory.applyAttributes(ele, attributes); ele.append(...childNodes); return ele; } clipPath(attributes, ...childNodes) { let ele = document.createElementNS("http://www.w3.org/2000/svg", "clipPath"); ElementFactory.applyAttributes(ele, attributes); ele.append(...childNodes); return ele; } linearGradient(attributes, ...childNodes) { let ele = document.createElementNS("http://www.w3.org/2000/svg", "linearGradient"); ElementFactory.applyAttributes(ele, attributes); ele.append(...childNodes); return ele; } radialGradient(attributes, ...childNodes) { let ele = document.createElementNS("http://www.w3.org/2000/svg", "radialGradient"); ElementFactory.applyAttributes(ele, attributes); ele.append(...childNodes); return ele; } stop(attributes) { let ele = document.createElementNS("http://www.w3.org/2000/svg", "stop"); ElementFactory.applyAttributes(ele, attributes); return ele; } defs(attributes, ...childNodes) { let ele = document.createElementNS("http://www.w3.org/2000/svg", "defs"); ElementFactory.applyAttributes(ele, attributes); ele.append(...childNodes); return ele; } use(attributes) { let ele = document.createElementNS("http://www.w3.org/2000/svg", "use"); ElementFactory.applyAttributes(ele, attributes); return ele; } header(attributes, ...childNodes) { let ele = document.createElement("header"); ElementFactory.applyAttributes(ele, attributes); ele.append(...childNodes); return ele; } footer(attributes, ...childNodes) { let ele = document.createElement("footer"); ElementFactory.applyAttributes(ele, attributes); ele.append(...childNodes); return ele; } nav(attributes, ...childNodes) { let ele = document.createElement("nav"); ElementFactory.applyAttributes(ele, attributes); ele.append(...childNodes); return ele; } main(attributes, ...childNodes) { let ele = document.createElement("main"); ElementFactory.applyAttributes(ele, attributes); ele.append(...childNodes); return ele; } section(attributes, ...childNodes) { let ele = document.createElement("section"); ElementFactory.applyAttributes(ele, attributes); ele.append(...childNodes); return ele; } article(attributes, ...childNodes) { let ele = document.createElement("article"); ElementFactory.applyAttributes(ele, attributes); ele.append(...childNodes); return ele; } } exports.ElementFactory = ElementFactory; // Use abbreviation only to boost productivity. exports.E = new ElementFactory(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsc0NBQTJDO0FBTzNDLE1BQWEsY0FBYztJQUNqQixNQUFNLENBQUMsZUFBZSxDQUM1QixHQUFZLEVBQ1osVUFBK0I7UUFFL0IsS0FBSyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNwRCxJQUFJLEdBQUcsS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxLQUFLLEVBQUUsQ0FBQztvQkFDVixJQUFBLFlBQU0sRUFBQyxLQUFrQixFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNsQyxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDekIsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsS0FBZSxDQUFDLENBQUM7WUFDekMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU0sSUFBSSxDQUFDLFVBQStCO1FBQ3pDLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDaEQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU0sTUFBTSxDQUNYLFVBQStCLEVBQy9CLEdBQUcsVUFBdUI7UUFFMUIsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyxjQUFjLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNoRCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7UUFDMUIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU0sSUFBSSxD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QUFHLENBQUM7SUFDYixDQUFDO0lBRU0sR0FBRyxDQUNSLFVBQStCLEVBQy9CLEdBQUcsVUFBdUI7UUFFMUIsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxjQUFjLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNoRCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7UUFDMUIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU0sSUFBSSxDQUNULFVBQStCLEVBQy9CLEdBQUcsVUFBdUI7UUFFMUIsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QyxjQUFjLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNoRCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7UUFDMUIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU0sRUFBRSxDQUNQLFVBQStCLEVBQy9CLEdBQUcsVUFBdUI7UUFFMUIsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxjQUFjLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNoRCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7UUFDMUIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU0sRUFBRSxDQUNQLFVBQStCLEVBQy9CLEdBQUcsVUFBdUI7UUFFMUIsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxjQUFjLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNoRCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7UUFDMUIsT0FBTyxHQUFHLENBQUM7SUFD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QyxNQUFNLENBQUMsQ0FBQztRQUN6QyxjQUFjLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNoRCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7UUFDMUIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU0sT0FBTyxDQUNaLFVBQStCLEVBQy9CLEdBQUcsVUFBdUI7UUFFMUIsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QyxjQUFjLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNoRCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7UUFDMUIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU0sT0FBTyxDQUNaLFVBQStCLEVBQy9CLEdBQUcsVUFBdUI7UUFFMUIsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QyxjQUFjLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNoRCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7UUFDMUIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0NBQ0Y7QUFoY0Qsd0NBZ2NDO0FBRUQsK0NBQStDO0FBQ3BDLFFBQUEsQ0FBQyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZWYsIGFzc2lnbiB9IGZyb20gXCJAc2VsZmFnZS9yZWZcIjtcblxuZXhwb3J0IGludGVyZmFjZSBFbGVtZW50QXR0cmlidXRlTWFwIHtcbiAgcmVmPzogUmVmPE5vZGU+O1xuICBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgUmVmPE5vZGU+IHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgRWxlbWVudEZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBhcHBseUF0dHJpYnV0ZXMoXG4gICAgZWxlOiBFbGVtZW50LFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICk6IHZvaWQge1xuICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhdHRyaWJ1dGVzKSkge1xuICAgICAgaWYgKGtleSA9PT0gXCJyZWZcIikge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICBhc3NpZ24odmFsdWUgYXMgUmVmPE5vZGU+LCBlbGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgZWxlLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlIGFzIHN0cmluZyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG1ldGEoYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCk6IEhUTUxNZXRhRWxlbWVudCB7XG4gICAgbGV0IGVsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJtZXRhXCIpO1xuICAgIEVsZW1lbnRGYWN0b3J5LmFwcGx5QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwdWJsaWMgc2NyaXB0KFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICAgLi4uY2hpbGROb2RlczogQXJyYXk8Tm9kZT5cbiAgKTogSFRNTFNjcmlwdEVsZW1lbnQge1xuICAgIGxldCBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgIEVsZW1lbnRGYWN0b3J5LmFwcGx5QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIGVsZS5hcHBlbmQoLi4uY2hpbGROb2Rlcyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHB1YmxpYyB0ZXh0KGNvbnRlbnQgPSBcIlwiKTogVGV4dCB7XG4gICAgbGV0IG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjb250ZW50KTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHB1YmxpYyBoMShcbiAgICBhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwLFxuICAgIC4uLmNoaWxkTm9kZXM6IEFycmF5PE5vZGU+XG4gICk6IEhUTUxIZWFkaW5nRWxlbWVudCB7XG4gICAgbGV0IGVsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJoMVwiKTtcbiAgICBFbGVtZW50RmFjdG9yeS5hcHBseUF0dHJpYnV0ZXMoZWxlLCBhdHRyaWJ1dGVzKTtcbiAgICBlbGUuYXBwZW5kKC4uLmNoaWxkTm9kZXMpO1xuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwdWJsaWMgaDIoXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgICAuLi5jaGlsZE5vZGVzOiBBcnJheTxOb2RlPlxuICApOiBIVE1MSGVhZGluZ0VsZW1lbnQge1xuICAgIGxldCBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaDJcIik7XG4gICAgRWxlbWVudEZhY3RvcnkuYXBwbHlBdHRyaWJ1dGVzKGVsZSwgYXR0cmlidXRlcyk7XG4gICAgZWxlLmFwcGVuZCguLi5jaGlsZE5vZGVzKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgcHVibGljIGgzKFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICAgLi4uY2hpbGROb2RlczogQXJyYXk8Tm9kZT5cbiAgKTogSFRNTEhlYWRpbmdFbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImgzXCIpO1xuICAgIEVsZW1lbnRGYWN0b3J5LmFwcGx5QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIGVsZS5hcHBlbmQoLi4uY2hpbGROb2Rlcyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHB1YmxpYyBoNChcbiAgICBhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwLFxuICAgIC4uLmNoaWxkTm9kZXM6IEFycmF5PE5vZGU+XG4gICk6IEhUTUxIZWFkaW5nRWxlbWVudCB7XG4gICAgbGV0IGVsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJoNFwiKTtcbiAgICBFbGVtZW50RmFjdG9yeS5hcHBseUF0dHJpYnV0ZXMoZWxlLCBhdHRyaWJ1dGVzKTtcbiAgICBlbGUuYXBwZW5kKC4uLmNoaWxkTm9kZXMpO1xuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwdWJsaWMgaDUoXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgICAuLi5jaGlsZE5vZGVzOiBBcnJheTxOb2RlPlxuICApOiBIVE1MSGVhZGluZ0VsZW1lbnQge1xuICAgIGxldCBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaDVcIik7XG4gICAgRWxlbWVudEZhY3RvcnkuYXBwbHlBdHRyaWJ1dGVzKGVsZSwgYXR0cmlidXRlcyk7XG4gICAgZWxlLmFwcGVuZCguLi5jaGlsZE5vZGVzKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgcHVibGljIGg2KFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICAgLi4uY2hpbGROb2RlczogQXJyYXk8Tm9kZT5cbiAgKTogSFRNTEhlYWRpbmdFbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImg2XCIpO1xuICAgIEVsZW1lbnRGYWN0b3J5LmFwcGx5QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIGVsZS5hcHBlbmQoLi4uY2hpbGROb2Rlcyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHB1YmxpYyBwKFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICAgLi4uY2hpbGROb2RlczogQXJyYXk8Tm9kZT5cbiAgKTogSFRNTFBhcmFncmFwaEVsZW1lbnQge1xuICAgIGxldCBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcbiAgICBFbGVtZW50RmFjdG9yeS5hcHBseUF0dHJpYnV0ZXMoZWxlLCBhdHRyaWJ1dGVzKTtcbiAgICBlbGUuYXBwZW5kKC4uLmNoaWxkTm9kZXMpO1xuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwdWJsaWMgYnIoYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCk6IEhUTUxCUkVsZW1lbnQge1xuICAgIGxldCBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnJcIik7XG4gICAgRWxlbWVudEZhY3RvcnkuYXBwbHlBdHRyaWJ1dGVzKGVsZSwgYXR0cmlidXRlcyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHB1YmxpYyBkaXYoXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgICAuLi5jaGlsZE5vZGVzOiBBcnJheTxOb2RlPlxuICApOiBIVE1MRGl2RWxlbWVudCB7XG4gICAgbGV0IGVsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgRWxlbWVudEZhY3RvcnkuYXBwbHlBdHRyaWJ1dGVzKGVsZSwgYXR0cmlidXRlcyk7XG4gICAgZWxlLmFwcGVuZCguLi5jaGlsZE5vZGVzKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgcHVibGljIHNwYW4oXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgICAuLi5jaGlsZE5vZGVzOiBBcnJheTxOb2RlPlxuICApOiBIVE1MU3BhbkVsZW1lbnQge1xuICAgIGxldCBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcbiAgICBFbGVtZW50RmFjdG9yeS5hcHBseUF0dHJpYnV0ZXMoZWxlLCBhdHRyaWJ1dGVzKTtcbiAgICBlbGUuYXBwZW5kKC4uLmNoaWxkTm9kZXMpO1xuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwdWJsaWMgb2woXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgICAuLi5jaGlsZE5vZGVzOiBBcnJheTxOb2RlPlxuICApOiBIVE1MT0xpc3RFbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm9sXCIpO1xuICAgIEVsZW1lbnRGYWN0b3J5LmFwcGx5QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIGVsZS5hcHBlbmQoLi4uY2hpbGROb2Rlcyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHB1YmxpYyB1bChcbiAgICBhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwLFxuICAgIC4uLmNoaWxkTm9kZXM6IEFycmF5PE5vZGU+XG4gICk6IEhUTUxVTGlzdEVsZW1lbnQge1xuICAgIGxldCBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidWxcIik7XG4gICAgRWxlbWVudEZhY3RvcnkuYXBwbHlBdHRyaWJ1dGVzKGVsZSwgYXR0cmlidXRlcyk7XG4gICAgZWxlLmFwcGVuZCguLi5jaGlsZE5vZGVzKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgcHVibGljIGxpKFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICAgLi4uY2hpbGROb2RlczogQXJyYXk8Tm9kZT5cbiAgKTogSFRNTExJRWxlbWVudCB7XG4gICAgbGV0IGVsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaVwiKTtcbiAgICBFbGVtZW50RmFjdG9yeS5hcHBseUF0dHJpYnV0ZXMoZWxlLCBhdHRyaWJ1dGVzKTtcbiAgICBlbGUuYXBwZW5kKC4uLmNoaWxkTm9kZXMpO1xuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwdWJsaWMgbGFiZWwoXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgICAuLi5jaGlsZE5vZGVzOiBBcnJheTxOb2RlPlxuICApOiBIVE1MTGFiZWxFbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxhYmVsXCIpO1xuICAgIEVsZW1lbnRGYWN0b3J5LmFwcGx5QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIGVsZS5hcHBlbmQoLi4uY2hpbGROb2Rlcyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHB1YmxpYyBpbWFnZShhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwKTogSFRNTEltYWdlRWxlbWVudCB7XG4gICAgbGV0IGVsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7XG4gICAgRWxlbWVudEZhY3RvcnkuYXBwbHlBdHRyaWJ1dGVzKGVsZSwgYXR0cmlidXRlcyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHB1YmxpYyBmb3JtKFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICAgLi4uY2hpbGROb2RlczogQXJyYXk8Tm9kZT5cbiAgKTogSFRNTEZvcm1FbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImZvcm1cIik7XG4gICAgRWxlbWVudEZhY3RvcnkuYXBwbHlBdHRyaWJ1dGVzKGVsZSwgYXR0cmlidXRlcyk7XG4gICAgZWxlLmFwcGVuZCguLi5jaGlsZE5vZGVzKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgcHVibGljIGlucHV0KGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXApOiBIVE1MSW5wdXRFbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIEVsZW1lbnRGYWN0b3J5LmFwcGx5QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwdWJsaWMgdGV4dGFyZWEoXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgICAuLi5jaGlsZE5vZGVzOiBBcnJheTxOb2RlPlxuICApOiBIVE1MVGV4dEFyZWFFbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRleHRhcmVhXCIpO1xuICAgIEVsZW1lbnRGYWN0b3J5LmFwcGx5QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIGVsZS5hcHBlbmQoLi4uY2hpbGROb2Rlcyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHB1YmxpYyBidXR0b24oXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgICAuLi5jaGlsZE5vZGVzOiBBcnJheTxOb2RlPlxuICApOiBIVE1MQnV0dG9uRWxlbWVudCB7XG4gICAgbGV0IGVsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIik7XG4gICAgRWxlbWVudEZhY3RvcnkuYXBwbHlBdHRyaWJ1dGVzKGVsZSwgYXR0cmlidXRlcyk7XG4gICAgZWxlLmFwcGVuZCguLi5jaGlsZE5vZGVzKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgcHVibGljIGEoXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgICAuLi5jaGlsZE5vZGVzOiBBcnJheTxOb2RlPlxuICApOiBIVE1MQW5jaG9yRWxlbWVudCB7XG4gICAgbGV0IGVsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xuICAgIEVsZW1lbnRGYWN0b3J5LmFwcGx5QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIGVsZS5hcHBlbmQoLi4uY2hpbGROb2Rlcyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHB1YmxpYyBpZnJhbWUoYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCk6IEhUTUxJRnJhbWVFbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtcbiAgICBFbGVtZW50RmFjdG9yeS5hcHBseUF0dHJpYnV0ZXMoZWxlLCBhdHRyaWJ1dGVzKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgcHVibGljIHZpZGVvKGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXApOiBIVE1MVmlkZW9FbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInZpZGVvXCIpO1xuICAgIEVsZW1lbnRGYWN0b3J5LmFwcGx5QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwdWJsaWMgY2FudmFzKGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXApOiBIVE1MQ2FudmFzRWxlbWVudCB7XG4gICAgbGV0IGVsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgRWxlbWVudEZhY3RvcnkuYXBwbHlBdHRyaWJ1dGVzKGVsZSwgYXR0cmlidXRlcyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHB1YmxpYyBzdmcoXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgICAuLi5jaGlsZE5vZGVzOiBBcnJheTxTVkdFbGVtZW50PlxuICApOiBTVkdTVkdFbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJzdmdcIik7XG4gICAgRWxlbWVudEZhY3RvcnkuYXBwbHlBdHRyaWJ1dGVzKGVsZSwgYXR0cmlidXRlcyk7XG4gICAgZWxlLmFwcGVuZCguLi5jaGlsZE5vZGVzKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgcHVibGljIHN2Z1RpdGxlKFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICAgLi4uY2hpbGROb2RlczogQXJyYXk8Tm9kZT5cbiAgKTogU1ZHVGl0bGVFbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJ0aXRsZVwiKTtcbiAgICBFbGVtZW50RmFjdG9yeS5hcHBseUF0dHJpYnV0ZXMoZWxlLCBhdHRyaWJ1dGVzKTtcbiAgICBlbGUuYXBwZW5kKC4uLmNoaWxkTm9kZXMpO1xuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwdWJsaWMgc3ZnRGVzYyhcbiAgICBhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwLFxuICAgIC4uLmNoaWxkTm9kZXM6IEFycmF5PE5vZGU+XG4gICk6IFNWR0Rlc2NFbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJkZXNjXCIpO1xuICAgIEVsZW1lbnRGYWN0b3J5LmFwcGx5QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIGVsZS5hcHBlbmQoLi4uY2hpbGROb2Rlcyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHB1YmxpYyBwYXRoKGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXApOiBTVkdQYXRoRWxlbWVudCB7XG4gICAgbGV0IGVsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwicGF0aFwiKTtcbiAgICBFbGVtZW50RmFjdG9yeS5hcHBseUF0dHJpYnV0ZXMoZWxlLCBhdHRyaWJ1dGVzKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgcHVibGljIGNpcmNsZShhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwKTogU1ZHQ2lyY2xlRWxlbWVudCB7XG4gICAgbGV0IGVsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwiY2lyY2xlXCIpO1xuICAgIEVsZW1lbnRGYWN0b3J5LmFwcGx5QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwdWJsaWMgZWxsaXBzZShhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwKTogU1ZHRWxsaXBzZUVsZW1lbnQge1xuICAgIGxldCBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcImVsbGlwc2VcIik7XG4gICAgRWxlbWVudEZhY3RvcnkuYXBwbHlBdHRyaWJ1dGVzKGVsZSwgYXR0cmlidXRlcyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHB1YmxpYyByZWN0KGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXApOiBTVkdSZWN0RWxlbWVudCB7XG4gICAgbGV0IGVsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwicmVjdFwiKTtcbiAgICBFbGVtZW50RmFjdG9yeS5hcHBseUF0dHJpYnV0ZXMoZWxlLCBhdHRyaWJ1dGVzKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgcHVibGljIGxpbmUoYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCk6IFNWR0xpbmVFbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJsaW5lXCIpO1xuICAgIEVsZW1lbnRGYWN0b3J5LmFwcGx5QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwdWJsaWMgcG9seWdvbihhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwKTogU1ZHUG9seWdvbkVsZW1lbnQge1xuICAgIGxldCBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInBvbHlnb25cIik7XG4gICAgRWxlbWVudEZhY3RvcnkuYXBwbHlBdHRyaWJ1dGVzKGVsZSwgYXR0cmlidXRlcyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHB1YmxpYyBwb2x5bGluZShhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwKTogU1ZHUG9seWxpbmVFbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgXCJwb2x5bGluZVwiLFxuICAgICk7XG4gICAgRWxlbWVudEZhY3RvcnkuYXBwbHlBdHRyaWJ1dGVzKGVsZSwgYXR0cmlidXRlcyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHB1YmxpYyBnKFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICAgLi4uY2hpbGROb2RlczogQXJyYXk8U1ZHRWxlbWVudD5cbiAgKTogU1ZHR0VsZW1lbnQge1xuICAgIGxldCBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcImdcIik7XG4gICAgRWxlbWVudEZhY3RvcnkuYXBwbHlBdHRyaWJ1dGVzKGVsZSwgYXR0cmlidXRlcyk7XG4gICAgZWxlLmFwcGVuZCguLi5jaGlsZE5vZGVzKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgcHVibGljIGNsaXBQYXRoKFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICAgLi4uY2hpbGROb2RlczogQXJyYXk8U1ZHRWxlbWVudD5cbiAgKTogU1ZHQ2xpcFBhdGhFbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgXCJjbGlwUGF0aFwiLFxuICAgICk7XG4gICAgRWxlbWVudEZhY3RvcnkuYXBwbHlBdHRyaWJ1dGVzKGVsZSwgYXR0cmlidXRlcyk7XG4gICAgZWxlLmFwcGVuZCguLi5jaGlsZE5vZGVzKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgcHVibGljIGxpbmVhckdyYWRpZW50KFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICAgLi4uY2hpbGROb2RlczogQXJyYXk8U1ZHRWxlbWVudD5cbiAgKTogU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICk7XG4gICAgRWxlbWVudEZhY3RvcnkuYXBwbHlBdHRyaWJ1dGVzKGVsZSwgYXR0cmlidXRlcyk7XG4gICAgZWxlLmFwcGVuZCguLi5jaGlsZE5vZGVzKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgcHVibGljIHJhZGlhbEdyYWRpZW50KFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICAgLi4uY2hpbGROb2RlczogQXJyYXk8U1ZHRWxlbWVudD5cbiAgKTogU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgXCJyYWRpYWxHcmFkaWVudFwiLFxuICAgICk7XG4gICAgRWxlbWVudEZhY3RvcnkuYXBwbHlBdHRyaWJ1dGVzKGVsZSwgYXR0cmlidXRlcyk7XG4gICAgZWxlLmFwcGVuZCguLi5jaGlsZE5vZGVzKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgcHVibGljIHN0b3AoYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCk6IFNWR1N0b3BFbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJzdG9wXCIpO1xuICAgIEVsZW1lbnRGYWN0b3J5LmFwcGx5QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwdWJsaWMgZGVmcyhcbiAgICBhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwLFxuICAgIC4uLmNoaWxkTm9kZXM6IEFycmF5PFNWR0VsZW1lbnQ+XG4gICk6IFNWR0RlZnNFbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJkZWZzXCIpO1xuICAgIEVsZW1lbnRGYWN0b3J5LmFwcGx5QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIGVsZS5hcHBlbmQoLi4uY2hpbGROb2Rlcyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHB1YmxpYyB1c2UoYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCk6IFNWR1VzZUVsZW1lbnQge1xuICAgIGxldCBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInVzZVwiKTtcbiAgICBFbGVtZW50RmFjdG9yeS5hcHBseUF0dHJpYnV0ZXMoZWxlLCBhdHRyaWJ1dGVzKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgcHVibGljIGhlYWRlcihcbiAgICBhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwLFxuICAgIC4uLmNoaWxkTm9kZXM6IEFycmF5PE5vZGU+XG4gICk6IEhUTUxFbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImhlYWRlclwiKTtcbiAgICBFbGVtZW50RmFjdG9yeS5hcHBseUF0dHJpYnV0ZXMoZWxlLCBhdHRyaWJ1dGVzKTtcbiAgICBlbGUuYXBwZW5kKC4uLmNoaWxkTm9kZXMpO1xuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwdWJsaWMgZm9vdGVyKFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICAgLi4uY2hpbGROb2RlczogQXJyYXk8Tm9kZT5cbiAgKTogSFRNTEVsZW1lbnQge1xuICAgIGxldCBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZm9vdGVyXCIpO1xuICAgIEVsZW1lbnRGYWN0b3J5LmFwcGx5QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIGVsZS5hcHBlbmQoLi4uY2hpbGROb2Rlcyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHB1YmxpYyBuYXYoXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgICAuLi5jaGlsZE5vZGVzOiBBcnJheTxOb2RlPlxuICApOiBIVE1MRWxlbWVudCB7XG4gICAgbGV0IGVsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJuYXZcIik7XG4gICAgRWxlbWVudEZhY3RvcnkuYXBwbHlBdHRyaWJ1dGVzKGVsZSwgYXR0cmlidXRlcyk7XG4gICAgZWxlLmFwcGVuZCguLi5jaGlsZE5vZGVzKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgcHVibGljIG1haW4oXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgICAuLi5jaGlsZE5vZGVzOiBBcnJheTxOb2RlPlxuICApOiBIVE1MRWxlbWVudCB7XG4gICAgbGV0IGVsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJtYWluXCIpO1xuICAgIEVsZW1lbnRGYWN0b3J5LmFwcGx5QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIGVsZS5hcHBlbmQoLi4uY2hpbGROb2Rlcyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHB1YmxpYyBzZWN0aW9uKFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICAgLi4uY2hpbGROb2RlczogQXJyYXk8Tm9kZT5cbiAgKTogSFRNTEVsZW1lbnQge1xuICAgIGxldCBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2VjdGlvblwiKTtcbiAgICBFbGVtZW50RmFjdG9yeS5hcHBseUF0dHJpYnV0ZXMoZWxlLCBhdHRyaWJ1dGVzKTtcbiAgICBlbGUuYXBwZW5kKC4uLmNoaWxkTm9kZXMpO1xuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwdWJsaWMgYXJ0aWNsZShcbiAgICBhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwLFxuICAgIC4uLmNoaWxkTm9kZXM6IEFycmF5PE5vZGU+XG4gICk6IEhUTUxFbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFydGljbGVcIik7XG4gICAgRWxlbWVudEZhY3RvcnkuYXBwbHlBdHRyaWJ1dGVzKGVsZSwgYXR0cmlidXRlcyk7XG4gICAgZWxlLmFwcGVuZCguLi5jaGlsZE5vZGVzKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG59XG5cbi8vIFVzZSBhYmJyZXZpYXRpb24gb25seSB0byBib29zdCBwcm9kdWN0aXZpdHkuXG5leHBvcnQgbGV0IEUgPSBuZXcgRWxlbWVudEZhY3RvcnkoKTtcbiJdfQ==