webglimpse
Version:
Webglimpse is a data visualization library for the web.
92 lines • 16.4 kB
JavaScript
import { Side } from '../misc';
import { hasval } from '../util/util';
export function newTimelineLayout(axisHeight) {
return {
updatePrefSize: function (parentPrefSize, children) {
let topAxis = null;
let bottomAxis = null;
let center = null;
for (let c = 0; c < children.length; c++) {
const child = children[c];
switch (child.layoutArg) {
case Side.TOP:
if (hasval(topAxis)) {
throw new Error('Timeline-layout can have at most one top-axis pane');
}
topAxis = child;
break;
case Side.BOTTOM:
if (hasval(bottomAxis)) {
throw new Error('Timeline-layout can have at most one bottom-axis pane');
}
bottomAxis = child;
break;
default:
if (hasval(center)) {
throw new Error('Timeline-layout can have at most one center pane');
}
center = child;
break;
}
}
let hSum = 0;
if (hasval(topAxis)) {
hSum += axisHeight;
}
if (hasval(bottomAxis)) {
hSum += axisHeight;
}
if (hasval(center)) {
if (hasval(center.prefSize.h)) {
hSum += center.prefSize.h;
}
else {
hSum = null;
}
}
parentPrefSize.w = null;
parentPrefSize.h = hSum;
},
updateChildViewports: function (children, parentViewport) {
let topAxis = null;
let bottomAxis = null;
let center = null;
for (let c = 0; c < children.length; c++) {
const child = children[c];
switch (child.layoutArg) {
case Side.TOP:
if (hasval(topAxis)) {
throw new Error('Timeline-layout can have at most one top-axis pane');
}
topAxis = child;
break;
case Side.BOTTOM:
if (hasval(bottomAxis)) {
throw new Error('Timeline-layout can have at most one bottom-axis pane');
}
bottomAxis = child;
break;
default:
if (hasval(center)) {
throw new Error('Timeline-layout can have at most one center pane');
}
center = child;
break;
}
}
if (hasval(topAxis)) {
topAxis.viewport.setRect(parentViewport.i, parentViewport.jEnd - axisHeight, parentViewport.w, axisHeight);
}
if (hasval(bottomAxis)) {
const jBottomMax = (hasval(topAxis) ? topAxis.viewport.j : parentViewport.jEnd) - axisHeight;
bottomAxis.viewport.setRect(parentViewport.i, Math.min(jBottomMax, parentViewport.j), parentViewport.w, axisHeight);
}
if (hasval(center)) {
const jCenterEnd = (hasval(topAxis) ? topAxis.viewport.jStart : parentViewport.jEnd);
const jCenterStart = (hasval(bottomAxis) ? bottomAxis.viewport.jEnd : parentViewport.jStart);
center.viewport.setEdges(parentViewport.iStart, parentViewport.iEnd, jCenterStart, jCenterEnd);
}
}
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZWxpbmVfbGF5b3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3dlYmdsaW1wc2UvdGltZWxpbmUvdGltZWxpbmVfbGF5b3V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStCQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFdEMsTUFBTSxVQUFVLGlCQUFpQixDQUFDLFVBQWtCO0lBRWhELE9BQWU7UUFFWCxjQUFjLEVBQVUsVUFBVSxjQUFvQixFQUFFLFFBQXVCO1lBQzNFLElBQUksT0FBTyxHQUFnQixJQUFJLENBQUM7WUFDaEMsSUFBSSxVQUFVLEdBQWdCLElBQUksQ0FBQztZQUNuQyxJQUFJLE1BQU0sR0FBZ0IsSUFBSSxDQUFDO1lBQy9CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN0QyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFCLFFBQVEsS0FBSyxDQUFDLFNBQVMsRUFBRTtvQkFDckIsS0FBSyxJQUFJLENBQUMsR0FBRzt3QkFDVCxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRTs0QkFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO3lCQUN6RTt3QkFDRCxPQUFPLEdBQUcsS0FBSyxDQUFDO3dCQUNoQixNQUFNO29CQUVWLEtBQUssSUFBSSxDQUFDLE1BQU07d0JBQ1osSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUU7NEJBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQzt5QkFDNUU7d0JBQ0QsVUFBVSxHQUFHLEtBQUssQ0FBQzt3QkFDbkIsTUFBTTtvQkFFVjt3QkFDSSxJQUFJLE1BQU0sQ0FBQyxN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TSxDQUFDLEVBQUU7Z0JBQ2hCLE1BQU0sVUFBVSxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNyRixNQUFNLFlBQVksR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDN0YsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQzthQUNsRztRQUNMLENBQUM7S0FFSixDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoYykgMjAxNCwgTWV0cm9uLCBJbmMuXHJcbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqXHJcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXHJcbiAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcclxuICpcclxuICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxyXG4gKlxyXG4gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXHJcbiAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXHJcbiAqXHJcbiAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzXHJcbiAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0XHJcbiAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cclxuICpcclxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbiAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbiAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcbiAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxyXG4gKi9cclxuaW1wb3J0IHsgTGF5b3V0LCBMYXlvdXRFbnRyeSB9IGZyb20gJy4uL2NvcmUnO1xyXG5pbXBvcnQgeyBTaXplLCBCb3VuZHNVbm1vZGlmaWFibGUgfSBmcm9tICcuLi9ib3VuZHMnO1xyXG5pbXBvcnQgeyBTaWRlIH0gZnJvbSAnLi4vbWlzYyc7XHJcbmltcG9ydCB7IGhhc3ZhbCB9IGZyb20gJy4uL3V0aWwvdXRpbCc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbmV3VGltZWxpbmVMYXlvdXQoYXhpc0hlaWdodDogbnVtYmVyKTogTGF5b3V0IHtcclxuXHJcbiAgICByZXR1cm4gPExheW91dD57XHJcblxyXG4gICAgICAgIHVwZGF0ZVByZWZTaXplOiA8TGF5b3V0PmZ1bmN0aW9uIChwYXJlbnRQcmVmU2l6ZTogU2l6ZSwgY2hpbGRyZW46IExheW91dEVudHJ5W10pIHtcclxuICAgICAgICAgICAgbGV0IHRvcEF4aXM6IExheW91dEVudHJ5ID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IGJvdHRvbUF4aXM6IExheW91dEVudHJ5ID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IGNlbnRlcjogTGF5b3V0RW50cnkgPSBudWxsO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNoaWxkcmVuLmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2NdO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChjaGlsZC5sYXlvdXRBcmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFNpZGUuVE9QOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzdmFsKHRvcEF4aXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RpbWVsaW5lLWxheW91dCBjYW4gaGF2ZSBhdCBtb3N0IG9uZSB0b3AtYXhpcyBwYW5lJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9wQXhpcyA9IGNoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBTaWRlLkJPVFRPTTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc3ZhbChib3R0b21BeGlzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaW1lbGluZS1sYXlvdXQgY2FuIGhhdmUgYXQgbW9zdCBvbmUgYm90dG9tLWF4aXMgcGFuZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvdHRvbUF4aXMgPSBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXN2YWwoY2VudGVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaW1lbGluZS1sYXlvdXQgY2FuIGhhdmUgYXQgbW9zdCBvbmUgY2VudGVyIHBhbmUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjZW50ZXIgPSBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBoU3VtID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmIChoYXN2YWwodG9wQXhpcykpIHtcclxuICAgICAgICAgICAgICAgIGhTdW0gKz0gYXhpc0hlaWdodDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGhhc3ZhbChib3R0b21BeGlzKSkge1xyXG4gICAgICAgICAgICAgICAgaFN1bSArPSBheGlzSGVpZ2h0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaGFzdmFsKGNlbnRlcikpIHtcclxuICAgICAgICAgICAgICAgIGlmIChoYXN2YWwoY2VudGVyLnByZWZTaXplLmgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaFN1bSArPSBjZW50ZXIucHJlZlNpemUuaDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGhTdW0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBwYXJlbnRQcmVmU2l6ZS53ID0gbnVsbDtcclxuICAgICAgICAgICAgcGFyZW50UHJlZlNpemUuaCA9IGhTdW07XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgdXBkYXRlQ2hpbGRWaWV3cG9ydHM6IGZ1bmN0aW9uIChjaGlsZHJlbjogTGF5b3V0RW50cnlbXSwgcGFyZW50Vmlld3BvcnQ6IEJvdW5kc1VubW9kaWZpYWJsZSkge1xyXG4gICAgICAgICAgICBsZXQgdG9wQXhpczogTGF5b3V0RW50cnkgPSBudWxsO1xyXG4gICAgICAgICAgICBsZXQgYm90dG9tQXhpczogTGF5b3V0RW50cnkgPSBudWxsO1xyXG4gICAgICAgICAgICBsZXQgY2VudGVyOiBMYXlvdXRFbnRyeSA9IG51bGw7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY2hpbGRyZW4ubGVuZ3RoOyBjKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5bY107XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGNoaWxkLmxheW91dEFyZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgU2lkZS5UT1A6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXN2YWwodG9wQXhpcykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGltZWxpbmUtbGF5b3V0IGNhbiBoYXZlIGF0IG1vc3Qgb25lIHRvcC1heGlzIHBhbmUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3BBeGlzID0gY2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFNpZGUuQk9UVE9NOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzdmFsKGJvdHRvbUF4aXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RpbWVsaW5lLWxheW91dCBjYW4gaGF2ZSBhdCBtb3N0IG9uZSBib3R0b20tYXhpcyBwYW5lJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tQXhpcyA9IGNoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc3ZhbChjZW50ZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RpbWVsaW5lLWxheW91dCBjYW4gaGF2ZSBhdCBtb3N0IG9uZSBjZW50ZXIgcGFuZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbnRlciA9IGNoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGhhc3ZhbCh0b3BBeGlzKSkge1xyXG4gICAgICAgICAgICAgICAgdG9wQXhpcy52aWV3cG9ydC5zZXRSZWN0KHBhcmVudFZpZXdwb3J0LmksIHBhcmVudFZpZXdwb3J0LmpFbmQgLSBheGlzSGVpZ2h0LCBwYXJlbnRWaWV3cG9ydC53LCBheGlzSGVpZ2h0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGhhc3ZhbChib3R0b21BeGlzKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgakJvdHRvbU1heCA9IChoYXN2YWwodG9wQXhpcykgPyB0b3BBeGlzLnZpZXdwb3J0LmogOiBwYXJlbnRWaWV3cG9ydC5qRW5kKSAtIGF4aXNIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICBib3R0b21BeGlzLnZpZXdwb3J0LnNldFJlY3QocGFyZW50Vmlld3BvcnQuaSwgTWF0aC5taW4oakJvdHRvbU1heCwgcGFyZW50Vmlld3BvcnQuaiksIHBhcmVudFZpZXdwb3J0LncsIGF4aXNIZWlnaHQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaGFzdmFsKGNlbnRlcikpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGpDZW50ZXJFbmQgPSAoaGFzdmFsKHRvcEF4aXMpID8gdG9wQXhpcy52aWV3cG9ydC5qU3RhcnQgOiBwYXJlbnRWaWV3cG9ydC5qRW5kKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGpDZW50ZXJTdGFydCA9IChoYXN2YWwoYm90dG9tQXhpcykgPyBib3R0b21BeGlzLnZpZXdwb3J0LmpFbmQgOiBwYXJlbnRWaWV3cG9ydC5qU3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgY2VudGVyLnZpZXdwb3J0LnNldEVkZ2VzKHBhcmVudFZpZXdwb3J0LmlTdGFydCwgcGFyZW50Vmlld3BvcnQuaUVuZCwgakNlbnRlclN0YXJ0LCBqQ2VudGVyRW5kKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG59XHJcblxyXG5cclxuIl19