@datagrok-libraries/utils 4.1.2 → 4.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "fullName": "Utils",
7
- "version": "4.1.2",
7
+ "version": "4.1.3",
8
8
  "description": "Common utilities",
9
9
  "dependencies": {
10
10
  "cash-dom": "^8.1.1",
@@ -1 +1 @@
1
- {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["transform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGtC,wEAAwE;AACxE,UAAU,UAAU;IAClB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACnG,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CACnG;AA+CD,mFAAmF;AACnF,qBAAa,QAAQ;IACnB,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC;IACf,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC;IAChB,IAAI,EAAE,OAAO,CAAS;IACtB,IAAI,EAAE,OAAO,CAAS;IACtB,QAAQ,EAAE,OAAO,CAAS;IAC1B,QAAQ,EAAE,OAAO,CAAS;IAE1B,IAAI,EAAE,IAAI,UAAU,CAAuD;IAC3E,IAAI,EAAE,IAAI,UAAU,CAAuD;gBAE/D,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,UAAQ,EAAE,IAAI,UAAQ;IAOvE,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAKhC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAKhC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAKhC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAKhC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK;IACnC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK;IAEnC,kBAAkB,CAAC,CAAC,EAAE,wBAAwB,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,SAAS,GAAG,IAAI;CAU9G"}
1
+ {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["transform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAKtC,wEAAwE;AACxE,UAAU,UAAU;IAClB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACnG,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CACnG;AA+CD,mFAAmF;AACnF,qBAAa,QAAQ;IACnB,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC;IACf,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC;IAChB,IAAI,EAAE,OAAO,CAAS;IACtB,IAAI,EAAE,OAAO,CAAS;IACtB,QAAQ,EAAE,OAAO,CAAS;IAC1B,QAAQ,EAAE,OAAO,CAAS;IAE1B,IAAI,EAAE,IAAI,UAAU,CAAuD;IAC3E,IAAI,EAAE,IAAI,UAAU,CAAuD;gBAE/D,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,UAAQ,EAAE,IAAI,UAAQ;IAOvE,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAKhC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAKhC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAKhC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAKhC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK;IACnC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK;IAEnC,kBAAkB,CAAC,CAAC,EAAE,wBAAwB,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,SAAS,GAAG,IAAI;CAU9G"}
package/src/transform.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import * as DG from 'datagrok-api/dg';
2
+ const minLogFloat = 1e-30;
2
3
  /** Linear transformation */
3
4
  class _LinearTransform {
4
5
  screenToWorld(screen, length, min, max, inverse) {
@@ -14,7 +15,7 @@ class _LinearTransform {
14
15
  /** Log transformation */
15
16
  class _LogTransform {
16
17
  screenToWorld(screen, length, min, max, inverse) {
17
- min = (min < 0.00000001 ? 0.00000001 : min);
18
+ min = (min < minLogFloat ? minLogFloat : min);
18
19
  const maxLog = Math.log(max);
19
20
  const minLog = Math.log(min);
20
21
  return Math.exp(minLog + (maxLog - minLog) * (inverse ? length - screen : screen) / length);
@@ -23,12 +24,12 @@ class _LogTransform {
23
24
  if (world <= 0)
24
25
  return NaN;
25
26
  //eliminates problems with rounding
26
- if (world === min)
27
+ if (Math.abs(world - min) < minLogFloat)
27
28
  return inverse ? length : 0.0;
28
- if (world === max)
29
+ if (Math.abs(world - max) < minLogFloat)
29
30
  return inverse ? 0.0 : length;
30
- min = (min < 0.00000001 ? 0.00000001 : min);
31
- world = (world < 0.00000001 ? 0.00000001 : world);
31
+ min = (min < minLogFloat ? minLogFloat : min);
32
+ world = (world < minLogFloat ? minLogFloat : world);
32
33
  const res = (length * Math.log(world / min) / Math.log(max / min));
33
34
  return inverse ? length - res : res;
34
35
  }
@@ -72,4 +73,4 @@ export class Viewport {
72
73
  }
73
74
  }
74
75
  }
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidHJhbnNmb3JtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFVdEMsNEJBQTRCO0FBQzVCLE1BQU0sZ0JBQWdCO0lBQ3BCLGFBQWEsQ0FBQyxNQUFjLEVBQUUsTUFBYyxFQUFFLEdBQVcsRUFBRSxHQUFXLEVBQUUsT0FBaUI7UUFDdkYsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQSxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUN6RCxPQUFPLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFhLEVBQUUsTUFBYyxFQUFFLEdBQVcsRUFBRSxHQUFXLEVBQUUsT0FBaUI7UUFDdEYsT0FBTyxPQUFPLENBQUMsQ0FBQztZQUNkLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNoRCxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0lBQzNDLENBQUM7Q0FDRjtBQUdELHlCQUF5QjtBQUN6QixNQUFNLGFBQWE7SUFDakIsYUFBYSxDQUFDLE1BQWMsRUFBRSxNQUFjLEVBQUUsR0FBVyxFQUFFLEdBQVcsRUFBRSxPQUFpQjtRQUN2RixHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTVDLE1BQU0s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SUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTlHLGtCQUFrQixDQUFDLENBQTJCLEVBQUUsS0FBMEIsRUFBRSxLQUEwQjtRQUNwRyxJQUFJLEtBQUssRUFBRTtZQUNULEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQ3JFLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN4RDtRQUNELElBQUksS0FBSyxFQUFFO1lBQ1QsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFDckUsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3hEO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcblxuXG4vKiogUmVwcmVzZW50cyAxRCB0cmFuc2Zvcm1hdGlvbiBiZXR3ZWVuIHNjcmVlbiBhbmQgd29ybGQgY29vcmRpbmF0ZXMgKi9cbmludGVyZmFjZSBJVHJhbnNmb3JtIHtcbiAgc2NyZWVuVG9Xb3JsZChzY3JlZW46IG51bWJlciwgbGVuZ3RoOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlciwgaW52ZXJzZT86IGJvb2xlYW4pOiBudW1iZXI7XG4gIHdvcmxkVG9TY3JlZW4od29ybGQ6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlciwgaW52ZXJzZT86IGJvb2xlYW4pOiBudW1iZXI7XG59XG5cblxuLyoqIExpbmVhciB0cmFuc2Zvcm1hdGlvbiAqL1xuY2xhc3MgX0xpbmVhclRyYW5zZm9ybSBpbXBsZW1lbnRzIElUcmFuc2Zvcm0ge1xuICBzY3JlZW5Ub1dvcmxkKHNjcmVlbjogbnVtYmVyLCBsZW5ndGg6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyLCBpbnZlcnNlPzogYm9vbGVhbik6IG51bWJlciB7XG4gICAgY29uc3QgZCA9IGludmVyc2UgPyAxIC0gc2NyZWVuIC8gbGVuZ3RoOiBzY3JlZW4gLyBsZW5ndGg7XG4gICAgcmV0dXJuIG1pbiArIGQgKiAobWF4IC0gbWluKTtcbiAgfVxuXG4gIHdvcmxkVG9TY3JlZW4od29ybGQ6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlciwgaW52ZXJzZT86IGJvb2xlYW4pOiBudW1iZXIge1xuICAgIHJldHVybiBpbnZlcnNlID9cbiAgICAgICgoMSAtICgod29ybGQgLSBtaW4pKSAvIChtYXggLSBtaW4pKSAqIGxlbmd0aCkgOlxuICAgICAgKCh3b3JsZCAtIG1pbikgLyAobWF4IC0gbWluKSAqIGxlbmd0aCk7XG4gIH1cbn1cblxuXG4vKiogTG9nIHRyYW5zZm9ybWF0aW9uICovXG5jbGFzcyBfTG9nVHJhbnNmb3JtIGltcGxlbWVudHMgSVRyYW5zZm9ybSB7XG4gIHNjcmVlblRvV29ybGQoc2NyZWVuOiBudW1iZXIsIGxlbmd0aDogbnVtYmVyLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIsIGludmVyc2U/OiBib29sZWFuKTogbnVtYmVyIHtcbiAgICBtaW4gPSAobWluIDwgMC4wMDAwMDAwMSA/IDAuMDAwMDAwMDEgOiBtaW4pO1xuXG4gICAgY29uc3QgbWF4TG9nID0gTWF0aC5sb2cobWF4KTtcbiAgICBjb25zdCBtaW5Mb2cgPSBNYXRoLmxvZyhtaW4pO1xuICAgIHJldHVybiBNYXRoLmV4cChtaW5Mb2cgKyAobWF4TG9nIC0gbWluTG9nKSAqIChpbnZlcnNlID8gbGVuZ3RoIC0gc2NyZWVuIDogc2NyZWVuKSAvIGxlbmd0aCk7XG4gIH1cblxuICB3b3JsZFRvU2NyZWVuKHdvcmxkOiBudW1iZXIsIGxlbmd0aDogbnVtYmVyLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIsIGludmVyc2U/OiBib29sZWFuKTogbnVtYmVyIHtcbiAgICBpZiAod29ybGQgPD0gMCkgcmV0dXJuIE5hTjtcblxuICAgIC8vZWxpbWluYXRlcyBwcm9ibGVtcyB3aXRoIHJvdW5kaW5nXG4gICAgaWYgKHdvcmxkID09PSBtaW4pIHJldHVybiBpbnZlcnNlID8gbGVuZ3RoIDogMC4wO1xuICAgIGlmICh3b3JsZCA9PT0gbWF4KSByZXR1cm4gaW52ZXJzZSA/IDAuMCA6IGxlbmd0aDtcblxuICAgIG1pbiA9IChtaW4gPCAwLjAwMDAwMDAxID8gMC4wMDAwMDAwMSA6IG1pbik7XG4gICAgd29ybGQgPSAod29ybGQgPCAwLjAwMDAwMDAxID8gMC4wMDAwMDAwMSA6IHdvcmxkKTtcblxuICAgIGNvbnN0IHJlcyA9IChsZW5ndGggKiBNYXRoLmxvZyh3b3JsZCAvIG1pbikgLyBNYXRoLmxvZyhtYXggLyBtaW4pKTtcbiAgICByZXR1cm4gaW52ZXJzZSA/IGxlbmd0aCAtIHJlcyA6IHJlcztcbiAgfVxufVxuXG5jb25zdCBsaW5lYXJUcmFuc2Zvcm0gPSBuZXcgX0xpbmVhclRyYW5zZm9ybSgpO1xuY29uc3QgbG9nVHJhbnNmb3JtID0gbmV3IF9Mb2dUcmFuc2Zvcm0oKTtcblxuXG4vKiogUHJvdmlkZXMgY29udmVuaWVudCBtZXRob2RzIGZvciBtYXBwaW5nIGJldHdlZW4gc2NyZWVuIGFuZCB3b3JsZCBjb29yZGluYXRlcyAqL1xuZXhwb3J0IGNsYXNzIFZpZXdwb3J0IHtcbiAgd29ybGQ6IERHLlJlY3Q7XG4gIHNjcmVlbjogREcuUmVjdDtcbiAgbG9nWDogYm9vbGVhbiA9IGZhbHNlO1xuICBsb2dZOiBib29sZWFuID0gZmFsc2U7XG4gIGludmVyc2VYOiBib29sZWFuID0gZmFsc2U7XG4gIGludmVyc2VZOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZ2V0IHh0KCk6IElUcmFuc2Zvcm0geyByZXR1cm4gdGhpcy5sb2dYID8gbG9nVHJhbnNmb3JtIDogbGluZWFyVHJhbnNmb3JtOyB9XG4gIGdldCB5dCgpOiBJVHJhbnNmb3JtIHsgcmV0dXJuIHRoaXMubG9nWSA/IGxvZ1RyYW5zZm9ybSA6IGxpbmVhclRyYW5zZm9ybTsgfVxuXG4gIGNvbnN0cnVjdG9yKHdvcmxkOiBERy5SZWN0LCBzY3JlZW46IERHLlJlY3QsIGxvZ1ggPSBmYWxzZSwgbG9nWSA9IGZhbHNlKSB7XG4gICAgdGhpcy53b3JsZCA9IHdvcmxkO1xuICAgIHRoaXMuc2NyZWVuID0gc2NyZWVuO1xuICAgIHRoaXMubG9nWCA9IGxvZ1g7XG4gICAgdGhpcy5sb2dZID0gbG9nWTtcbiAgfVxuXG4gIHhUb1NjcmVlbih3b3JsZDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zY3JlZW4ubGVmdCArIHRoaXMueHQud29ybGRUb1NjcmVlbih3b3JsZCwgdGhpcy5zY3JlZW4ud2lkdGgsXG4gICAgICB0aGlzLndvcmxkLm1pblgsIHRoaXMud29ybGQubWF4WCwgdGhpcy5pbnZlcnNlWCk7XG4gIH1cblxuICB5VG9TY3JlZW4od29ybGQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc2NyZWVuLnRvcCArIHRoaXMueXQud29ybGRUb1NjcmVlbih3b3JsZCwgdGhpcy5zY3JlZW4uaGVpZ2h0LFxuICAgICAgdGhpcy53b3JsZC5taW5ZLCB0aGlzLndvcmxkLm1heFksICF0aGlzLmludmVyc2VZKTtcbiAgfVxuXG4gIHhUb1dvcmxkKHNjcmVlbjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy54dC5zY3JlZW5Ub1dvcmxkKHNjcmVlbiAtIHRoaXMuc2NyZWVuLmxlZnQsIHRoaXMuc2NyZWVuLndpZHRoLFxuICAgICAgdGhpcy53b3JsZC5taW5YLCB0aGlzLndvcmxkLm1heFgsIHRoaXMuaW52ZXJzZVgpO1xuICB9XG5cbiAgeVRvV29ybGQoc2NyZWVuOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnl0LnNjcmVlblRvV29ybGQoc2NyZWVuIC0gdGhpcy5zY3JlZW4udG9wLCB0aGlzLnNjcmVlbi5oZWlnaHQsXG4gICAgICB0aGlzLndvcmxkLm1pblksIHRoaXMud29ybGQubWF4WSwgIXRoaXMuaW52ZXJzZVkpO1xuICB9XG5cbiAgdG9TY3JlZW4od29ybGQ6IERHLlBvaW50KTogREcuUG9pbnQgeyByZXR1cm4gbmV3IERHLlBvaW50KHRoaXMueFRvU2NyZWVuKHdvcmxkLngpLCB0aGlzLnlUb1NjcmVlbih3b3JsZC55KSk7IH1cbiAgdG9Xb3JsZChzY3JlZW46IERHLlBvaW50KTogREcuUG9pbnQgeyByZXR1cm4gbmV3IERHLlBvaW50KHRoaXMueFRvV29ybGQoc2NyZWVuLngpLCB0aGlzLnlUb1dvcmxkKHNjcmVlbi55KSk7IH1cblxuICBkcmF3Q29vcmRpbmF0ZUdyaWQoZzogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCB4QXhpczogREcuUmVjdCB8IHVuZGVmaW5lZCwgeUF4aXM6IERHLlJlY3QgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBpZiAoeEF4aXMpIHtcbiAgICAgIERHLlBhaW50LmhvcnpBeGlzKGcsIHRoaXMud29ybGQubWluWCwgdGhpcy53b3JsZC5tYXhYLCB4QXhpcy54LCB4QXhpcy55LFxuICAgICAgICB4QXhpcy53aWR0aCwgeEF4aXMuaGVpZ2h0LCB0aGlzLmxvZ1gsIHRoaXMuaW52ZXJzZVgpO1xuICAgIH1cbiAgICBpZiAoeUF4aXMpIHtcbiAgICAgIERHLlBhaW50LnZlcnRBeGlzKGcsIHRoaXMud29ybGQubWluWSwgdGhpcy53b3JsZC5tYXhZLCB5QXhpcy54LCB5QXhpcy55LFxuICAgICAgICB5QXhpcy53aWR0aCwgeUF4aXMuaGVpZ2h0LCB0aGlzLmxvZ1ksIHRoaXMuaW52ZXJzZVkpO1xuICAgIH1cbiAgfVxufVxuIl19
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidHJhbnNmb3JtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHdEMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBUzFCLDRCQUE0QjtBQUM1QixNQUFNLGdCQUFnQjtJQUNwQixhQUFhLENBQUMsTUFBYyxFQUFFLE1BQWMsRUFBRSxHQUFXLEVBQUUsR0FBVyxFQUFFLE9BQWlCO1FBQ3ZGLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDekQsT0FBTyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBYSxFQUFFLE1BQWMsRUFBRSxHQUFXLEVBQUUsR0FBVyxFQUFFLE9BQWlCO1FBQ3RGLE9BQU8sT0FBTyxDQUFDLENBQUM7WUFDZCxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDaEQsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztJQUMzQyxDQUFDO0NBQ0Y7QUFHRCx5QkFBeUI7QUFDekIsTUFBTSxhQUFhO0lBQ2pCLGFBQWEsQ0FBQyxNQUFjLEVBQUUsTUFBYyxFQUFFLEdBQVcsRUFBRSxHQUFXLEVBQUUsT0FBaUI7UUFDdkYsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUU5QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFhLEVBQUUsTUFBYyxFQUFFLEdBQVcsRUFBRSxHQUFXLEVBQUUsT0FBaUI7UUFDdEYsSUFBSSxLQUFLLElBQUksQ0FBQztZQUFFLE9BQU8sR0FBRyxDQUFDO1FBRTNCLG1DQUFtQztRQUNuQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLFdBQVc7WUFBRSxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDdkUsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsR0FBRyxXQUFXO1lBQUUsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBRXZFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUMsS0FBSyxHQUFHLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVwRCxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ25FLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDdEMsQ0FBQztDQUNGO0FBRUQsTUFBTSxlQUFlLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO0FBQy9DLE1BQU0sWUFBWSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7QUFHekMsbUZBQW1GO0FBQ25GLE1BQU0sT0FBTyxRQUFRO0lBUW5CLElBQUksRUFBRSxLQUFpQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUMzRSxJQUFJLEVBQUUsS0FBaUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFFM0UsWUFBWSxLQUFjLEVBQUUsTUFBZSxFQUFFLElBQUksR0FBRyxLQUFLLEVBQUUsSUFBSSxHQUFHLEtBQUs7UUFSdkUsU0FBSSxHQUFZLEtBQUssQ0FBQztRQUN0QixTQUFJLEdBQVksS0FBSyxDQUFDO1FBQ3RCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQU14QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQWE7UUFDckIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQ3RFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQWE7UUFDckIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQ3RFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxRQUFRLENBQUMsTUFBYztRQUNyQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFDdkUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxRQUFRLENBQUMsTUFBYztRQUNyQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFDdkUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFlLElBQWMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUcsT0FBTyxDQUFDLE1BQWdCLElBQWMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFOUcsa0JBQWtCLENBQUMsQ0FBMkIsRUFBRSxLQUEwQixFQUFFLEtBQTBCO1FBQ3BHLElBQUksS0FBSyxFQUFFO1lBQ1QsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFDckUsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3hEO1FBQ0QsSUFBSSxLQUFLLEVBQUU7WUFDVCxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUNyRSxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDeEQ7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuXG5cbmNvbnN0IG1pbkxvZ0Zsb2F0ID0gMWUtMzA7XG5cbi8qKiBSZXByZXNlbnRzIDFEIHRyYW5zZm9ybWF0aW9uIGJldHdlZW4gc2NyZWVuIGFuZCB3b3JsZCBjb29yZGluYXRlcyAqL1xuaW50ZXJmYWNlIElUcmFuc2Zvcm0ge1xuICBzY3JlZW5Ub1dvcmxkKHNjcmVlbjogbnVtYmVyLCBsZW5ndGg6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyLCBpbnZlcnNlPzogYm9vbGVhbik6IG51bWJlcjtcbiAgd29ybGRUb1NjcmVlbih3b3JsZDogbnVtYmVyLCBsZW5ndGg6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyLCBpbnZlcnNlPzogYm9vbGVhbik6IG51bWJlcjtcbn1cblxuXG4vKiogTGluZWFyIHRyYW5zZm9ybWF0aW9uICovXG5jbGFzcyBfTGluZWFyVHJhbnNmb3JtIGltcGxlbWVudHMgSVRyYW5zZm9ybSB7XG4gIHNjcmVlblRvV29ybGQoc2NyZWVuOiBudW1iZXIsIGxlbmd0aDogbnVtYmVyLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIsIGludmVyc2U/OiBib29sZWFuKTogbnVtYmVyIHtcbiAgICBjb25zdCBkID0gaW52ZXJzZSA/IDEgLSBzY3JlZW4gLyBsZW5ndGg6IHNjcmVlbiAvIGxlbmd0aDtcbiAgICByZXR1cm4gbWluICsgZCAqIChtYXggLSBtaW4pO1xuICB9XG5cbiAgd29ybGRUb1NjcmVlbih3b3JsZDogbnVtYmVyLCBsZW5ndGg6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyLCBpbnZlcnNlPzogYm9vbGVhbik6IG51bWJlciB7XG4gICAgcmV0dXJuIGludmVyc2UgP1xuICAgICAgKCgxIC0gKCh3b3JsZCAtIG1pbikpIC8gKG1heCAtIG1pbikpICogbGVuZ3RoKSA6XG4gICAgICAoKHdvcmxkIC0gbWluKSAvIChtYXggLSBtaW4pICogbGVuZ3RoKTtcbiAgfVxufVxuXG5cbi8qKiBMb2cgdHJhbnNmb3JtYXRpb24gKi9cbmNsYXNzIF9Mb2dUcmFuc2Zvcm0gaW1wbGVtZW50cyBJVHJhbnNmb3JtIHtcbiAgc2NyZWVuVG9Xb3JsZChzY3JlZW46IG51bWJlciwgbGVuZ3RoOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlciwgaW52ZXJzZT86IGJvb2xlYW4pOiBudW1iZXIge1xuICAgIG1pbiA9IChtaW4gPCBtaW5Mb2dGbG9hdCA/IG1pbkxvZ0Zsb2F0IDogbWluKTtcblxuICAgIGNvbnN0IG1heExvZyA9IE1hdGgubG9nKG1heCk7XG4gICAgY29uc3QgbWluTG9nID0gTWF0aC5sb2cobWluKTtcbiAgICByZXR1cm4gTWF0aC5leHAobWluTG9nICsgKG1heExvZyAtIG1pbkxvZykgKiAoaW52ZXJzZSA/IGxlbmd0aCAtIHNjcmVlbiA6IHNjcmVlbikgLyBsZW5ndGgpO1xuICB9XG5cbiAgd29ybGRUb1NjcmVlbih3b3JsZDogbnVtYmVyLCBsZW5ndGg6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyLCBpbnZlcnNlPzogYm9vbGVhbik6IG51bWJlciB7XG4gICAgaWYgKHdvcmxkIDw9IDApIHJldHVybiBOYU47XG5cbiAgICAvL2VsaW1pbmF0ZXMgcHJvYmxlbXMgd2l0aCByb3VuZGluZ1xuICAgIGlmIChNYXRoLmFicyh3b3JsZCAtIG1pbikgPCBtaW5Mb2dGbG9hdCkgcmV0dXJuIGludmVyc2UgPyBsZW5ndGggOiAwLjA7XG4gICAgaWYgKE1hdGguYWJzKHdvcmxkIC0gbWF4KSA8IG1pbkxvZ0Zsb2F0KSByZXR1cm4gaW52ZXJzZSA/IDAuMCA6IGxlbmd0aDtcblxuICAgIG1pbiA9IChtaW4gPCBtaW5Mb2dGbG9hdCA/IG1pbkxvZ0Zsb2F0IDogbWluKTtcbiAgICB3b3JsZCA9ICh3b3JsZCA8IG1pbkxvZ0Zsb2F0ID8gbWluTG9nRmxvYXQgOiB3b3JsZCk7XG5cbiAgICBjb25zdCByZXMgPSAobGVuZ3RoICogTWF0aC5sb2cod29ybGQgLyBtaW4pIC8gTWF0aC5sb2cobWF4IC8gbWluKSk7XG4gICAgcmV0dXJuIGludmVyc2UgPyBsZW5ndGggLSByZXMgOiByZXM7XG4gIH1cbn1cblxuY29uc3QgbGluZWFyVHJhbnNmb3JtID0gbmV3IF9MaW5lYXJUcmFuc2Zvcm0oKTtcbmNvbnN0IGxvZ1RyYW5zZm9ybSA9IG5ldyBfTG9nVHJhbnNmb3JtKCk7XG5cblxuLyoqIFByb3ZpZGVzIGNvbnZlbmllbnQgbWV0aG9kcyBmb3IgbWFwcGluZyBiZXR3ZWVuIHNjcmVlbiBhbmQgd29ybGQgY29vcmRpbmF0ZXMgKi9cbmV4cG9ydCBjbGFzcyBWaWV3cG9ydCB7XG4gIHdvcmxkOiBERy5SZWN0O1xuICBzY3JlZW46IERHLlJlY3Q7XG4gIGxvZ1g6IGJvb2xlYW4gPSBmYWxzZTtcbiAgbG9nWTogYm9vbGVhbiA9IGZhbHNlO1xuICBpbnZlcnNlWDogYm9vbGVhbiA9IGZhbHNlO1xuICBpbnZlcnNlWTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGdldCB4dCgpOiBJVHJhbnNmb3JtIHsgcmV0dXJuIHRoaXMubG9nWCA/IGxvZ1RyYW5zZm9ybSA6IGxpbmVhclRyYW5zZm9ybTsgfVxuICBnZXQgeXQoKTogSVRyYW5zZm9ybSB7IHJldHVybiB0aGlzLmxvZ1kgPyBsb2dUcmFuc2Zvcm0gOiBsaW5lYXJUcmFuc2Zvcm07IH1cblxuICBjb25zdHJ1Y3Rvcih3b3JsZDogREcuUmVjdCwgc2NyZWVuOiBERy5SZWN0LCBsb2dYID0gZmFsc2UsIGxvZ1kgPSBmYWxzZSkge1xuICAgIHRoaXMud29ybGQgPSB3b3JsZDtcbiAgICB0aGlzLnNjcmVlbiA9IHNjcmVlbjtcbiAgICB0aGlzLmxvZ1ggPSBsb2dYO1xuICAgIHRoaXMubG9nWSA9IGxvZ1k7XG4gIH1cblxuICB4VG9TY3JlZW4od29ybGQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc2NyZWVuLmxlZnQgKyB0aGlzLnh0LndvcmxkVG9TY3JlZW4od29ybGQsIHRoaXMuc2NyZWVuLndpZHRoLFxuICAgICAgdGhpcy53b3JsZC5taW5YLCB0aGlzLndvcmxkLm1heFgsIHRoaXMuaW52ZXJzZVgpO1xuICB9XG5cbiAgeVRvU2NyZWVuKHdvcmxkOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnNjcmVlbi50b3AgKyB0aGlzLnl0LndvcmxkVG9TY3JlZW4od29ybGQsIHRoaXMuc2NyZWVuLmhlaWdodCxcbiAgICAgIHRoaXMud29ybGQubWluWSwgdGhpcy53b3JsZC5tYXhZLCAhdGhpcy5pbnZlcnNlWSk7XG4gIH1cblxuICB4VG9Xb3JsZChzY3JlZW46IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMueHQuc2NyZWVuVG9Xb3JsZChzY3JlZW4gLSB0aGlzLnNjcmVlbi5sZWZ0LCB0aGlzLnNjcmVlbi53aWR0aCxcbiAgICAgIHRoaXMud29ybGQubWluWCwgdGhpcy53b3JsZC5tYXhYLCB0aGlzLmludmVyc2VYKTtcbiAgfVxuXG4gIHlUb1dvcmxkKHNjcmVlbjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy55dC5zY3JlZW5Ub1dvcmxkKHNjcmVlbiAtIHRoaXMuc2NyZWVuLnRvcCwgdGhpcy5zY3JlZW4uaGVpZ2h0LFxuICAgICAgdGhpcy53b3JsZC5taW5ZLCB0aGlzLndvcmxkLm1heFksICF0aGlzLmludmVyc2VZKTtcbiAgfVxuXG4gIHRvU2NyZWVuKHdvcmxkOiBERy5Qb2ludCk6IERHLlBvaW50IHsgcmV0dXJuIG5ldyBERy5Qb2ludCh0aGlzLnhUb1NjcmVlbih3b3JsZC54KSwgdGhpcy55VG9TY3JlZW4od29ybGQueSkpOyB9XG4gIHRvV29ybGQoc2NyZWVuOiBERy5Qb2ludCk6IERHLlBvaW50IHsgcmV0dXJuIG5ldyBERy5Qb2ludCh0aGlzLnhUb1dvcmxkKHNjcmVlbi54KSwgdGhpcy55VG9Xb3JsZChzY3JlZW4ueSkpOyB9XG5cbiAgZHJhd0Nvb3JkaW5hdGVHcmlkKGc6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgeEF4aXM6IERHLlJlY3QgfCB1bmRlZmluZWQsIHlBeGlzOiBERy5SZWN0IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgaWYgKHhBeGlzKSB7XG4gICAgICBERy5QYWludC5ob3J6QXhpcyhnLCB0aGlzLndvcmxkLm1pblgsIHRoaXMud29ybGQubWF4WCwgeEF4aXMueCwgeEF4aXMueSxcbiAgICAgICAgeEF4aXMud2lkdGgsIHhBeGlzLmhlaWdodCwgdGhpcy5sb2dYLCB0aGlzLmludmVyc2VYKTtcbiAgICB9XG4gICAgaWYgKHlBeGlzKSB7XG4gICAgICBERy5QYWludC52ZXJ0QXhpcyhnLCB0aGlzLndvcmxkLm1pblksIHRoaXMud29ybGQubWF4WSwgeUF4aXMueCwgeUF4aXMueSxcbiAgICAgICAgeUF4aXMud2lkdGgsIHlBeGlzLmhlaWdodCwgdGhpcy5sb2dZLCB0aGlzLmludmVyc2VZKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==