@libs-ui/utils 0.2.306 → 0.2.308-0

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.
Files changed (43) hide show
  1. package/communicate-micro.d.ts +1 -1
  2. package/dangerous-object.d.ts +75 -0
  3. package/date.d.ts +9 -9
  4. package/esm2022/base64.mjs +2 -2
  5. package/esm2022/cache.mjs +17 -14
  6. package/esm2022/color.mjs +66 -14
  7. package/esm2022/communicate-micro.mjs +20 -16
  8. package/esm2022/constants.mjs +1 -1
  9. package/esm2022/crypto-3rd.mjs +3 -3
  10. package/esm2022/crypto.mjs +3 -3
  11. package/esm2022/dangerous-object.mjs +143 -0
  12. package/esm2022/date.mjs +15 -15
  13. package/esm2022/dom.mjs +5 -13
  14. package/esm2022/download.mjs +3 -3
  15. package/esm2022/file.mjs +22 -11
  16. package/esm2022/format-number.mjs +9 -6
  17. package/esm2022/format-text.mjs +13 -15
  18. package/esm2022/function-check-embed-frame.mjs +1 -1
  19. package/esm2022/get-smart-axis-scale.mjs +10 -10
  20. package/esm2022/helpers.mjs +119 -38
  21. package/esm2022/http-params.mjs +2 -2
  22. package/esm2022/index.mjs +2 -1
  23. package/esm2022/inject-token.mjs +2 -2
  24. package/esm2022/key-cache.mjs +6 -6
  25. package/esm2022/key-code.mjs +1 -1
  26. package/esm2022/language.mjs +28 -28
  27. package/esm2022/pattern.mjs +1 -1
  28. package/esm2022/random.mjs +2 -2
  29. package/esm2022/two-way-signal-object.mjs +32 -20
  30. package/esm2022/uri.mjs +9 -6
  31. package/esm2022/url-search-params.mjs +13 -11
  32. package/esm2022/uuid.mjs +2 -2
  33. package/esm2022/xss-filter.mjs +1 -1
  34. package/fesm2022/libs-ui-utils.mjs +646 -346
  35. package/fesm2022/libs-ui-utils.mjs.map +1 -1
  36. package/file.d.ts +1 -1
  37. package/format-text.d.ts +1 -1
  38. package/helpers.d.ts +53 -4
  39. package/http-params.d.ts +1 -1
  40. package/index.d.ts +1 -0
  41. package/inject-token.d.ts +1 -1
  42. package/package.json +2 -2
  43. package/uri.d.ts +1 -1
@@ -1,4 +1,4 @@
1
- import { isNil } from "./helpers";
1
+ import { isNil } from './helpers';
2
2
  const DEFAULT_MIN_TICK_COUNT = 5;
3
3
  const DEFAULT_MAX_TICK_COUNT = 10;
4
4
  const MIN_DISTANCE_TO_ZERO = 3;
@@ -65,12 +65,12 @@ export const getSmartAxisScale = (originalMaxData, options) => {
65
65
  }
66
66
  const maxValuePositive = maxValue - Math.abs(minValue);
67
67
  tickCount = maxValuePositive - originalMaxData > Math.abs(step) && tickCount - 1 >= minTickCount ? tickCount - 1 : tickCount;
68
- maxValue = (step * tickCount * scaleDirection) - (minValue * scaleDirection);
68
+ maxValue = step * tickCount * scaleDirection - minValue * scaleDirection;
69
69
  return {
70
70
  stepSize: Math.abs(step),
71
71
  max: maxValue,
72
72
  min: minValue,
73
- tickAmount: tickCount
73
+ tickAmount: tickCount,
74
74
  };
75
75
  }
76
76
  }
@@ -85,7 +85,7 @@ export const getSmartAxisScale = (originalMaxData, options) => {
85
85
  stepSize: Math.abs(step),
86
86
  max: maxValue,
87
87
  min: 0,
88
- tickAmount: minTickCount
88
+ tickAmount: minTickCount,
89
89
  };
90
90
  };
91
91
  // Cache cho các giá trị lũy thừa 10 để tối ưu hiệu suất
