Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@preply/ds-visual-coverage-core

Package Overview
Dependencies
Maintainers
0
Versions
36
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@preply/ds-visual-coverage-core - npm Package Compare versions

Comparing version 0.97.1 to 0.97.2

dist/core/createPixelCounts.d.ts

2

dist/core/calculateCoverage.d.ts
import type { Coverage, PixelCounts } from '../types';
declare type Params = {
type Params = {
pixelCounts: PixelCounts;

@@ -4,0 +4,0 @@ };

import type { Bitmap, ChildData, CoverageMode, Logger, Milliseconds, PixelByPixelType, PixelCounts, Rect, WeightByComponentName } from '../types';
declare type Params = {
type Params = {
logger: Logger;

@@ -23,3 +23,3 @@ elementRect: Rect;

};
declare type CountPixelsResult = {
type CountPixelsResult = {
bitmap: Bitmap;

@@ -26,0 +26,0 @@ pixelCounts: PixelCounts;

@@ -5,2 +5,3 @@ import { createBitmap } from '../bitmap/createBitmap.js';

import { getRectCoordinate } from '../rect/rectProperties.js';
import { createPixelCounts } from './createPixelCounts.js';

@@ -205,4 +206,3 @@ /* eslint-disable no-continue */

}
const length = 8;
const pixelCounts = new Uint32Array(length + 1);
const pixelCounts = createPixelCounts();
for (let i = 0, n = bitmap.length; i < n; i++) {

@@ -226,2 +226,2 @@ pixelCounts[bitmap[i]]++;

export { countPixels };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRQaXhlbHMuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL2NvdW50UGl4ZWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnRpbnVlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wbHVzcGx1cyAqL1xuXG5pbXBvcnQgeyBjcmVhdGVCaXRtYXAgfSBmcm9tICcuLi9iaXRtYXAvY3JlYXRlQml0bWFwJztcbmltcG9ydCB7IGxvZ0JpdG1hcCB9IGZyb20gJy4uL2JpdG1hcC9sb2dCaXRtYXAnO1xuaW1wb3J0IHsgc2V0Qml0bWFwUGl4ZWwgfSBmcm9tICcuLi9iaXRtYXAvc2V0Qml0bWFwUGl4ZWwnO1xuaW1wb3J0IHsgZ2V0UmVjdENvb3JkaW5hdGUgfSBmcm9tICcuLi9yZWN0L3JlY3RQcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIHtcbiAgICBCaXRtYXAsXG4gICAgQ2hpbGREYXRhLFxuICAgIENvbXBvbmVudFR5cGUsXG4gICAgQ292ZXJhZ2VNb2RlLFxuICAgIEhpZ2hlc3ROdW1iZXIsXG4gICAgTG9nZ2VyLFxuICAgIE1pbGxpc2Vjb25kcyxcbiAgICBQaXhlbEJ5UGl4ZWxUeXBlLFxuICAgIFBpeGVsQ291bnRzLFxuICAgIFJlY3QsXG4gICAgV2VpZ2h0QnlDb21wb25lbnROYW1lLFxufSBmcm9tICcuLi90eXBlcyc7XG5cbnR5cGUgUGFyYW1zID0ge1xuICAgIGxvZ2dlcjogTG9nZ2VyO1xuICAgIGVsZW1lbnRSZWN0OiBSZWN0O1xuICAgIHByaW50QXNjaWlBcnQ6IGJvb2xlYW47XG4gICAgY2hpbGRyZW5EYXRhOiBDaGlsZERhdGFbXTtcbiAgICBwaXhlbEJ5UGl4ZWxUeXBlOiBQaXhlbEJ5UGl4ZWxUeXBlO1xuICAgIG9mZnNldDogeyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyIH07XG4gICAgd2VpZ2h0QnlDb21wb25lbnROYW1lOiBXZWlnaHRCeUNvbXBvbmVudE5hbWU7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHBlcmltZXRlcnMgY291bnQsIHRoZSBiaWdnZXIgdGhlIGNvbXBvbmVudCB0aGUgbW9yZSBpbXBvcnRhbnQgaXQgaXMgZm9yIHRoZSBjb3ZlcmFnZS5cbiAgICAgKiBCdXQgYmlnZ2VyIGNvbXBvbmVudHMgYXJlIGNvbnRhaW5lcnMsIHdoaWxlIHNtYWxsZXIgY29tcG9uZW50cyBhcmUgRFMgYW5kIGdlbmVyaWMgVUkgb25lcy5cbiAgICAgKiBgY291bnRDb21wb25lbnRzYCBzb2x2ZXMgdGhpcyBwcm9ibGVtIGJ5IGRyYXdpbmcganVzdCBzb21lIHBpeGVscyBmb3IgZXZlcnkgY29tcG9uZW50LlxuICAgICAqIE9uIHRoZSBwYXBlciwgdGhpcyBzb3VuZHMgbGlrZSBqdXN0IGNvdW50aW5nIHRoZSBET00gZWxlbWVudHMsIGFuZCB3ZWlnaHRpbmcgdGhlbSBieSB0aGVcbiAgICAgKiBjb21wb25lbnQgd2VpZ2h0LCBidXQgaW4gcmVhbGl0eSBpdCBhbHNvIGNvbnNpZGVyIHRoZSBkZXB0aCAoZXZlbiBpZiBpdCdzIG5vdCBwZXJmZWN0IHNpbmNlXG4gICAgICogaXQncyBub3QgdGhlIENTUyBvbmUpLiBMb29rIGF0IHRoZSB0ZXN0cyB0byBiZXR0ZXIgdW5kZXJzdGFuZCBpdC5cbiAgICAgKi9cbiAgICBjb3ZlcmFnZU1vZGU6IENvdmVyYWdlTW9kZTtcbn07XG5cbnR5cGUgQ291bnRQaXhlbHNSZXN1bHQgPSB7XG4gICAgYml0bWFwOiBCaXRtYXA7XG4gICAgcGl4ZWxDb3VudHM6IFBpeGVsQ291bnRzO1xuICAgIGR1cmF0aW9uOiBNaWxsaXNlY29uZHM7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY291bnRQaXhlbHMocGFyYW1zOiBQYXJhbXMpOiBDb3VudFBpeGVsc1Jlc3VsdCB7XG4gICAgY29uc3Qge1xuICAgICAgICBsb2dnZXIsXG4gICAgICAgIG9mZnNldCxcbiAgICAgICAgZWxlbWVudFJlY3QsXG4gICAgICAgIGNoaWxkcmVuRGF0YSxcbiAgICAgICAgY292ZXJhZ2VNb2RlLFxuICAgICAgICBwcmludEFzY2lpQXJ0LFxuICAgICAgICBwaXhlbEJ5UGl4ZWxUeXBlLFxuICAgICAgICB3ZWlnaHRCeUNvbXBvbmVudE5hbWUsXG4gICAgfSA9IHBhcmFtcztcblxuICAgIGNvbnN0IHN0YXJ0OiBNaWxsaXNlY29uZHMgPSBEYXRlLm5vdygpO1xuXG4gICAgY29uc3QgYml0bWFwID0gY3JlYXRlQml0bWFwKFxuICAgICAgICBnZXRSZWN0Q29vcmRpbmF0ZShlbGVtZW50UmVjdCwgJ2hlaWdodCcpLFxuICAgICAgICBnZXRSZWN0Q29vcmRpbmF0ZShlbGVtZW50UmVjdCwgJ3dpZHRoJyksXG4gICAgKTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBuID0gY2hpbGRyZW5EYXRhLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICBjb25zdCBjaGlsZERhdGEgPSBjaGlsZHJlbkRhdGFbaV07XG4gICAgICAgIGlmICghY2hpbGREYXRhKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBjaGlsZERhdGEgYXQgJHtpfSAodGhpcyBzaG91bGQgYmUgYSBUUy1vbmx5IHByb3RlY3Rpb24pYCk7XG5cbiAgICAgICAgY29uc3QgeyByZWN0LCBkc0NvbXBvbmVudFR5cGUsIGlzQ2hpbGRPZlVpRHNDb21wb25lbnQsIGRzQ29tcG9uZW50TmFtZSB9ID0gY2hpbGREYXRhO1xuXG4gICAgICAgIGNvbnN0IGFkanVzdGVkU3NDb21wb25lbnRUeXBlOiBDb21wb25lbnRUeXBlID0gaXNDaGlsZE9mVWlEc0NvbXBvbmVudFxuICAgICAgICAgICAgPyAndW5rbm93bkRzQ29tcG9uZW50JyAvLyBjaGlsZHJlbiBvZiB1aSBjb21wb25lbnRzIGFyZSB0cmVhdGVkIGFzIERTIGNvbXBvbmVudHMgdG9vXG4gICAgICAgICAgICA6IGRzQ29tcG9uZW50VHlwZTtcblxuICAgICAgICBjb25zdCBwaXhlbCA9IHBpeGVsQnlQaXhlbFR5cGVbYWRqdXN0ZWRTc0NvbXBvbmVudFR5cGVdO1xuXG4gICAgICAgIGNvbnN0IG9mZnNldFRvcCA9IG9mZnNldC50b3A7XG4gICAgICAgIGNvbnN0IG9mZnNldExlZnQgPSBvZmZzZXQubGVmdDtcblxuICAgICAgICBjb25zdCByZWN0VG9wID0gZ2V0UmVjdENvb3JkaW5hdGUocmVjdCwgJ3RvcCcpO1xuICAgICAgICBjb25zdCByZWN0TGVmdCA9IGdldFJlY3RDb29yZGluYXRlKHJlY3QsICdsZWZ0Jyk7XG4gICAgICAgIGNvbnN0IHJlY3RXaWR0aCA9IGdldFJlY3RDb29yZGluYXRlKHJlY3QsICd3aWR0aCcpO1xuICAgICAgICBjb25zdCByZWN0SGVpZ2h0ID0gZ2V0UmVjdENvb3JkaW5hdGUocmVjdCwgJ2hlaWdodCcpO1xuICAgICAgICBjb25zdCByb3dMZW5ndGggPSBnZXRSZWN0Q29vcmRpbmF0ZShlbGVtZW50UmVjdCwgJ2hlaWdodCcpO1xuICAgICAgICBjb25zdCBjb2x1bW5MZW5ndGggPSBnZXRSZWN0Q29vcmRpbmF0ZShlbGVtZW50UmVjdCwgJ3dpZHRoJyk7XG5cbiAgICAgICAgY29uc3Qgd2VpZ2h0ID0gd2VpZ2h0QnlDb21wb25lbnROYW1lW2RzQ29tcG9uZW50TmFtZSA/PyAnbm9uRHNDb21wb25lbnQnXTtcbiAgICAgICAgZm9yIChsZXQgd2VpZ2h0TGluZSA9IDA7IHdlaWdodExpbmUgPCB3ZWlnaHQ7IHdlaWdodExpbmUrKykge1xuICAgICAgICAgICAgLy8gXCJEcmF3XCIgdGhlIHJvd3MgaW4gYml0bWFwXG4gICAgICAgICAgICBjb25zdCB0b3AgPSBNYXRoLmZsb29yKHJlY3RUb3AgLSBvZmZzZXRUb3AgKyB3ZWlnaHRMaW5lKTtcbiAgICAgICAgICAgIGNvbnN0IGJvdHRvbSA9IE1hdGguZmxvb3IocmVjdFRvcCAtIG9mZnNldFRvcCArIHJlY3RIZWlnaHQgLSAxIC0gd2VpZ2h0TGluZSk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGN1cnJlbnRMZWZ0ID0gTWF0aC5mbG9vcihyZWN0TGVmdCAtIG9mZnNldExlZnQpOyA7IGN1cnJlbnRMZWZ0KyspIHtcbiAgICAgICAgICAgICAgICAvLyBIYXBwZW5zIHdoZW4gdGhlIHdlaWdodCBpcyBoaWdoZXIgdGhhbiBoYWxmIHRoZSBoZWlnaHQgb2YgdGhlIGVsZW1lbnQsIGFuZCBzbyB0b3AgYW5kIGJvdHRvbSBmbGlwXG4gICAgICAgICAgICAgICAgLy8gRXguIGZpcnN0IGxvb3Agd2l0aCB3ZWlnaHQgPSA1XG4gICAgICAgICAgICAgICAgLy8gW1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLEwsTCxMLEwsTCxdLCDwn5GI8J+RiPCfkYggdG9wXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsTCwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsTCwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsTCxMLEwsTCxMLF0sIPCfkYjwn5GI8J+RiCBib3R0b21cbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyBdXG4gICAgICAgICAgICAgICAgLy8gc2Vjb25kIGl0ZXJhdGlvbiB3aXRoIHdlaWdodCA9IDVcbiAgICAgICAgICAgICAgICAvLyBbXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsTCxMLEwsTCxMLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsTCxMLEwsTCxMLF0sIPCfkYjwn5GI8J+RiCB0b3BcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICxMLEwsTCxMLEwsXSwg8J+RiPCfkYjwn5GIIGJvdHRvbVxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLEwsTCxMLEwsTCxdLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vIF1cbiAgICAgICAgICAgICAgICAvLyB0aGlyZCBpdGVyYXRpb24gd2l0aCB3ZWlnaHQgPSA1ICh0aGUgbG9vcCBtdXN0IGJyZWFrKVxuICAgICAgICAgICAgICAgIC8vIFtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICxMLEwsTCxMLEwsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICxMLEwsTCxMLEwsXSwg8J+RiPCfkYjwn5GIIGJvdHRvbVxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLEwsTCxMLEwsTCxdLCDwn5GI8J+RiPCfkYggdG9wXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsTCxMLEwsTCxMLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gXVxuXG4gICAgICAgICAgICAgICAgY29uc3QgdG9wUm93Q3Jvc3NlZEhhbGZIZWlnaHQgPSB0b3AgPiBib3R0b207XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9Nb3JlSG9yaXpvbnRhbExpbmVzVG9EcmF3ID0gdG9wUm93Q3Jvc3NlZEhhbGZIZWlnaHQ7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwaXhlbHNNdXN0UmVtYWluSW5zaWRlQ29tcG9uZW50QXJlYSA9IGNvdmVyYWdlTW9kZSA9PT0gJ2NvdW50UGVyaW1ldGVycyc7XG5cbiAgICAgICAgICAgICAgICBpZiAocGl4ZWxzTXVzdFJlbWFpbkluc2lkZUNvbXBvbmVudEFyZWEgJiYgbm9Nb3JlSG9yaXpvbnRhbExpbmVzVG9EcmF3KSBicmVhaztcblxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGxvb3AgY29uZGl0aW9uLCBoZXJlIGl0J3MgbW9yZSByZWFkYWJsZVxuICAgICAgICAgICAgICAgIGNvbnN0IGlzQXRUaGVSaWdodE9mVGhlVmlld3BvcnQgPVxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TGVmdCA+PSByZWN0TGVmdCAtIG9mZnNldExlZnQgKyByZWN0V2lkdGggfHwgY3VycmVudExlZnQgPj0gY29sdW1uTGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmIChpc0F0VGhlUmlnaHRPZlRoZVZpZXdwb3J0KSBicmVhaztcblxuICAgICAgICAgICAgICAgIGNvbnN0IGlzQXRUaGVMZWZ0T2ZUaGVWaWV3cG9ydCA9IGN1cnJlbnRMZWZ0IDwgMDsgLy8gY2FuIGhhcHBlbiBmb3IgZWxlbWVudHMgcGxhY2VkIG91dHNpZGUgdGhlIHZpZXdwb3J0XG4gICAgICAgICAgICAgICAgaWYgKGlzQXRUaGVMZWZ0T2ZUaGVWaWV3cG9ydCkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICAvLyBcIkRyYXdcIiB0aGUgdG9wIHJvd1xuICAgICAgICAgICAgICAgIC8vIFtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAg8J+RifCfkYnwn5GJIFsgLCAsICwgLCAsTCxMLEwsTCxMLF0sIPCfkYjwn5GI8J+RiFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLEwsICwgLCAsTCxdLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLEwsTCxMLEwsTCxdLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vIF1cbiAgICAgICAgICAgICAgICBjb25zdCB0b3BSb3dJc0luc2lkZVRoZVZpZXdwb3J0ID0gdG9wID49IDAgJiYgdG9wIDwgcm93TGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmICh0b3BSb3dJc0luc2lkZVRoZVZpZXdwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEJpdG1hcFBpeGVsKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IGN1cnJlbnRMZWZ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHBpeGVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGdldFJlY3RDb29yZGluYXRlKGVsZW1lbnRSZWN0LCAnd2lkdGgnKSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvdmVyYWdlTW9kZSA9PT0gJ2NvdW50Q29tcG9uZW50cycpXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZ29hbCBpcyB3cml0ZSBvbmUgcGl4ZWwgZm9yIGV2ZXJ5IHJvd1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gXCJEcmF3XCIgdGhlIGJvdHRvbSByb3dcbiAgICAgICAgICAgICAgICAvLyBbXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsTCxMLEwsTCxMLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsTCwgLCAsICxMLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgIPCfkYnwn5GJ8J+RiSBbICwgLCAsICwgLEwsTCxMLEwsTCxdLCDwn5GI8J+RiPCfkYhcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyBdXG4gICAgICAgICAgICAgICAgY29uc3QgYm90dG9tUm93SXNJbnNpZGVUaGVWaWV3cG9ydCA9IGJvdHRvbSA+PSAwICYmIGJvdHRvbSA8IHJvd0xlbmd0aDtcbiAgICAgICAgICAgICAgICBpZiAoYm90dG9tUm93SXNJbnNpZGVUaGVWaWV3cG9ydCkge1xuICAgICAgICAgICAgICAgICAgICBzZXRCaXRtYXBQaXhlbCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3A6IGJvdHRvbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IGN1cnJlbnRMZWZ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHBpeGVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGdldFJlY3RDb29yZGluYXRlKGVsZW1lbnRSZWN0LCAnd2lkdGgnKSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBcIkRyYXdcIiB0aGUgY29sdW1ucyBpbiBiaXRtYXBcbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBNYXRoLmZsb29yKHJlY3RMZWZ0IC0gb2Zmc2V0TGVmdCArIHdlaWdodExpbmUpO1xuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBNYXRoLmZsb29yKHJlY3RMZWZ0IC0gb2Zmc2V0TGVmdCArIHJlY3RXaWR0aCAtIDEgLSB3ZWlnaHRMaW5lKTtcbiAgICAgICAgICAgIGZvciAobGV0IGN1cnJlbnRUb3AgPSBNYXRoLmZsb29yKHJlY3RUb3AgLSBvZmZzZXRUb3ApOyA7IGN1cnJlbnRUb3ArKykge1xuICAgICAgICAgICAgICAgIGlmIChjb3ZlcmFnZU1vZGUgPT09ICdjb3VudENvbXBvbmVudHMnKVxuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZ29hbCBpcyB3cml0ZSBvbmUgcGl4ZWwgZm9yIGV2ZXJ5IHJvd1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIC8vIEhhcHBlbnMgd2hlbiB0aGUgd2VpZ2h0IGlzIGhpZ2hlciB0aGFuIGhhbGYgdGhlIGhlaWdodCBvZiB0aGUgZWxlbWVudCwgYW5kIHNvIHRvcCBhbmQgYm90dG9tIGZsaXAuIExvb2sgYXQgbm9Nb3JlSG9yaXpvbnRhbExpbmVzVG9EcmF3J3MgY29tbWVudFxuICAgICAgICAgICAgICAgIGNvbnN0IG5vTW9yZVZlcnRpY2FsTGluZXNUb0RyYXcgPSBsZWZ0ID4gcmlnaHQ7XG4gICAgICAgICAgICAgICAgaWYgKG5vTW9yZVZlcnRpY2FsTGluZXNUb0RyYXcpIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgbG9vcCBjb25kaXRpb24sIGhlcmUgaXQncyBtb3JlIHJlYWRhYmxlXG4gICAgICAgICAgICAgICAgY29uc3QgaXNBdFRoZUJvdHRvbU9mVGhlVmlld3BvcnQgPVxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VG9wID49IHJlY3RUb3AgLSBvZmZzZXRUb3AgKyByZWN0SGVpZ2h0IC0gMSB8fCBjdXJyZW50VG9wID4gcm93TGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzQXRUaGVCb3R0b21PZlRoZVZpZXdwb3J0KSBicmVhaztcblxuICAgICAgICAgICAgICAgIGNvbnN0IGlzQXRUaGVUb3BPZlRoZVZpZXdwb3J0ID0gY3VycmVudFRvcCA8IDA7IC8vIGNhbiBoYXBwZW4gZm9yIGVsZW1lbnRzIHBsYWNlZCBvdXRzaWRlIHRoZSB2aWV3cG9ydFxuICAgICAgICAgICAgICAgIGlmIChpc0F0VGhlVG9wT2ZUaGVWaWV3cG9ydCkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICAvLyBcIkRyYXdcIiB0aGUgbGVmdCBjb2x1bW5cbiAgICAgICAgICAgICAgICAvLyBbXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICDwn5GHXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICDwn5GHXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICDwn5GHXG4gICAgICAgICAgICAgICAgLy8gICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICBbICwgLCAsICwgLEwsTCxMLEwsTCxdLFxuICAgICAgICAgICAgICAgIC8vICAgIFsgLCAsICwgLCAsTCwgLCAsICxMLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgWyAsICwgLCAsICxMLEwsTCxMLEwsXSxcbiAgICAgICAgICAgICAgICAvLyAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIPCfkYZcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIPCfkYZcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIPCfkYZcbiAgICAgICAgICAgICAgICAvLyBdXG4gICAgICAgICAgICAgICAgY29uc3QgbGVmdENvbHVtbklzSW5zaWRlVGhlVmlld3BvcnQgPVxuICAgICAgICAgICAgICAgICAgICBsZWZ0ID49IDAgJiYgY3VycmVudFRvcCA8IHJvd0xlbmd0aCAmJiBsZWZ0IDwgY29sdW1uTGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgaWYgKGxlZnRDb2x1bW5Jc0luc2lkZVRoZVZpZXdwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEJpdG1hcFBpeGVsKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXAsXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3A6IGN1cnJlbnRUb3AsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGl4ZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogZ2V0UmVjdENvb3JkaW5hdGUoZWxlbWVudFJlY3QsICd3aWR0aCcpLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBcIkRyYXdcIiB0aGUgcmlnaHQgY29sdW1uXG4gICAgICAgICAgICAgICAgLy8gW1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICDwn5GHXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIPCfkYdcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAg8J+Rh1xuICAgICAgICAgICAgICAgIC8vICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgWyAsICwgLCAsICxMLEwsTCxMLEwsXSxcbiAgICAgICAgICAgICAgICAvLyAgICBbICwgLCAsICwgLEwsICwgLCAsTCxdLFxuICAgICAgICAgICAgICAgIC8vICAgIFsgLCAsICwgLCAsTCxMLEwsTCxMLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIPCfkYZcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAg8J+RhlxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICDwn5GGXG4gICAgICAgICAgICAgICAgLy8gXVxuICAgICAgICAgICAgICAgIGNvbnN0IHJpZ3RodENvbHVtbklzSW5zaWRlVGhlVmlld3BvcnQgPVxuICAgICAgICAgICAgICAgICAgICByaWdodCA+PSAwICYmIGN1cnJlbnRUb3AgPCByb3dMZW5ndGggJiYgcmlnaHQgPCBjb2x1bW5MZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKHJpZ3RodENvbHVtbklzSW5zaWRlVGhlVmlld3BvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0Qml0bWFwUGl4ZWwoe1xuICAgICAgICAgICAgICAgICAgICAgICAgYml0bWFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiBjdXJyZW50VG9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogcmlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGl4ZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogZ2V0UmVjdENvb3JkaW5hdGUoZWxlbWVudFJlY3QsICd3aWR0aCcpLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBsZW5ndGg6IEhpZ2hlc3ROdW1iZXIgPSA4O1xuICAgIGNvbnN0IHBpeGVsQ291bnRzID0gbmV3IFVpbnQzMkFycmF5KGxlbmd0aCArIDEpO1xuICAgIGZvciAobGV0IGkgPSAwLCBuID0gYml0bWFwLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICBwaXhlbENvdW50c1tiaXRtYXBbaV1dKys7XG4gICAgfVxuXG4gICAgaWYgKHByaW50QXNjaWlBcnQpIHtcbiAgICAgICAgbG9nQml0bWFwKHtcbiAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgIGJpdG1hcCxcbiAgICAgICAgICAgIHdpZHRoOiBnZXRSZWN0Q29vcmRpbmF0ZShlbGVtZW50UmVjdCwgJ3dpZHRoJyksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIGJpdG1hcCxcbiAgICAgICAgcGl4ZWxDb3VudHMsXG4gICAgICAgIGR1cmF0aW9uOiBEYXRlLm5vdygpIC0gc3RhcnQsXG4gICAgfTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUE4Q00sU0FBVSxXQUFXLENBQUMsTUFBYyxFQUFBO0FBQ3RDLElBQUEsTUFBTSxFQUNGLE1BQU0sRUFDTixNQUFNLEVBQ04sV0FBVyxFQUNYLFlBQVksRUFDWixZQUFZLEVBQ1osYUFBYSxFQUNiLGdCQUFnQixFQUNoQixxQkFBcUIsR0FDeEIsR0FBRyxNQUFNLENBQUM7QUFFWCxJQUFBLE1BQU0sS0FBSyxHQUFpQixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFFdkMsSUFBQSxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQ3ZCLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsRUFDeEMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUMxQyxDQUFDO0FBRUYsSUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2pELFFBQUEsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsSUFBSSxDQUFDLFNBQVM7QUFDVixZQUFBLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQSxzQ0FBQSxDQUF3QyxDQUFDLENBQUM7UUFFbEYsTUFBTSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsc0JBQXNCLEVBQUUsZUFBZSxFQUFFLEdBQUcsU0FBUyxDQUFDO1FBRXJGLE1BQU0sdUJBQXVCLEdBQWtCLHNCQUFzQjtjQUMvRCxvQkFBb0I7Y0FDcEIsZUFBZSxDQUFDO0FBRXRCLFFBQUEs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
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRQaXhlbHMuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL2NvdW50UGl4ZWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnRpbnVlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wbHVzcGx1cyAqL1xuXG5pbXBvcnQgeyBjcmVhdGVCaXRtYXAgfSBmcm9tICcuLi9iaXRtYXAvY3JlYXRlQml0bWFwJztcbmltcG9ydCB7IGxvZ0JpdG1hcCB9IGZyb20gJy4uL2JpdG1hcC9sb2dCaXRtYXAnO1xuaW1wb3J0IHsgc2V0Qml0bWFwUGl4ZWwgfSBmcm9tICcuLi9iaXRtYXAvc2V0Qml0bWFwUGl4ZWwnO1xuaW1wb3J0IHsgZ2V0UmVjdENvb3JkaW5hdGUgfSBmcm9tICcuLi9yZWN0L3JlY3RQcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIHtcbiAgICBCaXRtYXAsXG4gICAgQ2hpbGREYXRhLFxuICAgIENvbXBvbmVudFR5cGUsXG4gICAgQ292ZXJhZ2VNb2RlLFxuICAgIExvZ2dlcixcbiAgICBNaWxsaXNlY29uZHMsXG4gICAgUGl4ZWxCeVBpeGVsVHlwZSxcbiAgICBQaXhlbENvdW50cyxcbiAgICBSZWN0LFxuICAgIFdlaWdodEJ5Q29tcG9uZW50TmFtZSxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBjcmVhdGVQaXhlbENvdW50cyB9IGZyb20gJy4vY3JlYXRlUGl4ZWxDb3VudHMnO1xuXG50eXBlIFBhcmFtcyA9IHtcbiAgICBsb2dnZXI6IExvZ2dlcjtcbiAgICBlbGVtZW50UmVjdDogUmVjdDtcbiAgICBwcmludEFzY2lpQXJ0OiBib29sZWFuO1xuICAgIGNoaWxkcmVuRGF0YTogQ2hpbGREYXRhW107XG4gICAgcGl4ZWxCeVBpeGVsVHlwZTogUGl4ZWxCeVBpeGVsVHlwZTtcbiAgICBvZmZzZXQ6IHsgdG9wOiBudW1iZXI7IGxlZnQ6IG51bWJlciB9O1xuICAgIHdlaWdodEJ5Q29tcG9uZW50TmFtZTogV2VpZ2h0QnlDb21wb25lbnROYW1lO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiBwZXJpbWV0ZXJzIGNvdW50LCB0aGUgYmlnZ2VyIHRoZSBjb21wb25lbnQgdGhlIG1vcmUgaW1wb3J0YW50IGl0IGlzIGZvciB0aGUgY292ZXJhZ2UuXG4gICAgICogQnV0IGJpZ2dlciBjb21wb25lbnRzIGFyZSBjb250YWluZXJzLCB3aGlsZSBzbWFsbGVyIGNvbXBvbmVudHMgYXJlIERTIGFuZCBnZW5lcmljIFVJIG9uZXMuXG4gICAgICogYGNvdW50Q29tcG9uZW50c2Agc29sdmVzIHRoaXMgcHJvYmxlbSBieSBkcmF3aW5nIGp1c3Qgc29tZSBwaXhlbHMgZm9yIGV2ZXJ5IGNvbXBvbmVudC5cbiAgICAgKiBPbiB0aGUgcGFwZXIsIHRoaXMgc291bmRzIGxpa2UganVzdCBjb3VudGluZyB0aGUgRE9NIGVsZW1lbnRzLCBhbmQgd2VpZ2h0aW5nIHRoZW0gYnkgdGhlXG4gICAgICogY29tcG9uZW50IHdlaWdodCwgYnV0IGluIHJlYWxpdHkgaXQgYWxzbyBjb25zaWRlciB0aGUgZGVwdGggKGV2ZW4gaWYgaXQncyBub3QgcGVyZmVjdCBzaW5jZVxuICAgICAqIGl0J3Mgbm90IHRoZSBDU1Mgb25lKS4gTG9vayBhdCB0aGUgdGVzdHMgdG8gYmV0dGVyIHVuZGVyc3RhbmQgaXQuXG4gICAgICovXG4gICAgY292ZXJhZ2VNb2RlOiBDb3ZlcmFnZU1vZGU7XG59O1xuXG50eXBlIENvdW50UGl4ZWxzUmVzdWx0ID0ge1xuICAgIGJpdG1hcDogQml0bWFwO1xuICAgIHBpeGVsQ291bnRzOiBQaXhlbENvdW50cztcbiAgICBkdXJhdGlvbjogTWlsbGlzZWNvbmRzO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50UGl4ZWxzKHBhcmFtczogUGFyYW1zKTogQ291bnRQaXhlbHNSZXN1bHQge1xuICAgIGNvbnN0IHtcbiAgICAgICAgbG9nZ2VyLFxuICAgICAgICBvZmZzZXQsXG4gICAgICAgIGVsZW1lbnRSZWN0LFxuICAgICAgICBjaGlsZHJlbkRhdGEsXG4gICAgICAgIGNvdmVyYWdlTW9kZSxcbiAgICAgICAgcHJpbnRBc2NpaUFydCxcbiAgICAgICAgcGl4ZWxCeVBpeGVsVHlwZSxcbiAgICAgICAgd2VpZ2h0QnlDb21wb25lbnROYW1lLFxuICAgIH0gPSBwYXJhbXM7XG5cbiAgICBjb25zdCBzdGFydDogTWlsbGlzZWNvbmRzID0gRGF0ZS5ub3coKTtcblxuICAgIGNvbnN0IGJpdG1hcCA9IGNyZWF0ZUJpdG1hcChcbiAgICAgICAgZ2V0UmVjdENvb3JkaW5hdGUoZWxlbWVudFJlY3QsICdoZWlnaHQnKSxcbiAgICAgICAgZ2V0UmVjdENvb3JkaW5hdGUoZWxlbWVudFJlY3QsICd3aWR0aCcpLFxuICAgICk7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbiA9IGNoaWxkcmVuRGF0YS5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hpbGREYXRhID0gY2hpbGRyZW5EYXRhW2ldO1xuICAgICAgICBpZiAoIWNoaWxkRGF0YSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gY2hpbGREYXRhIGF0ICR7aX0gKHRoaXMgc2hvdWxkIGJlIGEgVFMtb25seSBwcm90ZWN0aW9uKWApO1xuXG4gICAgICAgIGNvbnN0IHsgcmVjdCwgZHNDb21wb25lbnRUeXBlLCBpc0NoaWxkT2ZVaURzQ29tcG9uZW50LCBkc0NvbXBvbmVudE5hbWUgfSA9IGNoaWxkRGF0YTtcblxuICAgICAgICBjb25zdCBhZGp1c3RlZFNzQ29tcG9uZW50VHlwZTogQ29tcG9uZW50VHlwZSA9IGlzQ2hpbGRPZlVpRHNDb21wb25lbnRcbiAgICAgICAgICAgID8gJ3Vua25vd25Ec0NvbXBvbmVudCcgLy8gY2hpbGRyZW4gb2YgdWkgY29tcG9uZW50cyBhcmUgdHJlYXRlZCBhcyBEUyBjb21wb25lbnRzIHRvb1xuICAgICAgICAgICAgOiBkc0NvbXBvbmVudFR5cGU7XG5cbiAgICAgICAgY29uc3QgcGl4ZWwgPSBwaXhlbEJ5UGl4ZWxUeXBlW2FkanVzdGVkU3NDb21wb25lbnRUeXBlXTtcblxuICAgICAgICBjb25zdCBvZmZzZXRUb3AgPSBvZmZzZXQudG9wO1xuICAgICAgICBjb25zdCBvZmZzZXRMZWZ0ID0gb2Zmc2V0LmxlZnQ7XG5cbiAgICAgICAgY29uc3QgcmVjdFRvcCA9IGdldFJlY3RDb29yZGluYXRlKHJlY3QsICd0b3AnKTtcbiAgICAgICAgY29uc3QgcmVjdExlZnQgPSBnZXRSZWN0Q29vcmRpbmF0ZShyZWN0LCAnbGVmdCcpO1xuICAgICAgICBjb25zdCByZWN0V2lkdGggPSBnZXRSZWN0Q29vcmRpbmF0ZShyZWN0LCAnd2lkdGgnKTtcbiAgICAgICAgY29uc3QgcmVjdEhlaWdodCA9IGdldFJlY3RDb29yZGluYXRlKHJlY3QsICdoZWlnaHQnKTtcbiAgICAgICAgY29uc3Qgcm93TGVuZ3RoID0gZ2V0UmVjdENvb3JkaW5hdGUoZWxlbWVudFJlY3QsICdoZWlnaHQnKTtcbiAgICAgICAgY29uc3QgY29sdW1uTGVuZ3RoID0gZ2V0UmVjdENvb3JkaW5hdGUoZWxlbWVudFJlY3QsICd3aWR0aCcpO1xuXG4gICAgICAgIGNvbnN0IHdlaWdodCA9IHdlaWdodEJ5Q29tcG9uZW50TmFtZVtkc0NvbXBvbmVudE5hbWUgPz8gJ25vbkRzQ29tcG9uZW50J107XG4gICAgICAgIGZvciAobGV0IHdlaWdodExpbmUgPSAwOyB3ZWlnaHRMaW5lIDwgd2VpZ2h0OyB3ZWlnaHRMaW5lKyspIHtcbiAgICAgICAgICAgIC8vIFwiRHJhd1wiIHRoZSByb3dzIGluIGJpdG1hcFxuICAgICAgICAgICAgY29uc3QgdG9wID0gTWF0aC5mbG9vcihyZWN0VG9wIC0gb2Zmc2V0VG9wICsgd2VpZ2h0TGluZSk7XG4gICAgICAgICAgICBjb25zdCBib3R0b20gPSBNYXRoLmZsb29yKHJlY3RUb3AgLSBvZmZzZXRUb3AgKyByZWN0SGVpZ2h0IC0gMSAtIHdlaWdodExpbmUpO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBjdXJyZW50TGVmdCA9IE1hdGguZmxvb3IocmVjdExlZnQgLSBvZmZzZXRMZWZ0KTsgOyBjdXJyZW50TGVmdCsrKSB7XG4gICAgICAgICAgICAgICAgLy8gSGFwcGVucyB3aGVuIHRoZSB3ZWlnaHQgaXMgaGlnaGVyIHRoYW4gaGFsZiB0aGUgaGVpZ2h0IG9mIHRoZSBlbGVtZW50LCBhbmQgc28gdG9wIGFuZCBib3R0b20gZmxpcFxuICAgICAgICAgICAgICAgIC8vIEV4LiBmaXJzdCBsb29wIHdpdGggd2VpZ2h0ID0gNVxuICAgICAgICAgICAgICAgIC8vIFtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICxMLEwsTCxMLEwsXSwg8J+RiPCfkYjwn5GIIHRvcFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLEwsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLEwsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLEwsTCxMLEwsTCxdLCDwn5GI8J+RiPCfkYggYm90dG9tXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gXVxuICAgICAgICAgICAgICAgIC8vIHNlY29uZCBpdGVyYXRpb24gd2l0aCB3ZWlnaHQgPSA1XG4gICAgICAgICAgICAgICAgLy8gW1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLEwsTCxMLEwsTCxdLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLEwsTCxMLEwsTCxdLCDwn5GI8J+RiPCfkYggdG9wXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsTCxMLEwsTCxMLF0sIPCfkYjwn5GI8J+RiCBib3R0b21cbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICxMLEwsTCxMLEwsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyBdXG4gICAgICAgICAgICAgICAgLy8gdGhpcmQgaXRlcmF0aW9uIHdpdGggd2VpZ2h0ID0gNSAodGhlIGxvb3AgbXVzdCBicmVhaylcbiAgICAgICAgICAgICAgICAvLyBbXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsTCxMLEwsTCxMLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsTCxMLEwsTCxMLF0sIPCfkYjwn5GI8J+RiCBib3R0b21cbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICxMLEwsTCxMLEwsXSwg8J+RiPCfkYjwn5GIIHRvcFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLEwsTCxMLEwsTCxdLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vIF1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHRvcFJvd0Nyb3NzZWRIYWxmSGVpZ2h0ID0gdG9wID4gYm90dG9tO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vTW9yZUhvcml6b250YWxMaW5lc1RvRHJhdyA9IHRvcFJvd0Nyb3NzZWRIYWxmSGVpZ2h0O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcGl4ZWxzTXVzdFJlbWFpbkluc2lkZUNvbXBvbmVudEFyZWEgPSBjb3ZlcmFnZU1vZGUgPT09ICdjb3VudFBlcmltZXRlcnMnO1xuXG4gICAgICAgICAgICAgICAgaWYgKHBpeGVsc011c3RSZW1haW5JbnNpZGVDb21wb25lbnRBcmVhICYmIG5vTW9yZUhvcml6b250YWxMaW5lc1RvRHJhdykgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBsb29wIGNvbmRpdGlvbiwgaGVyZSBpdCdzIG1vcmUgcmVhZGFibGVcbiAgICAgICAgICAgICAgICBjb25zdCBpc0F0VGhlUmlnaHRPZlRoZVZpZXdwb3J0ID1cbiAgICAgICAgICAgICAgICAgICAgY3VycmVudExlZnQgPj0gcmVjdExlZnQgLSBvZmZzZXRMZWZ0ICsgcmVjdFdpZHRoIHx8IGN1cnJlbnRMZWZ0ID49IGNvbHVtbkxlbmd0aDtcbiAgICAgICAgICAgICAgICBpZiAoaXNBdFRoZVJpZ2h0T2ZUaGVWaWV3cG9ydCkgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpc0F0VGhlTGVmdE9mVGhlVmlld3BvcnQgPSBjdXJyZW50TGVmdCA8IDA7IC8vIGNhbiBoYXBwZW4gZm9yIGVsZW1lbnRzIHBsYWNlZCBvdXRzaWRlIHRoZSB2aWV3cG9ydFxuICAgICAgICAgICAgICAgIGlmIChpc0F0VGhlTGVmdE9mVGhlVmlld3BvcnQpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gXCJEcmF3XCIgdGhlIHRvcCByb3dcbiAgICAgICAgICAgICAgICAvLyBbXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgIPCfkYnwn5GJ8J+RiSBbICwgLCAsICwgLEwsTCxMLEwsTCxdLCDwn5GI8J+RiPCfkYhcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICxMLCAsICwgLEwsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICxMLEwsTCxMLEwsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyBdXG4gICAgICAgICAgICAgICAgY29uc3QgdG9wUm93SXNJbnNpZGVUaGVWaWV3cG9ydCA9IHRvcCA+PSAwICYmIHRvcCA8IHJvd0xlbmd0aDtcbiAgICAgICAgICAgICAgICBpZiAodG9wUm93SXNJbnNpZGVUaGVWaWV3cG9ydCkge1xuICAgICAgICAgICAgICAgICAgICBzZXRCaXRtYXBQaXhlbCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXAsXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiBjdXJyZW50TGVmdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwaXhlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBnZXRSZWN0Q29vcmRpbmF0ZShlbGVtZW50UmVjdCwgJ3dpZHRoJyksXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3ZlcmFnZU1vZGUgPT09ICdjb3VudENvbXBvbmVudHMnKVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGdvYWwgaXMgd3JpdGUgb25lIHBpeGVsIGZvciBldmVyeSByb3dcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFwiRHJhd1wiIHRoZSBib3R0b20gcm93XG4gICAgICAgICAgICAgICAgLy8gW1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLEwsTCxMLEwsTCxdLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLEwsICwgLCAsTCxdLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICDwn5GJ8J+RifCfkYkgWyAsICwgLCAsICxMLEwsTCxMLEwsXSwg8J+RiPCfkYjwn5GIXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gXVxuICAgICAgICAgICAgICAgIGNvbnN0IGJvdHRvbVJvd0lzSW5zaWRlVGhlVmlld3BvcnQgPSBib3R0b20gPj0gMCAmJiBib3R0b20gPCByb3dMZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKGJvdHRvbVJvd0lzSW5zaWRlVGhlVmlld3BvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0Qml0bWFwUGl4ZWwoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiBib3R0b20sXG4gICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXAsXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiBjdXJyZW50TGVmdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwaXhlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBnZXRSZWN0Q29vcmRpbmF0ZShlbGVtZW50UmVjdCwgJ3dpZHRoJyksXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gXCJEcmF3XCIgdGhlIGNvbHVtbnMgaW4gYml0bWFwXG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gTWF0aC5mbG9vcihyZWN0TGVmdCAtIG9mZnNldExlZnQgKyB3ZWlnaHRMaW5lKTtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gTWF0aC5mbG9vcihyZWN0TGVmdCAtIG9mZnNldExlZnQgKyByZWN0V2lkdGggLSAxIC0gd2VpZ2h0TGluZSk7XG4gICAgICAgICAgICBmb3IgKGxldCBjdXJyZW50VG9wID0gTWF0aC5mbG9vcihyZWN0VG9wIC0gb2Zmc2V0VG9wKTsgOyBjdXJyZW50VG9wKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoY292ZXJhZ2VNb2RlID09PSAnY291bnRDb21wb25lbnRzJylcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGdvYWwgaXMgd3JpdGUgb25lIHBpeGVsIGZvciBldmVyeSByb3dcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAvLyBIYXBwZW5zIHdoZW4gdGhlIHdlaWdodCBpcyBoaWdoZXIgdGhhbiBoYWxmIHRoZSBoZWlnaHQgb2YgdGhlIGVsZW1lbnQsIGFuZCBzbyB0b3AgYW5kIGJvdHRvbSBmbGlwLiBMb29rIGF0IG5vTW9yZUhvcml6b250YWxMaW5lc1RvRHJhdydzIGNvbW1lbnRcbiAgICAgICAgICAgICAgICBjb25zdCBub01vcmVWZXJ0aWNhbExpbmVzVG9EcmF3ID0gbGVmdCA+IHJpZ2h0O1xuICAgICAgICAgICAgICAgIGlmIChub01vcmVWZXJ0aWNhbExpbmVzVG9EcmF3KSBicmVhaztcblxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGxvb3AgY29uZGl0aW9uLCBoZXJlIGl0J3MgbW9yZSByZWFkYWJsZVxuICAgICAgICAgICAgICAgIGNvbnN0IGlzQXRUaGVCb3R0b21PZlRoZVZpZXdwb3J0ID1cbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRvcCA+PSByZWN0VG9wIC0gb2Zmc2V0VG9wICsgcmVjdEhlaWdodCAtIDEgfHwgY3VycmVudFRvcCA+IHJvd0xlbmd0aDtcblxuICAgICAgICAgICAgICAgIGlmIChpc0F0VGhlQm90dG9tT2ZUaGVWaWV3cG9ydCkgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpc0F0VGhlVG9wT2ZUaGVWaWV3cG9ydCA9IGN1cnJlbnRUb3AgPCAwOyAvLyBjYW4gaGFwcGVuIGZvciBlbGVtZW50cyBwbGFjZWQgb3V0c2lkZSB0aGUgdmlld3BvcnRcbiAgICAgICAgICAgICAgICBpZiAoaXNBdFRoZVRvcE9mVGhlVmlld3BvcnQpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gXCJEcmF3XCIgdGhlIGxlZnQgY29sdW1uXG4gICAgICAgICAgICAgICAgLy8gW1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAg8J+Rh1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAg8J+Rh1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAg8J+Rh1xuICAgICAgICAgICAgICAgIC8vICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgWyAsICwgLCAsICxMLEwsTCxMLEwsXSxcbiAgICAgICAgICAgICAgICAvLyAgICBbICwgLCAsICwgLEwsICwgLCAsTCxdLFxuICAgICAgICAgICAgICAgIC8vICAgIFsgLCAsICwgLCAsTCxMLEwsTCxMLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICDwn5GGXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICDwn5GGXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICDwn5GGXG4gICAgICAgICAgICAgICAgLy8gXVxuICAgICAgICAgICAgICAgIGNvbnN0IGxlZnRDb2x1bW5Jc0luc2lkZVRoZVZpZXdwb3J0ID1cbiAgICAgICAgICAgICAgICAgICAgbGVmdCA+PSAwICYmIGN1cnJlbnRUb3AgPCByb3dMZW5ndGggJiYgbGVmdCA8IGNvbHVtbkxlbmd0aDtcblxuICAgICAgICAgICAgICAgIGlmIChsZWZ0Q29sdW1uSXNJbnNpZGVUaGVWaWV3cG9ydCkge1xuICAgICAgICAgICAgICAgICAgICBzZXRCaXRtYXBQaXhlbCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgYml0bWFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiBjdXJyZW50VG9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHBpeGVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGdldFJlY3RDb29yZGluYXRlKGVsZW1lbnRSZWN0LCAnd2lkdGgnKSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gXCJEcmF3XCIgdGhlIHJpZ2h0IGNvbHVtblxuICAgICAgICAgICAgICAgIC8vIFtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAg8J+Rh1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICDwn5GHXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIPCfkYdcbiAgICAgICAgICAgICAgICAvLyAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgIFsgLCAsICwgLCAsTCxMLEwsTCxMLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgWyAsICwgLCAsICxMLCAsICwgLEwsXSxcbiAgICAgICAgICAgICAgICAvLyAgICBbICwgLCAsICwgLEwsTCxMLEwsTCxdLFxuICAgICAgICAgICAgICAgIC8vICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICDwn5GGXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIPCfkYZcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAg8J+RhlxuICAgICAgICAgICAgICAgIC8vIF1cbiAgICAgICAgICAgICAgICBjb25zdCByaWd0aHRDb2x1bW5Jc0luc2lkZVRoZVZpZXdwb3J0ID1cbiAgICAgICAgICAgICAgICAgICAgcmlnaHQgPj0gMCAmJiBjdXJyZW50VG9wIDwgcm93TGVuZ3RoICYmIHJpZ2h0IDwgY29sdW1uTGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmIChyaWd0aHRDb2x1bW5Jc0luc2lkZVRoZVZpZXdwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEJpdG1hcFBpeGVsKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogY3VycmVudFRvcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IHJpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHBpeGVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGdldFJlY3RDb29yZGluYXRlKGVsZW1lbnRSZWN0LCAnd2lkdGgnKSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcGl4ZWxDb3VudHMgPSBjcmVhdGVQaXhlbENvdW50cygpO1xuICAgIGZvciAobGV0IGkgPSAwLCBuID0gYml0bWFwLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICBwaXhlbENvdW50c1tiaXRtYXBbaV1dKys7XG4gICAgfVxuXG4gICAgaWYgKHByaW50QXNjaWlBcnQpIHtcbiAgICAgICAgbG9nQml0bWFwKHtcbiAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgIGJpdG1hcCxcbiAgICAgICAgICAgIHdpZHRoOiBnZXRSZWN0Q29vcmRpbmF0ZShlbGVtZW50UmVjdCwgJ3dpZHRoJyksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIGJpdG1hcCxcbiAgICAgICAgcGl4ZWxDb3VudHMsXG4gICAgICAgIGR1cmF0aW9uOiBEYXRlLm5vdygpIC0gc3RhcnQsXG4gICAgfTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBO0FBK0NNLFNBQVUsV0FBVyxDQUFDLE1BQWMsRUFBQTtBQUN0QyxJQUFBLE1BQU0sRUFDRixNQUFNLEVBQ04sTUFBTSxFQUNOLFdBQVcsRUFDWCxZQUFZLEVBQ1osWUFBWSxFQUNaLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIscUJBQXFCLEdBQ3hCLEdBQUcsTUFBTSxDQUFDO0FBRVgsSUFBQSxNQUFNLEtBQUssR0FBaUIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBRXZDLElBQUEsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUN2QixpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLEVBQ3hDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FDMUMsQ0FBQztBQUVGLElBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNqRCxRQUFBLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQyxRQUFBLElBQUksQ0FBQyxTQUFTO0FBQ1YsWUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUEsc0NBQUEsQ0FBd0MsQ0FBQyxDQUFDO1FBRWxGLE1BQU0sRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLHNCQUFzQixFQUFFLGVBQWUsRUFBRSxHQUFHLFNBQVMsQ0FBQztRQUVyRixNQUFNLHVCQUF1QixHQUFrQixzQkFBc0I7Y0FDL0Qsb0JBQW9CO2NBQ3BCLGVBQWUsQ0FBQztBQUV0QixRQUFBLE1BQU0s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
import type { DsVisualCoverageDeNormalizedResult, Logger } from '../types';
declare type Params = {
type Params = {
results: DsVisualCoverageDeNormalizedResult[];

@@ -4,0 +4,0 @@ logger: Logger;

import type { ComponentType, PixelCounts } from '../types';
declare type Params = {
type Params = {
componentType: ComponentType;

@@ -4,0 +4,0 @@ pixelCounts: PixelCounts;

import type { ChildData, ColorByPixelType, WeightByComponentName } from '../types';
declare type LoopParams = {
type LoopParams = {
childrenData: ChildData[];

@@ -4,0 +4,0 @@ svgRenderer: SVGSVGElement;

@@ -1,2 +0,2 @@

export type { Rect, Pixel, Bitmap, Logger, ChildData, TreeStats, PixelCounts, Milliseconds, CoverageMode, ComponentType, HighestNumber, ColorByPixelType, PixelByPixelType, CoverageContainer, ReadableCharByPixel, WeightByComponentName, DsVisualCoverageResult, DsVisualCoverageRunResult, CoverageContainerDomAttributeValue, DsVisualCoverageDeNormalizedResult, } from './types';
export type { Rect, Pixel, Bitmap, Logger, ChildData, PixelCounts, Milliseconds, CoverageMode, ComponentType, HighestNumber, ColorByPixelType, PixelByPixelType, CoverageContainer, ReadableCharByPixel, WeightByComponentName, DsVisualCoverageResult, DsVisualCoverageRunResult, CoverageContainerDomAttributeValue, DsVisualCoverageDeNormalizedResult, } from './types';
export { logBitmap } from './bitmap/logBitmap';

@@ -6,9 +6,9 @@ export { countPixels } from './core/countPixels';

export { setBitmapPixel } from './bitmap/setBitmapPixel';
export { createTreeStats } from './utils/createTreeStats';
export { getComponentType } from './core/getComponentType';
export { addSvgRectangles } from './debug/addSvgRectangles';
export { calculateCoverage } from './core/calculateCoverage';
export { calculateTreeStats } from './utils/calculateTreeStats';
export { createPixelCounts } from './core/createPixelCounts';
export { createLogger, isActiveLogger } from './utils/createLogger';
export { filterOutEmptyContainers } from './core/filterOutEmptyContainers';
export { isEmptyCoverageContainer } from './core/isEmptyCoverageContainer';
export { getPixelCountByComponentType } from './core/getPixelCountByComponentType';

@@ -15,0 +15,0 @@ export { getDenormalizedCoverageResult } from './utils/getDenormalizedCoverageResult';

@@ -5,9 +5,9 @@ export { logBitmap } from './bitmap/logBitmap.js';

export { setBitmapPixel } from './bitmap/setBitmapPixel.js';
export { createTreeStats } from './utils/createTreeStats.js';
export { getComponentType } from './core/getComponentType.js';
export { addSvgRectangles } from './debug/addSvgRectangles.js';
export { calculateCoverage } from './core/calculateCoverage.js';
export { calculateTreeStats } from './utils/calculateTreeStats.js';
export { createPixelCounts } from './core/createPixelCounts.js';
export { createLogger, isActiveLogger } from './utils/createLogger.js';
export { filterOutEmptyContainers } from './core/filterOutEmptyContainers.js';
export { isEmptyCoverageContainer } from './core/isEmptyCoverageContainer.js';
export { getPixelCountByComponentType } from './core/getPixelCountByComponentType.js';

@@ -14,0 +14,0 @@ export { getDenormalizedCoverageResult } from './utils/getDenormalizedCoverageResult.js';

import type { ComponentNames } from '@preply/ds-visual-coverage-component-names';
import { coverageContainerDomAttributeName } from './core/constants';
export declare type CoverageContainer<TEAM extends string = string, COMPONENT extends string = string> = {
export type CoverageContainer<TEAM extends string = string, COMPONENT extends string = string> = {
team: TEAM;

@@ -12,4 +12,4 @@ component: COMPONENT;

*/
export declare type CoverageContainerDomAttributeName = typeof coverageContainerDomAttributeName;
export declare type CoverageContainerDomAttributeValue = string;
export type CoverageContainerDomAttributeName = typeof coverageContainerDomAttributeName;
export type CoverageContainerDomAttributeValue = string;
/**

@@ -34,14 +34,13 @@ * Virtual representation of the pixels of the page. Its length is the page's width*height

*/
export declare type Bitmap = Uint8Array;
export declare type EmptyPixel = 0;
export declare type NonDsComponentPixel = 1;
export declare type DsComponentPixels = 2 | 3 | 4 | 5 | 6 | 7 | 8;
export declare type ComponentPixels = NonDsComponentPixel | DsComponentPixels;
export declare type Pixel = EmptyPixel | ComponentPixels;
export declare type HighestNumber = 8;
export declare type ComponentType = 'nonDsComponent' | 'uiDsComponent' | 'utilDsComponent' | 'rebrandComponent' | 'layoutDsComponent' | 'unknownDsComponent' | 'dsCandidateComponent' | 'outdatedDsComponent';
export declare type PixelType = 'emptyPixel' | ComponentType;
export declare type DsVisualCoverageResult = {
export type Bitmap = Uint8Array;
export type EmptyPixel = 0;
export type NonDsComponentPixel = 1;
export type DsComponentPixels = 2 | 3 | 4 | 5 | 6 | 7 | 8;
export type ComponentPixels = NonDsComponentPixel | DsComponentPixels;
export type Pixel = EmptyPixel | ComponentPixels;
export type HighestNumber = 8;
export type ComponentType = 'nonDsComponent' | 'uiDsComponent' | 'utilDsComponent' | 'rebrandComponent' | 'layoutDsComponent' | 'unknownDsComponent' | 'dsCandidateComponent' | 'outdatedDsComponent';
export type PixelType = 'emptyPixel' | ComponentType;
export type DsVisualCoverageResult = {
stopped: boolean;
treeStats: TreeStats;
duration: Duration;

@@ -51,9 +50,9 @@ pixelCounts: PixelCounts;

};
declare type Percentage = number;
export declare type Coverage = Percentage;
type Percentage = number;
export type Coverage = Percentage;
/**
* See countPixels for the differences between the two modes.
*/
export declare type CoverageMode = 'countComponents' | 'countPerimeters';
export declare type DsVisualCoverageDeNormalizedResult = DsVisualCoverageResult & {
export type CoverageMode = 'countComponents' | 'countPerimeters';
export type DsVisualCoverageDeNormalizedResult = DsVisualCoverageResult & {
team: string;

@@ -65,3 +64,3 @@ component: string;

};
export declare type DsVisualCoverageRunResult = {
export type DsVisualCoverageRunResult = {
stopped: boolean;

@@ -71,10 +70,5 @@ totalDuration: Milliseconds;

};
declare type ComponentName = string;
export declare type TreeStats = {
totalComponentsByName: Record<ComponentName, number>;
totalComponentsByType: Record<ComponentType, number>;
};
export declare type Logger = (...args: unknown[]) => void;
export declare type PixelCounts = Uint32Array;
export declare type Coordinates = {
export type Logger = (...args: unknown[]) => void;
export type PixelCounts = Uint32Array;
export type Coordinates = {
top: number;

@@ -85,6 +79,6 @@ left: number;

};
export declare type TopLeftWidthHeight = Uint16Array;
export declare type Rect = TopLeftWidthHeight;
export declare type Milliseconds = number;
export declare type Duration = {
export type TopLeftWidthHeight = Uint16Array;
export type Rect = TopLeftWidthHeight;
export type Milliseconds = number;
export type Duration = {
blockingDuration: Milliseconds;

@@ -95,3 +89,3 @@ nonBlockingDuration: Milliseconds;

};
export declare type ChildData = {
export type ChildData = {
rect: Rect;

@@ -102,9 +96,9 @@ dsComponentType: ComponentType;

};
export declare type RgbColor = string;
export declare type ReadableChar = string;
export declare type WeightByComponentName = Record<'emptyPixel' | 'nonDsComponent' | 'unknownDsComponent' | ComponentNames, number>;
export declare type PixelByPixelType = Record<PixelType, Pixel>;
export declare type ColorByPixelType = Record<PixelType, RgbColor>;
export declare type ReadableCharByPixel = Record<Pixel, ReadableChar>;
export type RgbColor = string;
export type ReadableChar = string;
export type WeightByComponentName = Record<'emptyPixel' | 'nonDsComponent' | 'unknownDsComponent' | ComponentNames, number>;
export type PixelByPixelType = Record<PixelType, Pixel>;
export type ColorByPixelType = Record<PixelType, RgbColor>;
export type ReadableCharByPixel = Record<Pixel, ReadableChar>;
export {};
//# sourceMappingURL=types.d.ts.map
import type { CoverageContainer, DsVisualCoverageDeNormalizedResult, DsVisualCoverageResult, Rect } from '../types';
declare type Params = {
type Params = {
result: DsVisualCoverageResult;

@@ -4,0 +4,0 @@ dsVisualCoverageContainerData: {

{
"name": "@preply/ds-visual-coverage-core",
"version": "0.97.1",
"version": "0.97.2",
"publishConfig": {

@@ -16,3 +16,3 @@ "access": "public"

"lint": "run --top-level eslint --ext .js,.ts,.tsx,.mdx *.config.js src/",
"test": "run --top-level jest --coverage",
"test": "run --top-level vitest --coverage --watch=false",
"build": "NODE_ENV=production && run build:rollup",

@@ -23,8 +23,8 @@ "build:rollup": "run --top-level rollup -c rollup.config.js",

"dependencies": {
"@preply/ds-visual-coverage-component-names": "0.97.1"
"@preply/ds-visual-coverage-component-names": "0.97.2"
},
"peerDependencies": {
"@preply/ds-visual-coverage-component-names": "0.97.1"
"@preply/ds-visual-coverage-component-names": "0.97.2"
},
"gitHead": "4f0b9b1b6e755137bf53d7f19f5b2833f6609053"
"gitHead": "baae2278c4ff001f6e4381207576816c74cc7146"
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc