super-hero/extensions/shader-graph/dist/block-forge/module/forge.js

148 lines
19 KiB
JavaScript

'use strict';
Object.defineProperty(exports, "__esModule", { value: true });
exports.Pin = exports.PinD = exports.Block = exports.Graph = exports.Forge = void 0;
const block_1 = require("../block");
const graphWeakMap = new WeakMap();
const blockWeakMap = new WeakMap();
const pinWeakMap = new WeakMap();
class Forge {
constructor(graph) {
this.rootGraphData = graph;
}
get details() {
return this.rootGraphData.details;
}
getGraph() {
const graphData = this.rootGraphData;
if (!graphWeakMap.has(graphData)) {
graphWeakMap.set(graphData, new Graph(graphData));
}
return graphWeakMap.get(graphData);
}
}
exports.Forge = Forge;
class Graph {
constructor(graph) {
this.graph = graph;
// 生成数据
this.getBlockMap();
// 整理 line 数据
const nodeMap = this.graph.nodes;
const lineMap = this.graph.lines;
for (const uuid in lineMap) {
const line = lineMap[uuid];
const inputNode = nodeMap[line.input.node];
const outputNode = nodeMap[line.output.node];
const inputBlock = blockWeakMap.get(inputNode);
const outputBlock = blockWeakMap.get(outputNode);
inputBlock?.getOutputPinsList();
outputBlock?.getInputPinsList();
const inputPin = inputBlock?.getOutputPin(line.input.param);
const outPin = outputBlock?.getInputPin(line.output.param);
if (outPin) {
inputPin.connectPins.push(outPin);
}
if (inputPin) {
outPin.connectPins.push(inputPin);
}
}
}
get details() {
return this.graph.details;
}
getSubGraphMap() {
const data = {};
for (const uuid in this.graph.graphs) {
const graphData = this.graph.graphs[uuid];
if (!graphWeakMap.has(graphData)) {
graphWeakMap.set(graphData, new Graph(graphData));
}
const graph = graphWeakMap.get(graphData);
data[uuid] = graph;
}
return data;
}
getBlockMap() {
const data = {};
for (const uuid in this.graph.nodes) {
const blockData = this.graph.nodes[uuid];
if (!blockWeakMap.has(blockData)) {
blockWeakMap.set(blockData, new Block(this, uuid, blockData));
}
const block = blockWeakMap.get(blockData);
data[uuid] = block;
}
return data;
}
}
exports.Graph = Graph;
class Block {
constructor(graph, uuid, block) {
this.graph = graph;
this.uuid = uuid;
this.block = block;
this.desc = block_1.blockMap.get(this.block.type);
this.getInputPinsList();
this.getOutputPinsList();
}
get details() {
return this.block.details;
}
getInputPin(tag) {
const inputPins = this.desc?.inputPins || [];
for (let index = 0; index < inputPins.length; index++) {
const pinDesc = inputPins[index];
if (pinDesc.tag === tag) {
const pin = this.block.details.inputPins[index];
return pinWeakMap.get(pin);
}
}
}
getOutputPin(tag) {
const outputPins = this.desc?.outputPins || [];
for (let index = 0; index < outputPins.length; index++) {
const pin = outputPins[index];
if (pin.tag === tag) {
const pin = this.block.details.outputPins[index];
return pinWeakMap.get(pin);
}
}
}
getInputPinsList() {
const inputPins = this.block.details.inputPins || [];
const blockDesc = this.desc || { inputPins: [] };
return inputPins.map((pinData, index) => {
if (!pinWeakMap.has(pinData)) {
pinWeakMap.set(pinData, new Pin(PinD.input, this, pinData, blockDesc.inputPins[index]));
}
return pinWeakMap.get(pinData);
});
}
getOutputPinsList() {
const outputPins = this.block.details.outputPins || [];
const blockDesc = this.desc || { outputPins: [] };
return outputPins.map((pinData, index) => {
if (!pinWeakMap.has(pinData)) {
pinWeakMap.set(pinData, new Pin(PinD.output, this, pinData, blockDesc.outputPins[index]));
}
return pinWeakMap.get(pinData);
});
}
}
exports.Block = Block;
var PinD;
(function (PinD) {
PinD[PinD["input"] = 0] = "input";
PinD[PinD["output"] = 1] = "output";
})(PinD = exports.PinD || (exports.PinD = {}));
class Pin {
constructor(dir, block, pin, desc) {
this.connectPins = [];
this.type = dir;
this.block = block;
this.desc = desc;
this.value = pin;
}
}
exports.Pin = Pin;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmxvY2stZm9yZ2UvbW9kdWxlL2ZvcmdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7O0FBSWIsb0NBQW9DO0FBRXBDLE1BQU0sWUFBWSxHQUE4QixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQzlELE1BQU0sWUFBWSxHQUE4QixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQzlELE1BQU0sVUFBVSxHQUEwQixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBRXhELE1BQWEsS0FBSztJQUdkLFlBQVksS0FBZ0I7UUFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7SUFDdEMsQ0FBQztJQUVELFFBQVE7UUFDSixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzlCLFlBQVksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDckQ7UUFDRCxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFFLENBQUM7SUFDeEMsQ0FBQztDQUNKO0FBbEJELHNCQWtCQztBQUVELE1BQWEsS0FBSztJQUdkLFlBQVksS0FBZ0I7UUFDeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsT0FBTztRQUNQLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVuQixhQUFhO1FBQ2IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDakMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFD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QUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDN0Y7WUFDRCxPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFFLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0o7QUFsRUQsc0JBa0VDO0FBRUQsSUFBWSxJQUdYO0FBSEQsV0FBWSxJQUFJO0lBQ1osaUNBQU8sQ0FBQTtJQUNQLG1DQUFRLENBQUE7QUFDWixDQUFDLEVBSFcsSUFBSSxHQUFKLFlBQUksS0FBSixZQUFJLFFBR2Y7QUFFRCxNQUFhLEdBQUc7SUFTWixZQUFZLEdBQVMsRUFBRSxLQUFZLEVBQUUsR0FBWSxFQUFFLElBQXFCO1FBRnhFLGdCQUFXLEdBQVUsRUFBRSxDQUFDO1FBR3BCLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0lBQ3JCLENBQUM7Q0FDSjtBQWZELGtCQWVDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7IEJsb2NrRGF0YSwgR3JhcGhEYXRhLCBQaW5EYXRhLCBJUGluRGVzY3JpcHRpb24sIElCbG9ja0Rlc2NyaXB0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlJztcblxuaW1wb3J0IHsgYmxvY2tNYXAgfSBmcm9tICcuLi9ibG9jayc7XG5cbmNvbnN0IGdyYXBoV2Vha01hcDogV2Vha01hcDxHcmFwaERhdGEsIEdyYXBoPiA9IG5ldyBXZWFrTWFwKCk7XG5jb25zdCBibG9ja1dlYWtNYXA6IFdlYWtNYXA8QmxvY2tEYXRhLCBCbG9jaz4gPSBuZXcgV2Vha01hcCgpO1xuY29uc3QgcGluV2Vha01hcDogV2Vha01hcDxQaW5EYXRhLCBQaW4+ID0gbmV3IFdlYWtNYXAoKTtcblxuZXhwb3J0IGNsYXNzIEZvcmdlIHtcbiAgICByb290R3JhcGhEYXRhOiBHcmFwaERhdGE7XG5cbiAgICBjb25zdHJ1Y3RvcihncmFwaDogR3JhcGhEYXRhKSB7XG4gICAgICAgIHRoaXMucm9vdEdyYXBoRGF0YSA9IGdyYXBoO1xuICAgIH1cblxuICAgIGdldCBkZXRhaWxzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yb290R3JhcGhEYXRhLmRldGFpbHM7XG4gICAgfVxuXG4gICAgZ2V0R3JhcGgoKSB7XG4gICAgICAgIGNvbnN0IGdyYXBoRGF0YSA9IHRoaXMucm9vdEdyYXBoRGF0YTtcbiAgICAgICAgaWYgKCFncmFwaFdlYWtNYXAuaGFzKGdyYXBoRGF0YSkpIHtcbiAgICAgICAgICAgIGdyYXBoV2Vha01hcC5zZXQoZ3JhcGhEYXRhLCBuZXcgR3JhcGgoZ3JhcGhEYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdyYXBoV2Vha01hcC5nZXQoZ3JhcGhEYXRhKSE7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR3JhcGgge1xuICAgIGdyYXBoOiBHcmFwaERhdGE7XG5cbiAgICBjb25zdHJ1Y3RvcihncmFwaDogR3JhcGhEYXRhKSB7XG4gICAgICAgIHRoaXMuZ3JhcGggPSBncmFwaDtcblxuICAgICAgICAvLyDnlJ/miJDmlbDmja5cbiAgICAgICAgdGhpcy5nZXRCbG9ja01hcCgpO1xuXG4gICAgICAgIC8vIOaVtOeQhiBsaW5lIOaVsOaNrlxuICAgICAgICBjb25zdCBub2RlTWFwID0gdGhpcy5ncmFwaC5ub2RlcztcbiAgICAgICAgY29uc3QgbGluZU1hcCA9IHRoaXMuZ3JhcGgubGluZXM7XG4gICAgICAgIGZvciAoY29uc3QgdXVpZCBpbiBsaW5lTWFwKSB7XG4gICAgICAgICAgICBjb25zdCBsaW5lID0gbGluZU1hcFt1dWlkXTtcblxuICAgICAgICAgICAgY29uc3QgaW5wdXROb2RlID0gbm9kZU1hcFtsaW5lLmlucHV0Lm5vZGVdO1xuICAgICAgICAgICAgY29uc3Qgb3V0cHV0Tm9kZSA9IG5vZGVNYXBbbGluZS5vdXRwdXQubm9kZV07XG5cbiAgICAgICAgICAgIGNvbnN0IGlucHV0QmxvY2sgPSBibG9ja1dlYWtNYXAuZ2V0KGlucHV0Tm9kZSk7XG4gICAgICAgICAgICBjb25zdCBvdXRwdXRCbG9jayA9IGJsb2NrV2Vha01hcC5nZXQob3V0cHV0Tm9kZSk7XG5cbiAgICAgICAgICAgIGlucHV0QmxvY2s/LmdldE91dHB1dFBpbnNMaXN0KCk7XG4gICAgICAgICAgICBvdXRwdXRCbG9jaz8uZ2V0SW5wdXRQaW5zTGlzdCgpO1xuICAgICAgICAgICAgY29uc3QgaW5wdXRQaW4gPSBpbnB1dEJsb2NrPy5nZXRPdXRwdXRQaW4obGluZS5pbnB1dC5wYXJhbSk7XG4gICAgICAgICAgICBjb25zdCBvdXRQaW4gPSBvdXRwdXRCbG9jaz8uZ2V0SW5wdXRQaW4obGluZS5vdXRwdXQucGFyYW0pO1xuXG4gICAgICAgICAgICBpZiAob3V0UGluKSB7XG4gICAgICAgICAgICAgICAgaW5wdXRQaW4hLmNvbm5lY3RQaW5zLnB1c2gob3V0UGluKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbnB1dFBpbikge1xuICAgICAgICAgICAgICAgIG91dFBpbiEuY29ubmVjdFBpbnMucHVzaChpbnB1dFBpbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgZGV0YWlscygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JhcGguZGV0YWlscztcbiAgICB9XG5cbiAgICBnZXRTdWJHcmFwaE1hcCgpIHtcbiAgICAgICAgY29uc3QgZGF0YTogeyBbdXVpZDogc3RyaW5nXTogR3JhcGggfSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHV1aWQgaW4gdGhpcy5ncmFwaC5ncmFwaHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGdyYXBoRGF0YSA9IHRoaXMuZ3JhcGguZ3JhcGhzW3V1aWRdO1xuICAgICAgICAgICAgaWYgKCFncmFwaFdlYWtNYXAuaGFzKGdyYXBoRGF0YSkpIHtcbiAgICAgICAgICAgICAgICBncmFwaFdlYWtNYXAuc2V0KGdyYXBoRGF0YSwgbmV3IEdyYXBoKGdyYXBoRGF0YSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZ3JhcGggPSBncmFwaFdlYWtNYXAuZ2V0KGdyYXBoRGF0YSkhO1xuICAgICAgICAgICAgZGF0YVt1dWlkXSA9IGdyYXBoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGdldEJsb2NrTWFwKCkge1xuICAgICAgICBjb25zdCBkYXRhOiB7IFt1dWlkOiBzdHJpbmddOiBCbG9jayB9ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgdXVpZCBpbiB0aGlzLmdyYXBoLm5vZGVzKSB7XG4gICAgICAgICAgICBjb25zdCBibG9ja0RhdGEgPSB0aGlzLmdyYXBoLm5vZGVzW3V1aWRdO1xuICAgICAgICAgICAgaWYgKCFibG9ja1dlYWtNYXAuaGFzKGJsb2NrRGF0YSkpIHtcbiAgICAgICAgICAgICAgICBibG9ja1dlYWtNYXAuc2V0KGJsb2NrRGF0YSwgbmV3IEJsb2NrKHRoaXMsIHV1aWQsIGJsb2NrRGF0YSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja1dlYWtNYXAuZ2V0KGJsb2NrRGF0YSkhO1xuICAgICAgICAgICAgZGF0YVt1dWlkXSA9IGJsb2NrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJsb2NrIHtcbiAgICB1dWlkOiBzdHJpbmc7XG4gICAgZ3JhcGg6IEdyYXBoO1xuICAgIGJsb2NrOiBCbG9ja0RhdGE7XG4gICAgZGVzYz86IElCbG9ja0Rlc2NyaXB0aW9uO1xuXG4gICAgY29uc3RydWN0b3IoZ3JhcGg6IEdyYXBoLCB1dWlkOiBzdHJpbmcsIGJsb2NrOiBCbG9ja0RhdGEpIHtcbiAgICAgICAgdGhpcy5ncmFwaCA9IGdyYXBoO1xuICAgICAgICB0aGlzLnV1aWQgPSB1dWlkO1xuICAgICAgICB0aGlzLmJsb2NrID0gYmxvY2s7XG4gICAgICAgIHRoaXMuZGVzYyA9IGJsb2NrTWFwLmdldCh0aGlzLmJsb2NrLnR5cGUpO1xuXG4gICAgICAgIHRoaXMuZ2V0SW5wdXRQaW5zTGlzdCgpO1xuICAgICAgICB0aGlzLmdldE91dHB1dFBpbnNMaXN0KCk7XG4gICAgfVxuXG4gICAgZ2V0IGRldGFpbHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJsb2NrLmRldGFpbHM7XG4gICAgfVxuXG4gICAgZ2V0SW5wdXRQaW4odGFnOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgaW5wdXRQaW5zID0gdGhpcy5kZXNjPy5pbnB1dFBpbnMgfHwgW107XG5cbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGlucHV0UGlucy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBpbkRlc2MgPSBpbnB1dFBpbnNbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKHBpbkRlc2MudGFnID09PSB0YWcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwaW4gPSB0aGlzLmJsb2NrLmRldGFpbHMuaW5wdXRQaW5zIVtpbmRleF07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBpbldlYWtNYXAuZ2V0KHBpbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRPdXRwdXRQaW4odGFnOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgb3V0cHV0UGlucyA9IHRoaXMuZGVzYz8ub3V0cHV0UGlucyB8fCBbXTtcblxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgb3V0cHV0UGlucy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBpbiA9IG91dHB1dFBpbnNbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKHBpbi50YWcgPT09IHRhZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBpbiA9IHRoaXMuYmxvY2suZGV0YWlscy5vdXRwdXRQaW5zIVtpbmRleF07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBpbldlYWtNYXAuZ2V0KHBpbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRJbnB1dFBpbnNMaXN0KCkge1xuICAgICAgICBjb25zdCBpbnB1dFBpbnMgPSB0aGlzLmJsb2NrLmRldGFpbHMuaW5wdXRQaW5zIHx8IFtdO1xuICAgICAgICBjb25zdCBibG9ja0Rlc2MgPSB0aGlzLmRlc2MgfHwge2lucHV0UGluczogW119O1xuXG4gICAgICAgIHJldHVybiBpbnB1dFBpbnMubWFwKChwaW5EYXRhLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFwaW5XZWFrTWFwLmhhcyhwaW5EYXRhKSkge1xuICAgICAgICAgICAgICAgIHBpbldlYWtNYXAuc2V0KHBpbkRhdGEsIG5ldyBQaW4oUGluRC5pbnB1dCwgdGhpcywgcGluRGF0YSwgYmxvY2tEZXNjLmlucHV0UGluc1tpbmRleF0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwaW5XZWFrTWFwLmdldChwaW5EYXRhKSE7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldE91dHB1dFBpbnNMaXN0KCkge1xuICAgICAgICBjb25zdCBvdXRwdXRQaW5zID0gdGhpcy5ibG9jay5kZXRhaWxzLm91dHB1dFBpbnMgfHwgW107XG4gICAgICAgIGNvbnN0IGJsb2NrRGVzYyA9IHRoaXMuZGVzYyB8fCB7b3V0cHV0UGluczogW119O1xuICAgICAgICByZXR1cm4gb3V0cHV0UGlucy5tYXAoKHBpbkRhdGEsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXBpbldlYWtNYXAuaGFzKHBpbkRhdGEpKSB7XG4gICAgICAgICAgICAgICAgcGluV2Vha01hcC5zZXQocGluRGF0YSwgbmV3IFBpbihQaW5ELm91dHB1dCwgdGhpcywgcGluRGF0YSwgYmxvY2tEZXNjLm91dHB1dFBpbnNbaW5kZXhdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcGluV2Vha01hcC5nZXQocGluRGF0YSkhO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBlbnVtIFBpbkQge1xuICAgICdpbnB1dCcsXG4gICAgJ291dHB1dCcsXG59XG5cbmV4cG9ydCBjbGFzcyBQaW4ge1xuICAgIGJsb2NrOiBCbG9jaztcbiAgICB2YWx1ZTogUGluRGF0YTtcbiAgICBkZXNjOiBJUGluRGVzY3JpcHRpb247XG5cbiAgICB0eXBlOiBQaW5EO1xuXG4gICAgY29ubmVjdFBpbnM6IFBpbltdID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihkaXI6IFBpbkQsIGJsb2NrOiBCbG9jaywgcGluOiBQaW5EYXRhLCBkZXNjOiBJUGluRGVzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy50eXBlID0gZGlyO1xuICAgICAgICB0aGlzLmJsb2NrID0gYmxvY2s7XG4gICAgICAgIHRoaXMuZGVzYyA9IGRlc2M7XG4gICAgICAgIHRoaXMudmFsdWUgPSBwaW47XG4gICAgfVxufVxuXG4vLyBzZXRUaW1lb3V0KCgpID0+IHtcblxuLy8gICAgIGNvbnN0IGZvcmdlID0gbmV3IEZvcmdlKGpzb24pO1xuXG4vLyAgICAgY29uc3QgaWdyYXBoID0gZm9yZ2UuZ2V0R3JhcGgoKTtcbi8vICAgICBjb25zdCBpYmxvY2tNYXAgPSBpZ3JhcGguZ2V0QmxvY2tNYXAoKTtcbi8vICAgICBjb25zdCBpaW5wdXRMaXN0ID0gaWJsb2NrTWFwW09iamVjdC5rZXlzKGlibG9ja01hcClbMF1dLmdldElucHV0UGluc0xpc3QoKTtcbi8vICAgICBpaW5wdXRMaXN0O1xuXG4vLyAgICAgY29uc3QgY29ubmVjdFBpbiA9IGlpbnB1dExpc3RbMF0uY29ubmVjdFBpbjtcblxuLy8gfSwgMjAwMCk7XG4iXX0=