@@ -141,7 +141,7 @@ const getStepCandidates = (maxData, minStep, minNegative, acceptStepIsTypeFloat
141
141
  const checkAndSetNegativeSteps = (stepCandidates, acceptNegative, minNegative) => {
142
142
  if (acceptNegative && minNegative < 0) {
143
143
  // Tạo các step âm và thêm vào đầu danh sách
144
- const negativeSteps = [...stepCandidates].map(step => -step);
144
+ const negativeSteps = [...stepCandidates].map((step) => -step);
145
145
  stepCandidates.unshift(...negativeSteps);
146
146
  }
147
147
  };
@@ -154,21 +154,21 @@ const checkAndSetNegativeSteps = (stepCandidates, acceptNegative, minNegative) =
154
154
  const validateInputs = (maxData, options) => {
155
155
  // Kiểm tra maxData âm khi không chấp nhận giá trị âm
156
156
  if (maxData < 0 && !options?.acceptNegative) {
157
- throw new Error("maxData is less than 0 and acceptNegative is false");
157
+ throw new Error('maxData is less than 0 and acceptNegative is false');
158
158
  }
159
159
  if (options?.acceptNegative) {
160
160
  // Kiểm tra minNegative có được cung cấp không
161
161
  if (isNil(options.minNegative)) {
162
- throw new Error("minNegative is required when acceptNegative is true");
162
+ throw new Error('minNegative is required when acceptNegative is true');
163
163
  }
164
164
  // Kiểm tra maxData phải >= minNegative
165
165
  if (maxData < options.minNegative) {
166
- throw new Error("maxData is less than minNegative");
166
+ throw new Error('maxData is less than minNegative');
167
167
  }
168
168
  // Kiểm tra minNegative phải là số âm
169
169
  if (options.minNegative >= 0) {
170
- throw new Error("minNegative must be negative");
170
+ throw new Error('minNegative must be negative');
171
171
  }
172
172
  }
173
173
  };
174
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXNtYXJ0LWF4aXMtc2NhbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzLXVpL3V0aWxzL3NyYy9nZXQtc21hcnQtYXhpcy1zY2FsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDLE1BQU0sc0JBQXNCLEdBQUcsRUFBRSxDQUFDO0FBQ2xDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUIsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuQyxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7QUFDMUIsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLENBQUM7QUFtQi9COzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsZUFBdUIsRUFBRSxPQUEwQixFQUFtQixFQUFFO0lBQ3hHLElBQUksT0FBTyxHQUFHLGVBQWUsQ0FBQztJQUU5QixjQUFjLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLE1BQU0sWUFBWSxHQUFHLE9BQU8sRUFBRSxZQUFZLElBQUksc0JBQXNCLENBQUM7SUFDckUsTUFBTSxZQUFZLEdBQUcsT0FBTyxFQUFFLFlBQVksSUFBSSxzQkFBc0IsQ0FBQztJQUVyRSxJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUM7SUFDdkIsSUFBSSxhQUFhLEdBQUcsT0FBTyxDQUFDO0lBRzVCLElBQUksT0FBTyxFQUFFLGNBQWMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUMzRCxJQUFJLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNsQixPQUFPLEdBQUcsQ0FBQyxD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fSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5jb25zdCBERUZBVUxUX01JTl9USUNLX0NPVU5UID0gNTtcbmNvbnN0IERFRkFVTFRfTUFYX1RJQ0tfQ09VTlQgPSAxMDtcbmNvbnN0IE1JTl9ESVNUQU5DRV9UT19aRVJPID0gMztcbmNvbnN0IE5FR0FUSVZFX1RIUkVTSE9MRCA9IC01O1xuY29uc3QgRkFMTEJBQ0tfTkVHQVRJVkVfVkFMVUUgPSAtNDtcbmNvbnN0IE1BWF9QT1dfTlVNQkVSID0gMTQ7XG5jb25zdCBNQVhfVEVNUExBVEVfTlVNQkVSID0gMTA7XG5cbi8vIOKchSBUaMOqbSBpbnRlcmZhY2VzIMSR4buDIHTEg25nIGPGsOG7nW5nIHR5cGUgc2FmZXR5XG5pbnRlcmZhY2UgQXhpc1NjYWxlT3B0aW9ucyB7XG4gIG1pblRpY2tDb3VudD86IG51bWJlcjsgLy8gU+G7kSBsxrDhu6NuZyB0aWNrIHThu5FpIHRoaeG7g3VcbiAgbWF4VGlja0NvdW50PzogbnVtYmVyOyAvLyBT4buRIGzGsOG7o25nIHRpY2sgdOG7kWkgxJFhXG4gIHN0ZXBDYW5kaWRhdGVzPzogbnVtYmVyW107IC8vIERhbmggc8OhY2ggY8OhYyBzdGVwIGNhbmRpZGF0ZXMgdMO5eSBjaOG7iW5oXG4gIGFjY2VwdE5lZ2F0aXZlPzogYm9vbGVhbjsgLy8gQ8OzIGNo4bqlcCBuaOG6rW4gZ2nDoSB0cuG7iyDDom0ga2jDtG5nXG4gIG1pbk5lZ2F0aXZlPzogbnVtYmVyOyAvLyBHacOhIHRy4buLIMOibSB04buRaSB0aGnhu4N1XG4gIGFjY2VwdFN0ZXBJc1R5cGVGbG9hdD86IGJvb2xlYW47IC8vIEPDsyBjaOG6pXAgbmjhuq1uIHN0ZXAgbMOgIHPhu5EgdGjhuq1wIHBow6JuIGtow7RuZ1xufVxuXG5pbnRlcmZhY2UgQXhpc1NjYWxlUmVzdWx0IHtcbiAgc3RlcFNpemU6IG51bWJlcjsgLy8gS8OtY2ggdGjGsOG7m2MgYsaw4bubY1xuICBtYXg6IG51bWJlcjsgLy8gR2nDoSB0cuG7iyB04buRaSDEkWEgY+G7p2EgdHLhu6VjXG4gIG1pbjogbnVtYmVyOyAvLyBHacOhIHRy4buLIHThu5FpIHRoaeG7g3UgY+G7p2EgdHLhu6VjXG4gIHRpY2tBbW91bnQ6IG51bWJlcjsgLy8gU+G7kSBsxrDhu6NuZyB0aWNrXG59XG5cbi8qKlxuICogVMOtbmggdG/DoW4gc21hcnQgYXhpcyBzY2FsZSBjaG8gYmnhu4N1IMSR4buTXG4gKiBcbiAqIEBwYXJhbSBtYXhEYXRhIC0gR2nDoSB0cuG7iyB04buRaSDEkWEgY+G7p2EgZOG7ryBsaeG7h3VcbiAqIEBwYXJhbSBvcHRpb25zIC0gQ8OhYyB0w7l5IGNo4buNbiBj4bqldSBow6xuaCBheGlzIHNjYWxlXG4gKiBAcmV0dXJucyBD4bqldSBow6xuaCBheGlzIHNjYWxlIGJhbyBn4buTbSBzdGVwU2l6ZSwgbWF4LCBtaW4sIHRpY2tBbW91bnRcbiAqIFxuICogQHRocm93cyB7RXJyb3J9IElOVkFMSURfTkVHQVRJVkVfREFUQSAtIGtoaSBtYXhEYXRhIDwgMCBtw6AgYWNjZXB0TmVnYXRpdmUgPSBmYWxzZVxuICogQHRocm93cyB7RXJyb3J9IE1JU1NJTkdfTUlOX05FR0FUSVZFIC0ga2hpIGFjY2VwdE5lZ2F0aXZlID0gdHJ1ZSBuaMawbmcgdGhp4bq/dSBtaW5OZWdhdGl2ZVxuICogQHRocm93cyB7RXJyb3J9IElOVkFMSURfUkFOR0UgLSBraGkgbWF4RGF0YSA8IG1pbk5lZ2F0aXZlXG4gKiBAdGhyb3dzIHtFcnJvcn0gSU5WQUxJRF9NSU5fTkVHQVRJVkUgLSBraGkgbWluTmVnYXRpdmUgPj0gMFxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcmVzdWx0ID0gZ2V0U21hcnRBeGlzU2NhbGUoMTAwLCB7IG1pblRpY2tDb3VudDogNSwgbWF4VGlja0NvdW50OiAxMCB9KTtcbiAqIC8vIHJldHVybnMgeyBzdGVwU2l6ZTogMjAsIG1heDogMTIwLCBtaW46IDAsIHRpY2tBbW91bnQ6IDYgfVxuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTbWFydEF4aXNTY2FsZSA9IChvcmlnaW5hbE1heERhdGE6IG51bWJlciwgb3B0aW9ucz86IEF4aXNTY2FsZU9wdGlvbnMpOiBBeGlzU2NhbGVSZXN1bHQgPT4ge1xuICBsZXQgbWF4RGF0YSA9IG9yaWdpbmFsTWF4RGF0YTtcbiAgXG4gIHZhbGlkYXRlSW5wdXRzKG1heERhdGEsIG9wdGlvbnMpO1xuICBjb25zdCBtaW5UaWNrQ291bnQgPSBvcHRpb25zPy5taW5UaWNrQ291bnQgfHwgREVGQVVMVF9NSU5fVElDS19DT1VOVDtcbiAgY29uc3QgbWF4VGlja0NvdW50ID0gb3B0aW9ucz8ubWF4VGlja0NvdW50IHx8IERFRkFVTFRfTUFYX1RJQ0tfQ09VTlQ7XG4gIFxuICBsZXQgc2NhbGVEaXJlY3Rpb24gPSAxO1xuICBsZXQgcmFuZ2VEaXN0YW5jZSA9IG1heERhdGE7XG4gIFxuICBcbiAgaWYgKG9wdGlvbnM/LmFjY2VwdE5lZ2F0aXZlICYmICFpc05pbChvcHRpb25zLm1pbk5lZ2F0aXZlKSkge1xuICAgIGlmIChtYXhEYXRhID09PSAwKSB7XG4gICAgICBtYXhEYXRhID0gLTE7XG4gICAgfVxuICAgIGlmIChtYXhEYXRhIDw9IDApIHtcbiAgICAgIHJhbmdlRGlzdGFuY2UgPSBvcHRpb25zLm1pbk5lZ2F0aXZlO1xuICAgIH1cbiAgICBpZiAocmFuZ2VEaXN0YW5jZSA+IE5FR0FUSVZFX1RIUkVTSE9MRCkge1xuICAgICAgcmFuZ2VEaXN0YW5jZSA9IEZBTExCQUNLX05FR0FUSVZFX1ZBTFVFO1xuICAgIH1cbiAgICBpZiAobWF4RGF0YSA+IDApIHtcbiAgICAgIHJhbmdlRGlzdGFuY2UgPSBtYXhEYXRhICsgTWF0aC5hYnMob3B0aW9ucy5taW5OZWdhdGl2ZSk7XG4gICAgICBzY2FsZURpcmVjdGlvbiA9IC0xO1xuICAgIH1cbiAgfVxuICBpZiAoTWF0aC5hYnMocmFuZ2VEaXN0YW5jZSkgPCBNSU5fRElTVEFOQ0VfVE9fWkVSTykge1xuICAgIHJhbmdlRGlzdGFuY2UgPSBNSU5fRElTVEFOQ0VfVE9fWkVSTztcbiAgfVxuICBcbiAgY29uc3Qgc3RlcENhbmRpZGF0ZXMgPSBnZXRTdGVwQ2FuZGlkYXRlcyhcbiAgICBtYXhEYXRhLFxuICAgIG1pblRpY2tDb3VudCxcbiAgICBvcHRpb25zPy5taW5OZWdhdGl2ZSB8fCAwLFxuICAgIG9wdGlvbnM/LmFjY2VwdFN0ZXBJc1R5cGVGbG9hdCxcbiAgICBvcHRpb25zPy5zdGVwQ2FuZGlkYXRlcyxcbiAgICBvcHRpb25zPy5hY2NlcHROZWdhdGl2ZVxuICApO1xuICBmb3IgKGNvbnN0IHN0ZXAgb2Ygc3RlcENhbmRpZGF0ZXMpIHtcbiAgICBsZXQgdGlja0NvdW50ID0gTWF0aC5hYnMoTWF0aC5jZWlsKHJhbmdlRGlzdGFuY2UgLyBzdGVwKSkgKyAoc2NhbGVEaXJlY3Rpb24gPT09IC0xID8gMiA6IDEpO1xuICAgIGxldCBtYXhWYWx1ZSA9IG1heERhdGEgPD0gMCA/IDAgOiBzdGVwICogdGlja0NvdW50ICogc2NhbGVEaXJlY3Rpb247XG4gICAgbGV0IG1pblZhbHVlID0gMDtcblxuICAgIGlmICh0aWNrQ291bnQgPj0gbWluVGlja0NvdW50ICYmIHRpY2tDb3VudCA8PSBtYXhUaWNrQ291bnQpIHtcbiAgICAgIGlmIChtYXhEYXRhIDwgbWF4VmFsdWUpIHtcbiAgICAgICAgaWYgKG9wdGlvbnM/LmFjY2VwdE5lZ2F0aXZlKSB7XG4gICAgICAgICAgbGV0IHRpY2sgPSAxO1xuICAgICAgICAgIHdoaWxlICghaXNOaWwob3B0aW9ucy5taW5OZWdhdGl2ZSkgJiYgdGljayA8PSB0aWNrQ291bnQgJiYgbWluVmFsdWUgPj0gb3B0aW9ucy5taW5OZWdhdGl2ZSkge1xuICAgICAgICAgICAgbWluVmFsdWUgPSB0aWNrICogc3RlcDtcbiAgICAgICAgICAgIHRpY2srKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWF4VmFsdWVQb3NpdGl2ZSA9IG1heFZhbHVlIC0gTWF0aC5hYnMobWluVmFsdWUpO1xuICAgICAgICB0aWNrQ291bnQgPSBtYXhWYWx1ZVBvc2l0aXZlIC0gb3JpZ2luYWxNYXhEYXRhID4gTWF0aC5hYnMoc3RlcCkgJiYgdGlja0NvdW50IC0gMSA+PSBtaW5UaWNrQ291bnQgPyB0aWNrQ291bnQgLSAxIDogdGlja0NvdW50O1xuXG4gICAgICAgIG1heFZhbHVlID0gKHN0ZXAgKiB0aWNrQ291bnQgKiBzY2FsZURpcmVjdGlvbikgLSAobWluVmFsdWUgKiBzY2FsZURpcmVjdGlvbik7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RlcFNpemU6IE1hdGguYWJzKHN0ZXApLFxuICAgICAgICAgIG1heDogbWF4VmFsdWUsXG4gICAgICAgICAgbWluOiBtaW5WYWx1ZSxcbiAgICAgICAgICB0aWNrQW1vdW50OiB0aWNrQ291bnRcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgc3RlcCA9IE1hdGguY2VpbChyYW5nZURpc3RhbmNlIC8gbWluVGlja0NvdW50KSB8fCAxO1xuICBsZXQgbWF4VmFsdWUgPSBzdGVwICogbWluVGlja0NvdW50O1xuICBpZiAocmFuZ2VEaXN0YW5jZSA9PT0gbWF4VmFsdWUpIHtcbiAgICBzdGVwID0gc3RlcCArIE1hdGguY2VpbChzdGVwIC8gMTApO1xuICAgIG1heFZhbHVlID0gc3RlcCAqIG1pblRpY2tDb3VudDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHN0ZXBTaXplOiBNYXRoLmFicyhzdGVwKSxcbiAgICBtYXg6IG1heFZhbHVlLFxuICAgIG1pbjogMCxcbiAgICB0aWNrQW1vdW50OiBtaW5UaWNrQ291bnRcbiAgfTtcbn1cblxuLy8gQ2FjaGUgY2hvIGPDoWMgZ2nDoSB0cuG7iyBsxal5IHRo4burYSAxMCDEkeG7gyB04buRaSDGsHUgaGnhu4d1IHN14bqldFxuY29uc3QgUE9XRVJfQ0FDSEUgPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xuXG4vKipcbiAqIFThuqFvIGRhbmggc8OhY2ggY8OhYyBzdGVwIGNhbmRpZGF0ZXMgY2hvIHZp4buHYyB0w61uaCB0b8OhbiBzY2FsZVxuICogQHBhcmFtIG1heERhdGEgLSBHacOhIHRy4buLIGThu68gbGnhu4d1IHThu5FpIMSRYVxuICogQHBhcmFtIG1pblN0ZXAgLSBT4buRIGLGsOG7m2MgdOG7kWkgdGhp4buDdVxuICogQHBhcmFtIG1pbk5lZ2F0aXZlIC0gR2nDoSB0cuG7iyDDom0gdOG7kWkgdGhp4buDdVxuICogQHBhcmFtIGFjY2VwdFN0ZXBJc1R5cGVGbG9hdCAtIEPDsyBjaOG6pXAgbmjhuq1uIHN0ZXAgdGjhuq1wIHBow6JuIGtow7RuZ1xuICogQHBhcmFtIHN0ZXBDYW5kaWRhdGVzQnlPcHRpb25zIC0gU3RlcCBjYW5kaWRhdGVzIGRvIG5nxrDhu51pIGTDuW5nIGN1bmcgY+G6pXBcbiAqIEBwYXJhbSBpbmNsdWRlTmVnYXRpdmVTdGVwcyAtIEPDsyBiYW8gZ+G7k20gY8OhYyBzdGVwIMOibSBraMO0bmdcbiAqIEByZXR1cm5zIERhbmggc8OhY2ggY8OhYyBzdGVwIGNhbmRpZGF0ZXNcbiAqL1xuY29uc3QgZ2V0U3RlcENhbmRpZGF0ZXMgPSAoXG4gIG1heERhdGE6IG51bWJlcixcbiAgbWluU3RlcDogbnVtYmVyLFxuICBtaW5OZWdhdGl2ZTogbnVtYmVyLFxuICBhY2NlcHRTdGVwSXNUeXBlRmxvYXQgPSBmYWxzZSxcbiAgc3RlcENhbmRpZGF0ZXNCeU9wdGlvbnM/OiBudW1iZXJbXSxcbiAgaW5jbHVkZU5lZ2F0aXZlU3RlcHMgPSBmYWxzZVxuKTogbnVtYmVyW10gPT4ge1xuICAvLyBO4bq/dSBjw7Mgc3RlcCBjYW5kaWRhdGVzIHTDuXkgY2jhu4luaCwgc+G7rSBk4bulbmcgY2jDum5nXG4gIGlmKHN0ZXBDYW5kaWRhdGVzQnlPcHRpb25zICYmIHN0ZXBDYW5kaWRhdGVzQnlPcHRpb25zLmxlbmd0aCA+IDApe1xuICAgIHJldHVybiBzdGVwQ2FuZGlkYXRlc0J5T3B0aW9ucztcbiAgfVxuICBcbiAgY29uc3Qgc3RlcENhbmRpZGF0ZXM9IG5ldyBBcnJheTxudW1iZXI+KCk7XG4gIGNvbnN0IG1heFZhbHVlU3RlcCA9IE1hdGguYWJzKE1hdGgubWF4KG1heERhdGEsIE1hdGguYWJzKG1pbk5lZ2F0aXZlIHx8IDApKSkgLyBtaW5TdGVwO1xuXG4gIC8vIFThuqFvIHN0ZXAgY2FuZGlkYXRlcyBk4buxYSB0csOqbiBsxal5IHRo4burYSBj4bunYSAxMFxuICBmb3IgKGxldCBwb3dOdW1iZXIgPSAwOyBwb3dOdW1iZXIgPD0gTUFYX1BPV19OVU1CRVI7IHBvd051bWJlcisrKSB7XG4gICAgLy8gU+G7rSBk4bulbmcgY2FjaGUgxJHhu4MgdOG7kWkgxrB1IGhp4buHdSBzdeG6pXRcbiAgICBpZighUE9XRVJfQ0FDSEUuaGFzKHBvd051bWJlcikpe1xuICAgICAgUE9XRVJfQ0FDSEUuc2V0KHBvd051bWJlcixNYXRoLnBvdygxMCxwb3dOdW1iZXIpKTtcbiAgICB9XG4gICAgY29uc3QgcG93VmFsdWUgPSBQT1dFUl9DQUNIRS5nZXQocG93TnVtYmVyKSBhcyBudW1iZXI7XG4gICAgXG4gICAgZm9yIChsZXQgdGVtcGxhdGVOdW1iZXIgPSAxOyB0ZW1wbGF0ZU51bWJlciA8IE1BWF9URU1QTEFURV9OVU1CRVI7IHRlbXBsYXRlTnVtYmVyKyspIHtcbiAgICAgIC8vIFRow6ptIHN0ZXAgdGjhuq1wIHBow6JuIG7hur91IMSRxrDhu6NjIGNo4bqlcCBuaOG6rW5cbiAgICAgIGlmIChhY2NlcHRTdGVwSXNUeXBlRmxvYXQpIHtcbiAgICAgICAgY29uc3Qgc3RlcCA9IHBvd1ZhbHVlICogKCgodGVtcGxhdGVOdW1iZXIgLSAxKSAqIDIgKyAxKSAvIDIpO1xuICAgICAgICBzdGVwQ2FuZGlkYXRlcy5wdXNoKHN0ZXApO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCBzdGVwID0gcG93VmFsdWUgKiB0ZW1wbGF0ZU51bWJlcjtcbiAgICAgIHN0ZXBDYW5kaWRhdGVzLnB1c2goc3RlcCk7XG5cbiAgICAgIC8vIEThu6tuZyBraGkgc3RlcCDEkcOjIMSR4bunIGzhu5tuXG4gICAgICBpZiAoc3RlcCA+PSBtYXhWYWx1ZVN0ZXApIHtcbiAgICAgICAgY2hlY2tBbmRTZXROZWdhdGl2ZVN0ZXBzKHN0ZXBDYW5kaWRhdGVzLCBpbmNsdWRlTmVnYXRpdmVTdGVwcywgbWluTmVnYXRpdmUpO1xuICAgICAgICByZXR1cm4gc3RlcENhbmRpZGF0ZXM7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICBjaGVja0FuZFNldE5lZ2F0aXZlU3RlcHMoc3RlcENhbmRpZGF0ZXMsIGluY2x1ZGVOZWdhdGl2ZVN0ZXBzLCBtaW5OZWdhdGl2ZSk7XG4gIHJldHVybiBzdGVwQ2FuZGlkYXRlcztcbn1cblxuLyoqXG4gKiBLaeG7g20gdHJhIHbDoCB0aMOqbSBjw6FjIHN0ZXAgw6JtIHbDoG8gZGFuaCBzw6FjaCBjYW5kaWRhdGVzIG7hur91IGPhuqduXG4gKiBAcGFyYW0gc3RlcENhbmRpZGF0ZXMgLSBEYW5oIHPDoWNoIHN0ZXAgY2FuZGlkYXRlcyBoaeG7h24gdOG6oWlcbiAqIEBwYXJhbSBhY2NlcHROZWdhdGl2ZSAtIEPDsyBjaOG6pXAgbmjhuq1uIGdpw6EgdHLhu4sgw6JtIGtow7RuZ1xuICogQHBhcmFtIG1pbk5lZ2F0aXZlIC0gR2nDoSB0cuG7iyDDom0gdOG7kWkgdGhp4buDdVxuICovXG5jb25zdCBjaGVja0FuZFNldE5lZ2F0aXZlU3RlcHMgPSAoc3RlcENhbmRpZGF0ZXM6IG51bWJlcltdLCBhY2NlcHROZWdhdGl2ZTogYm9vbGVhbiwgbWluTmVnYXRpdmU6IG51bWJlcik6IHZvaWQgPT4ge1xuICBpZiAoYWNjZXB0TmVnYXRpdmUgJiYgbWluTmVnYXRpdmUgPCAwKSB7XG4gICAgLy8gVOG6oW8gY8OhYyBzdGVwIMOibSB2w6AgdGjDqm0gdsOgbyDEkeG6p3UgZGFuaCBzw6FjaFxuICAgIGNvbnN0IG5lZ2F0aXZlU3RlcHMgPSBbLi4uc3RlcENhbmRpZGF0ZXNdLm1hcChzdGVwID0+IC1zdGVwKTtcbiAgICBzdGVwQ2FuZGlkYXRlcy51bnNoaWZ0KC4uLm5lZ2F0aXZlU3RlcHMpO1xuICB9XG59IFxuXG4vKipcbiAqIEtp4buDbSB0cmEgdMOtbmggaOG7o3AgbOG7hyBj4bunYSBjw6FjIHRoYW0gc+G7kSDEkeG6p3UgdsOgb1xuICogQHBhcmFtIG1heERhdGEgLSBHacOhIHRy4buLIGThu68gbGnhu4d1IHThu5FpIMSRYVxuICogQHBhcmFtIG9wdGlvbnMgLSBDw6FjIHTDuXkgY2jhu41uIGPhuqV1IGjDrG5oXG4gKiBAdGhyb3dzIHtFcnJvcn0gS2hpIGPDoWMgdGhhbSBz4buRIGtow7RuZyBo4bujcCBs4buHXG4gKi9cbmNvbnN0IHZhbGlkYXRlSW5wdXRzID0gKG1heERhdGE6IG51bWJlciwgb3B0aW9ucz86IEF4aXNTY2FsZU9wdGlvbnMpOiB2b2lkID0+IHtcbiAgLy8gS2nhu4NtIHRyYSBtYXhEYXRhIMOibSBraGkga2jDtG5nIGNo4bqlcCBuaOG6rW4gZ2nDoSB0cuG7iyDDom1cbiAgaWYgKG1heERhdGEgPCAwICYmICFvcHRpb25zPy5hY2NlcHROZWdhdGl2ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm1heERhdGEgaXMgbGVzcyB0aGFuIDAgYW5kIGFjY2VwdE5lZ2F0aXZlIGlzIGZhbHNlXCIpO1xuICB9XG4gIFxuICBpZiAob3B0aW9ucz8uYWNjZXB0TmVnYXRpdmUpIHtcbiAgICAvLyBLaeG7g20gdHJhIG1pbk5lZ2F0aXZlIGPDsyDEkcaw4bujYyBjdW5nIGPhuqVwIGtow7RuZ1xuICAgIGlmIChpc05pbChvcHRpb25zLm1pbk5lZ2F0aXZlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwibWluTmVnYXRpdmUgaXMgcmVxdWlyZWQgd2hlbiBhY2NlcHROZWdhdGl2ZSBpcyB0cnVlXCIpO1xuICAgIH1cblxuICAgIC8vIEtp4buDbSB0cmEgbWF4RGF0YSBwaOG6o2kgPj0gbWluTmVnYXRpdmVcbiAgICBpZiAobWF4RGF0YSA8IG9wdGlvbnMubWluTmVnYXRpdmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIm1heERhdGEgaXMgbGVzcyB0aGFuIG1pbk5lZ2F0aXZlXCIpO1xuICAgIH1cblxuICAgIC8vIEtp4buDbSB0cmEgbWluTmVnYXRpdmUgcGjhuqNpIGzDoCBz4buRIMOibVxuICAgIGlmIChvcHRpb25zLm1pbk5lZ2F0aXZlID49IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIm1pbk5lZ2F0aXZlIG11c3QgYmUgbmVnYXRpdmVcIik7XG4gICAgfVxuICB9XG59ICJdfQ==
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXNtYXJ0LWF4aXMtc2NhbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzLXVpL3V0aWxzL3NyYy9nZXQtc21hcnQtYXhpcy1zY2FsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDLE1BQU0sc0JBQXNCLEdBQUcsRUFBRSxDQUFDO0FBQ2xDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUIsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuQyxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7QUFDMUIsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLENBQUM7QUFtQi9COzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsZUFBdUIsRUFBRSxPQUEwQixFQUFtQixFQUFFO0lBQ3hHLElBQUksT0FBTyxHQUFHLGVBQWUsQ0FBQztJQUU5QixjQUFjLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLE1BQU0sWUFBWSxHQUFHLE9BQU8sRUFBRSxZQUFZLElBQUksc0JBQXNCLENBQUM7SUFDckUsTUFBTSxZQUFZLEdBQUcsT0FBTyxFQUFFLFlBQVksSUFBSSxzQkFBc0IsQ0FBQztJQUVyRSxJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUM7SUFDdkIsSUFBSSxhQUFhLEdBQUcsT0FBTyxDQUFDO0lBRTVCLElBQUksT0FBTyxFQUFFLGNBQWMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUMzRCxJQUFJLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNsQixPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDZixDQUFDO1FBQ0QsSUFBSSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDakIsYUFBYSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFDdEMsQ0FBQztRQUNELElBQUksYUFBYSxHQUFHLGtCQUFrQixFQUFFLENBQUM7WUFDdkMsYUFBYSxHQUFHLHVCQUF1QixDQUFDO1FBQzFDLENBQUM7UUFDRCxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNoQixhQUFhLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3hELGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUNELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxvQkFBb0IsRUFBRSxDQUFDO1FBQ25ELGFBQWEsR0FBRyxvQkFBb0IsQ0FBQztJQUN2QyxDQUFDO0lBRUQsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsV0FBVyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDN0ssS0FBSyxNQUFNLElBQUksSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUNsQyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUYsSUFBSSxRQUFRLEdBQUcsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLGNBQWMsQ0FBQztRQUNwRSxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFFakIsSUFBSSxTQUFTLElBQUksWUFBWSxJQUFJLFNBQVMsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUMzRCxJQUFJLE9BQU8sR0FBRyxRQUFRLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxPQUFPLEVBQUUsY0FBYyxFQUFFLENBQUM7b0JBQzVCLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztvQkFDYixPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLElBQUksU0FBUyxJQUFJLFFBQVEsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7d0JBQzNGLFFBQVEsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO3dCQUN2QixJQUFJLEVBQUUsQ0FBQztvQkFDVCxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDdkQsU0FBUyxHQUFHLGdCQUFnQixHQUFHLGVBQWUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsR0FBRyxDQUFDLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBRTdILFFBQVEsR0FBRyxJQUFJLEdBQUcsU0FBUyxHQUFHLGNBQWMsR0FBRyxRQUFRLEdBQUcsY0FBYyxDQUFDO2dCQUN6RSxPQUFPO29CQUNMLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztvQkFDeEIsR0FBRyxFQUFFLFFBQVE7b0JBQ2IsR0FBRyxFQUFFLFFBQVE7b0JBQ2IsVUFBVSxFQUFFLFNBQVM7aUJBQ3RCLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEQsSUFBSSxRQUFRLEdBQUcsSUFBSSxHQUFHLFlBQVksQ0FBQztJQUNuQyxJQUFJLGFBQWEsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMvQixJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLFFBQVEsR0FBRyxJQUFJLEdBQUcsWUFBWSxDQUFDO0lBQ2pDLENBQUM7SUFDRCxPQUFPO1FBQ0wsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ3hCLEdBQUcsRUFBRSxRQUFRO1FBQ2IsR0FBRyxFQUFFLENBQUM7UUFDTixVQUFVLEVBQUUsWUFBWTtLQUN6QixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsd0RBQXdEO0FBQ3hELE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0FBRTlDOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxPQUFlLEVBQUUsT0FBZSxFQUFFLFdBQW1CLEVBQUUscUJBQXFCLEdBQUcsS0FBSyxFQUFFLHVCQUFrQyxFQUFFLG9CQUFvQixHQUFHLEtBQUssRUFBWSxFQUFFO0lBQzdMLGtEQUFrRDtJQUNsRCxJQUFJLHVCQUF1QixJQUFJLHVCQUF1QixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNsRSxPQUFPLHVCQUF1QixDQUFDO0lBQ2pDLENBQUM7SUFFRCxNQUFNLGNBQWMsR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO0lBQzNDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztJQUV2RiwrQ0FBK0M7SUFDL0MsS0FBSyxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUUsU0FBUyxJQUFJLGNBQWMsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDO1FBQ2pFLG9DQUFvQztRQUNwQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ2hDLFdBQVcsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUNELE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFXLENBQUM7UUFFdEQsS0FBSyxJQUFJLGNBQWMsR0FBRyxDQUFDLEVBQUUsY0FBYyxHQUFHLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxFQUFFLENBQUM7WUFDcEYseUNBQXlDO1lBQ3pDLElBQUkscUJBQXFCLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxJQUFJLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzdELGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUIsQ0FBQztZQUVELE1BQU0sSUFBSSxHQUFHLFFBQVEsR0FBRyxjQUFjLENBQUM7WUFDdkMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUUxQiwwQkFBMEI7WUFDMUIsSUFBSSxJQUFJLElBQUksWUFBWSxFQUFFLENBQUM7Z0JBQ3pCLHdCQUF3QixDQUFDLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDNUUsT0FBTyxjQUFjLENBQUM7WUFDeEIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsd0JBQXdCLENBQUMsY0FBYyxFQUFFLG9CQUFvQixFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzVFLE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUMsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ0gsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLGNBQXdCLEVBQUUsY0FBdUIsRUFBRSxXQUFtQixFQUFRLEVBQUU7SUFDaEgsSUFBSSxjQUFjLElBQUksV0FBVyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3RDLDRDQUE0QztRQUM1QyxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9ELGNBQWMsQ0FBQyxPQUFPLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQztJQUMzQyxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDSCxNQUFNLGNBQWMsR0FBRyxDQUFDLE9BQWUsRUFBRSxPQUEwQixFQUFRLEVBQUU7SUFDM0UscURBQXFEO0lBQ3JELElBQUksT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsQ0FBQztRQUM1QyxNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELElBQUksT0FBTyxFQUFFLGNBQWMsRUFBRSxDQUFDO1FBQzVCLDhDQUE4QztRQUM5QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUVELHVDQUF1QztRQUN2QyxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFFRCxxQ0FBcUM7UUFDckMsSUFBSSxPQUFPLENBQUMsV0FBVyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUNsRCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzTmlsIH0gZnJvbSAnLi9oZWxwZXJzJztcbmNvbnN0IERFRkFVTFRfTUlOX1RJQ0tfQ09VTlQgPSA1O1xuY29uc3QgREVGQVVMVF9NQVhfVElDS19DT1VOVCA9IDEwO1xuY29uc3QgTUlOX0RJU1RBTkNFX1RPX1pFUk8gPSAzO1xuY29uc3QgTkVHQVRJVkVfVEhSRVNIT0xEID0gLTU7XG5jb25zdCBGQUxMQkFDS19ORUdBVElWRV9WQUxVRSA9IC00O1xuY29uc3QgTUFYX1BPV19OVU1CRVIgPSAxNDtcbmNvbnN0IE1BWF9URU1QTEFURV9OVU1CRVIgPSAxMDtcblxuLy8g4pyFIFRow6ptIGludGVyZmFjZXMgxJHhu4MgdMSDbmcgY8aw4budbmcgdHlwZSBzYWZldHlcbmludGVyZmFjZSBBeGlzU2NhbGVPcHRpb25zIHtcbiAgbWluVGlja0NvdW50PzogbnVtYmVyOyAvLyBT4buRIGzGsOG7o25nIHRpY2sgdOG7kWkgdGhp4buDdVxuICBtYXhUaWNrQ291bnQ/OiBudW1iZXI7IC8vIFPhu5EgbMaw4bujbmcgdGljayB04buRaSDEkWFcbiAgc3RlcENhbmRpZGF0ZXM/OiBudW1iZXJbXTsgLy8gRGFuaCBzw6FjaCBjw6FjIHN0ZXAgY2FuZGlkYXRlcyB0w7l5IGNo4buJbmhcbiAgYWNjZXB0TmVnYXRpdmU/OiBib29sZWFuOyAvLyBDw7MgY2jhuqVwIG5o4bqtbiBnacOhIHRy4buLIMOibSBraMO0bmdcbiAgbWluTmVnYXRpdmU/OiBudW1iZXI7IC8vIEdpw6EgdHLhu4sgw6JtIHThu5FpIHRoaeG7g3VcbiAgYWNjZXB0U3RlcElzVHlwZUZsb2F0PzogYm9vbGVhbjsgLy8gQ8OzIGNo4bqlcCBuaOG6rW4gc3RlcCBsw6Agc+G7kSB0aOG6rXAgcGjDom4ga2jDtG5nXG59XG5cbmludGVyZmFjZSBBeGlzU2NhbGVSZXN1bHQge1xuICBzdGVwU2l6ZTogbnVtYmVyOyAvLyBLw61jaCB0aMaw4bubYyBixrDhu5tjXG4gIG1heDogbnVtYmVyOyAvLyBHacOhIHRy4buLIHThu5FpIMSRYSBj4bunYSB0cuG7pWNcbiAgbWluOiBudW1iZXI7IC8vIEdpw6EgdHLhu4sgdOG7kWkgdGhp4buDdSBj4bunYSB0cuG7pWNcbiAgdGlja0Ftb3VudDogbnVtYmVyOyAvLyBT4buRIGzGsOG7o25nIHRpY2tcbn1cblxuLyoqXG4gKiBUw61uaCB0b8OhbiBzbWFydCBheGlzIHNjYWxlIGNobyBiaeG7g3UgxJHhu5NcbiAqXG4gKiBAcGFyYW0gbWF4RGF0YSAtIEdpw6EgdHLhu4sgdOG7kWkgxJFhIGPhu6dhIGThu68gbGnhu4d1XG4gKiBAcGFyYW0gb3B0aW9ucyAtIEPDoWMgdMO5eSBjaOG7jW4gY+G6pXUgaMOsbmggYXhpcyBzY2FsZVxuICogQHJldHVybnMgQ+G6pXUgaMOsbmggYXhpcyBzY2FsZSBiYW8gZ+G7k20gc3RlcFNpemUsIG1heCwgbWluLCB0aWNrQW1vdW50XG4gKlxuICogQHRocm93cyB7RXJyb3J9IElOVkFMSURfTkVHQVRJVkVfREFUQSAtIGtoaSBtYXhEYXRhIDwgMCBtw6AgYWNjZXB0TmVnYXRpdmUgPSBmYWxzZVxuICogQHRocm93cyB7RXJyb3J9IE1JU1NJTkdfTUlOX05FR0FUSVZFIC0ga2hpIGFjY2VwdE5lZ2F0aXZlID0gdHJ1ZSBuaMawbmcgdGhp4bq/dSBtaW5OZWdhdGl2ZVxuICogQHRocm93cyB7RXJyb3J9IElOVkFMSURfUkFOR0UgLSBraGkgbWF4RGF0YSA8IG1pbk5lZ2F0aXZlXG4gKiBAdGhyb3dzIHtFcnJvcn0gSU5WQUxJRF9NSU5fTkVHQVRJVkUgLSBraGkgbWluTmVnYXRpdmUgPj0gMFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCByZXN1bHQgPSBnZXRTbWFydEF4aXNTY2FsZSgxMDAsIHsgbWluVGlja0NvdW50OiA1LCBtYXhUaWNrQ291bnQ6IDEwIH0pO1xuICogLy8gcmV0dXJucyB7IHN0ZXBTaXplOiAyMCwgbWF4OiAxMjAsIG1pbjogMCwgdGlja0Ftb3VudDogNiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFNtYXJ0QXhpc1NjYWxlID0gKG9yaWdpbmFsTWF4RGF0YTogbnVtYmVyLCBvcHRpb25zPzogQXhpc1NjYWxlT3B0aW9ucyk6IEF4aXNTY2FsZVJlc3VsdCA9PiB7XG4gIGxldCBtYXhEYXRhID0gb3JpZ2luYWxNYXhEYXRhO1xuXG4gIHZhbGlkYXRlSW5wdXRzKG1heERhdGEsIG9wdGlvbnMpO1xuICBjb25zdCBtaW5UaWNrQ291bnQgPSBvcHRpb25zPy5taW5UaWNrQ291bnQgfHwgREVGQVVMVF9NSU5fVElDS19DT1VOVDtcbiAgY29uc3QgbWF4VGlja0NvdW50ID0gb3B0aW9ucz8ubWF4VGlja0NvdW50IHx8IERFRkFVTFRfTUFYX1RJQ0tfQ09VTlQ7XG5cbiAgbGV0IHNjYWxlRGlyZWN0aW9uID0gMTtcbiAgbGV0IHJhbmdlRGlzdGFuY2UgPSBtYXhEYXRhO1xuXG4gIGlmIChvcHRpb25zPy5hY2NlcHROZWdhdGl2ZSAmJiAhaXNOaWwob3B0aW9ucy5taW5OZWdhdGl2ZSkpIHtcbiAgICBpZiAobWF4RGF0YSA9PT0gMCkge1xuICAgICAgbWF4RGF0YSA9IC0xO1xuICAgIH1cbiAgICBpZiAobWF4RGF0YSA8PSAwKSB7XG4gICAgICByYW5nZURpc3RhbmNlID0gb3B0aW9ucy5taW5OZWdhdGl2ZTtcbiAgICB9XG4gICAgaWYgKHJhbmdlRGlzdGFuY2UgPiBORUdBVElWRV9USFJFU0hPTEQpIHtcbiAgICAgIHJhbmdlRGlzdGFuY2UgPSBGQUxMQkFDS19ORUdBVElWRV9WQUxVRTtcbiAgICB9XG4gICAgaWYgKG1heERhdGEgPiAwKSB7XG4gICAgICByYW5nZURpc3RhbmNlID0gbWF4RGF0YSArIE1hdGguYWJzKG9wdGlvbnMubWluTmVnYXRpdmUpO1xuICAgICAgc2NhbGVEaXJlY3Rpb24gPSAtMTtcbiAgICB9XG4gIH1cbiAgaWYgKE1hdGguYWJzKHJhbmdlRGlzdGFuY2UpIDwgTUlOX0RJU1RBTkNFX1RPX1pFUk8pIHtcbiAgICByYW5nZURpc3RhbmNlID0gTUlOX0RJU1RBTkNFX1RPX1pFUk87XG4gIH1cblxuICBjb25zdCBzdGVwQ2FuZGlkYXRlcyA9IGdldFN0ZXBDYW5kaWRhdGVzKG1heERhdGEsIG1pblRpY2tDb3VudCwgb3B0aW9ucz8ubWluTmVnYXRpdmUgfHwgMCwgb3B0aW9ucz8uYWNjZXB0U3RlcElzVHlwZUZsb2F0LCBvcHRpb25zPy5zdGVwQ2FuZGlkYXRlcywgb3B0aW9ucz8uYWNjZXB0TmVnYXRpdmUpO1xuICBmb3IgKGNvbnN0IHN0ZXAgb2Ygc3RlcENhbmRpZGF0ZXMpIHtcbiAgICBsZXQgdGlja0NvdW50ID0gTWF0aC5hYnMoTWF0aC5jZWlsKHJhbmdlRGlzdGFuY2UgLyBzdGVwKSkgKyAoc2NhbGVEaXJlY3Rpb24gPT09IC0xID8gMiA6IDEpO1xuICAgIGxldCBtYXhWYWx1ZSA9IG1heERhdGEgPD0gMCA/IDAgOiBzdGVwICogdGlja0NvdW50ICogc2NhbGVEaXJlY3Rpb247XG4gICAgbGV0IG1pblZhbHVlID0gMDtcblxuICAgIGlmICh0aWNrQ291bnQgPj0gbWluVGlja0NvdW50ICYmIHRpY2tDb3VudCA8PSBtYXhUaWNrQ291bnQpIHtcbiAgICAgIGlmIChtYXhEYXRhIDwgbWF4VmFsdWUpIHtcbiAgICAgICAgaWYgKG9wdGlvbnM/LmFjY2VwdE5lZ2F0aXZlKSB7XG4gICAgICAgICAgbGV0IHRpY2sgPSAxO1xuICAgICAgICAgIHdoaWxlICghaXNOaWwob3B0aW9ucy5taW5OZWdhdGl2ZSkgJiYgdGljayA8PSB0aWNrQ291bnQgJiYgbWluVmFsdWUgPj0gb3B0aW9ucy5taW5OZWdhdGl2ZSkge1xuICAgICAgICAgICAgbWluVmFsdWUgPSB0aWNrICogc3RlcDtcbiAgICAgICAgICAgIHRpY2srKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWF4VmFsdWVQb3NpdGl2ZSA9IG1heFZhbHVlIC0gTWF0aC5hYnMobWluVmFsdWUpO1xuICAgICAgICB0aWNrQ291bnQgPSBtYXhWYWx1ZVBvc2l0aXZlIC0gb3JpZ2luYWxNYXhEYXRhID4gTWF0aC5hYnMoc3RlcCkgJiYgdGlja0NvdW50IC0gMSA+PSBtaW5UaWNrQ291bnQgPyB0aWNrQ291bnQgLSAxIDogdGlja0NvdW50O1xuXG4gICAgICAgIG1heFZhbHVlID0gc3RlcCAqIHRpY2tDb3VudCAqIHNjYWxlRGlyZWN0aW9uIC0gbWluVmFsdWUgKiBzY2FsZURpcmVjdGlvbjtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGVwU2l6ZTogTWF0aC5hYnMoc3RlcCksXG4gICAgICAgICAgbWF4OiBtYXhWYWx1ZSxcbiAgICAgICAgICBtaW46IG1pblZhbHVlLFxuICAgICAgICAgIHRpY2tBbW91bnQ6IHRpY2tDb3VudCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgc3RlcCA9IE1hdGguY2VpbChyYW5nZURpc3RhbmNlIC8gbWluVGlja0NvdW50KSB8fCAxO1xuICBsZXQgbWF4VmFsdWUgPSBzdGVwICogbWluVGlja0NvdW50O1xuICBpZiAocmFuZ2VEaXN0YW5jZSA9PT0gbWF4VmFsdWUpIHtcbiAgICBzdGVwID0gc3RlcCArIE1hdGguY2VpbChzdGVwIC8gMTApO1xuICAgIG1heFZhbHVlID0gc3RlcCAqIG1pblRpY2tDb3VudDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHN0ZXBTaXplOiBNYXRoLmFicyhzdGVwKSxcbiAgICBtYXg6IG1heFZhbHVlLFxuICAgIG1pbjogMCxcbiAgICB0aWNrQW1vdW50OiBtaW5UaWNrQ291bnQsXG4gIH07XG59O1xuXG4vLyBDYWNoZSBjaG8gY8OhYyBnacOhIHRy4buLIGzFqXkgdGjhu6thIDEwIMSR4buDIHThu5FpIMawdSBoaeG7h3Ugc3XhuqV0XG5jb25zdCBQT1dFUl9DQUNIRSA9IG5ldyBNYXA8bnVtYmVyLCBudW1iZXI+KCk7XG5cbi8qKlxuICogVOG6oW8gZGFuaCBzw6FjaCBjw6FjIHN0ZXAgY2FuZGlkYXRlcyBjaG8gdmnhu4djIHTDrW5oIHRvw6FuIHNjYWxlXG4gKiBAcGFyYW0gbWF4RGF0YSAtIEdpw6EgdHLhu4sgZOG7ryBsaeG7h3UgdOG7kWkgxJFhXG4gKiBAcGFyYW0gbWluU3RlcCAtIFPhu5EgYsaw4bubYyB04buRaSB0aGnhu4N1XG4gKiBAcGFyYW0gbWluTmVnYXRpdmUgLSBHacOhIHRy4buLIMOibSB04buRaSB0aGnhu4N1XG4gKiBAcGFyYW0gYWNjZXB0U3RlcElzVHlwZUZsb2F0IC0gQ8OzIGNo4bqlcCBuaOG6rW4gc3RlcCB0aOG6rXAgcGjDom4ga2jDtG5nXG4gKiBAcGFyYW0gc3RlcENhbmRpZGF0ZXNCeU9wdGlvbnMgLSBTdGVwIGNhbmRpZGF0ZXMgZG8gbmfGsOG7nWkgZMO5bmcgY3VuZyBj4bqlcFxuICogQHBhcmFtIGluY2x1ZGVOZWdhdGl2ZVN0ZXBzIC0gQ8OzIGJhbyBn4buTbSBjw6FjIHN0ZXAgw6JtIGtow7RuZ1xuICogQHJldHVybnMgRGFuaCBzw6FjaCBjw6FjIHN0ZXAgY2FuZGlkYXRlc1xuICovXG5jb25zdCBnZXRTdGVwQ2FuZGlkYXRlcyA9IChtYXhEYXRhOiBudW1iZXIsIG1pblN0ZXA6IG51bWJlciwgbWluTmVnYXRpdmU6IG51bWJlciwgYWNjZXB0U3RlcElzVHlwZUZsb2F0ID0gZmFsc2UsIHN0ZXBDYW5kaWRhdGVzQnlPcHRpb25zPzogbnVtYmVyW10sIGluY2x1ZGVOZWdhdGl2ZVN0ZXBzID0gZmFsc2UpOiBudW1iZXJbXSA9PiB7XG4gIC8vIE7hur91IGPDsyBzdGVwIGNhbmRpZGF0ZXMgdMO5eSBjaOG7iW5oLCBz4butIGThu6VuZyBjaMO6bmdcbiAgaWYgKHN0ZXBDYW5kaWRhdGVzQnlPcHRpb25zICYmIHN0ZXBDYW5kaWRhdGVzQnlPcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gc3RlcENhbmRpZGF0ZXNCeU9wdGlvbnM7XG4gIH1cblxuICBjb25zdCBzdGVwQ2FuZGlkYXRlcyA9IG5ldyBBcnJheTxudW1iZXI+KCk7XG4gIGNvbnN0IG1heFZhbHVlU3RlcCA9IE1hdGguYWJzKE1hdGgubWF4KG1heERhdGEsIE1hdGguYWJzKG1pbk5lZ2F0aXZlIHx8IDApKSkgLyBtaW5TdGVwO1xuXG4gIC8vIFThuqFvIHN0ZXAgY2FuZGlkYXRlcyBk4buxYSB0csOqbiBsxal5IHRo4burYSBj4bunYSAxMFxuICBmb3IgKGxldCBwb3dOdW1iZXIgPSAwOyBwb3dOdW1iZXIgPD0gTUFYX1BPV19OVU1CRVI7IHBvd051bWJlcisrKSB7XG4gICAgLy8gU+G7rSBk4bulbmcgY2FjaGUgxJHhu4MgdOG7kWkgxrB1IGhp4buHdSBzdeG6pXRcbiAgICBpZiAoIVBPV0VSX0NBQ0hFLmhhcyhwb3dOdW1iZXIpKSB7XG4gICAgICBQT1dFUl9DQUNIRS5zZXQocG93TnVtYmVyLCBNYXRoLnBvdygxMCwgcG93TnVtYmVyKSk7XG4gICAgfVxuICAgIGNvbnN0IHBvd1ZhbHVlID0gUE9XRVJfQ0FDSEUuZ2V0KHBvd051bWJlcikgYXMgbnVtYmVyO1xuXG4gICAgZm9yIChsZXQgdGVtcGxhdGVOdW1iZXIgPSAxOyB0ZW1wbGF0ZU51bWJlciA8IE1BWF9URU1QTEFURV9OVU1CRVI7IHRlbXBsYXRlTnVtYmVyKyspIHtcbiAgICAgIC8vIFRow6ptIHN0ZXAgdGjhuq1wIHBow6JuIG7hur91IMSRxrDhu6NjIGNo4bqlcCBuaOG6rW5cbiAgICAgIGlmIChhY2NlcHRTdGVwSXNUeXBlRmxvYXQpIHtcbiAgICAgICAgY29uc3Qgc3RlcCA9IHBvd1ZhbHVlICogKCgodGVtcGxhdGVOdW1iZXIgLSAxKSAqIDIgKyAxKSAvIDIpO1xuICAgICAgICBzdGVwQ2FuZGlkYXRlcy5wdXNoKHN0ZXApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGVwID0gcG93VmFsdWUgKiB0ZW1wbGF0ZU51bWJlcjtcbiAgICAgIHN0ZXBDYW5kaWRhdGVzLnB1c2goc3RlcCk7XG5cbiAgICAgIC8vIEThu6tuZyBraGkgc3RlcCDEkcOjIMSR4bunIGzhu5tuXG4gICAgICBpZiAoc3RlcCA+PSBtYXhWYWx1ZVN0ZXApIHtcbiAgICAgICAgY2hlY2tBbmRTZXROZWdhdGl2ZVN0ZXBzKHN0ZXBDYW5kaWRhdGVzLCBpbmNsdWRlTmVnYXRpdmVTdGVwcywgbWluTmVnYXRpdmUpO1xuICAgICAgICByZXR1cm4gc3RlcENhbmRpZGF0ZXM7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2hlY2tBbmRTZXROZWdhdGl2ZVN0ZXBzKHN0ZXBDYW5kaWRhdGVzLCBpbmNsdWRlTmVnYXRpdmVTdGVwcywgbWluTmVnYXRpdmUpO1xuICByZXR1cm4gc3RlcENhbmRpZGF0ZXM7XG59O1xuXG4vKipcbiAqIEtp4buDbSB0cmEgdsOgIHRow6ptIGPDoWMgc3RlcCDDom0gdsOgbyBkYW5oIHPDoWNoIGNhbmRpZGF0ZXMgbuG6v3UgY+G6p25cbiAqIEBwYXJhbSBzdGVwQ2FuZGlkYXRlcyAtIERhbmggc8OhY2ggc3RlcCBjYW5kaWRhdGVzIGhp4buHbiB04bqhaVxuICogQHBhcmFtIGFjY2VwdE5lZ2F0aXZlIC0gQ8OzIGNo4bqlcCBuaOG6rW4gZ2nDoSB0cuG7iyDDom0ga2jDtG5nXG4gKiBAcGFyYW0gbWluTmVnYXRpdmUgLSBHacOhIHRy4buLIMOibSB04buRaSB0aGnhu4N1XG4gKi9cbmNvbnN0IGNoZWNrQW5kU2V0TmVnYXRpdmVTdGVwcyA9IChzdGVwQ2FuZGlkYXRlczogbnVtYmVyW10sIGFjY2VwdE5lZ2F0aXZlOiBib29sZWFuLCBtaW5OZWdhdGl2ZTogbnVtYmVyKTogdm9pZCA9PiB7XG4gIGlmIChhY2NlcHROZWdhdGl2ZSAmJiBtaW5OZWdhdGl2ZSA8IDApIHtcbiAgICAvLyBU4bqhbyBjw6FjIHN0ZXAgw6JtIHbDoCB0aMOqbSB2w6BvIMSR4bqndSBkYW5oIHPDoWNoXG4gICAgY29uc3QgbmVnYXRpdmVTdGVwcyA9IFsuLi5zdGVwQ2FuZGlkYXRlc10ubWFwKChzdGVwKSA9PiAtc3RlcCk7XG4gICAgc3RlcENhbmRpZGF0ZXMudW5zaGlmdCguLi5uZWdhdGl2ZVN0ZXBzKTtcbiAgfVxufTtcblxuLyoqXG4gKiBLaeG7g20gdHJhIHTDrW5oIGjhu6NwIGzhu4cgY+G7p2EgY8OhYyB0aGFtIHPhu5EgxJHhuqd1IHbDoG9cbiAqIEBwYXJhbSBtYXhEYXRhIC0gR2nDoSB0cuG7iyBk4buvIGxp4buHdSB04buRaSDEkWFcbiAqIEBwYXJhbSBvcHRpb25zIC0gQ8OhYyB0w7l5IGNo4buNbiBj4bqldSBow6xuaFxuICogQHRocm93cyB7RXJyb3J9IEtoaSBjw6FjIHRoYW0gc+G7kSBraMO0bmcgaOG7o3AgbOG7h1xuICovXG5jb25zdCB2YWxpZGF0ZUlucHV0cyA9IChtYXhEYXRhOiBudW1iZXIsIG9wdGlvbnM/OiBBeGlzU2NhbGVPcHRpb25zKTogdm9pZCA9PiB7XG4gIC8vIEtp4buDbSB0cmEgbWF4RGF0YSDDom0ga2hpIGtow7RuZyBjaOG6pXAgbmjhuq1uIGdpw6EgdHLhu4sgw6JtXG4gIGlmIChtYXhEYXRhIDwgMCAmJiAhb3B0aW9ucz8uYWNjZXB0TmVnYXRpdmUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21heERhdGEgaXMgbGVzcyB0aGFuIDAgYW5kIGFjY2VwdE5lZ2F0aXZlIGlzIGZhbHNlJyk7XG4gIH1cblxuICBpZiAob3B0aW9ucz8uYWNjZXB0TmVnYXRpdmUpIHtcbiAgICAvLyBLaeG7g20gdHJhIG1pbk5lZ2F0aXZlIGPDsyDEkcaw4bujYyBjdW5nIGPhuqVwIGtow7RuZ1xuICAgIGlmIChpc05pbChvcHRpb25zLm1pbk5lZ2F0aXZlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaW5OZWdhdGl2ZSBpcyByZXF1aXJlZCB3aGVuIGFjY2VwdE5lZ2F0aXZlIGlzIHRydWUnKTtcbiAgICB9XG5cbiAgICAvLyBLaeG7g20gdHJhIG1heERhdGEgcGjhuqNpID49IG1pbk5lZ2F0aXZlXG4gICAgaWYgKG1heERhdGEgPCBvcHRpb25zLm1pbk5lZ2F0aXZlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21heERhdGEgaXMgbGVzcyB0aGFuIG1pbk5lZ2F0aXZlJyk7XG4gICAgfVxuXG4gICAgLy8gS2nhu4NtIHRyYSBtaW5OZWdhdGl2ZSBwaOG6o2kgbMOgIHPhu5Egw6JtXG4gICAgaWYgKG9wdGlvbnMubWluTmVnYXRpdmUgPj0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaW5OZWdhdGl2ZSBtdXN0IGJlIG5lZ2F0aXZlJyk7XG4gICAgfVxuICB9XG59O1xuIl19