axidio-styleguide-library1-v2 0.3.57 → 0.3.58

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.
@@ -206,7 +206,7 @@ export class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
206
206
  .attr('width', '80')
207
207
  .attr('height', dimensions.height + margin.top + margin.bottom)
208
208
  .append('g')
209
- .attr('transform', `translate(80,${margin.top})`);
209
+ .attr('transform', `translate(70,${margin.top})`);
210
210
  // Right Y-axis - Fixed
211
211
  const rightAxisContainer = chartWrapper
212
212
  .append('div')
@@ -648,7 +648,7 @@ export class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
648
648
  svg.selectAll('.x-axis > g > text').attr('class', 'lib-display-hidden');
649
649
  }
650
650
  if (!this.chartConfiguration.isMultiChartGridLine) {
651
- this.renderStandardAxes(svg, svgYAxisLeft, axes, scales, dimensions, data);
651
+ this.renderStandardAxes(svg, axes, scales, dimensions, data);
652
652
  }
653
653
  else if (this.chartConfiguration.isDrilldownChart) {
654
654
  this.renderDrilldownAxes(svg, svgYAxisLeft, svgYAxisRight, axes, scales, dimensions);
@@ -659,7 +659,7 @@ export class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
659
659
  this.applyAxisStyling(svg, svgYAxisLeft, svgYAxisRight);
660
660
  this.applyAxisConfigurations(svg, scales, dimensions, data);
661
661
  }
662
- renderStandardAxes(svg, svgYAxisLeft, axes, scales, dimensions, data) {
662
+ renderStandardAxes(svg, axes, scales, dimensions, data) {
663
663
  const isMobileOrTablet = window.innerWidth < 1024;
664
664
  // X-axis with labels
665
665
  const xAxisGroup = svg
@@ -695,15 +695,6 @@ export class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
695
695
  .call(axes.yAxis)
696
696
  .selectAll('text')
697
697
  .style('fill', 'var(--chart-text-color)');
698
- svgYAxisLeft
699
- .append('line')
700
- .attr('x1', -1) // Changed from 0 to -1 for better visibility
701
- .attr('x2', -1) // Changed from 0 to -1 for better visibility
702
- .attr('y1', 0)
703
- .attr('y2', dimensions.height)
704
- .style('stroke', 'var(--chart-axis-color)')
705
- .style('stroke-width', '1px')
706
- .style('shape-rendering', 'crispEdges'); // Added for sharp rendering
707
698
  }
708
699
  renderDrilldownAxes(svg, svgYAxisLeft, svgYAxisRight, axes, scales, dimensions) {
709
700
  svg
@@ -1064,4 +1055,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1064
1055
  }], headerMenuclickEvent: [{
1065
1056
  type: Output
1066
1057
  }] } });
1067
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9yaXpvbnRhbC1iYXJzLXdpdGgtc2Nyb2xsLXpvb20uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXhpZGlvLXN0eWxlZ3VpZGUtbGlicmFyeS9zcmMvbGliL2hvcml6b250YWwtYmFycy13aXRoLXNjcm9sbC16b29tL2hvcml6b250YWwtYmFycy13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ob3Jpem9udGFsLWJhcnMtd2l0aC1zY3JvbGwtem9vbS9ob3Jpem9udGFsLWJhcnMtd2l0aC1zY3JvbGwtem9vbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FFbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sV0FBVyxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRXpCLE9BQU8sa0JBQWtCLE1BQU0sa0JBQWtCLENBQUM7Ozs7OztBQW1EbEQsTUFBTSxPQUFPLHFDQUNYLFNBQVEsaUJBQWlCO0lBZ0Z6QjtRQUNFLEtBQUssRUFBRSxDQUFDO1FBdEVBLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3JDLHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFekQsdUJBQWtCLEdBQVEsRUFBRSxDQUFDO1FBQzdCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLHdCQUFtQixHQUFHLElBQUksQ0FBQztRQUMzQixhQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxD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LE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBPbkNoYW5nZXMsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudFVuaXF1ZUlkIH0gZnJvbSAnLi4vdW5pcXVlLWlkJztcclxuaW1wb3J0IENoYXJ0SGVscGVyIGZyb20gJy4uL2NoYXJ0LWhlbHBlcic7XHJcbmltcG9ydCAqIGFzIGQzIGZyb20gJ2QzJztcclxuaW1wb3J0IHsgUmVzaXplZEV2ZW50IH0gZnJvbSAnYW5ndWxhci1yZXNpemUtZXZlbnQnO1xyXG5pbXBvcnQgSGVhZGVyQ29uZmlnSGVscGVyIGZyb20gJy4uL2hlYWRlci1jb25maWcnO1xyXG5cclxuLy8gVHlwZXNcclxuaW50ZXJmYWNlIENoYXJ0RGF0YSB7XHJcbiAgZGF0YTogYW55W107XHJcbiAgbWV0YURhdGE6IENoYXJ0TWV0YURhdGE7XHJcbiAgbGluZURhdGE/OiBhbnlbXTtcclxuICB0YXJnZXRMaW5lRGF0YT86IFRhcmdldExpbmVEYXRhO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgQ2hhcnRNZXRhRGF0YSB7XHJcbiAgdW5pdD86IHN0cmluZztcclxuICBpc0NDPzogYm9vbGVhbjtcclxuICBiYXJXaXRob3V0Q2xpY2s/OiBzdHJpbmdbXTtcclxuICBjb2xvcnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XHJcbiAga2V5TGlzdDogc3RyaW5nW107XHJcbiAgZGF0YVR5cGU/OiBzdHJpbmc7XHJcbiAgaGFzRHJpbGxEb3duPzogYm9vbGVhbjtcclxuICBob3ZlckNvbG9yPzogc3RyaW5nO1xyXG4gIHlMYWJlbD86IHN0cmluZztcclxuICB4TGFiZWw/OiBzdHJpbmc7XHJcbiAgbGluZXlMYWJlbD86IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIFRhcmdldExpbmVEYXRhIHtcclxuICB0YXJnZXQ6IHN0cmluZyB8IG51bWJlcjtcclxuICBjb2xvcjogc3RyaW5nO1xyXG4gIHRhcmdldE5hbWU/OiBzdHJpbmc7XHJcbiAgYmFyQWJvdmVUYXJnZXRDb2xvcj86IHN0cmluZztcclxuICBiYXJBYm92ZVRhcmdldEhvdmVyQ29sb3I/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBEaW1lbnNpb25zIHtcclxuICB3aWR0aDogbnVtYmVyO1xyXG4gIGhlaWdodDogbnVtYmVyO1xyXG4gIGNvbnRhaW5lcldpZHRoOiBudW1iZXI7XHJcbiAgY29udGFpbmVySGVpZ2h0OiBudW1iZXI7XHJcbiAgYmFyV2lkdGg6IG51bWJlcjtcclxuICBiYXJQYWRkaW5nOiBudW1iZXI7XHJcbiAgcmVxdWlyZWRTdmdXaWR0aDogbnVtYmVyO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1ob3Jpem9udGFsLWJhcnMtd2l0aC1zY3JvbGwtem9vbScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2hvcml6b250YWwtYmFycy13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFtcclxuICAgICcuL2hvcml6b250YWwtYmFycy13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC5sZXNzJyxcclxuICAgICcuLi9jb21tb24tc3R5bGVzLmxlc3MnLFxyXG4gIF0sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEhvcml6b250YWxCYXJzV2l0aFNjcm9sbFpvb21Db21wb25lbnRcclxuICBleHRlbmRzIENvbXBvbmVudFVuaXF1ZUlkXHJcbiAgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG4gIFxyXG4gIEBWaWV3Q2hpbGQoJ3ZlcnRpY2Fsc3RhY2tlZGNoYXJ0Y29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICBjb250YWluZXJFbHQhOiBFbGVtZW50UmVmO1xyXG5cclxuICBAVmlld0NoaWxkKCd2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lckVsdCE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBJbnB1dCgpIGNoYXJ0RGF0YTogQ2hhcnREYXRhIHwgYW55IDtcclxuICBASW5wdXQoKSBjdXN0b21DaGFydENvbmZpZ3VyYXRpb246IGFueTtcclxuICBAT3V0cHV0KCkgY2xpY2tFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBoZWFkZXJNZW51Y2xpY2tFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBjaGFydENvbmZpZ3VyYXRpb246IGFueSA9IHt9O1xyXG4gIGlzSGVhZGVyVmlzaWJsZSA9IHRydWU7XHJcbiAgaXNUb3BDYXB0aW9uVmlzaWJsZSA9IHRydWU7XHJcbiAgdW5pcXVlSWQgPSB0aGlzLmdldFVuaXF1ZUlkKCk7XHJcbiAgaXNUcmFuc3BhcmVudEJhY2tncm91bmQgPSBmYWxzZTtcclxuICBpc0NDID0gZmFsc2U7XHJcbiAgaXNab29tZWRPdXQgPSB0cnVlO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IENPTlNUQU5UUyA9IHtcclxuICAgIFJJR0hUX1NWR19XSURUSDogNjAsXHJcbiAgICBMRUZUX1JJR0hUX1NQQUNFUzogNTAsXHJcbiAgICBTSE9SVF9USUNLX0xFTkdUSDogNCxcclxuICAgIExPTkdfVElDS19MRU5HVEg6IDE2LFxyXG4gICAgU0hPUlRfVElDS19MRU5HVEhfQkc6IDUsXHJcbiAgICBMT05HX1RJQ0tfTEVOR1RIX0JHOiAzMCxcclxuICAgIERFU0tUT1BfQkFSX1dJRFRIOiA0MCwgICAgICAvLyBEZXNrdG9wIGJhciB3aWR0aFxyXG4gICAgTU9CSUxFX0JBUl9XSURUSDogMjUsICAgICAgIC8vIE1vYmlsZS9UYWJsZXQgYmFyIHdpZHRoIChyZWR1Y2VkKVxyXG4gICAgQkFSX0dBUDogMzAsICAgICAgICAgICAgICAgIC8vIEdhcCBiZXR3ZWVuIGJhcnMgKGluY3JlYXNlZCBmb3IgYmV0dGVyIHNlcGFyYXRpb24pXHJcbiAgICBaT09NX1RIUkVTSE9MRDogMzAsXHJcbiAgICBaT09NX0lOX1RIUkVTSE9MRDogOCxcclxuICB9O1xyXG5cclxuICBkZWZhdWx0Q29uZmlndXJhdGlvbiA9IHtcclxuICAgIG1hcmdpbjogeyB0b3A6IDIwLCByaWdodDogMjAsIGJvdHRvbTogMjAsIGxlZnQ6IDQwIH0sXHJcbiAgICBzdmdIZWlnaHQ6IDcwLFxyXG4gICAgbGVnZW5kSGVpZ2h0OiAnMTAlJyxcclxuICAgIG51bWJlck9mWVRpY2tzOiA1LFxyXG4gICAgbGFiZWxGb3JtYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICB4QXhpc0xhYmVsRm9tYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICB5QXhpc0xhYmVsRm9tYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICB5TGluZUF4aXNMYWJlbEZvbWF0dGVyOiBDaGFydEhlbHBlci5kZWZhdWx0Rm9ybWF0dGVyLFxyXG4gICAgbGluZUdyYXBoQ29sb3I6ICcjRjZEMjgzJyxcclxuICAgIHNob3dMaW5lQ2hhcnRBeGlzOiB0cnVlLFxyXG4gICAgc2hvd0xlZ2VuZDogZmFsc2UsXHJcbiAgICBmb3JDb21wYXJpc29uOiB0cnVlLFxyXG4gICAgaGVhZGVyTWVudU9wdGlvbnM6IEhlYWRlckNvbmZpZ0hlbHBlci5oZWFkZXJDb25maWcuaGVhZGVyTWVudU9wdGlvbnMsXHJcbiAgICB5QXhpc0dyaWQ6IGZhbHNlLFxyXG4gICAgLy8gT3B0aW9uYWwgY29uZmlncyB3aXRoIHVuZGVmaW5lZCBkZWZhdWx0c1xyXG4gICAgaXNIZWFkZXJWaXNpYmxlOiB1bmRlZmluZWQsXHJcbiAgICBpc1RyYW5zcGFyZW50QmFja2dyb3VuZDogdW5kZWZpbmVkLFxyXG4gICAgaXNUb3BDYXB0aW9uVmlzaWJsZTogdW5kZWZpbmVkLFxyXG4gICAgaXNNdWx0aUNoYXJ0R3JpZExpbmU6IHVuZGVmaW5lZCxcclxuICAgIGlzRnVsbFNjcmVlbjogdW5kZWZpbmVkLFxyXG4gICAgY3VzdG9tWXNjYWxlOiB1bmRlZmluZWQsXHJcbiAgICBpc1hheGlzTGFiZWxIaWRkZW46IHVuZGVmaW5lZCxcclxuICAgIGlzWWF4aXNMYWJlbEhpZGRlbjogdW5kZWZpbmVkLFxyXG4gICAgaXNZYXhpc0hpZGRlbjogdW5kZWZpbmVkLFxyXG4gICAgaXNZYXhpc0Rhc2hlZDogdW5kZWZpbmVkLFxyXG4gICAgaXNYYXhpc0NvbG9yOiB1bmRlZmluZWQsXHJcbiAgICB0ZXh0Rm9ybWF0dGVyOiB1bmRlZmluZWQsXHJcbiAgICBzaG93VG90YWxPblRvcDogdW5kZWZpbmVkLFxyXG4gICAgYmFja2VuZEZvcm1hdHRlckhhc1ByaW9yaXR5OiB1bmRlZmluZWQsXHJcbiAgICBzaG93QW5nbGVkTGFiZWxzOiB1bmRlZmluZWQsXHJcbiAgICBpc05vQWx0ZXJuYXRlWGF4aXNUZXh0OiB1bmRlZmluZWQsXHJcbiAgICBpc1hncmlkQmV0d2VlbkxhYmVsczogdW5kZWZpbmVkLFxyXG4gICAgc2hvd1hheGlzVG9wOiB1bmRlZmluZWQsXHJcbiAgICB4QXhpc0dyaWQ6IHVuZGVmaW5lZCxcclxuICAgIHhMYWJlbHNPblNhbWVMaW5lOiB1bmRlZmluZWQsXHJcbiAgICBoaWRlWGF4aXNUaWNrOiB1bmRlZmluZWQsXHJcbiAgICBpc0RyaWxsZG93bkNoYXJ0OiB1bmRlZmluZWQsXHJcbiAgICBpc1RhcmdldExpbmU6IHVuZGVmaW5lZCxcclxuICAgIGRpc3BsYXlUaXRsZU9uVG9wOiB1bmRlZmluZWQsXHJcbiAgICBpc1RvZ2dsZVZpc2libGU6IHVuZGVmaW5lZCxcclxuICAgIGlzVGl0bGVIaWRkZW46IHVuZGVmaW5lZCxcclxuICB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcygpIHtcclxuICAgIHRoaXMucmVtb3ZlRXhpc3RpbmdDaGFydCgpO1xyXG4gICAgdGhpcy5pbml0aWFsaXplU3RhY2tlZENoYXJ0KCk7XHJcbiAgfVxyXG5cclxuICBvblJlc2l6ZWQoZXZlbnQ6IFJlc2l6ZWRFdmVudCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVtb3ZlRXhpc3RpbmdDaGFydCgpO1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVTdGFja2VkQ2hhcnQoKTtcclxuICAgIH0sIDEwKTtcclxuICB9XHJcblxyXG4gIGlzWm9vbU91dFNlbGVjdGVkKGlzWm9vbU91dDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc1pvb21lZE91dCA9IGlzWm9vbU91dDtcclxuICAgIHRoaXMubmdPbkNoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlRXhpc3RpbmdDaGFydCgpIHtcclxuICAgIGQzLnNlbGVjdCgnIycgKyB0aGlzLnVuaXF1ZUlkKS5yZW1vdmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWVyZ2VDb25maWd1cmF0aW9ucygpIHtcclxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuZGVmYXVsdENvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb25ba2V5XSA9IENoYXJ0SGVscGVyLmdldFZhbHVlQnlDb25maWd1cmF0aW9uVHlwZShcclxuICAgICAgICBrZXksXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbixcclxuICAgICAgICB0aGlzLmN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvblxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwcmVwYXJlTWV0YURhdGEobWV0YURhdGE6IENoYXJ0TWV0YURhdGEpOiBDaGFydE1ldGFEYXRhIHtcclxuICAgIGlmICghbWV0YURhdGEudW5pdCkgbWV0YURhdGEudW5pdCA9ICcnO1xyXG4gICAgaWYgKG1ldGFEYXRhLmlzQ0MpIHRoaXMuaXNDQyA9IG1ldGFEYXRhLmlzQ0M7XHJcbiAgICBcclxuICAgIGlmIChtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2s/Lmxlbmd0aCkge1xyXG4gICAgICBtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2sgPSBtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2subWFwKGVsID0+IGVsLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbWV0YURhdGEuYmFyV2l0aG91dENsaWNrID0gW107XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHJldHVybiBtZXRhRGF0YTtcclxuICB9XHJcblxyXG5wcml2YXRlIGNhbGN1bGF0ZURpbWVuc2lvbnMoXHJcbiAgY2hhcnRDb250YWluZXI6IGFueSxcclxuICB2ZXJ0aWNhbENvbnRhaW5lcjogYW55LFxyXG4gIG1hcmdpbjogYW55LFxyXG4gIGRhdGFMZW5ndGg6IG51bWJlclxyXG4pOiBEaW1lbnNpb25zIHtcclxuICBjb25zdCBjb250YWluZXJXaWR0aCA9IGNoYXJ0Q29udGFpbmVyLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcclxuICBjb25zdCBjb250YWluZXJIZWlnaHQgPSB2ZXJ0aWNhbENvbnRhaW5lci5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xyXG4gIFxyXG4gIGNvbnN0IGxlZnRBeGlzV2lkdGggPSA4MDtcclxuICBjb25zdCByaWdodEF4aXNXaWR0aCA9IHRoaXMuQ09OU1RBTlRTLlJJR0hUX1NWR19XSURUSDtcclxuICBjb25zdCBhdmFpbGFibGVXaWR0aCA9IGNvbnRhaW5lcldpZHRoIC0gbGVmdEF4aXNXaWR0aCAtIHJpZ2h0QXhpc1dpZHRoO1xyXG4gIFxyXG4gIGxldCB3aWR0aCA9IGF2YWlsYWJsZVdpZHRoO1xyXG4gIGxldCBoZWlnaHQgPSBjb250YWluZXJIZWlnaHQgKiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0IC8gMTAwKSAtIG1hcmdpbi50b3AgLSBtYXJnaW4uYm90dG9tO1xyXG5cclxuICBpZiAoZGF0YUxlbmd0aCA+IHRoaXMuQ09OU1RBTlRTLlpPT01fVEhSRVNIT0xEICYmIHRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgIGNvbnN0IG1pbldpZHRoID0gZGF0YUxlbmd0aCAqIDI1O1xyXG4gICAgd2lkdGggPSBNYXRoLm1heCh3aWR0aCwgbWluV2lkdGgpO1xyXG4gIH1cclxuXHJcbiAgaWYgKGRhdGFMZW5ndGggPiB0aGlzLkNPTlNUQU5UUy5aT09NX0lOX1RIUkVTSE9MRCAmJiAhdGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgd2lkdGggPSBkYXRhTGVuZ3RoICogMTMwO1xyXG4gIH1cclxuXHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRnVsbFNjcmVlbikge1xyXG4gICAgaGVpZ2h0ID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0ICE9PSA4MFxyXG4gICAgICA/IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodFxyXG4gICAgICA6IGNvbnRhaW5lckhlaWdodDtcclxuICB9XHJcblxyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICBoZWlnaHQgPSBjb250YWluZXJIZWlnaHQgLSBtYXJnaW4udG9wIC0gbWFyZ2luLmJvdHRvbSAtIDEzMDtcclxuICB9XHJcblxyXG4gIGNvbnN0IGlzTW9iaWxlT3JUYWJsZXQgPSB3aW5kb3cuaW5uZXJXaWR0aCA8IDEwMjQ7XHJcbiAgbGV0IGJhcldpZHRoOiBudW1iZXI7XHJcbiAgbGV0IGJhclBhZGRpbmc6IG51bWJlcjtcclxuICBcclxuICBpZiAoaXNNb2JpbGVPclRhYmxldCkge1xyXG4gICAgaWYgKGRhdGFMZW5ndGggPT09IDEpIHtcclxuICAgICAgYmFyV2lkdGggPSA2MDtcclxuICAgICAgYmFyUGFkZGluZyA9IDA7XHJcbiAgICB9IGVsc2UgaWYgKGRhdGFMZW5ndGggPT09IDIpIHtcclxuICAgICAgYmFyV2lkdGggPSA1MDtcclxuICAgICAgYmFyUGFkZGluZyA9IDQ1O1xyXG4gICAgfSBlbHNlIGlmIChkYXRhTGVuZ3RoID09PSAzKSB7XHJcbiAgICAgIGJhcldpZHRoID0gNDU7XHJcbiAgICAgIGJhclBhZGRpbmcgPSA0MDtcclxuICAgIH0gZWxzZSBpZiAoZGF0YUxlbmd0aCA8PSA1KSB7XHJcbiAgICAgIGJhcldpZHRoID0gMzU7XHJcbiAgICAgIGJhclBhZGRpbmcgPSAzMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGJhcldpZHRoID0gMjU7XHJcbiAgICAgIGJhclBhZGRpbmcgPSAyNTtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgYmFyV2lkdGggPSB0aGlzLkNPTlNUQU5UUy5ERVNLVE9QX0JBUl9XSURUSDtcclxuICAgIGJhclBhZGRpbmcgPSB0aGlzLkNPTlNUQU5UUy5CQVJfR0FQO1xyXG4gIH1cclxuICBcclxuICBjb25zdCB0b3RhbEJhcnNXaWR0aCA9IGJhcldpZHRoICogZGF0YUxlbmd0aDtcclxuICBjb25zdCB0b3RhbEdhcHMgPSBiYXJQYWRkaW5nICogKGRhdGFMZW5ndGggLSAxKTtcclxuICBjb25zdCBtaW5SZXF1aXJlZFdpZHRoID0gdG90YWxCYXJzV2lkdGggKyB0b3RhbEdhcHMgKyAodGhpcy5DT05TVEFOVFMuTEVGVF9SSUdIVF9TUEFDRVMgKiAyKTtcclxuICBjb25zdCByZXF1aXJlZFN2Z1dpZHRoID0gTWF0aC5tYXgoYXZhaWxhYmxlV2lkdGgsIG1pblJlcXVpcmVkV2lkdGgpO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgd2lkdGgsXHJcbiAgICBoZWlnaHQsXHJcbiAgICBjb250YWluZXJXaWR0aCxcclxuICAgIGNvbnRhaW5lckhlaWdodCxcclxuICAgIGJhcldpZHRoLFxyXG4gICAgYmFyUGFkZGluZyxcclxuICAgIHJlcXVpcmVkU3ZnV2lkdGgsXHJcbiAgfTtcclxufVxyXG5cclxucHJpdmF0ZSBjcmVhdGVTdmdDb250YWluZXJzKFxyXG4gIGNoYXJ0Q29udGFpbmVyOiBhbnksXHJcbiAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcclxuICBtYXJnaW46IGFueSxcclxuICBoYXNYTGFiZWw6IGJvb2xlYW4gIC8vIEFkZCB0aGlzIHBhcmFtZXRlclxyXG4pIHtcclxuICAvLyBDYWxjdWxhdGUgdG90YWwgaGVpZ2h0IGluY2x1ZGluZyBzcGFjZSBmb3IgWC1heGlzIGxhYmVsIGlmIHByZXNlbnRcclxuICBjb25zdCB4TGFiZWxTcGFjZSA9IGhhc1hMYWJlbCA/IDMwIDogMDtcclxuICBjb25zdCB0b3RhbEhlaWdodCA9IGRpbWVuc2lvbnMuaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20gKyB4TGFiZWxTcGFjZTtcclxuXHJcbiAgLy8gTWFpbiB3cmFwcGVyXHJcbiAgY29uc3QgY2hhcnRXcmFwcGVyID0gY2hhcnRDb250YWluZXJcclxuICAgIC5hcHBlbmQoJ2RpdicpXHJcbiAgICAuYXR0cignaWQnLCB0aGlzLnVuaXF1ZUlkKVxyXG4gICAgLmF0dHIoJ2NsYXNzJywgJ2NoYXJ0LXdyYXBwZXItbWFpbicpXHJcbiAgICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ3JlbGF0aXZlJylcclxuICAgIC5zdHlsZSgnd2lkdGgnLCAnMTAwJScpXHJcbiAgICAuc3R5bGUoJ2hlaWdodCcsIGAke3RvdGFsSGVpZ2h0fXB4YCk7ICAvLyBJbmNsdWRlIFgtbGFiZWwgc3BhY2VcclxuXHJcbmNvbnN0IGxlZnRBeGlzQ29udGFpbmVyID0gY2hhcnRXcmFwcGVyXHJcbiAgLmFwcGVuZCgnZGl2JylcclxuICAuYXR0cignY2xhc3MnLCAnbGVmdC1heGlzLWNvbnRhaW5lcicpXHJcbiAgLnN0eWxlKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpXHJcbiAgLnN0eWxlKCdsZWZ0JywgJzAnKVxyXG4gIC5zdHlsZSgndG9wJywgJzAnKVxyXG4gIC5zdHlsZSgnd2lkdGgnLCAnODBweCcpXHJcbiAgLnN0eWxlKCdoZWlnaHQnLCBgJHtkaW1lbnNpb25zLmhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tfXB4YClcclxuICAuc3R5bGUoJ2JhY2tncm91bmQtY29sb3InLCAndmFyKC0tY2FyZC1iZyknKVxyXG4gIC5zdHlsZSgnei1pbmRleCcsICcxMCcpO1xyXG5cclxuY29uc3Qgc3ZnWUF4aXNMZWZ0ID0gbGVmdEF4aXNDb250YWluZXJcclxuICAuYXBwZW5kKCdzdmcnKVxyXG4gIC5hdHRyKCd3aWR0aCcsICc4MCcpXHJcbiAgLmF0dHIoJ2hlaWdodCcsIGRpbWVuc2lvbnMuaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20pXHJcbiAgLmFwcGVuZCgnZycpXHJcbiAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoODAsJHttYXJnaW4udG9wfSlgKTtcclxuXHJcbiAgLy8gUmlnaHQgWS1heGlzIC0gRml4ZWRcclxuICBjb25zdCByaWdodEF4aXNDb250YWluZXIgPSBjaGFydFdyYXBwZXJcclxuICAgIC5hcHBlbmQoJ2RpdicpXHJcbiAgICAuYXR0cignY2xhc3MnLCAncmlnaHQtYXhpcy1jb250YWluZXInKVxyXG4gICAgLnN0eWxlKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpXHJcbiAgICAuc3R5bGUoJ3JpZ2h0JywgJzAnKVxyXG4gICAgLnN0eWxlKCd0b3AnLCAnMCcpXHJcbiAgICAuc3R5bGUoJ3dpZHRoJywgYCR7dGhpcy5DT05TVEFOVFMuUklHSFRfU1ZHX1dJRFRIfXB4YClcclxuICAgIC5zdHlsZSgnaGVpZ2h0JywgYCR7ZGltZW5zaW9ucy5oZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbX1weGApICAvLyBFeGNsdWRlIFgtbGFiZWwgc3BhY2VcclxuICAgIC5zdHlsZSgnYmFja2dyb3VuZC1jb2xvcicsICd2YXIoLS1jYXJkLWJnKScpXHJcbiAgICAuc3R5bGUoJ3otaW5kZXgnLCAnMTAnKTtcclxuXHJcbiAgY29uc3Qgc3ZnWUF4aXNSaWdodCA9IHJpZ2h0QXhpc0NvbnRhaW5lclxyXG4gICAgLmFwcGVuZCgnc3ZnJylcclxuICAgIC5hdHRyKCd3aWR0aCcsIHRoaXMuQ09OU1RBTlRTLlJJR0hUX1NWR19XSURUSClcclxuICAgIC5hdHRyKCdoZWlnaHQnLCBkaW1lbnNpb25zLmhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tKVxyXG4gICAgLmFwcGVuZCgnZycpXHJcbiAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7bWFyZ2luLnRvcH0pYCk7XHJcblxyXG4gIC8vIFNjcm9sbGFibGUgbWlkZGxlIGFyZWFcclxuY29uc3Qgc2Nyb2xsYWJsZUNvbnRhaW5lciA9IGNoYXJ0V3JhcHBlclxyXG4gIC5hcHBlbmQoJ2RpdicpXHJcbiAgLmF0dHIoJ2NsYXNzJywgJ3Njcm9sbGFibGUtY2hhcnQtY29udGFpbmVyJylcclxuICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJylcclxuICAuc3R5bGUoJ2xlZnQnLCAnODBweCcpICAvLyBFeGFjdGx5IHdoZXJlIGxlZnQgY29udGFpbmVyIGVuZHNcclxuICAuc3R5bGUoJ3JpZ2h0JywgYCR7dGhpcy5DT05TVEFOVFMuUklHSFRfU1ZHX1dJRFRIfXB4YClcclxuICAuc3R5bGUoJ3RvcCcsICcwJylcclxuICAuc3R5bGUoJ3dpZHRoJywgJ2F1dG8nKVxyXG4gIC5zdHlsZSgnaGVpZ2h0JywgYCR7ZGltZW5zaW9ucy5oZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbX1weGApXHJcbiAgLnN0eWxlKCdvdmVyZmxvdy14JywgJ2F1dG8nKVxyXG4gIC5zdHlsZSgnb3ZlcmZsb3cteScsICdoaWRkZW4nKTtcclxuXHJcblxyXG5jb25zdCBpbm5lckNvbnRhaW5lciA9IHNjcm9sbGFibGVDb250YWluZXJcclxuICAuYXBwZW5kKCdkaXYnKVxyXG4gIC5hdHRyKCdjbGFzcycsICdpbm5lci1jaGFydC1jb250YWluZXInKVxyXG4gIC5zdHlsZSgnbWluLXdpZHRoJywgJzEwMCUnKTtcclxuXHJcbmNvbnN0IHN2ZyA9IGlubmVyQ29udGFpbmVyXHJcbiAgLmFwcGVuZCgnc3ZnJylcclxuICAuYXR0cignd2lkdGgnLCBkaW1lbnNpb25zLnJlcXVpcmVkU3ZnV2lkdGgpXHJcbiAgLmF0dHIoJ2hlaWdodCcsIGRpbWVuc2lvbnMuaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20gKyAzMClcclxuICAuYXBwZW5kKCdnJylcclxuICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7bWFyZ2luLnRvcH0pYCk7XHJcblxyXG4gIC8vIEZpeGVkIGJvdHRvbSBjb250YWluZXIgZm9yIFgtYXhpcyBsYWJlbFxyXG4gIGNvbnN0IGJvdHRvbUxhYmVsQ29udGFpbmVyID0gY2hhcnRXcmFwcGVyXHJcbiAgICAuYXBwZW5kKCdkaXYnKVxyXG4gICAgLmF0dHIoJ2NsYXNzJywgJ2JvdHRvbS1sYWJlbC1jb250YWluZXInKVxyXG4gICAgLnN0eWxlKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpXHJcbiAgICAuc3R5bGUoJ2xlZnQnLCAnODBweCcpXHJcbiAgICAuc3R5bGUoJ3JpZ2h0JywgYCR7dGhpcy5DT05TVEFOVFMuUklHSFRfU1ZHX1dJRFRIfXB4YClcclxuICAgIC5zdHlsZSgnYm90dG9tJywgJzAnKVxyXG4gICAgLnN0eWxlKCdoZWlnaHQnLCBgJHt4TGFiZWxTcGFjZX1weGApXHJcbiAgICAuc3R5bGUoJ2Rpc3BsYXknLCAnZmxleCcpXHJcbiAgICAuc3R5bGUoJ2p1c3RpZnktY29udGVudCcsICdjZW50ZXInKVxyXG4gICAgLnN0eWxlKCdhbGlnbi1pdGVtcycsICdjZW50ZXInKVxyXG4gICAgLnN0eWxlKCdiYWNrZ3JvdW5kLWNvbG9yJywgJ3ZhcigtLWNhcmQtYmcpJylcclxuICAgIC5zdHlsZSgnei1pbmRleCcsICcxMCcpO1xyXG5cclxuICByZXR1cm4geyBzdmcsIHN2Z1lBeGlzTGVmdCwgc3ZnWUF4aXNSaWdodCwgaW5uZXJDb250YWluZXIsIGJvdHRvbUxhYmVsQ29udGFpbmVyIH07XHJcbn1cclxuXHJcbnByaXZhdGUgY3JlYXRlU2NhbGVzKFxyXG4gIGRhdGE6IGFueVtdLFxyXG4gIGxheWVyczogYW55W10sXHJcbiAgbGluZURhdGE6IGFueVtdLFxyXG4gIGRpbWVuc2lvbnM6IERpbWVuc2lvbnNcclxuKSB7XHJcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBiYXJXaWR0aCwgYmFyUGFkZGluZyB9ID0gZGltZW5zaW9ucztcclxuICBcclxuICAvLyBDYWxjdWxhdGUgYmFyIHBvc2l0aW9uaW5nXHJcbiAgY29uc3QgdG90YWxCYXJzV2lkdGggPSBkYXRhLmxlbmd0aCAqIGJhcldpZHRoO1xyXG4gIGNvbnN0IHRvdGFsU3BhY2luZyA9IChkYXRhLmxlbmd0aCAtIDEpICogYmFyUGFkZGluZztcclxuICBjb25zdCByZXF1aXJlZFdpZHRoID0gdG90YWxCYXJzV2lkdGggKyB0b3RhbFNwYWNpbmcgKyAodGhpcy5DT05TVEFOVFMuTEVGVF9SSUdIVF9TUEFDRVMgKiAyKTtcclxuICBjb25zdCBlZmZlY3RpdmVXaWR0aCA9IE1hdGgubWF4KHdpZHRoLCByZXF1aXJlZFdpZHRoKTtcclxuICBcclxuICBjb25zdCBwYWRkaW5nUmF0aW8gPSBiYXJQYWRkaW5nIC8gKGJhcldpZHRoICsgYmFyUGFkZGluZyk7XHJcbiAgXHJcbiAgLy8gWC1zY2FsZSBzdGFydHMgZnJvbSAwIChubyBsZWZ0IHNwYWNpbmcgZm9yIGdyaWQgYWxpZ25tZW50KVxyXG5jb25zdCB4U2NhbGUgPSBkM1xyXG4gIC5zY2FsZUJhbmQoKVxyXG4gIC5yYW5nZVJvdW5kKFswLCBkaW1lbnNpb25zLnJlcXVpcmVkU3ZnV2lkdGhdKVxyXG4gIC5kb21haW4oZGF0YS5tYXAoZCA9PiBkLm5hbWUpLnJldmVyc2UoKSlcclxuICAucGFkZGluZ0lubmVyKHBhZGRpbmdSYXRpbylcclxuICAucGFkZGluZ091dGVyKDAuMSkgIC8vIFNtYWxsIHBhZGRpbmcgZm9yIHZpc3VhbCBzcGFjaW5nXHJcbiAgLmFsaWduKDAuNSk7XHJcblxyXG4gIGNvbnN0IHhTY2FsZUZyb21PcmlnaW4gPSBkM1xyXG4gICAgLnNjYWxlQmFuZCgpXHJcbiAgICAucmFuZ2VSb3VuZChbd2lkdGgsIDBdKVxyXG4gICAgLmRvbWFpbihkYXRhLm1hcChkID0+IGQubmFtZSkucmV2ZXJzZSgpKTtcclxuXHJcbiAgY29uc3QgeVNjYWxlID0gZDMuc2NhbGVMaW5lYXIoKS5yYW5nZVJvdW5kKFtoZWlnaHQsIDBdKTtcclxuICBcclxuICBsZXQgbWF4VmFsdWUgPSBkMy5tYXgobGF5ZXJzLCAoZDogYW55KSA9PiBkMy5tYXgoZCwgKGQ6IGFueSkgPT4gZFsxXSkpO1xyXG4gIFxyXG4gIGlmIChtYXhWYWx1ZSA9PT0gMCkge1xyXG4gICAgbWF4VmFsdWUgPSB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSBcclxuICAgICAgPyBOdW1iZXIodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0KSArIDIwIFxyXG4gICAgICA6IDEwMDtcclxuICB9XHJcblxyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXN0b21Zc2NhbGUpIHtcclxuICAgIG1heFZhbHVlICo9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1c3RvbVlzY2FsZTtcclxuICB9XHJcblxyXG4gIGlmICh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJiBtYXhWYWx1ZSA8IE51bWJlcih0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpKSB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBOdW1iZXIodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0KTtcclxuICAgIG1heFZhbHVlID0gbWF4VmFsdWUgPCAxMCAmJiB0YXJnZXQgPCAxMCA/IHRhcmdldCArIDMgOiB0YXJnZXQgKyAyMDtcclxuICB9XHJcblxyXG4gIHlTY2FsZS5kb21haW4oWzAsIG1heFZhbHVlXSkubmljZSgpO1xyXG5cclxuICBsZXQgbGluZVlzY2FsZSA9IG51bGw7XHJcbiAgaWYgKGxpbmVEYXRhKSB7XHJcbiAgICBsaW5lWXNjYWxlID0gZDNcclxuICAgICAgLnNjYWxlTGluZWFyKClcclxuICAgICAgLmRvbWFpbihbMCwgZDMubWF4KGxpbmVEYXRhLCBkID0+ICtkLnZhbHVlKV0pXHJcbiAgICAgIC5yYW5nZShbaGVpZ2h0LCAwXSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4geyB4U2NhbGUsIHhTY2FsZUZyb21PcmlnaW4sIHlTY2FsZSwgbGluZVlzY2FsZSB9O1xyXG59XHJcblxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUF4ZXMoc2NhbGVzOiBhbnkpIHtcclxuICAgIGNvbnN0IHhBeGlzID0gZDNcclxuICAgICAgLmF4aXNCb3R0b20oc2NhbGVzLnhTY2FsZSlcclxuICAgICAgLnRpY2tTaXplKDApXHJcbiAgICAgIC50aWNrRm9ybWF0KHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnhBeGlzTGFiZWxGb21hdHRlcik7XHJcblxyXG4gICAgY29uc3QgeUF4aXMgPSBkM1xyXG4gICAgICAuYXhpc0xlZnQoc2NhbGVzLnlTY2FsZSlcclxuICAgICAgLnRpY2tzKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzKVxyXG4gICAgICAudGlja1NpemUoMClcclxuICAgICAgLnRpY2tGb3JtYXQodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNMYWJlbEZvbWF0dGVyKTtcclxuXHJcbiAgICBsZXQgeUxpbmVBeGlzID0gbnVsbDtcclxuICAgIGlmIChzY2FsZXMubGluZVlzY2FsZSkge1xyXG4gICAgICB5TGluZUF4aXMgPSBkM1xyXG4gICAgICAgIC5heGlzUmlnaHQoc2NhbGVzLmxpbmVZc2NhbGUpXHJcbiAgICAgICAgLnRpY2tzKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzKVxyXG4gICAgICAgIC50aWNrU2l6ZSgwKVxyXG4gICAgICAgIC50aWNrRm9ybWF0KHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlMaW5lQXhpc0xhYmVsRm9tYXR0ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7IHhBeGlzLCB5QXhpcywgeUxpbmVBeGlzIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckJhcnMoXHJcbiAgICBzdmc6IGFueSxcclxuICAgIGxheWVyczogYW55W10sXHJcbiAgICBzY2FsZXM6IGFueSxcclxuICAgIG1ldGFEYXRhOiBDaGFydE1ldGFEYXRhLFxyXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9uc1xyXG4gICkge1xyXG4gICAgY29uc3QgbGF5ZXIgPSBzdmdcclxuICAgICAgLnNlbGVjdEFsbCgnLmxheWVyJylcclxuICAgICAgLmRhdGEobGF5ZXJzKVxyXG4gICAgICAuZW50ZXIoKVxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xheWVyJylcclxuICAgICAgLnN0eWxlKCdmaWxsJywgKGQ6IGFueSkgPT4gbWV0YURhdGEuY29sb3JzW2Qua2V5XSk7XHJcblxyXG4gICAgY29uc3QgcmVjdCA9IGxheWVyXHJcbiAgICAgIC5zZWxlY3RBbGwoJ3JlY3QnKVxyXG4gICAgICAuZGF0YSgoZDogYW55KSA9PiBkKVxyXG4gICAgICAuZW50ZXIoKTtcclxuXHJcbiAgICB0aGlzLmFwcGVuZFJlY3RhbmdsZXMocmVjdCwgc2NhbGVzLCBtZXRhRGF0YSwgZGltZW5zaW9ucyk7XHJcbiAgICB0aGlzLmFkZEludGVyYWN0aW9ucyhyZWN0LCBzdmcsIG1ldGFEYXRhLCBzY2FsZXMpO1xyXG4gICAgXHJcbiAgICByZXR1cm4gcmVjdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwZW5kUmVjdGFuZ2xlcyhcclxuICByZWN0OiBhbnksXHJcbiAgc2NhbGVzOiBhbnksXHJcbiAgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEsXHJcbiAgZGltZW5zaW9uczogRGltZW5zaW9uc1xyXG4pIHtcclxuICBjb25zdCB7IGJhcldpZHRoLCBiYXJQYWRkaW5nIH0gPSBkaW1lbnNpb25zO1xyXG4gIGNvbnN0IHsgeFNjYWxlLCB5U2NhbGUgfSA9IHNjYWxlcztcclxuXHJcbiAgcmVjdFxyXG4gICAgLmFwcGVuZCgncmVjdCcpXHJcbiAgICAub24oJ2NsaWNrJywgKGQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuY2hhcnREYXRhLmxpbmVEYXRhIHx8IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmZvckNvbXBhcmlzb24pIHtcclxuICAgICAgICBpZiAoIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljaz8uaW5jbHVkZXMoZC5kYXRhLm5hbWUudG9Mb3dlckNhc2UoKSkpIHtcclxuICAgICAgICAgIHRoaXMuaGFuZGxlQ2xpY2soZC5kYXRhLm5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIC5hdHRyKCd5JywgKGQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIWlzTmFOKGRbMF0pICYmICFpc05hTihkWzFdKSkge1xyXG4gICAgICAgIGNvbnN0IGFjdHVhbEhlaWdodCA9IHlTY2FsZShkWzBdKSAtIHlTY2FsZShkWzFdKTtcclxuICAgICAgICByZXR1cm4gYWN0dWFsSGVpZ2h0IDwgMyA/IHlTY2FsZShkWzBdKSAtIDMgOiB5U2NhbGUoZFsxXSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9KVxyXG4gICAgLmF0dHIoJ3gnLCAoZDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHhQb3NpdGlvbiA9IHhTY2FsZShkLmRhdGEubmFtZSk7XHJcbiAgICAgIGNvbnN0IGJhbmR3aWR0aCA9IHhTY2FsZS5iYW5kd2lkdGgoKTtcclxuICAgICAgXHJcbiAgICAgIGlmICghdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUpIHtcclxuICAgICAgICByZXR1cm4geFBvc2l0aW9uICsgKGJhbmR3aWR0aCAtIGJhcldpZHRoKSAvIDI7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQgJiYgdGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggPD0gMykge1xyXG4gICAgICAgIHJldHVybiB4UG9zaXRpb24gKyBiYW5kd2lkdGggLyAyIC0gMzU7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgY2FsY3VsYXRlZFdpZHRoID0gYmFuZHdpZHRoICogMC44O1xyXG4gICAgICByZXR1cm4geFBvc2l0aW9uICsgKGJhbmR3aWR0aCAtIGNhbGN1bGF0ZWRXaWR0aCkgLyAyO1xyXG4gICAgfSlcclxuICAgIC5hdHRyKCdoZWlnaHQnLCAoZDogYW55KSA9PiB7XHJcbiAgICAgIGlmICghaXNOYU4oZFswXSkgJiYgIWlzTmFOKGRbMV0pKSB7XHJcbiAgICAgICAgY29uc3QgYWN0dWFsSGVpZ2h0ID0geVNjYWxlKGRbMF0pIC0geVNjYWxlKGRbMV0pO1xyXG4gICAgICAgIHJldHVybiBhY3R1YWxIZWlnaHQgPCAzID8gMyA6IGFjdHVhbEhlaWdodDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH0pXHJcbiAgICAuYXR0cignd2lkdGgnLCAoZDogYW55KSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUpIHJldHVybiBiYXJXaWR0aDtcclxuICAgICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQgJiYgdGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggPD0gMykge1xyXG4gICAgICAgIHJldHVybiA3MDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4geFNjYWxlLmJhbmR3aWR0aCgpICogMC44O1xyXG4gICAgfSlcclxuICAgIC5zdHlsZSgnY3Vyc29yJywgKGQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAobWV0YURhdGEuaGFzRHJpbGxEb3duKSB7XHJcbiAgICAgICAgaWYgKG1ldGFEYXRhLmJhcldpdGhvdXRDbGljaz8uaW5jbHVkZXMoZC5kYXRhLm5hbWUudG9Mb3dlckNhc2UoKSkpIHtcclxuICAgICAgICAgIHJldHVybiAnZGVmYXVsdCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAncG9pbnRlcic7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuICdkZWZhdWx0JztcclxuICAgIH0pXHJcbiAgICAuc3R5bGUoJ2ZpbGwnLCAoZDogYW55KSA9PiB0aGlzLmdldEJhckNvbG9yKGQsIG1ldGFEYXRhKSk7XHJcbn1cclxuXHJcbiAgcHJpdmF0ZSBnZXRCYXJDb2xvcihkOiBhbnksIG1ldGFEYXRhOiBDaGFydE1ldGFEYXRhKTogc3RyaW5nIHtcclxuICAgIGlmIChcclxuICAgICAgIWlzTmFOKGRbMF0pICYmXHJcbiAgICAgICFpc05hTihkWzFdKSAmJlxyXG4gICAgICB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJlxyXG4gICAgICBwYXJzZUZsb2F0KGRbMV0pIC0gcGFyc2VGbG9hdChkWzBdKSA+PSBwYXJzZUZsb2F0KFN0cmluZyh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpKVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS5iYXJBYm92ZVRhcmdldENvbG9yIHx8IG1ldGFEYXRhLmNvbG9yc1tkLmtleV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWV0YURhdGEuY29sb3JzW2Qua2V5XTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkSW50ZXJhY3Rpb25zKHJlY3Q6IGFueSwgc3ZnOiBhbnksIG1ldGFEYXRhOiBDaGFydE1ldGFEYXRhLCBzY2FsZXM6IGFueSkge1xyXG4gICAgcmVjdFxyXG4gICAgICAuc2VsZWN0QWxsKCdyZWN0JylcclxuICAgICAgLm9uKCdtb3VzZWVudGVyJywgKGQ6IGFueSkgPT4gdGhpcy5oYW5kbGVNb3VzZU92ZXIoZCwgc3ZnLCBtZXRhRGF0YSwgc2NhbGVzKSlcclxuICAgICAgLm9uKCdtb3VzZW91dCcsIChkOiBhbnkpID0+IHRoaXMuaGFuZGxlTW91c2VPdXQoc3ZnLCBtZXRhRGF0YSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVNb3VzZU92ZXIoZDogYW55LCBzdmc6IGFueSwgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEsIHNjYWxlczogYW55KSB7XHJcbiAgICBpZiAoIXRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmRpc3BsYXlUaXRsZU9uVG9wKSByZXR1cm47XHJcblxyXG4gICAgc3ZnLnNlbGVjdEFsbCgncmVjdCcpXHJcbiAgICAgIC5maWx0ZXIoKGRhdGE6IGFueSkgPT4gZGF0YSA9PT0gZClcclxuICAgICAgLnN0eWxlKCdmaWxsJywgKGQ6IGFueSkgPT4gdGhpcy5nZXRIb3ZlckNvbG9yKGQsIG1ldGFEYXRhKSk7XHJcblxyXG4gICAgdGhpcy5kaXNwbGF5VG9vbHRpcChkLCBzdmcsIG1ldGFEYXRhLCBzY2FsZXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRIb3ZlckNvbG9yKGQ6IGFueSwgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEpOiBzdHJpbmcge1xyXG4gICAgaWYgKFxyXG4gICAgICAhaXNOYU4oZFswXSkgJiZcclxuICAgICAgIWlzTmFOKGRbMV0pICYmXHJcbiAgICAgIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhICYmXHJcbiAgICAgIHBhcnNlRmxvYXQoZFsxXSkgLSBwYXJzZUZsb2F0KGRbMF0pID49IHBhcnNlRmxvYXQoU3RyaW5nKHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCkpXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLmJhckFib3ZlVGFyZ2V0SG92ZXJDb2xvciB8fFxyXG4gICAgICAgICAgICAgdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEuYmFyQWJvdmVUYXJnZXRDb2xvciB8fFxyXG4gICAgICAgICAgICAgbWV0YURhdGEuY29sb3JzW2Qua2V5XTtcclxuICAgIH1cclxuICAgIHJldHVybiBtZXRhRGF0YS5ob3ZlckNvbG9yIHx8IG1ldGFEYXRhLmNvbG9yc1tkLmtleV07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRpc3BsYXlUb29sdGlwKGQ6IGFueSwgc3ZnOiBhbnksIG1ldGFEYXRhOiBDaGFydE1ldGFEYXRhLCBzY2FsZXM6IGFueSkge1xyXG4gICAgY29uc3QgeyB4U2NhbGUsIHlTY2FsZSB9ID0gc2NhbGVzO1xyXG4gICAgY29uc3QgdmFsdWUgPSBkWzFdIC0gZFswXTtcclxuICAgIFxyXG4gICAgaWYgKGlzTmFOKHZhbHVlKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGJhbmR3aWR0aCA9IHhTY2FsZS5iYW5kd2lkdGgoKTtcclxuICAgIFxyXG4gICAgLy8gRml4ZWQgdG9vbHRpcCB3aWR0aCBmb3IgYWxsIHJlc29sdXRpb25zXHJcbiAgICBjb25zdCB3aWR0aCA9IC93ZWVrL2kudGVzdChkLmRhdGEubmFtZSkgJiYgL1xcZHs0fS1cXGR7Mn0tXFxkezJ9Ly50ZXN0KGQuZGF0YS5uYW1lKVxyXG4gICAgICA/ICcyNTBweCdcclxuICAgICAgOiBiYW5kd2lkdGggKyB0aGlzLkNPTlNUQU5UUy5MRUZUX1JJR0hUX1NQQUNFUyAqIDIgPiAxODBcclxuICAgICAgICA/ICcxODBweCdcclxuICAgICAgICA6IGJhbmR3aWR0aCArIHRoaXMuQ09OU1RBTlRTLkxFRlRfUklHSFRfU1BBQ0VTICogMjtcclxuXHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnZm9yZWlnbk9iamVjdCcpXHJcbiAgICAgIC5hdHRyKCd4JywgdGhpcy5jYWxjdWxhdGVUb29sdGlwWChkLCB4U2NhbGUsIHdpZHRoKSlcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi12ZXJ0aWNhbHN0YWNrLXRpdGxlLW9udG9wJylcclxuICAgICAgLmF0dHIoJ3knLCB5U2NhbGUoZFsxXSkgLSA1MSlcclxuICAgICAgLmF0dHIoJ3dpZHRoJywgd2lkdGgpXHJcbiAgICAgIC5hdHRyKCdoZWlnaHQnLCA0MClcclxuICAgICAgLmFwcGVuZCgneGh0bWw6ZGl2JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ3RpdGxlJylcclxuICAgICAgLnN0eWxlKCd6LWluZGV4JywgOTkpXHJcbiAgICAgIC5odG1sKHRoaXMuZ2VuZXJhdGVUb29sdGlwSHRtbChkLCBtZXRhRGF0YSwgdmFsdWUpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FsY3VsYXRlVG9vbHRpcFgoZDogYW55LCB4U2NhbGU6IGFueSwgd2lkdGg6IHN0cmluZyB8IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBjb25zdCBiYW5kd2lkdGggPSB4U2NhbGUuYmFuZHdpZHRoKCk7XHJcbiAgICBjb25zdCBudW1lcmljV2lkdGggPSB0eXBlb2Ygd2lkdGggPT09ICdzdHJpbmcnID8gcGFyc2VJbnQod2lkdGgpIDogd2lkdGg7XHJcbiAgICBcclxuICAgIGlmIChiYW5kd2lkdGggKyB0aGlzLkNPTlNUQU5UUy5MRUZUX1JJR0hUX1NQQUNFUyAqIDIgPiAxODApIHtcclxuICAgICAgcmV0dXJuIHhTY2FsZShkLmRhdGEubmFtZSkgLSB0aGlzLkNPTlNUQU5UUy5MRUZUX1JJR0hUX1NQQUNFUyArXHJcbiAgICAgICAgICAgICAoYmFuZHdpZHRoICsgdGhpcy5DT05TVEFOVFMuTEVGVF9SSUdIVF9TUEFDRVMgKiAyIC0gMTgwKSAvIDI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geFNjYWxlKGQuZGF0YS5uYW1lKSAtIHRoaXMuQ09OU1RBTlRTLkxFRlRfUklHSFRfU1BBQ0VTO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZVRvb2x0aXBIdG1sKGQ6IGFueSwgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEsIHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKHZhbHVlID09PSAwKSByZXR1cm4gJzxzcGFuIGNsYXNzPVwidGl0bGUtdG9wLXRleHRcIj4wPC9zcGFuPic7XHJcblxyXG4gICAgY29uc3QgZGF0YVR5cGUgPSBtZXRhRGF0YS5kYXRhVHlwZSB8fCAnJztcclxuICAgIGNvbnN0IG5hbWUgPSBkLmRhdGEubmFtZSA/IGA8c3BhbiBjbGFzcz1cInRpdGxlLWJhci1uYW1lXCI+JHtkLmRhdGEubmFtZX08L3NwYW4+YCA6ICcnO1xyXG4gICAgY29uc3QgdmFsdWVUZXh0ID0gbWV0YURhdGEudW5pdFxyXG4gICAgICA/IGAke21ldGFEYXRhLnVuaXR9JHt2YWx1ZX0gJHtkYXRhVHlwZX1gXHJcbiAgICAgIDogYCR7dmFsdWV9ICR7ZGF0YVR5cGV9YDtcclxuXHJcbiAgICByZXR1cm4gYCR7bmFtZX08c3BhbiBjbGFzcz1cInRpdGxlLXRvcC10ZXh0XCI+JHt2YWx1ZVRleHR9PC9zcGFuPmA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZU1vdXNlT3V0KHN2ZzogYW55LCBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSkge1xyXG4gICAgaWYgKCF0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5kaXNwbGF5VGl0bGVPblRvcCkgcmV0dXJuO1xyXG5cclxuICAgIHN2Zy5zZWxlY3RBbGwoJ3JlY3QnKVxyXG4gICAgICAuc3R5bGUoJ2ZpbGwnLCAoZDogYW55KSA9PiB0aGlzLmdldEJhckNvbG9yKGQsIG1ldGFEYXRhKSk7XHJcbiAgICBzdmcuc2VsZWN0QWxsKCcubGliLXZlcnRpY2Fsc3RhY2stdGl0bGUtb250b3AnKS5yZW1vdmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyQXhpc0xhYmVscyhcclxuICAgIHN2ZzogYW55LFxyXG4gICAgc3ZnWUF4aXNMZWZ0OiBhbnksXHJcbiAgICBib3R0b21MYWJlbENvbnRhaW5lcjogYW55LFxyXG4gICAgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEsXHJcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zLFxyXG4gICAgbWFyZ2luOiBhbnlcclxuICApIHtcclxuICAgIGlmIChtZXRhRGF0YS55TGFiZWwpIHtcclxuICAgICAgdGhpcy5hZGRZQXhpc0xhYmVsKHN2Z1lBeGlzTGVmdCwgbWV0YURhdGEueUxhYmVsLCBkaW1lbnNpb25zLmhlaWdodCwgbWFyZ2luKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobWV0YURhdGEueExhYmVsKSB7XHJcbiAgICAgIHRoaXMuYWRkWEF4aXNMYWJlbChib3R0b21MYWJlbENvbnRhaW5lciwgbWV0YURhdGEueExhYmVsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkWUF4aXNMYWJlbChzdmdZQXhpc0xlZnQ6IGFueSwgbGFiZWw6IHN0cmluZywgaGVpZ2h0OiBudW1iZXIsIG1hcmdpbjogYW55KSB7XHJcbiAgICBjb25zdCBpc3JpYSA9IHRoaXMuY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uPy5pc1JpYTtcclxuICAgIGNvbnN0IGlzQWNyb255bSA9IHRoaXMuaXNBY3JvbnltTGFiZWwobGFiZWwpO1xyXG4gICAgY29uc3QgeVBvc2l0aW9uID0gaXNyaWEgPyAtbWFyZ2luLmxlZnQgLyAyIC0gMzAgOiAtbWFyZ2luLmxlZnQgLyAyIC0gNDA7XHJcblxyXG4gICAgc3ZnWUF4aXNMZWZ0LnNlbGVjdEFsbCgnLmxpYi1heGlzLWdyb3VwLWxhYmVsLCAubGliLXlsYWJlbC1kcmlsbGRvd25jaGFydHMsIC5saWIteWxhYmVsLXdlZWtseUNoYXJ0cycpLnJlbW92ZSgpO1xyXG5cclxuICAgIHN2Z1lBeGlzTGVmdFxyXG4gICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgdGhpcy5nZXRZQXhpc0xhYmVsQ2xhc3MoKSlcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21sYWJlbFN0eWxlcylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICdyb3RhdGUoLTkwKScpXHJcbiAgICAgIC5hdHRyKCd5JywgeVBvc2l0aW9uKVxyXG4gICAgICAuYXR0cigneCcsIC1oZWlnaHQgLyAyKVxyXG4gICAgICAuYXR0cignZHknLCAnMWVtJylcclxuICAgICAgLnN0eWxlKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAudGV4dChpc0Fjcm9ueW0gPyBsYWJlbC50b1VwcGVyQ2FzZSgpIDogbGFiZWwudG9Mb3dlckNhc2UoKSlcclxuICAgICAgLnN0eWxlKCd0ZXh0LXRyYW5zZm9ybScsIGlzQWNyb255bSA/ICdub25lJyA6ICdjYXBpdGFsaXplJyk7XHJcbiAgfVxyXG5cclxucHJpdmF0ZSBhZGRYQXhpc0xhYmVsKGJvdHRvbUxhYmVsQ29udGFpbmVyOiBhbnksIGxhYmVsOiBzdHJpbmcpIHtcclxuICBjb25zdCBpc0Fjcm9ueW0gPSB0aGlzLmlzQWNyb255bUxhYmVsKGxhYmVsKTtcclxuXHJcbiAgYm90dG9tTGFiZWxDb250YWluZXJcclxuICAgIC5hcHBlbmQoJ2RpdicpXHJcbiAgICAuc3R5bGUoJ3dpZHRoJywgJzEwMCUnKVxyXG4gICAgLnN0eWxlKCd0ZXh0LWFsaWduJywgJ2NlbnRlcicpXHJcbiAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICcxMnB4JylcclxuICAgIC5zdHlsZSgnZm9udC13ZWlnaHQnLCAnNjAwJylcclxuICAgIC5zdHlsZSgnZm9udC1mYW1pbHknLCAnc3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFwiU2Vnb2UgVUlcIiwgUm9ib3RvJylcclxuICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgLnN0eWxlKCd0ZXh0LXRyYW5zZm9ybScsIGlzQWNyb255bSA/ICdub25lJyA6ICdjYXBpdGFsaXplJylcclxuICAgIC50ZXh0KGlzQWNyb255bSA/IGxhYmVsLnRvVXBwZXJDYXNlKCkgOiBsYWJlbC50b0xvd2VyQ2FzZSgpKTtcclxufVxyXG5cclxuICBwcml2YXRlIGlzQWNyb255bUxhYmVsKGxhYmVsOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGNsZWFuTGFiZWwgPSBsYWJlbC5yZXBsYWNlKC9bXkEtWmEtel0vZywgJycpO1xyXG4gICAgcmV0dXJuIChsYWJlbC5sZW5ndGggPD0gNCAmJiAvXltBLVpdKyQvLnRlc3QobGFiZWwpKSB8fFxyXG4gICAgICAgICAgIChsYWJlbCA9PT0gbGFiZWwudG9VcHBlckNhc2UoKSAmJiAvW0EtWl0vLnRlc3QobGFiZWwpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0WUF4aXNMYWJlbENsYXNzKCk6IHN0cmluZyB7XHJcbiAgICBsZXQgYmFzZUNsYXNzID0gJ2xpYi1heGlzLWdyb3VwLWxhYmVsIGZvbnQtc2l6ZS0xJztcclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICAgIHJldHVybiBgJHtiYXNlQ2xhc3N9IGxpYi15bGFiZWwtZHJpbGxkb3duY2hhcnRzYDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiBgJHtiYXNlQ2xhc3N9IGxpYi15bGFiZWwtd2Vla2x5Q2hhcnRzYDtcclxuICAgIH1cclxuICAgIHJldHVybiBgJHtiYXNlQ2xhc3N9IGxpYi1heGlzLXdhdGVyZmFsbC1sYWJlbGA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFhBeGlzTGFiZWxDbGFzcygpOiBzdHJpbmcge1xyXG4gICAgbGV0IGJhc2VDbGFzcyA9ICdsaWItYXhpcy1ncm91cC1sYWJlbCBmb250LXNpemUtMSc7XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICByZXR1cm4gYCR7YmFzZUNsYXNzfSBsaWIteGxhYmVsLWRyaWxsZG93bmNoYXJ0c2A7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gYCR7YmFzZUNsYXNzfSBsaWIteGxhYmVsLXdlZWtseUNoYXJ0c2A7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYCR7YmFzZUNsYXNzfSBsaWItYXhpcy13YXRlcmZhbGwtbGFiZWxgO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJHcmlkc0Zyb21MZWZ0QXhpcyhcclxuICAgIHN2Z01haW46IGFueSxcclxuICAgIHN2Z1lBeGlzTGVmdDogYW55LFxyXG4gICAgc2NhbGVzOiBhbnksXHJcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zXHJcbiAgKSB7XHJcbiAgICBpZiAoIXRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzR3JpZCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIFdlIHdhbnQgaG9yaXpvbnRhbCBncmlkIGxpbmVzIHRvIHNwYW4gdGhlIGZ1bGwgdmlzaWJsZSB3aWR0aDpcclxuICAgIC8vIHRoZSBpbm5lciBTVkcgKHJlcXVpcmVkU3ZnV2lkdGgpIHBsdXMgdGhlIHJpZ2h0IGF4aXMgd2lkdGguXHJcbiAgICBjb25zdCBncmlkU3BhbiA9IGRpbWVuc2lvbnMucmVxdWlyZWRTdmdXaWR0aCArIHRoaXMuQ09OU1RBTlRTLlJJR0hUX1NWR19XSURUSDtcclxuICAgIC8vIEFwcGVuZCB0aGUgZ3JpZCB0byB0aGUgbWFpbiAoaW5uZXIpIFNWRyBzbyBsaW5lcyBhcmUgcmVuZGVyZWQgYWNyb3NzIHRoZSBzY3JvbGxhYmxlIGFyZWEuXHJcbiAgICBzdmdNYWluXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnZ3JpZCBob3Jpem9udGFsLWdyaWQtZnJvbS1sZWZ0JylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwwKScpXHJcbiAgICAgIC5jYWxsKFxyXG4gICAgICAgIGQzXHJcbiAgICAgICAgICAuYXhpc0xlZnQoc2NhbGVzLnlTY2FsZSlcclxuICAgICAgICAgIC50aWNrcyh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5udW1iZXJPZllUaWNrcylcclxuICAgICAgICAgIC50aWNrU2l6ZSgtZ3JpZFNwYW4pXHJcbiAgICAgICAgICAudGlja0Zvcm1hdCgnJylcclxuICAgICAgKVxyXG4gICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LWdyaWQtY29sb3IpJylcclxuICAgICAgLnN0eWxlKCdvcGFjaXR5JywgJzEnKVxyXG4gICAgICAuY2FsbCgoZzogYW55KSA9PiB7XHJcbiAgICAgICAgZy5zZWxlY3QoJy5kb21haW4nKS5yZW1vdmUoKTtcclxuICAgICAgICBnLnNlbGVjdEFsbCgnLnRpY2sgbGluZScpXHJcbiAgICAgICAgICAuc3R5bGUoJ3N0cm9rZScsICd2YXIoLS1jaGFydC1ncmlkLWNvbG9yKScpXHJcbiAgICAgICAgICAuc3R5bGUoJ3N0cm9rZS13aWR0aCcsICcxcHgnKTtcclxuICAgICAgfSk7XHJcbn1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUNvbmZpZ3VyYXRpb25GbGFncygpIHtcclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0hlYWRlclZpc2libGUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmlzSGVhZGVyVmlzaWJsZSA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1RvcENhcHRpb25WaXNpYmxlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5pc1RvcENhcHRpb25WaXNpYmxlID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNUb3BDYXB0aW9uVmlzaWJsZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1RyYW5zcGFyZW50QmFja2dyb3VuZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuaXNUcmFuc3BhcmVudEJhY2tncm91bmQgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1RyYW5zcGFyZW50QmFja2dyb3VuZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVTdGFja2VkQ2hhcnQoKSB7XHJcbiAgICAvLyBVc2UgZml4ZWQgY29uZmlndXJhdGlvbiBmb3IgYWxsIHJlc29sdXRpb25zXHJcbiAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5tYXJnaW4gPSB7IHRvcDogMjAsIHJpZ2h0OiAyMCwgYm90dG9tOiA0MCwgbGVmdDogNDAgfTtcclxuICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzID0gNTtcclxuICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodCA9IDcwO1xyXG4gICAgXHJcbiAgICB0aGlzLm1lcmdlQ29uZmlndXJhdGlvbnMoKTtcclxuICAgIHRoaXMuYXBwbHlDb25maWd1cmF0aW9uRmxhZ3MoKTtcclxuXHJcbiAgICBjb25zdCBkYXRhID0gdGhpcy5jaGFydERhdGEuZGF0YTtcclxuICAgIGNvbnN0IG1ldGFEYXRhID0gdGhpcy5wcmVwYXJlTWV0YURhdGEodGhpcy5jaGFydERhdGEubWV0YURhdGEpO1xyXG4gICAgY29uc3QgbGluZURhdGEgPSB0aGlzLmNoYXJ0RGF0YS5saW5lRGF0YTtcclxuICAgIGNvbnN0IGNvbG9ycyA9IG1ldGFEYXRhLmNvbG9ycztcclxuICAgIGNvbnN0IGtleUxpc3QgPSBtZXRhRGF0YS5rZXlMaXN0O1xyXG5cclxuICAgIGNvbnN0IGNoYXJ0Q29udGFpbmVyID0gZDMuc2VsZWN0KHRoaXMuY29udGFpbmVyRWx0Lm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgY29uc3QgdmVydGljYWxzdGFja2VkY29udGFpbmVyID0gZDMuc2VsZWN0KHRoaXMudmVydGljYWxzdGFja2VkY29udGFpbmVyRWx0Lm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgXHJcbiAgICBjb25zdCBtYXJnaW4gPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5tYXJnaW47XHJcbiAgICBjb25zdCBkaW1lbnNpb25zID0gdGhpcy5jYWxjdWxhdGVEaW1lbnNpb25zKFxyXG4gICAgICBjaGFydENvbnRhaW5lcixcclxuICAgICAgdmVydGljYWxzdGFja2VkY29udGFpbmVyLFxyXG4gICAgICBtYXJnaW4sXHJcbiAgICAgIGRhdGEubGVuZ3RoXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGhhc1hMYWJlbCA9ICEhbWV0YURhdGEueExhYmVsO1xyXG5cclxuICAgIGNvbnN0IHsgc3ZnLCBzdmdZQXhpc0xlZnQsIHN2Z1lBeGlzUmlnaHQsIGJvdHRvbUxhYmVsQ29udGFpbmVyIH0gPSB0aGlzLmNyZWF0ZVN2Z0NvbnRhaW5lcnMoXHJcbiAgICAgIGNoYXJ0Q29udGFpbmVyLFxyXG4gICAgICBkaW1lbnNpb25zLFxyXG4gICAgICBtYXJnaW4sXHJcbiAgICAgIGhhc1hMYWJlbFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBzdGFjazogYW55ID0gZDMuc3RhY2soKS5rZXlzKGtleUxpc3QpLm9mZnNldChkMy5zdGFja09mZnNldE5vbmUpO1xyXG4gICAgY29uc3QgbGF5ZXJzOiBhbnkgPSBzdGFjayhkYXRhKTtcclxuICAgIGRhdGEuc29ydCgoYSwgYikgPT4gYi50b3RhbCAtIGEudG90YWwpO1xyXG5cclxuICAgIGNvbnN0IHNjYWxlcyA9IHRoaXMuY3JlYXRlU2NhbGVzKGRhdGEsIGxheWVycywgbGluZURhdGEsIGRpbWVuc2lvbnMpO1xyXG4gICAgY29uc3QgYXhlcyA9IHRoaXMuY3JlYXRlQXhlcyhzY2FsZXMpO1xyXG5cclxuICAgIHRoaXMucmVuZGVyR3JpZHNGcm9tTGVmdEF4aXMoc3ZnLCBzdmdZQXhpc0xlZnQsIHNjYWxlcywgZGltZW5zaW9ucyk7XHJcbiAgICB0aGlzLnJlbmRlckdyaWRzKHN2Zywgc2NhbGVzLCBkaW1lbnNpb25zKTtcclxuICAgIGNvbnN0IHJlY3QgPSB0aGlzLnJlbmRlckJhcnMoc3ZnLCBsYXllcnMsIHNjYWxlcywgbWV0YURhdGEsIGRpbWVuc2lvbnMpO1xyXG4gICAgdGhpcy5yZW5kZXJBeGVzKHN2Zywgc3ZnWUF4aXNMZWZ0LCBzdmdZQXhpc1JpZ2h0LCBheGVzLCBzY2FsZXMsIGRpbWVuc2lvbnMsIGRhdGEpO1xyXG4gICAgdGhpcy5yZW5kZXJBeGlzTGFiZWxzKHN2Zywgc3ZnWUF4aXNMZWZ0LGJvdHRvbUxhYmVsQ29udGFpbmVyLCBtZXRhRGF0YSwgZGltZW5zaW9ucywgbWFyZ2luKTtcclxuICAgIHRoaXMucmVuZGVyVGFyZ2V0TGluZShzdmcsIHN2Z1lBeGlzUmlnaHQsIHNjYWxlcywgZGltZW5zaW9ucywgbWV0YURhdGEpO1xyXG4gICAgdGhpcy5yZW5kZXJEYXRhTGFiZWxzKHJlY3QsIHNjYWxlcywgbWV0YURhdGEsIGRpbWVuc2lvbnMpO1xyXG4gICAgdGhpcy5yZW5kZXJMaW5lQ2hhcnQoc3ZnLCBsaW5lRGF0YSwgc2NhbGVzLCBjb2xvcnMsIG1ldGFEYXRhKTtcclxuICB9XHJcblxyXG5wcml2YXRlIHJlbmRlckdyaWRzKHN2ZzogYW55LCBzY2FsZXM6IGFueSwgZGltZW5zaW9uczogRGltZW5zaW9ucykge1xyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1hncmlkQmV0d2VlbkxhYmVscykge1xyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnZ3JpZCB2ZXJ0aWNhbC1ncmlkJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHtzY2FsZXMueFNjYWxlLmJhbmR3aWR0aCgpIC8gMn0sJHtkaW1lbnNpb25zLmhlaWdodH0pYClcclxuICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbShzY2FsZXMueFNjYWxlKS50aWNrU2l6ZSgtZGltZW5zaW9ucy5oZWlnaHQpLnRpY2tGb3JtYXQoJycpKVxyXG4gICAgICAuc3R5bGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnNSA1JylcclxuICAgICAgLnN0eWxlKCdjb2xvcicsICcjOTk5OTk5JylcclxuICAgICAgLmNhbGwoKGc6IGFueSkgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5yZW1vdmUoKSk7XHJcbiAgfVxyXG5cclxuICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueEF4aXNHcmlkKSB7XHJcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnhBeGlzR3JpZC5sZW5ndGg7IGorKykge1xyXG4gICAgICBzdmdcclxuICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCBgeCR7aiArIDJ9IGF4aXMke2ogKyAyfWApXHJcbiAgICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC1ncmlkLWNvbG9yKScpXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwke2RpbWVuc2lvbnMuaGVpZ2h0ICogdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueEF4aXNHcmlkW2pdfSlgKVxyXG4gICAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oc2NhbGVzLnhTY2FsZSkudGlja1NpemUoMCkudGlja3MoNSkudGlja0Zvcm1hdCgnJykpXHJcbiAgICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJyk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5cclxuICBwcml2YXRlIHJlbmRlckF4ZXMoXHJcbiAgICBzdmc6IGFueSxcclxuICAgIHN2Z1lBeGlzTGVmdDogYW55LFxyXG4gICAgc3ZnWUF4aXNSaWdodDogYW55LFxyXG4gICAgYXhlczogYW55LFxyXG4gICAgc2NhbGVzOiBhbnksXHJcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zLFxyXG4gICAgZGF0YTogYW55W11cclxuICApIHtcclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zaG93WGF4aXNUb3ApIHtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1saW5lLWF4aXMtdGV4dCBsaWItbGluZS14LWF4aXMtdGV4dCB4LWF4aXMnKVxyXG4gICAgICAgIC5hdHRyKCdzdHlsZScsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnhBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgICAgICAuY2FsbChkMy5heGlzQm90dG9tKHNjYWxlcy54U2NhbGUpLnRpY2tTaXplKDApKTtcclxuICAgICAgc3ZnLnNlbGVjdEFsbCgnLngtYXhpcyA+IGcgPiB0ZXh0JykuYXR0cignY2xhc3MnLCAnbGliLWRpc3BsYXktaGlkZGVuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSkge1xyXG4gICAgdGhpcy5yZW5kZXJTdGFuZGFyZEF4ZXMoc3ZnLCBzdmdZQXhpc0xlZnQsIGF4ZXMsIHNjYWxlcywgZGltZW5zaW9ucywgZGF0YSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgICAgdGhpcy5yZW5kZXJEcmlsbGRvd25BeGVzKHN2Zywgc3ZnWUF4aXNMZWZ0LCBzdmdZQXhpc1JpZ2h0LCBheGVzLCBzY2FsZXMsIGRpbWVuc2lvbnMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZW5kZXJNdWx0aUNoYXJ0QXhlcyhzdmcsIGF4ZXMsIHNjYWxlcywgZGltZW5zaW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hcHBseUF4aXNTdHlsaW5nKHN2Zywgc3ZnWUF4aXNMZWZ0LCBzdmdZQXhpc1JpZ2h0KTtcclxuICAgIHRoaXMuYXBwbHlBeGlzQ29uZmlndXJhdGlvbnMoc3ZnLCBzY2FsZXMsIGRpbWVuc2lvbnMsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJTdGFuZGFyZEF4ZXMoXHJcbiAgICBzdmc6IGFueSxcclxuICAgIHN2Z1lBeGlzTGVmdDogYW55LFxyXG4gICAgYXhlczogYW55LFxyXG4gICAgc2NhbGVzOiBhbnksXHJcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zLFxyXG4gICAgZGF0YTogYW55W11cclxuICApIHtcclxuICBjb25zdCBpc01vYmlsZU9yVGFibGV0ID0gd2luZG93LmlubmVyV2lkdGggPCAxMDI0O1xyXG4gIFxyXG4gIC8vIFgtYXhpcyB3aXRoIGxhYmVsc1xyXG4gIGNvbnN0IHhBeGlzR3JvdXAgPSBzdmdcclxuICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwke2RpbWVuc2lvbnMuaGVpZ2h0fSlgKVxyXG4gICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1zdGFja2VkLXgtYXhpcy10ZXh0JylcclxuICAgIC5jYWxsKGF4ZXMueEF4aXMpO1xyXG5cclxuICAvLyBTdHlsZSBYLWF4aXMgbGFiZWxzXHJcbiAgeEF4aXNHcm91cFxyXG4gICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgLnN0eWxlKCdmb250LXNpemUnLCBpc01vYmlsZU9yVGFibGV0ID8gJzEwcHgnIDogJzEycHgnKVxyXG4gICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXHJcbiAgICAuYXR0cignZHknLCAnMWVtJylcclxuICAgIC5lYWNoKGZ1bmN0aW9uKHRoaXM6IFNWR1RleHRFbGVtZW50LCBkOiBhbnkpIHtcclxuICAgICAgY29uc3QgdGV4dEVsZW1lbnQgPSBkMy5zZWxlY3QodGhpcyk7XHJcbiAgICAgIGNvbnN0IHRleHQgPSB0ZXh0RWxlbWVudC50ZXh0KCk7XHJcbiAgICAgICAgXHJcbiAgICAgIGlmIChpc01vYmlsZU9yVGFibGV0ICYmIHRleHQubGVuZ3RoID4gMTIpIHtcclxuICAgICAgICB0ZXh0RWxlbWVudC50ZXh0KHRleHQuc3Vic3RyaW5nKDAsIDEwKSArICcuLi4nKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4vLyBFbnN1cmUgWC1heGlzIGxpbmUgc3RhcnRzIGV4YWN0bHkgYXQgeD0wXHJcbiAgeEF4aXNHcm91cFxyXG4gICAgLnNlbGVjdCgnLmRvbWFpbicpXHJcbiAgICAuc3R5bGUoJ3N0cm9rZScsICd2YXIoLS1jaGFydC1heGlzLWNvbG9yKScpXHJcbiAgICAuc3R5bGUoJ3N0cm9rZS13aWR0aCcsICcxcHgnKVxyXG4gICAgLmF0dHIoJ2QnLCBgTTAsMC41SCR7ZGltZW5zaW9ucy5yZXF1aXJlZFN2Z1dpZHRofWApO1xyXG5cclxuICAvLyBZLWF4aXNcclxuICBzdmdcclxuICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1zdGFja2VkLXktYXhpcy10ZXh0JylcclxuICAgIC5hdHRyKCdzdHlsZScsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgIC5jYWxsKGF4ZXMueUF4aXMpXHJcbiAgICAuc2VsZWN0QWxsKCd0ZXh0JylcclxuICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG5cclxuc3ZnWUF4aXNMZWZ0XHJcbiAgLmFwcGVuZCgnbGluZScpXHJcbiAgLmF0dHIoJ3gxJywgLTEpICAvLyBDaGFuZ2VkIGZyb20gMCB0byAtMSBmb3IgYmV0dGVyIHZpc2liaWxpdHlcclxuICAuYXR0cigneDInLCAtMSkgIC8vIENoYW5nZWQgZnJvbSAwIHRvIC0xIGZvciBiZXR0ZXIgdmlzaWJpbGl0eVxyXG4gIC5hdHRyKCd5MScsIDApXHJcbiAgLmF0dHIoJ3kyJywgZGltZW5zaW9ucy5oZWlnaHQpXHJcbiAgLnN0eWxlKCdzdHJva2UnLCAndmFyKC0tY2hhcnQtYXhpcy1jb2xvciknKVxyXG4gIC5zdHlsZSgnc3Ryb2tlLXdpZHRoJywgJzFweCcpXHJcbiAgLnN0eWxlKCdzaGFwZS1yZW5kZXJpbmcnLCAnY3Jpc3BFZGdlcycpOyAgLy8gQWRkZWQgZm9yIHNoYXJwIHJlbmRlcmluZ1xyXG59XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyRHJpbGxkb3duQXhlcyhcclxuICAgIHN2ZzogYW55LFxyXG4gICAgc3ZnWUF4aXNMZWZ0OiBhbnksXHJcbiAgICBzdmdZQXhpc1JpZ2h0OiBhbnksXHJcbiAgICBheGVzOiBhbnksXHJcbiAgICBzY2FsZXM6IGFueSxcclxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnNcclxuICApIHtcclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwke2RpbWVuc2lvbnMuaGVpZ2h0fSlgKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXN0YWNrZWQteC1heGlzLXRleHQgbXVsdGljaGFydDEnKVxyXG4gICAgICAuY2FsbChheGVzLnhBeGlzKVxyXG4gICAgICAuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG5cclxuICAgIHN2Z1lBeGlzTGVmdFxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi15YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duIHlheGlzLWRhc2hlZCcpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgICAgLmNhbGwoYXhlcy55QXhpcylcclxuICAgICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG5cclxuICAgIHN2Z1lBeGlzUmlnaHRcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteWF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93biB5YXhpcy1kYXNoZWQnKVxyXG4gICAgICAuYXR0cignc3R5bGUnLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAgIC5jYWxsKGF4ZXMueUF4aXMpXHJcbiAgICAgIC5zdHlsZSgnZGlzcGxheScsICdub25lJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlck11bHRpQ2hhcnRBeGVzKHN2ZzogYW55LCBheGVzOiBhbnksIHNjYWxlczogYW55LCBkaW1lbnNpb25zOiBEaW1lbnNpb25zKSB7XHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHtkaW1lbnNpb25zLmhlaWdodH0pYClcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1zdGFja2VkLXgtYXhpcy10ZXh0IG11bHRpY2hhcnQnKVxyXG4gICAgICAuY2FsbChheGVzLnhBeGlzKVxyXG4gICAgICAuc2VsZWN0QWxsKCd0ZXh0JylcclxuICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJyk7XHJcblxyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXN0YWNrZWQteS1heGlzLXRleHQgeWF4aXMtZGFzaGVkJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAuY2FsbChheGVzLnlBeGlzKVxyXG4gICAgICAuc2VsZWN0QWxsKCd0ZXh0JylcclxuICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5QXhpc1N0eWxpbmcoc3ZnOiBhbnksIHN2Z1lBeGlzTGVmdDogYW55LCBzdmdZQXhpc1JpZ2h0OiBhbnkpIHtcclxuICAgIGNvbnN0IHN0eWxlQXhpc0RvbWFpbiA9IChjb250YWluZXI6IGFueSkgPT4ge1xyXG4gICAgICBjb250YWluZXIuc2VsZWN0QWxsKCcuZG9tYWluJylcclxuICAgICAgICAuc3R5bGUoJ3N0cm9rZScsICd2YXIoLS1jaGFydC1heGlzLWNvbG9yKScpXHJcbiAgICAgICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCAnMXB4Jyk7XHJcbiAgICB9O1xyXG5cclxuICAgIHN0eWxlQXhpc0RvbWFpbihzdmcpO1xyXG4gICAgc3R5bGVBeGlzRG9tYWluKHN2Z1lBeGlzTGVmdCk7XHJcbiAgICBzdHlsZUF4aXNEb21haW4oc3ZnWUF4aXNSaWdodCk7XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNEYXNoZWQpIHtcclxuICAgICAgZDMuc2VsZWN0QWxsKCcueWF4aXMtZGFzaGVkJylcclxuICAgICAgICAuc3R5bGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnNSA1JylcclxuICAgICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LWdyaWQtY29sb3IpJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWGF4aXNDb2xvcikge1xyXG4gICAgICBkMy5zZWxlY3RBbGwoJy5tdWx0aWNoYXJ0Jykuc3R5bGUoXHJcbiAgICAgICAgJ2NvbG9yJyxcclxuICAgICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1hheGlzQ29sb3IgfHwgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUF4aXNDb25maWd1cmF0aW9ucyhzdmc6IGFueSwgc2NhbGVzOiBhbnksIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsIGRhdGE6IGFueVtdKSB7XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBkMy5zZWxlY3RBbGwoJy5tdWx0aWNoYXJ0ID4gZyA+IHRleHQnKS5hdHRyKCdjbGFzcycsICdsaWItZGlzcGxheS1oaWRkZW4nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNYYXhpc0xhYmVsSGlkZGVuKSB7XHJcbiAgICAgIGQzLnNlbGVjdEFsbCgnLm11bHRpY2hhcnQgPiBnID4gdGV4dCcpLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1hheGlzTGFiZWxIaWRkZW4gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnJlbmRlckN1c3RvbVhBeGlzKHN2Zywgc2NhbGVzLCBkaW1lbnNpb25zLCBkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0xhYmVsSGlkZGVuKSB7XHJcbiAgICAgIHN2Zy5zZWxlY3RBbGwoJy55YXhpcy1kYXNoZWQgPiBnID4gdGV4dCcpLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzSGlkZGVuKSB7XHJcbiAgICAgIGQzLnNlbGVjdEFsbCgnLnlheGlzLWRhc2hlZCcpLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzWm9vbWVkT3V0ICYmIGRhdGEubGVuZ3RoID4gOSkge1xyXG4gICAgICBzdmdcclxuICAgICAgICAuc2VsZWN0QWxsKCcubGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAncm90YXRlKC05MCknKVxyXG4gICAgICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdlbmQnKVxyXG4gICAgICAgIC5hdHRyKCd4JywgJy01JylcclxuICAgICAgICAuYXR0cignZHknLCBudWxsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyQ3VzdG9tWEF4aXMoc3ZnOiBhbnksIHNjYWxlczogYW55LCBkaW1lbnNpb25zOiBEaW1lbnNpb25zLCBkYXRhOiBhbnlbXSkge1xyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAneDEgYXhpczEnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7ZGltZW5zaW9ucy5oZWlnaHR9KWApXHJcbiAgICAgIC5zdHlsZSgnY29sb3InLCAnIzAwMCcpXHJcbiAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oc2NhbGVzLnhTY2FsZSkudGlja1NpemUoMCkpXHJcbiAgICAgIC5jYWxsKChnOiBhbnkpID0+IGcuc2VsZWN0KCcuZG9tYWluJykuYXR0cignZmlsbCcsICdub25lJykpO1xyXG5cclxuICAgIHRoaXMuc3R5bGVDdXN0b21YQXhpc1RpY2tzKHN2ZywgZGF0YSk7XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnhMYWJlbHNPblNhbWVMaW5lKSB7XHJcbiAgICAgIHRoaXMuYXBwbHlYTGFiZWxzT25TYW1lTGluZShzdmcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdHlsZUN1c3RvbVhBeGlzVGlja3Moc3ZnOiBhbnksIGRhdGE6IGFueVtdKSB7XHJcbiAgICBsZXQgYWx0ZXJuYXRlVGV4dCA9IGZhbHNlO1xyXG5cclxuICAgIHN2Zy5zZWxlY3RBbGwoJy54MS5heGlzMSAudGljayBsaW5lJykuYXR0cigneTInLCAoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5oaWRlWGF4aXNUaWNrKSByZXR1cm4gMDtcclxuICAgICAgXHJcbiAgICAgIGlmIChhbHRlcm5hdGVUZXh0ICYmICF0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc05vQWx0ZXJuYXRlWGF4aXNUZXh0KSB7XHJcbiAgICAgICAgYWx0ZXJuYXRlVGV4dCA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLkNPTlNUQU5UUy5MT05HX1RJQ0tfTEVOR1RIX0JHIC0gNztcclxuICAgICAgfVxyXG4gICAgICBhbHRlcm5hdGVUZXh0ID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuIHRoaXMuQ09OU1RBTlRTLlNIT1JUX1RJQ0tfTEVOR1RIX0JHIC0gNDtcclxuICAgIH0pO1xyXG5cclxuICAgIGFsdGVybmF0ZVRleHQgPSBmYWxzZTtcclxuICAgIHN2Z1xyXG4gICAgICAuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICAgICAgICByZXR1cm4gZGF0YS5sZW5ndGggPiA4IFxyXG4gICAgICAgICAgICA/ICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bi1hbHQnXHJcbiAgICAgICAgICAgIDogJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLXdlZWtseWNoYXJ0cyc7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hdHRyKCd5JywgKCkgPT4ge1xyXG4gICAgICAgIGlmIChhbHRlcm5hdGVUZXh0KSB7XHJcbiAgICAgICAgICBhbHRlcm5hdGVUZXh0ID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5DT05TVEFOVFMuTE9OR19USUNLX0xFTkdUSF9CRztcclxuICAgICAgICB9XHJcbiAgICAgICAgYWx0ZXJuYXRlVGV4dCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQ09OU1RBTlRTLlNIT1JUX1RJQ0tfTEVOR1RIX0JHO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlYTGFiZWxzT25TYW1lTGluZShzdmc6IGFueSkge1xyXG4gICAgc3ZnXHJcbiAgICAgIC5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIHRleHQnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgICAuYXR0cigneScsIHRoaXMuQ09OU1RBTlRTLlNIT1JUX1RJQ0tfTEVOR1RIX0JHKVxyXG4gICAgICAudGV4dCgoZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdHJpbW1lZCA9IGQudHJpbSgpO1xyXG4gICAgICAgIGNvbnN0IHNwYWNlSW5kZXggPSB0cmltbWVkLmluZGV4T2YoJyAnKTtcclxuICAgICAgICByZXR1cm4gc3BhY2VJbmRleCA+IC0xIFxyXG4gICAgICAgICAgPyB0cmltbWVkLnN1YnN0cmluZygwLCBzcGFjZUluZGV4KS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICA6IHRyaW1tZWQudG9Mb3dlckNhc2UoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgc3ZnXHJcbiAgICAgIC5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrJylcclxuICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bicpXHJcbiAgICAgIC5hdHRyKCd5JywgdGhpcy5DT05TVEFOVFMuTE9OR19USUNLX0xFTkdUSF9CRylcclxuICAgICAgLmF0dHIoJ2ZpbGwnLCAnY3VycmVudENvbG9yJylcclxuICAgICAgLnRleHQoKGQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGNvbnN0IHRyaW1tZWQgPSBkLnRyaW0oKTtcclxuICAgICAgICBjb25zdCBzcGFjZUluZGV4ID0gdHJpbW1lZC5pbmRleE9mKCcgJyk7XHJcbiAgICAgICAgcmV0dXJuIHNwYWNlSW5kZXggPiAtMSBcclxuICAgICAgICAgID8gdHJpbW1lZC5zdWJzdHJpbmcoc3BhY2VJbmRleCkudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgOiAnJztcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckRhdGFMYWJlbHMocmVjdDogYW55LCBzY2FsZXM6IGFueSwgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEsIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMpIHtcclxuICAgIGlmICghdGhpcy5pc0NDICYmICF0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSkge1xyXG4gICAgICByZWN0LmFwcGVuZCgnc3ZnOnRpdGxlJykudGV4dCgoZDogYW55KSA9PiBkWzFdIC0gZFswXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnNob3dUb3RhbE9uVG9wKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyVG9wTGFiZWxzKHJlY3QsIHNjYWxlcywgbWV0YURhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zaG93QW5nbGVkTGFiZWxzKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyQW5nbGVkTGFiZWxzKHJlY3QsIHNjYWxlcywgbWV0YURhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJUb3BMYWJlbHMocmVjdDogYW55LCBzY2FsZXM6IGFueSwgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEpIHtcclxuICAgIGNvbnN0IGZvcm1hdEZyb21CYWNrZW5kID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24udGV4dEZvcm1hdHRlclxyXG4gICAgICA/IENoYXJ0SGVscGVyLmRhdGFWYWx1ZUZvcm1hdHRlcih0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0Rm9ybWF0dGVyKVxyXG4gICAgICA6IChkOiBhbnkpID0+IGQ7XHJcbiAgICBjb25zdCBmb3JtYXRGb3JIdWdlTnVtYmVycyA9IENoYXJ0SGVscGVyLmRhdGFWYWx1ZUZvcm1hdHRlcignLjJzJyk7XHJcblxyXG4gICAgcmVjdFxyXG4gICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgLmF0dHIoJ3gnLCAoZDogYW55KSA9PiBzY2FsZXMueFNjYWxlKGQuZGF0YS5uYW1lKSArIHNjYWxlcy54U2NhbGUuYmFuZHdpZHRoKCkgLyAyKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXZlcnRpY2Fsc3RhY2stbGFiZWxzLW9udG9wLXdla2x5Y2hhcnRzJylcclxuICAgICAgLmF0dHIoJ3knLCAoZDogYW55KSA9PiBzY2FsZXMueVNjYWxlKGRbMV0pIC0gMylcclxuICAgICAgLnRleHQoKGQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gZFsxXSAtIGRbMF07XHJcbiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gMCkgcmV0dXJuO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gdmFsdWUgPD0gOTk5IFxyXG4gICAgICAgICAgPyBmb3JtYXRGcm9tQmFja2VuZCh2YWx1ZSlcclxuICAgICAgICAgIDogZm9ybWF0Rm9ySHVnZU51bWJlcnModmFsdWUpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBtZXRhRGF0YS51bml0ID8gbWV0YURhdGEudW5pdCArIGZvcm1hdHRlZFZhbHVlIDogZm9ybWF0dGVkVmFsdWU7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJBbmdsZWRMYWJlbHMocmVjdDogYW55LCBzY2FsZXM6IGFueSwgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEpIHtcclxuICAgIGNvbnN0IGZvcm1hdEZyb21CYWNrZW5kID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24udGV4dEZvcm1hdHRlclxyXG4gICAgICA/IENoYXJ0SGVscGVyLmRhdGFWYWx1ZUZvcm1hdHRlcih0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0Rm9ybWF0dGVyKVxyXG4gICAgICA6IChkOiBhbnkpID0+IGQ7XHJcbiAgICBjb25zdCBmb3JtYXRGb3JIdWdlTnVtYmVycyA9IENoYXJ0SGVscGVyLmRhdGFWYWx1ZUZvcm1hdHRlcignLjJzJyk7XHJcbiAgICBjb25zdCB0ZW1wT2JqZWN0SG9sZGVyOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge307XHJcblxyXG4gICAgcmVjdFxyXG4gICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgLmF0dHIoJ3gnLCAwKVxyXG4gICAgICAuYXR0cigneScsIDApXHJcbiAgICAgIC5hdHRyKCdmaWxsJywgKGQ6IGFueSkgPT4gbWV0YURhdGEuY29sb3JzW2Qua2V5XSlcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1kYXRhLWxhYmVscy1hbmdsZWQtd2Vla2x5Y2hhcnRzJylcclxuICAgICAgLnRleHQoKGQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gZFsxXSAtIGRbMF07XHJcbiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA8PSAwKSByZXR1cm47XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkVmFsdWUgPSB2YWx1ZSA8PSA5OTlcclxuICAgICAgICAgID8gZm9ybWF0RnJvbUJhY2tlbmQodmFsdWUpXHJcbiAgICAgICAgICA6IGZvcm1hdEZvckh1Z2VOdW1iZXJzKHZhbHVlKTtcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gbWV0YURhdGEudW5pdCA/IG1ldGFEYXRhLnVuaXQgKyBmb3JtYXR0ZWRWYWx1ZSA6IGZvcm1hdHRlZFZhbHVlO1xyXG4gICAgICB9KVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgKGQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gZFsxXSAtIGRbMF07XHJcbiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA8PSAwKSByZXR1cm4gJ3JvdGF0ZSgwKSc7XHJcblxyXG4gICAgICAgIGxldCB0b3RhbCA9IDA7XHJcbiAgICAgICAgbGV0IGluY3JlbWVudGVyID0gMTtcclxuICAgICAgICBtZXRhRGF0YS5rZXlMaXN0LmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgIGlmIChkLmRhdGFba2V5XSkge1xyXG4gICAgICAgICAgICB0b3RhbCArPSBkLmRhdGFba2V5XTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGluY3JlbWVudGVyID0gMjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGVtcE9iamVjdEhvbGRlcltkLmRhdGEubmFtZV0gPSAodGVtcE9iamVjdEhvbGRlcltkLmRhdGEubmFtZV0gfHwgMCkgKyBpbmNyZW1lbnRlcjtcclxuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRlbXBPYmplY3RIb2xkZXJbZC5kYXRhLm5hbWVdO1xyXG4gICAgICAgIGNvbnN0IHhQb3MgPSBzY2FsZXMueFNjYWxlKGQuZGF0YS5uYW1lKTtcclxuICAgICAgICBjb25zdCBiYW5kd2lkdGggPSBzY2FsZXMueFNjYWxlLmJhbmR3aWR0aCgpO1xyXG4gICAgICAgIGNvbnN0IHlQb3MgPSBzY2FsZXMueVNjYWxlKHRvdGFsKSAtIDM7XHJcblxyXG4gICAgICAgIHN3aXRjaCAocG9zaXRpb24pIHtcclxuICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgcmV0dXJuIGB0cmFuc2xhdGUoJHt4UG9zICsgYmFuZHdpZHRoIC8gM30sJHt5UG9zfSkgcm90YXRlKDI3MClgO1xyXG4gICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICByZXR1cm4gYHRyYW5zbGF0ZSgke3hQb3MgKyBiYW5kd2lkdGggLyAyICsgMn0sJHt5UG9zfSkgcm90YXRlKDI3MClgO1xyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIGB0cmFuc2xhdGUoJHt4UG9zICsgKGJhbmR3aWR0aCAqIDMpIC8gNH0sJHt5UG9zfSkgcm90YXRlKDI3MClgO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlclRhcmdldExpbmUoXHJcbiAgICBzdmc6IGFueSxcclxuICAgIHN2Z1lBeGlzUmlnaHQ6IGFueSxcclxuICAgIHNjYWxlczogYW55LFxyXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcclxuICAgIG1ldGFEYXRhOiBDaGFydE1ldGFEYXRhXHJcbiAgKSB7XHJcbiAgICBpZiAoIXRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcGFyc2VkVGFyZ2V0ID0gdGhpcy5wYXJzZVRhcmdldFZhbHVlKHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCk7XHJcbiAgICBjb25zdCB5WmVybyA9IHNjYWxlcy55U2NhbGUocGFyc2VkVGFyZ2V0KTtcclxuXHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnbGluZScpXHJcbiAgICAgIC5hdHRyKCd4MScsIDApXHJcbiAgICAgIC5hdHRyKCd4MicsIGRpbWVuc2lvbnMud2lkdGgpXHJcbiAgICAgIC5hdHRyKCd5MScsIHlaZXJvKVxyXG4gICAgICAuYXR0cigneTInLCB5WmVybylcclxuICAgICAgLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5JywgJzUgNScpXHJcbiAgICAgIC5zdHlsZSgnc3Ryb2tlJywgdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEuY29sb3IpO1xyXG5cclxuICAgIHRoaXMucmVuZGVyVGFyZ2V0TGFiZWwoc3ZnWUF4aXNSaWdodCwgeVplcm8sIG1ldGFEYXRhKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcGFyc2VUYXJnZXRWYWx1ZSh0YXJnZXQ6IHN0cmluZyB8IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUZsb2F0KFN0cmluZyh0YXJnZXQpKTtcclxuICAgIGlmIChpc05hTihwYXJzZWQpKSByZXR1cm4gMDtcclxuICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHBhcnNlZCkgPyBwYXJzZUludChTdHJpbmcodGFyZ2V0KSkgOiBwYXJzZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlclRhcmdldExhYmVsKHN2Z1lBeGlzUmlnaHQ6IGFueSwgeVplcm86IG51bWJlciwgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEpIHtcclxuICAgIGNvbnN0IGRhdGFUeXBlID0gbWV0YURhdGEuZGF0YVR5cGUgfHwgJyc7XHJcbiAgICBjb25zdCB0YXJnZXROYW1lID0gdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0TmFtZSB8fCAndGFyZ2V0JztcclxuXHJcbiAgICBzdmdZQXhpc1JpZ2h0XHJcbiAgICAgIC5hcHBlbmQoJ2ZvcmVpZ25PYmplY3QnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7eVplcm8gLSAxM30pYClcclxuICAgICAgLmF0dHIoJ3dpZHRoJywgdGhpcy5DT05TVEFOVFMuUklHSFRfU1ZHX1dJRFRIKVxyXG4gICAgICAuYXR0cignaGVpZ2h0JywgNTApXHJcbiAgICAgIC5hcHBlbmQoJ3hodG1sOmRpdicpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICd0YXJnZXQtZGlzcGxheScpXHJcbiAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAuaHRtbChgPGRpdj4ke3RhcmdldE5hbWV9PC9kaXY+PGRpdj4ke3RoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldH0ke2RhdGFUeXBlfTwvZGl2PmApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJMaW5lQ2hhcnQoc3ZnOiBhbnksIGxpbmVEYXRhOiBhbnlbXSwgc2NhbGVzOiBhbnksIGNvbG9yczogYW55LCBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSkge1xyXG4gICAgaWYgKCFsaW5lRGF0YSB8fCAhY29sb3JzKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgZGF0YUdyb3VwID0gZDNcclxuICAgICAgLm5lc3QoKVxyXG4gICAgICAua2V5KChkOiBhbnkpID0+IGQuY2F0ZWdvcnkpXHJcbiAgICAgIC5lbnRyaWVzKGxpbmVEYXRhKTtcclxuXHJcbiAgICBjb25zdCBsaW5lR2VuID0gZDNcclxuICAgICAgLmxpbmUoKVxyXG4gICAgICAueCgoZDogYW55KSA9PiBzY2FsZXMueFNjYWxlKGQubmFtZSkgKyBzY2FsZXMueFNjYWxlLmJhbmR3aWR0aCgpIC8gMilcclxuICAgICAgLnkoKGQ6IGFueSkgPT4gc2NhbGVzLmxpbmVZc2NhbGUoZC52YWx1ZSkpO1xyXG5cclxuICAgIGRhdGFHcm91cC5mb3JFYWNoKChncm91cDogYW55KSA9PiB7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ3BhdGgnKVxyXG4gICAgICAgIC5kYXR1bShncm91cC52YWx1ZXMpXHJcbiAgICAgICAgLmF0dHIoJ2ZpbGwnLCAnbm9uZScpXHJcbiAgICAgICAgLmF0dHIoJ3N0cm9rZScsIChkOiBhbnkpID0+IHtcclxuICAgICAgICAgIHJldHVybiBkWzBdPy5jYXRlZ29yeSBcclxuICAgICAgICAgICAgPyBjb2xvcnNbZFswXS5jYXRlZ29yeV1cclxuICAgICAgICAgICAgOiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcjtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCAyLjUpXHJcbiAgICAgICAgLmF0dHIoJ2QnLCBsaW5lR2VuKTtcclxuXHJcbiAgICAgIHRoaXMucmVuZGVyTGluZURvdHMoc3ZnLCBncm91cC52YWx1ZXMsIHNjYWxlcywgY29sb3JzKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJMaW5lRG90cyhzdmc6IGFueSwgdmFsdWVzOiBhbnlbXSwgc2NhbGVzOiBhbnksIGNvbG9yczogYW55KSB7XHJcbiAgICBjb25zdCBkb3QgPSBzdmdcclxuICAgICAgLnNlbGVjdEFsbCgnLmxpbmUtZG90cycpXHJcbiAgICAgIC5kYXRhKHZhbHVlcylcclxuICAgICAgLmVudGVyKClcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5vbignY2xpY2snLCAoZDogYW55KSA9PiB0aGlzLmhhbmRsZUNsaWNrKGQpKTtcclxuXHJcbiAgICBkb3RcclxuICAgICAgLmFwcGVuZCgnY2lyY2xlJylcclxuICAgICAgLmF0dHIoJ2ZpbGwnLCAoZDogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGQuY2F0ZWdvcnkgXHJcbiAgICAgICAgICA/IGNvbG9yc1tkLmNhdGVnb3J5XVxyXG4gICAgICAgICAgOiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcjtcclxuICAgICAgfSlcclxuICAgICAgLmF0dHIoJ3N0cm9rZScsICdub25lJylcclxuICAgICAgLmF0dHIoJ2N4JywgKGQ6IGFueSkgPT4gc2NhbGVzLnhTY2FsZShkLm5hbWUpICsgc2NhbGVzLnhTY2FsZS5iYW5kd2lkdGgoKSAvIDIpXHJcbiAgICAgIC5hdHRyKCdjeScsIChkOiBhbnkpID0+IHNjYWxlcy5saW5lWXNjYWxlKGQudmFsdWUpKVxyXG4gICAgICAuYXR0cigncicsIDMpXHJcbiAgICAgIC5zdHlsZSgnY3Vyc29yJywgJ3BvaW50ZXInKTtcclxuXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubGluZUdyYXBoQ29sb3IpIHtcclxuICAgICAgZG90XHJcbiAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2RvdHMnKVxyXG4gICAgICAgIC5hdHRyKCdmaWxsJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubGluZUdyYXBoQ29sb3IpXHJcbiAgICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnLjg1ZW0nKVxyXG4gICAgICAgIC5zdHlsZSgnZm9udC13ZWlnaHQnLCAnYm9sZCcpXHJcbiAgICAgICAgLmF0dHIoJ3gnLCAoZDogYW55KSA9PiBzY2FsZXMueFNjYWxlKGQubmFtZSkgKyBzY2FsZXMueFNjYWxlLmJhbmR3aWR0aCgpIC8gMilcclxuICAgICAgICAuYXR0cigneScsIChkOiBhbnkpID0+IHNjYWxlcy5saW5lWXNjYWxlKGQudmFsdWUpKVxyXG4gICAgICAgIC5hdHRyKCdkeScsICctMWVtJylcclxuICAgICAgICAudGV4dCgoZDogYW55KSA9PiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5sYWJlbEZvcm1hdHRlcihkLnZhbHVlKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVDbGljayhkOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmNoYXJ0RGF0YT8ubWV0YURhdGE/Lmhhc0RyaWxsRG93biB8fCBkPy50b2dnbGVGcm9tKSB7XHJcbiAgICAgIHRoaXMuY2xpY2tFdmVudC5lbWl0KGQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlSGVhZGVyTWVudUNsaWNrKGlkOiBhbnkpIHtcclxuICAgIHRoaXMuaGVhZGVyTWVudWNsaWNrRXZlbnQuZW1pdChpZCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVDb21wYXJlQnlGaWx0ZXJTZWxlY3Rpb24oZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5jbGlja0V2ZW50LmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlWm9vbWluWm9vbW91dENsaWNrKHsgaXNab29tT3V0LCBldmVudCB9OiB7IGlzWm9vbU91dDogYm9vbGVhbjsgZXZlbnQ6IGFueSB9KSB7XHJcbiAgICB0aGlzLmlzWm9vbU91dFNlbGVjdGVkKGlzWm9vbU91dCk7XHJcbiAgfVxyXG59IiwiPG1ldGEgaHR0cC1lcXVpdj1cIkNBQ0hFLUNPTlRST0xcIiBjb250ZW50PVwiTk8tQ0FDSEVcIiAvPlxyXG48bWV0YSBodHRwLWVxdWl2PVwiRVhQSVJFU1wiIGNvbnRlbnQ9XCJTYXQsIDAxIEp1biAyMDA0IDExOjEyOjAxIEdNVFwiIC8+XHJcbjxkaXZcclxuICAjdmVydGljYWxzdGFja2VkY29udGFpbmVyXHJcbiAgY2xhc3M9XCJsaWItY2hhcnQtd3JhcHBlclwiXHJcbiAgW25nQ2xhc3NdPVwieyAnbGliLW5vLWJhY2tncm91bmQnOiBpc1RyYW5zcGFyZW50QmFja2dyb3VuZCB9XCJcclxuICAgIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY2FyZC1iZyk7XCJcclxuXHJcbiAgKHJlc2l6ZWQpPVwib25SZXNpemVkKCRldmVudClcIlxyXG4+XHJcbiAgPGRpdiBjbGFzcz1cImhlYWRlci1hbHRcIiAqbmdJZj1cIiFpc0hlYWRlclZpc2libGVcIj5cclxuICAgIDxsaWItY2hhcnQtaGVhZGVyLXYyXHJcbiAgICAgIFtjaGFydERhdGFdPVwiY2hhcnREYXRhXCJcclxuICAgICAgW2NoYXJ0Q29uZmlndXJhdGlvbl09XCJjaGFydENvbmZpZ3VyYXRpb25cIlxyXG4gICAgICAoY2xpY2tFdmVudCk9XCJoYW5kbGVDbGljaygkZXZlbnQpXCJcclxuICAgID48L2xpYi1jaGFydC1oZWFkZXItdjI+XHJcblxyXG4gICAgPGxpYi1jaGFydC1oZWFkZXItdjNcclxuICAgICAgW2NoYXJ0RGF0YV09XCJjaGFydERhdGFcIlxyXG4gICAgICBbY2hhcnRDb25maWd1cmF0aW9uXT1cImNoYXJ0Q29uZmlndXJhdGlvblwiXHJcbiAgICAgIChjb21wYXJlQnlGaWx0ZXJTZWxlY3Rpb24pPVwiaGFuZGxlQ29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKCRldmVudClcIlxyXG4gICAgICAoem9vbUluWm9vbU91dENsaWNrKT1cImhhbmRsZVpvb21pblpvb21vdXRDbGljaygkZXZlbnQpXCJcclxuICAgID48L2xpYi1jaGFydC1oZWFkZXItdjM+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdlxyXG4gICAgW3N0eWxlLmhlaWdodF09XCJjaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0XCJcclxuICAgIGlkPVwidmVydGljYWxzdGFja2VkY2hhcnRjb250YWluZXJcIlxyXG4gICAgI3ZlcnRpY2Fsc3RhY2tlZGNoYXJ0Y29udGFpbmVyXHJcbiAgICBjbGFzcz1cImxpYi1jaGFydC1zdmdcIlxyXG4gID48L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
1058
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9yaXpvbnRhbC1iYXJzLXdpdGgtc2Nyb2xsLXpvb20uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXhpZGlvLXN0eWxlZ3VpZGUtbGlicmFyeS9zcmMvbGliL2hvcml6b250YWwtYmFycy13aXRoLXNjcm9sbC16b29tL2hvcml6b250YWwtYmFycy13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ob3Jpem9udGFsLWJhcnMtd2l0aC1zY3JvbGwtem9vbS9ob3Jpem9udGFsLWJhcnMtd2l0aC1zY3JvbGwtem9vbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FFbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sV0FBVyxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRXpCLE9BQU8sa0JBQWtCLE1BQU0sa0JBQWtCLENBQUM7Ozs7OztBQW1EbEQsTUFBTSxPQUFPLHFDQUNYLFNBQVEsaUJBQWlCO0lBZ0Z6QjtRQUNFLEtBQUssRUFBRSxDQUFDO1FBdEVBLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3JDLHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFekQsdUJBQWtCLEdBQVEsRUFBRSxDQUFDO1FBQzdCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLHdCQUFtQixHQUFHLElBQUksQ0FBQztRQUMzQixhQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxD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QUNyQyxDQUFDO0lBRUQsOEJBQThCLENBQUMsS0FBVTtRQUN2QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsd0JBQXdCLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFzQztRQUMvRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEMsQ0FBQzsrR0FudkNVLHFDQUFxQzttR0FBckMscUNBQXFDLDRqQkNsRWxELG9uQ0ErQkE7OzRGRG1DYSxxQ0FBcUM7a0JBVGpELFNBQVM7K0JBQ0Usc0NBQXNDLGlCQU1qQyxpQkFBaUIsQ0FBQyxJQUFJO3dEQU9yQyxZQUFZO3NCQURYLFNBQVM7dUJBQUMsK0JBQStCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUk1RCwyQkFBMkI7c0JBRDFCLFNBQVM7dUJBQUMsMEJBQTBCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUc5QyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgRWxlbWVudFJlZixcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIE9uQ2hhbmdlcyxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50VW5pcXVlSWQgfSBmcm9tICcuLi91bmlxdWUtaWQnO1xyXG5pbXBvcnQgQ2hhcnRIZWxwZXIgZnJvbSAnLi4vY2hhcnQtaGVscGVyJztcclxuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xyXG5pbXBvcnQgeyBSZXNpemVkRXZlbnQgfSBmcm9tICdhbmd1bGFyLXJlc2l6ZS1ldmVudCc7XHJcbmltcG9ydCBIZWFkZXJDb25maWdIZWxwZXIgZnJvbSAnLi4vaGVhZGVyLWNvbmZpZyc7XHJcblxyXG4vLyBUeXBlc1xyXG5pbnRlcmZhY2UgQ2hhcnREYXRhIHtcclxuICBkYXRhOiBhbnlbXTtcclxuICBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YTtcclxuICBsaW5lRGF0YT86IGFueVtdO1xyXG4gIHRhcmdldExpbmVEYXRhPzogVGFyZ2V0TGluZURhdGE7XHJcbn1cclxuXHJcbmludGVyZmFjZSBDaGFydE1ldGFEYXRhIHtcclxuICB1bml0Pzogc3RyaW5nO1xyXG4gIGlzQ0M/OiBib29sZWFuO1xyXG4gIGJhcldpdGhvdXRDbGljaz86IHN0cmluZ1tdO1xyXG4gIGNvbG9yczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcclxuICBrZXlMaXN0OiBzdHJpbmdbXTtcclxuICBkYXRhVHlwZT86IHN0cmluZztcclxuICBoYXNEcmlsbERvd24/OiBib29sZWFuO1xyXG4gIGhvdmVyQ29sb3I/OiBzdHJpbmc7XHJcbiAgeUxhYmVsPzogc3RyaW5nO1xyXG4gIHhMYWJlbD86IHN0cmluZztcclxuICBsaW5leUxhYmVsPzogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgVGFyZ2V0TGluZURhdGEge1xyXG4gIHRhcmdldDogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIGNvbG9yOiBzdHJpbmc7XHJcbiAgdGFyZ2V0TmFtZT86IHN0cmluZztcclxuICBiYXJBYm92ZVRhcmdldENvbG9yPzogc3RyaW5nO1xyXG4gIGJhckFib3ZlVGFyZ2V0SG92ZXJDb2xvcj86IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIERpbWVuc2lvbnMge1xyXG4gIHdpZHRoOiBudW1iZXI7XHJcbiAgaGVpZ2h0OiBudW1iZXI7XHJcbiAgY29udGFpbmVyV2lkdGg6IG51bWJlcjtcclxuICBjb250YWluZXJIZWlnaHQ6IG51bWJlcjtcclxuICBiYXJXaWR0aDogbnVtYmVyO1xyXG4gIGJhclBhZGRpbmc6IG51bWJlcjtcclxuICByZXF1aXJlZFN2Z1dpZHRoOiBudW1iZXI7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWhvcml6b250YWwtYmFycy13aXRoLXNjcm9sbC16b29tJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaG9yaXpvbnRhbC1iYXJzLXdpdGgtc2Nyb2xsLXpvb20uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogW1xyXG4gICAgJy4vaG9yaXpvbnRhbC1iYXJzLXdpdGgtc2Nyb2xsLXpvb20uY29tcG9uZW50Lmxlc3MnLFxyXG4gICAgJy4uL2NvbW1vbi1zdHlsZXMubGVzcycsXHJcbiAgXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSG9yaXpvbnRhbEJhcnNXaXRoU2Nyb2xsWm9vbUNvbXBvbmVudFxyXG4gIGV4dGVuZHMgQ29tcG9uZW50VW5pcXVlSWRcclxuICBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XHJcbiAgXHJcbiAgQFZpZXdDaGlsZCgndmVydGljYWxzdGFja2VkY2hhcnRjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGNvbnRhaW5lckVsdCE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3ZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgdmVydGljYWxzdGFja2VkY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgQElucHV0KCkgY2hhcnREYXRhOiBDaGFydERhdGEgfCBhbnkgO1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbjogYW55O1xyXG4gIEBPdXRwdXQoKSBjbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGhlYWRlck1lbnVjbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIGNoYXJ0Q29uZmlndXJhdGlvbjogYW55ID0ge307XHJcbiAgaXNIZWFkZXJWaXNpYmxlID0gdHJ1ZTtcclxuICBpc1RvcENhcHRpb25WaXNpYmxlID0gdHJ1ZTtcclxuICB1bmlxdWVJZCA9IHRoaXMuZ2V0VW5pcXVlSWQoKTtcclxuICBpc1RyYW5zcGFyZW50QmFja2dyb3VuZCA9IGZhbHNlO1xyXG4gIGlzQ0MgPSBmYWxzZTtcclxuICBpc1pvb21lZE91dCA9IHRydWU7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgQ09OU1RBTlRTID0ge1xyXG4gICAgUklHSFRfU1ZHX1dJRFRIOiA2MCxcclxuICAgIExFRlRfUklHSFRfU1BBQ0VTOiA1MCxcclxuICAgIFNIT1JUX1RJQ0tfTEVOR1RIOiA0LFxyXG4gICAgTE9OR19USUNLX0xFTkdUSDogMTYsXHJcbiAgICBTSE9SVF9USUNLX0xFTkdUSF9CRzogNSxcclxuICAgIExPTkdfVElDS19MRU5HVEhfQkc6IDMwLFxyXG4gICAgREVTS1RPUF9CQVJfV0lEVEg6IDQwLCAgICAgIC8vIERlc2t0b3AgYmFyIHdpZHRoXHJcbiAgICBNT0JJTEVfQkFSX1dJRFRIOiAyNSwgICAgICAgLy8gTW9iaWxlL1RhYmxldCBiYXIgd2lkdGggKHJlZHVjZWQpXHJcbiAgICBCQVJfR0FQOiAzMCwgICAgICAgICAgICAgICAgLy8gR2FwIGJldHdlZW4gYmFycyAoaW5jcmVhc2VkIGZvciBiZXR0ZXIgc2VwYXJhdGlvbilcclxuICAgIFpPT01fVEhSRVNIT0xEOiAzMCxcclxuICAgIFpPT01fSU5fVEhSRVNIT0xEOiA4LFxyXG4gIH07XHJcblxyXG4gIGRlZmF1bHRDb25maWd1cmF0aW9uID0ge1xyXG4gICAgbWFyZ2luOiB7IHRvcDogMjAsIHJpZ2h0OiAyMCwgYm90dG9tOiAyMCwgbGVmdDogNDAgfSxcclxuICAgIHN2Z0hlaWdodDogNzAsXHJcbiAgICBsZWdlbmRIZWlnaHQ6ICcxMCUnLFxyXG4gICAgbnVtYmVyT2ZZVGlja3M6IDUsXHJcbiAgICBsYWJlbEZvcm1hdHRlcjogQ2hhcnRIZWxwZXIuZGVmYXVsdEZvcm1hdHRlcixcclxuICAgIHhBeGlzTGFiZWxGb21hdHRlcjogQ2hhcnRIZWxwZXIuZGVmYXVsdEZvcm1hdHRlcixcclxuICAgIHlBeGlzTGFiZWxGb21hdHRlcjogQ2hhcnRIZWxwZXIuZGVmYXVsdEZvcm1hdHRlcixcclxuICAgIHlMaW5lQXhpc0xhYmVsRm9tYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICBsaW5lR3JhcGhDb2xvcjogJyNGNkQyODMnLFxyXG4gICAgc2hvd0xpbmVDaGFydEF4aXM6IHRydWUsXHJcbiAgICBzaG93TGVnZW5kOiBmYWxzZSxcclxuICAgIGZvckNvbXBhcmlzb246IHRydWUsXHJcbiAgICBoZWFkZXJNZW51T3B0aW9uczogSGVhZGVyQ29uZmlnSGVscGVyLmhlYWRlckNvbmZpZy5oZWFkZXJNZW51T3B0aW9ucyxcclxuICAgIHlBeGlzR3JpZDogZmFsc2UsXHJcbiAgICAvLyBPcHRpb25hbCBjb25maWdzIHdpdGggdW5kZWZpbmVkIGRlZmF1bHRzXHJcbiAgICBpc0hlYWRlclZpc2libGU6IHVuZGVmaW5lZCxcclxuICAgIGlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOiB1bmRlZmluZWQsXHJcbiAgICBpc1RvcENhcHRpb25WaXNpYmxlOiB1bmRlZmluZWQsXHJcbiAgICBpc011bHRpQ2hhcnRHcmlkTGluZTogdW5kZWZpbmVkLFxyXG4gICAgaXNGdWxsU2NyZWVuOiB1bmRlZmluZWQsXHJcbiAgICBjdXN0b21Zc2NhbGU6IHVuZGVmaW5lZCxcclxuICAgIGlzWGF4aXNMYWJlbEhpZGRlbjogdW5kZWZpbmVkLFxyXG4gICAgaXNZYXhpc0xhYmVsSGlkZGVuOiB1bmRlZmluZWQsXHJcbiAgICBpc1lheGlzSGlkZGVuOiB1bmRlZmluZWQsXHJcbiAgICBpc1lheGlzRGFzaGVkOiB1bmRlZmluZWQsXHJcbiAgICBpc1hheGlzQ29sb3I6IHVuZGVmaW5lZCxcclxuICAgIHRleHRGb3JtYXR0ZXI6IHVuZGVmaW5lZCxcclxuICAgIHNob3dUb3RhbE9uVG9wOiB1bmRlZmluZWQsXHJcbiAgICBiYWNrZW5kRm9ybWF0dGVySGFzUHJpb3JpdHk6IHVuZGVmaW5lZCxcclxuICAgIHNob3dBbmdsZWRMYWJlbHM6IHVuZGVmaW5lZCxcclxuICAgIGlzTm9BbHRlcm5hdGVYYXhpc1RleHQ6IHVuZGVmaW5lZCxcclxuICAgIGlzWGdyaWRCZXR3ZWVuTGFiZWxzOiB1bmRlZmluZWQsXHJcbiAgICBzaG93WGF4aXNUb3A6IHVuZGVmaW5lZCxcclxuICAgIHhBeGlzR3JpZDogdW5kZWZpbmVkLFxyXG4gICAgeExhYmVsc09uU2FtZUxpbmU6IHVuZGVmaW5lZCxcclxuICAgIGhpZGVYYXhpc1RpY2s6IHVuZGVmaW5lZCxcclxuICAgIGlzRHJpbGxkb3duQ2hhcnQ6IHVuZGVmaW5lZCxcclxuICAgIGlzVGFyZ2V0TGluZTogdW5kZWZpbmVkLFxyXG4gICAgZGlzcGxheVRpdGxlT25Ub3A6IHVuZGVmaW5lZCxcclxuICAgIGlzVG9nZ2xlVmlzaWJsZTogdW5kZWZpbmVkLFxyXG4gICAgaXNUaXRsZUhpZGRlbjogdW5kZWZpbmVkLFxyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKCkge1xyXG4gICAgdGhpcy5yZW1vdmVFeGlzdGluZ0NoYXJ0KCk7XHJcbiAgICB0aGlzLmluaXRpYWxpemVTdGFja2VkQ2hhcnQoKTtcclxuICB9XHJcblxyXG4gIG9uUmVzaXplZChldmVudDogUmVzaXplZEV2ZW50KSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5yZW1vdmVFeGlzdGluZ0NoYXJ0KCk7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVN0YWNrZWRDaGFydCgpO1xyXG4gICAgfSwgMTApO1xyXG4gIH1cclxuXHJcbiAgaXNab29tT3V0U2VsZWN0ZWQoaXNab29tT3V0OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmlzWm9vbWVkT3V0ID0gaXNab29tT3V0O1xyXG4gICAgdGhpcy5uZ09uQ2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVFeGlzdGluZ0NoYXJ0KCkge1xyXG4gICAgZDMuc2VsZWN0KCcjJyArIHRoaXMudW5pcXVlSWQpLnJlbW92ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtZXJnZUNvbmZpZ3VyYXRpb25zKCkge1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbikge1xyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbltrZXldID0gQ2hhcnRIZWxwZXIuZ2V0VmFsdWVCeUNvbmZpZ3VyYXRpb25UeXBlKFxyXG4gICAgICAgIGtleSxcclxuICAgICAgICB0aGlzLmRlZmF1bHRDb25maWd1cmF0aW9uLFxyXG4gICAgICAgIHRoaXMuY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByZXBhcmVNZXRhRGF0YShtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSk6IENoYXJ0TWV0YURhdGEge1xyXG4gICAgaWYgKCFtZXRhRGF0YS51bml0KSBtZXRhRGF0YS51bml0ID0gJyc7XHJcbiAgICBpZiAobWV0YURhdGEuaXNDQykgdGhpcy5pc0NDID0gbWV0YURhdGEuaXNDQztcclxuICAgIFxyXG4gICAgaWYgKG1ldGFEYXRhLmJhcldpdGhvdXRDbGljaz8ubGVuZ3RoKSB7XHJcbiAgICAgIG1ldGFEYXRhLmJhcldpdGhvdXRDbGljayA9IG1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5tYXAoZWwgPT4gZWwudG9Mb3dlckNhc2UoKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2sgPSBbXTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgcmV0dXJuIG1ldGFEYXRhO1xyXG4gIH1cclxuXHJcbnByaXZhdGUgY2FsY3VsYXRlRGltZW5zaW9ucyhcclxuICBjaGFydENvbnRhaW5lcjogYW55LFxyXG4gIHZlcnRpY2FsQ29udGFpbmVyOiBhbnksXHJcbiAgbWFyZ2luOiBhbnksXHJcbiAgZGF0YUxlbmd0aDogbnVtYmVyXHJcbik6IERpbWVuc2lvbnMge1xyXG4gIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gY2hhcnRDb250YWluZXIubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xyXG4gIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IHZlcnRpY2FsQ29udGFpbmVyLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XHJcbiAgXHJcbiAgY29uc3QgbGVmdEF4aXNXaWR0aCA9IDgwO1xyXG4gIGNvbnN0IHJpZ2h0QXhpc1dpZHRoID0gdGhpcy5DT05TVEFOVFMuUklHSFRfU1ZHX1dJRFRIO1xyXG4gIGNvbnN0IGF2YWlsYWJsZVdpZHRoID0gY29udGFpbmVyV2lkdGggLSBsZWZ0QXhpc1dpZHRoIC0gcmlnaHRBeGlzV2lkdGg7XHJcbiAgXHJcbiAgbGV0IHdpZHRoID0gYXZhaWxhYmxlV2lkdGg7XHJcbiAgbGV0IGhlaWdodCA9IGNvbnRhaW5lckhlaWdodCAqICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHQgLyAxMDApIC0gbWFyZ2luLnRvcCAtIG1hcmdpbi5ib3R0b207XHJcblxyXG4gIGlmIChkYXRhTGVuZ3RoID4gdGhpcy5DT05TVEFOVFMuWk9PTV9USFJFU0hPTEQgJiYgdGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgY29uc3QgbWluV2lkdGggPSBkYXRhTGVuZ3RoICogMjU7XHJcbiAgICB3aWR0aCA9IE1hdGgubWF4KHdpZHRoLCBtaW5XaWR0aCk7XHJcbiAgfVxyXG5cclxuICBpZiAoZGF0YUxlbmd0aCA+IHRoaXMuQ09OU1RBTlRTLlpPT01fSU5fVEhSRVNIT0xEICYmICF0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICB3aWR0aCA9IGRhdGFMZW5ndGggKiAxMzA7XHJcbiAgfVxyXG5cclxuICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNGdWxsU2NyZWVuKSB7XHJcbiAgICBoZWlnaHQgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHQgIT09IDgwXHJcbiAgICAgID8gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0XHJcbiAgICAgIDogY29udGFpbmVySGVpZ2h0O1xyXG4gIH1cclxuXHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgIGhlaWdodCA9IGNvbnRhaW5lckhlaWdodCAtIG1hcmdpbi50b3AgLSBtYXJnaW4uYm90dG9tIC0gMTMwO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgaXNNb2JpbGVPclRhYmxldCA9IHdpbmRvdy5pbm5lcldpZHRoIDwgMTAyNDtcclxuICBsZXQgYmFyV2lkdGg6IG51bWJlcjtcclxuICBsZXQgYmFyUGFkZGluZzogbnVtYmVyO1xyXG4gIFxyXG4gIGlmIChpc01vYmlsZU9yVGFibGV0KSB7XHJcbiAgICBpZiAoZGF0YUxlbmd0aCA9PT0gMSkge1xyXG4gICAgICBiYXJXaWR0aCA9IDYwO1xyXG4gICAgICBiYXJQYWRkaW5nID0gMDtcclxuICAgIH0gZWxzZSBpZiAoZGF0YUxlbmd0aCA9PT0gMikge1xyXG4gICAgICBiYXJXaWR0aCA9IDUwO1xyXG4gICAgICBiYXJQYWRkaW5nID0gNDU7XHJcbiAgICB9IGVsc2UgaWYgKGRhdGFMZW5ndGggPT09IDMpIHtcclxuICAgICAgYmFyV2lkdGggPSA0NTtcclxuICAgICAgYmFyUGFkZGluZyA9IDQwO1xyXG4gICAgfSBlbHNlIGlmIChkYXRhTGVuZ3RoIDw9IDUpIHtcclxuICAgICAgYmFyV2lkdGggPSAzNTtcclxuICAgICAgYmFyUGFkZGluZyA9IDMwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYmFyV2lkdGggPSAyNTtcclxuICAgICAgYmFyUGFkZGluZyA9IDI1O1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICBiYXJXaWR0aCA9IHRoaXMuQ09OU1RBTlRTLkRFU0tUT1BfQkFSX1dJRFRIO1xyXG4gICAgYmFyUGFkZGluZyA9IHRoaXMuQ09OU1RBTlRTLkJBUl9HQVA7XHJcbiAgfVxyXG4gIFxyXG4gIGNvbnN0IHRvdGFsQmFyc1dpZHRoID0gYmFyV2lkdGggKiBkYXRhTGVuZ3RoO1xyXG4gIGNvbnN0IHRvdGFsR2FwcyA9IGJhclBhZGRpbmcgKiAoZGF0YUxlbmd0aCAtIDEpO1xyXG4gIGNvbnN0IG1pblJlcXVpcmVkV2lkdGggPSB0b3RhbEJhcnNXaWR0aCArIHRvdGFsR2FwcyArICh0aGlzLkNPTlNUQU5UUy5MRUZUX1JJR0hUX1NQQUNFUyAqIDIpO1xyXG4gIGNvbnN0IHJlcXVpcmVkU3ZnV2lkdGggPSBNYXRoLm1heChhdmFpbGFibGVXaWR0aCwgbWluUmVxdWlyZWRXaWR0aCk7XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICB3aWR0aCxcclxuICAgIGhlaWdodCxcclxuICAgIGNvbnRhaW5lcldpZHRoLFxyXG4gICAgY29udGFpbmVySGVpZ2h0LFxyXG4gICAgYmFyV2lkdGgsXHJcbiAgICBiYXJQYWRkaW5nLFxyXG4gICAgcmVxdWlyZWRTdmdXaWR0aCxcclxuICB9O1xyXG59XHJcblxyXG5wcml2YXRlIGNyZWF0ZVN2Z0NvbnRhaW5lcnMoXHJcbiAgY2hhcnRDb250YWluZXI6IGFueSxcclxuICBkaW1lbnNpb25zOiBEaW1lbnNpb25zLFxyXG4gIG1hcmdpbjogYW55LFxyXG4gIGhhc1hMYWJlbDogYm9vbGVhbiAgLy8gQWRkIHRoaXMgcGFyYW1ldGVyXHJcbikge1xyXG4gIC8vIENhbGN1bGF0ZSB0b3RhbCBoZWlnaHQgaW5jbHVkaW5nIHNwYWNlIGZvciBYLWF4aXMgbGFiZWwgaWYgcHJlc2VudFxyXG4gIGNvbnN0IHhMYWJlbFNwYWNlID0gaGFzWExhYmVsID8gMzAgOiAwO1xyXG4gIGNvbnN0IHRvdGFsSGVpZ2h0ID0gZGltZW5zaW9ucy5oZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSArIHhMYWJlbFNwYWNlO1xyXG5cclxuICAvLyBNYWluIHdyYXBwZXJcclxuICBjb25zdCBjaGFydFdyYXBwZXIgPSBjaGFydENvbnRhaW5lclxyXG4gICAgLmFwcGVuZCgnZGl2JylcclxuICAgIC5hdHRyKCdpZCcsIHRoaXMudW5pcXVlSWQpXHJcbiAgICAuYXR0cignY2xhc3MnLCAnY2hhcnQtd3JhcHBlci1tYWluJylcclxuICAgIC5zdHlsZSgncG9zaXRpb24nLCAncmVsYXRpdmUnKVxyXG4gICAgLnN0eWxlKCd3aWR0aCcsICcxMDAlJylcclxuICAgIC5zdHlsZSgnaGVpZ2h0JywgYCR7dG90YWxIZWlnaHR9cHhgKTsgIC8vIEluY2x1ZGUgWC1sYWJlbCBzcGFjZVxyXG5cclxuY29uc3QgbGVmdEF4aXNDb250YWluZXIgPSBjaGFydFdyYXBwZXJcclxuICAuYXBwZW5kKCdkaXYnKVxyXG4gIC5hdHRyKCdjbGFzcycsICdsZWZ0LWF4aXMtY29udGFpbmVyJylcclxuICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJylcclxuICAuc3R5bGUoJ2xlZnQnLCAnMCcpXHJcbiAgLnN0eWxlKCd0b3AnLCAnMCcpXHJcbiAgLnN0eWxlKCd3aWR0aCcsICc4MHB4JylcclxuICAuc3R5bGUoJ2hlaWdodCcsIGAke2RpbWVuc2lvbnMuaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b219cHhgKVxyXG4gIC5zdHlsZSgnYmFja2dyb3VuZC1jb2xvcicsICd2YXIoLS1jYXJkLWJnKScpXHJcbiAgLnN0eWxlKCd6LWluZGV4JywgJzEwJyk7XHJcblxyXG5jb25zdCBzdmdZQXhpc0xlZnQgPSBsZWZ0QXhpc0NvbnRhaW5lclxyXG4gIC5hcHBlbmQoJ3N2ZycpXHJcbiAgLmF0dHIoJ3dpZHRoJywgJzgwJylcclxuICAuYXR0cignaGVpZ2h0JywgZGltZW5zaW9ucy5oZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSlcclxuICAuYXBwZW5kKCdnJylcclxuICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSg3MCwke21hcmdpbi50b3B9KWApO1xyXG5cclxuICAvLyBSaWdodCBZLWF4aXMgLSBGaXhlZFxyXG4gIGNvbnN0IHJpZ2h0QXhpc0NvbnRhaW5lciA9IGNoYXJ0V3JhcHBlclxyXG4gICAgLmFwcGVuZCgnZGl2JylcclxuICAgIC5hdHRyKCdjbGFzcycsICdyaWdodC1heGlzLWNvbnRhaW5lcicpXHJcbiAgICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJylcclxuICAgIC5zdHlsZSgncmlnaHQnLCAnMCcpXHJcbiAgICAuc3R5bGUoJ3RvcCcsICcwJylcclxuICAgIC5zdHlsZSgnd2lkdGgnLCBgJHt0aGlzLkNPTlNUQU5UUy5SSUdIVF9TVkdfV0lEVEh9cHhgKVxyXG4gICAgLnN0eWxlKCdoZWlnaHQnLCBgJHtkaW1lbnNpb25zLmhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tfXB4YCkgIC8vIEV4Y2x1ZGUgWC1sYWJlbCBzcGFjZVxyXG4gICAgLnN0eWxlKCdiYWNrZ3JvdW5kLWNvbG9yJywgJ3ZhcigtLWNhcmQtYmcpJylcclxuICAgIC5zdHlsZSgnei1pbmRleCcsICcxMCcpO1xyXG5cclxuICBjb25zdCBzdmdZQXhpc1JpZ2h0ID0gcmlnaHRBeGlzQ29udGFpbmVyXHJcbiAgICAuYXBwZW5kKCdzdmcnKVxyXG4gICAgLmF0dHIoJ3dpZHRoJywgdGhpcy5DT05TVEFOVFMuUklHSFRfU1ZHX1dJRFRIKVxyXG4gICAgLmF0dHIoJ2hlaWdodCcsIGRpbWVuc2lvbnMuaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20pXHJcbiAgICAuYXBwZW5kKCdnJylcclxuICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHttYXJnaW4udG9wfSlgKTtcclxuXHJcbiAgLy8gU2Nyb2xsYWJsZSBtaWRkbGUgYXJlYVxyXG5jb25zdCBzY3JvbGxhYmxlQ29udGFpbmVyID0gY2hhcnRXcmFwcGVyXHJcbiAgLmFwcGVuZCgnZGl2JylcclxuICAuYXR0cignY2xhc3MnLCAnc2Nyb2xsYWJsZS1jaGFydC1jb250YWluZXInKVxyXG4gIC5zdHlsZSgncG9zaXRpb24nLCAnYWJzb2x1dGUnKVxyXG4gIC5zdHlsZSgnbGVmdCcsICc4MHB4JykgIC8vIEV4YWN0bHkgd2hlcmUgbGVmdCBjb250YWluZXIgZW5kc1xyXG4gIC5zdHlsZSgncmlnaHQnLCBgJHt0aGlzLkNPTlNUQU5UUy5SSUdIVF9TVkdfV0lEVEh9cHhgKVxyXG4gIC5zdHlsZSgndG9wJywgJzAnKVxyXG4gIC5zdHlsZSgnd2lkdGgnLCAnYXV0bycpXHJcbiAgLnN0eWxlKCdoZWlnaHQnLCBgJHtkaW1lbnNpb25zLmhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tfXB4YClcclxuICAuc3R5bGUoJ292ZXJmbG93LXgnLCAnYXV0bycpXHJcbiAgLnN0eWxlKCdvdmVyZmxvdy15JywgJ2hpZGRlbicpO1xyXG5cclxuXHJcbmNvbnN0IGlubmVyQ29udGFpbmVyID0gc2Nyb2xsYWJsZUNvbnRhaW5lclxyXG4gIC5hcHBlbmQoJ2RpdicpXHJcbiAgLmF0dHIoJ2NsYXNzJywgJ2lubmVyLWNoYXJ0LWNvbnRhaW5lcicpXHJcbiAgLnN0eWxlKCdtaW4td2lkdGgnLCAnMTAwJScpO1xyXG5cclxuY29uc3Qgc3ZnID0gaW5uZXJDb250YWluZXJcclxuICAuYXBwZW5kKCdzdmcnKVxyXG4gIC5hdHRyKCd3aWR0aCcsIGRpbWVuc2lvbnMucmVxdWlyZWRTdmdXaWR0aClcclxuICAuYXR0cignaGVpZ2h0JywgZGltZW5zaW9ucy5oZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSArIDMwKVxyXG4gIC5hcHBlbmQoJ2cnKVxyXG4gIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHttYXJnaW4udG9wfSlgKTtcclxuXHJcbiAgLy8gRml4ZWQgYm90dG9tIGNvbnRhaW5lciBmb3IgWC1heGlzIGxhYmVsXHJcbiAgY29uc3QgYm90dG9tTGFiZWxDb250YWluZXIgPSBjaGFydFdyYXBwZXJcclxuICAgIC5hcHBlbmQoJ2RpdicpXHJcbiAgICAuYXR0cignY2xhc3MnLCAnYm90dG9tLWxhYmVsLWNvbnRhaW5lcicpXHJcbiAgICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJylcclxuICAgIC5zdHlsZSgnbGVmdCcsICc4MHB4JylcclxuICAgIC5zdHlsZSgncmlnaHQnLCBgJHt0aGlzLkNPTlNUQU5UUy5SSUdIVF9TVkdfV0lEVEh9cHhgKVxyXG4gICAgLnN0eWxlKCdib3R0b20nLCAnMCcpXHJcbiAgICAuc3R5bGUoJ2hlaWdodCcsIGAke3hMYWJlbFNwYWNlfXB4YClcclxuICAgIC5zdHlsZSgnZGlzcGxheScsICdmbGV4JylcclxuICAgIC5zdHlsZSgnanVzdGlmeS1jb250ZW50JywgJ2NlbnRlcicpXHJcbiAgICAuc3R5bGUoJ2FsaWduLWl0ZW1zJywgJ2NlbnRlcicpXHJcbiAgICAuc3R5bGUoJ2JhY2tncm91bmQtY29sb3InLCAndmFyKC0tY2FyZC1iZyknKVxyXG4gICAgLnN0eWxlKCd6LWluZGV4JywgJzEwJyk7XHJcblxyXG4gIHJldHVybiB7IHN2Zywgc3ZnWUF4aXNMZWZ0LCBzdmdZQXhpc1JpZ2h0LCBpbm5lckNvbnRhaW5lciwgYm90dG9tTGFiZWxDb250YWluZXIgfTtcclxufVxyXG5cclxucHJpdmF0ZSBjcmVhdGVTY2FsZXMoXHJcbiAgZGF0YTogYW55W10sXHJcbiAgbGF5ZXJzOiBhbnlbXSxcclxuICBsaW5lRGF0YTogYW55W10sXHJcbiAgZGltZW5zaW9uczogRGltZW5zaW9uc1xyXG4pIHtcclxuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGJhcldpZHRoLCBiYXJQYWRkaW5nIH0gPSBkaW1lbnNpb25zO1xyXG4gIFxyXG4gIC8vIENhbGN1bGF0ZSBiYXIgcG9zaXRpb25pbmdcclxuICBjb25zdCB0b3RhbEJhcnNXaWR0aCA9IGRhdGEubGVuZ3RoICogYmFyV2lkdGg7XHJcbiAgY29uc3QgdG90YWxTcGFjaW5nID0gKGRhdGEubGVuZ3RoIC0gMSkgKiBiYXJQYWRkaW5nO1xyXG4gIGNvbnN0IHJlcXVpcmVkV2lkdGggPSB0b3RhbEJhcnNXaWR0aCArIHRvdGFsU3BhY2luZyArICh0aGlzLkNPTlNUQU5UUy5MRUZUX1JJR0hUX1NQQUNFUyAqIDIpO1xyXG4gIGNvbnN0IGVmZmVjdGl2ZVdpZHRoID0gTWF0aC5tYXgod2lkdGgsIHJlcXVpcmVkV2lkdGgpO1xyXG4gIFxyXG4gIGNvbnN0IHBhZGRpbmdSYXRpbyA9IGJhclBhZGRpbmcgLyAoYmFyV2lkdGggKyBiYXJQYWRkaW5nKTtcclxuICBcclxuICAvLyBYLXNjYWxlIHN0YXJ0cyBmcm9tIDAgKG5vIGxlZnQgc3BhY2luZyBmb3IgZ3JpZCBhbGlnbm1lbnQpXHJcbmNvbnN0IHhTY2FsZSA9IGQzXHJcbiAgLnNjYWxlQmFuZCgpXHJcbiAgLnJhbmdlUm91bmQoWzAsIGRpbWVuc2lvbnMucmVxdWlyZWRTdmdXaWR0aF0pXHJcbiAgLmRvbWFpbihkYXRhLm1hcChkID0+IGQubmFtZSkucmV2ZXJzZSgpKVxyXG4gIC5wYWRkaW5nSW5uZXIocGFkZGluZ1JhdGlvKVxyXG4gIC5wYWRkaW5nT3V0ZXIoMC4xKSAgLy8gU21hbGwgcGFkZGluZyBmb3IgdmlzdWFsIHNwYWNpbmdcclxuICAuYWxpZ24oMC41KTtcclxuXHJcbiAgY29uc3QgeFNjYWxlRnJvbU9yaWdpbiA9IGQzXHJcbiAgICAuc2NhbGVCYW5kKClcclxuICAgIC5yYW5nZVJvdW5kKFt3aWR0aCwgMF0pXHJcbiAgICAuZG9tYWluKGRhdGEubWFwKGQgPT4gZC5uYW1lKS5yZXZlcnNlKCkpO1xyXG5cclxuICBjb25zdCB5U2NhbGUgPSBkMy5zY2FsZUxpbmVhcigpLnJhbmdlUm91bmQoW2hlaWdodCwgMF0pO1xyXG4gIFxyXG4gIGxldCBtYXhWYWx1ZSA9IGQzLm1heChsYXllcnMsIChkOiBhbnkpID0+IGQzLm1heChkLCAoZDogYW55KSA9PiBkWzFdKSk7XHJcbiAgXHJcbiAgaWYgKG1heFZhbHVlID09PSAwKSB7XHJcbiAgICBtYXhWYWx1ZSA9IHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhIFxyXG4gICAgICA/IE51bWJlcih0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpICsgMjAgXHJcbiAgICAgIDogMTAwO1xyXG4gIH1cclxuXHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1c3RvbVlzY2FsZSkge1xyXG4gICAgbWF4VmFsdWUgKj0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VzdG9tWXNjYWxlO1xyXG4gIH1cclxuXHJcbiAgaWYgKHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhICYmIG1heFZhbHVlIDwgTnVtYmVyKHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCkpIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IE51bWJlcih0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpO1xyXG4gICAgbWF4VmFsdWUgPSBtYXhWYWx1ZSA8IDEwICYmIHRhcmdldCA8IDEwID8gdGFyZ2V0ICsgMyA6IHRhcmdldCArIDIwO1xyXG4gIH1cclxuXHJcbiAgeVNjYWxlLmRvbWFpbihbMCwgbWF4VmFsdWVdKS5uaWNlKCk7XHJcblxyXG4gIGxldCBsaW5lWXNjYWxlID0gbnVsbDtcclxuICBpZiAobGluZURhdGEpIHtcclxuICAgIGxpbmVZc2NhbGUgPSBkM1xyXG4gICAgICAuc2NhbGVMaW5lYXIoKVxyXG4gICAgICAuZG9tYWluKFswLCBkMy5tYXgobGluZURhdGEsIGQgPT4gK2QudmFsdWUpXSlcclxuICAgICAgLnJhbmdlKFtoZWlnaHQsIDBdKTtcclxuICB9XHJcblxyXG4gIHJldHVybiB7IHhTY2FsZSwgeFNjYWxlRnJvbU9yaWdpbiwgeVNjYWxlLCBsaW5lWXNjYWxlIH07XHJcbn1cclxuXHJcblxyXG4gIHByaXZhdGUgY3JlYXRlQXhlcyhzY2FsZXM6IGFueSkge1xyXG4gICAgY29uc3QgeEF4aXMgPSBkM1xyXG4gICAgICAuYXhpc0JvdHRvbShzY2FsZXMueFNjYWxlKVxyXG4gICAgICAudGlja1NpemUoMClcclxuICAgICAgLnRpY2tGb3JtYXQodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueEF4aXNMYWJlbEZvbWF0dGVyKTtcclxuXHJcbiAgICBjb25zdCB5QXhpcyA9IGQzXHJcbiAgICAgIC5heGlzTGVmdChzY2FsZXMueVNjYWxlKVxyXG4gICAgICAudGlja3ModGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAgIC50aWNrU2l6ZSgwKVxyXG4gICAgICAudGlja0Zvcm1hdCh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0xhYmVsRm9tYXR0ZXIpO1xyXG5cclxuICAgIGxldCB5TGluZUF4aXMgPSBudWxsO1xyXG4gICAgaWYgKHNjYWxlcy5saW5lWXNjYWxlKSB7XHJcbiAgICAgIHlMaW5lQXhpcyA9IGQzXHJcbiAgICAgICAgLmF4aXNSaWdodChzY2FsZXMubGluZVlzY2FsZSlcclxuICAgICAgICAudGlja3ModGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAgICAgLnRpY2tTaXplKDApXHJcbiAgICAgICAgLnRpY2tGb3JtYXQodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUxpbmVBeGlzTGFiZWxGb21hdHRlcik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHsgeEF4aXMsIHlBeGlzLCB5TGluZUF4aXMgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyQmFycyhcclxuICAgIHN2ZzogYW55LFxyXG4gICAgbGF5ZXJzOiBhbnlbXSxcclxuICAgIHNjYWxlczogYW55LFxyXG4gICAgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEsXHJcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zXHJcbiAgKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHN2Z1xyXG4gICAgICAuc2VsZWN0QWxsKCcubGF5ZXInKVxyXG4gICAgICAuZGF0YShsYXllcnMpXHJcbiAgICAgIC5lbnRlcigpXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGF5ZXInKVxyXG4gICAgICAuc3R5bGUoJ2ZpbGwnLCAoZDogYW55KSA9PiBtZXRhRGF0YS5jb2xvcnNbZC5rZXldKTtcclxuXHJcbiAgICBjb25zdCByZWN0ID0gbGF5ZXJcclxuICAgICAgLnNlbGVjdEFsbCgncmVjdCcpXHJcbiAgICAgIC5kYXRhKChkOiBhbnkpID0+IGQpXHJcbiAgICAgIC5lbnRlcigpO1xyXG5cclxuICAgIHRoaXMuYXBwZW5kUmVjdGFuZ2xlcyhyZWN0LCBzY2FsZXMsIG1ldGFEYXRhLCBkaW1lbnNpb25zKTtcclxuICAgIHRoaXMuYWRkSW50ZXJhY3Rpb25zKHJlY3QsIHN2ZywgbWV0YURhdGEsIHNjYWxlcyk7XHJcbiAgICBcclxuICAgIHJldHVybiByZWN0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBlbmRSZWN0YW5nbGVzKFxyXG4gIHJlY3Q6IGFueSxcclxuICBzY2FsZXM6IGFueSxcclxuICBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSxcclxuICBkaW1lbnNpb25zOiBEaW1lbnNpb25zXHJcbikge1xyXG4gIGNvbnN0IHsgYmFyV2lkdGgsIGJhclBhZGRpbmcgfSA9IGRpbWVuc2lvbnM7XHJcbiAgY29uc3QgeyB4U2NhbGUsIHlTY2FsZSB9ID0gc2NhbGVzO1xyXG5cclxuICByZWN0XHJcbiAgICAuYXBwZW5kKCdyZWN0JylcclxuICAgIC5vbignY2xpY2snLCAoZDogYW55KSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5jaGFydERhdGEubGluZURhdGEgfHwgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uZm9yQ29tcGFyaXNvbikge1xyXG4gICAgICAgIGlmICghbWV0YURhdGEuYmFyV2l0aG91dENsaWNrPy5pbmNsdWRlcyhkLmRhdGEubmFtZS50b0xvd2VyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVDbGljayhkLmRhdGEubmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgLmF0dHIoJ3knLCAoZDogYW55KSA9PiB7XHJcbiAgICAgIGlmICghaXNOYU4oZFswXSkgJiYgIWlzTmFOKGRbMV0pKSB7XHJcbiAgICAgICAgY29uc3QgYWN0dWFsSGVpZ2h0ID0geVNjYWxlKGRbMF0pIC0geVNjYWxlKGRbMV0pO1xyXG4gICAgICAgIHJldHVybiBhY3R1YWxIZWlnaHQgPCAzID8geVNjYWxlKGRbMF0pIC0gMyA6IHlTY2FsZShkWzFdKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH0pXHJcbiAgICAuYXR0cigneCcsIChkOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgeFBvc2l0aW9uID0geFNjYWxlKGQuZGF0YS5uYW1lKTtcclxuICAgICAgY29uc3QgYmFuZHdpZHRoID0geFNjYWxlLmJhbmR3aWR0aCgpO1xyXG4gICAgICBcclxuICAgICAgaWYgKCF0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSkge1xyXG4gICAgICAgIHJldHVybiB4UG9zaXRpb24gKyAoYmFuZHdpZHRoIC0gYmFyV2lkdGgpIC8gMjtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCAmJiB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA8PSAzKSB7XHJcbiAgICAgICAgcmV0dXJuIHhQb3NpdGlvbiArIGJhbmR3aWR0aCAvIDIgLSAzNTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBjYWxjdWxhdGVkV2lkdGggPSBiYW5kd2lkdGggKiAwLjg7XHJcbiAgICAgIHJldHVybiB4UG9zaXRpb24gKyAoYmFuZHdpZHRoIC0gY2FsY3VsYXRlZFdpZHRoKSAvIDI7XHJcbiAgICB9KVxyXG4gICAgLmF0dHIoJ2hlaWdodCcsIChkOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCFpc05hTihkWzBdKSAmJiAhaXNOYU4oZFsxXSkpIHtcclxuICAgICAgICBjb25zdCBhY3R1YWxIZWlnaHQgPSB5U2NhbGUoZFswXSkgLSB5U2NhbGUoZFsxXSk7XHJcbiAgICAgICAgcmV0dXJuIGFjdHVhbEhlaWdodCA8IDMgPyAzIDogYWN0dWFsSGVpZ2h0O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfSlcclxuICAgIC5hdHRyKCd3aWR0aCcsIChkOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSkgcmV0dXJuIGJhcldpZHRoO1xyXG4gICAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCAmJiB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA8PSAzKSB7XHJcbiAgICAgICAgcmV0dXJuIDcwO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB4U2NhbGUuYmFuZHdpZHRoKCkgKiAwLjg7XHJcbiAgICB9KVxyXG4gICAgLnN0eWxlKCdjdXJzb3InLCAoZDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChtZXRhRGF0YS5oYXNEcmlsbERvd24pIHtcclxuICAgICAgICBpZiAobWV0YURhdGEuYmFyV2l0aG91dENsaWNrPy5pbmNsdWRlcyhkLmRhdGEubmFtZS50b0xvd2VyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgcmV0dXJuICdkZWZhdWx0JztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICdwb2ludGVyJztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gJ2RlZmF1bHQnO1xyXG4gICAgfSlcclxuICAgIC5zdHlsZSgnZmlsbCcsIChkOiBhbnkpID0+IHRoaXMuZ2V0QmFyQ29sb3IoZCwgbWV0YURhdGEpKTtcclxufVxyXG5cclxuICBwcml2YXRlIGdldEJhckNvbG9yKGQ6IGFueSwgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEpOiBzdHJpbmcge1xyXG4gICAgaWYgKFxyXG4gICAgICAhaXNOYU4oZFswXSkgJiZcclxuICAgICAgIWlzTmFOKGRbMV0pICYmXHJcbiAgICAgIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhICYmXHJcbiAgICAgIHBhcnNlRmxvYXQoZFsxXSkgLSBwYXJzZUZsb2F0KGRbMF0pID49IHBhcnNlRmxvYXQoU3RyaW5nKHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCkpXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLmJhckFib3ZlVGFyZ2V0Q29sb3IgfHwgbWV0YURhdGEuY29sb3JzW2Qua2V5XTtcclxuICAgIH1cclxuICAgIHJldHVybiBtZXRhRGF0YS5jb2xvcnNbZC5rZXldO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRJbnRlcmFjdGlvbnMocmVjdDogYW55LCBzdmc6IGFueSwgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEsIHNjYWxlczogYW55KSB7XHJcbiAgICByZWN0XHJcbiAgICAgIC5zZWxlY3RBbGwoJ3JlY3QnKVxyXG4gICAgICAub24oJ21vdXNlZW50ZXInLCAoZDogYW55KSA9PiB0aGlzLmhhbmRsZU1vdXNlT3ZlcihkLCBzdmcsIG1ldGFEYXRhLCBzY2FsZXMpKVxyXG4gICAgICAub24oJ21vdXNlb3V0JywgKGQ6IGFueSkgPT4gdGhpcy5oYW5kbGVNb3VzZU91dChzdmcsIG1ldGFEYXRhKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZU1vdXNlT3ZlcihkOiBhbnksIHN2ZzogYW55LCBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSwgc2NhbGVzOiBhbnkpIHtcclxuICAgIGlmICghdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uZGlzcGxheVRpdGxlT25Ub3ApIHJldHVybjtcclxuXHJcbiAgICBzdmcuc2VsZWN0QWxsKCdyZWN0JylcclxuICAgICAgLmZpbHRlcigoZGF0YTogYW55KSA9PiBkYXRhID09PSBkKVxyXG4gICAgICAuc3R5bGUoJ2ZpbGwnLCAoZDogYW55KSA9PiB0aGlzLmdldEhvdmVyQ29sb3IoZCwgbWV0YURhdGEpKTtcclxuXHJcbiAgICB0aGlzLmRpc3BsYXlUb29sdGlwKGQsIHN2ZywgbWV0YURhdGEsIHNjYWxlcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEhvdmVyQ29sb3IoZDogYW55LCBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSk6IHN0cmluZyB7XHJcbiAgICBpZiAoXHJcbiAgICAgICFpc05hTihkWzBdKSAmJlxyXG4gICAgICAhaXNOYU4oZFsxXSkgJiZcclxuICAgICAgdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEgJiZcclxuICAgICAgcGFyc2VGbG9hdChkWzFdKSAtIHBhcnNlRmxvYXQoZFswXSkgPj0gcGFyc2VGbG9hdChTdHJpbmcodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0KSlcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEuYmFyQWJvdmVUYXJnZXRIb3ZlckNvbG9yIHx8XHJcbiAgICAgICAgICAgICB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS5iYXJBYm92ZVRhcmdldENvbG9yIHx8XHJcbiAgICAgICAgICAgICBtZXRhRGF0YS5jb2xvcnNbZC5rZXldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1ldGFEYXRhLmhvdmVyQ29sb3IgfHwgbWV0YURhdGEuY29sb3JzW2Qua2V5XTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGlzcGxheVRvb2x0aXAoZDogYW55LCBzdmc6IGFueSwgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEsIHNjYWxlczogYW55KSB7XHJcbiAgICBjb25zdCB7IHhTY2FsZSwgeVNjYWxlIH0gPSBzY2FsZXM7XHJcbiAgICBjb25zdCB2YWx1ZSA9IGRbMV0gLSBkWzBdO1xyXG4gICAgXHJcbiAgICBpZiAoaXNOYU4odmFsdWUpKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgYmFuZHdpZHRoID0geFNjYWxlLmJhbmR3aWR0aCgpO1xyXG4gICAgXHJcbiAgICAvLyBGaXhlZCB0b29sdGlwIHdpZHRoIGZvciBhbGwgcmVzb2x1dGlvbnNcclxuICAgIGNvbnN0IHdpZHRoID0gL3dlZWsvaS50ZXN0KGQuZGF0YS5uYW1lKSAmJiAvXFxkezR9LVxcZHsyfS1cXGR7Mn0vLnRlc3QoZC5kYXRhLm5hbWUpXHJcbiAgICAgID8gJzI1MHB4J1xyXG4gICAgICA6IGJhbmR3aWR0aCArIHRoaXMuQ09OU1RBTlRTLkxFRlRfUklHSFRfU1BBQ0VTICogMiA+IDE4MFxyXG4gICAgICAgID8gJzE4MHB4J1xyXG4gICAgICAgIDogYmFuZHdpZHRoICsgdGhpcy5DT05TVEFOVFMuTEVGVF9SSUdIVF9TUEFDRVMgKiAyO1xyXG5cclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdmb3JlaWduT2JqZWN0JylcclxuICAgICAgLmF0dHIoJ3gnLCB0aGlzLmNhbGN1bGF0ZVRvb2x0aXBYKGQsIHhTY2FsZSwgd2lkdGgpKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXZlcnRpY2Fsc3RhY2stdGl0bGUtb250b3AnKVxyXG4gICAgICAuYXR0cigneScsIHlTY2FsZShkWzFdKSAtIDUxKVxyXG4gICAgICAuYXR0cignd2lkdGgnLCB3aWR0aClcclxuICAgICAgLmF0dHIoJ2hlaWdodCcsIDQwKVxyXG4gICAgICAuYXBwZW5kKCd4aHRtbDpkaXYnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAndGl0bGUnKVxyXG4gICAgICAuc3R5bGUoJ3otaW5kZXgnLCA5OSlcclxuICAgICAgLmh0bWwodGhpcy5nZW5lcmF0ZVRvb2x0aXBIdG1sKGQsIG1ldGFEYXRhLCB2YWx1ZSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxjdWxhdGVUb29sdGlwWChkOiBhbnksIHhTY2FsZTogYW55LCB3aWR0aDogc3RyaW5nIHwgbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGJhbmR3aWR0aCA9IHhTY2FsZS5iYW5kd2lkdGgoKTtcclxuICAgIGNvbnN0IG51bWVyaWNXaWR0aCA9IHR5cGVvZiB3aWR0aCA9PT0gJ3N0cmluZycgPyBwYXJzZUludCh3aWR0aCkgOiB3aWR0aDtcclxuICAgIFxyXG4gICAgaWYgKGJhbmR3aWR0aCArIHRoaXMuQ09OU1RBTlRTLkxFRlRfUklHSFRfU1BBQ0VTICogMiA+IDE4MCkge1xyXG4gICAgICByZXR1cm4geFNjYWxlKGQuZGF0YS5uYW1lKSAtIHRoaXMuQ09OU1RBTlRTLkxFRlRfUklHSFRfU1BBQ0VTICtcclxuICAgICAgICAgICAgIChiYW5kd2lkdGggKyB0aGlzLkNPTlNUQU5UUy5MRUZUX1JJR0hUX1NQQUNFUyAqIDIgLSAxODApIC8gMjtcclxuICAgIH1cclxuICAgIHJldHVybiB4U2NhbGUoZC5kYXRhLm5hbWUpIC0gdGhpcy5DT05TVEFOVFMuTEVGVF9SSUdIVF9TUEFDRVM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlVG9vbHRpcEh0bWwoZDogYW55LCBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSwgdmFsdWU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBpZiAodmFsdWUgPT09IDApIHJldHVybiAnPHNwYW4gY2xhc3M9XCJ0aXRsZS10b3AtdGV4dFwiPjA8L3NwYW4+JztcclxuXHJcbiAgICBjb25zdCBkYXRhVHlwZSA9IG1ldGFEYXRhLmRhdGFUeXBlIHx8ICcnO1xyXG4gICAgY29uc3QgbmFtZSA9IGQuZGF0YS5uYW1lID8gYDxzcGFuIGNsYXNzPVwidGl0bGUtYmFyLW5hbWVcIj4ke2QuZGF0YS5uYW1lfTwvc3Bhbj5gIDogJyc7XHJcbiAgICBjb25zdCB2YWx1ZVRleHQgPSBtZXRhRGF0YS51bml0XHJcbiAgICAgID8gYCR7bWV0YURhdGEudW5pdH0ke3ZhbHVlfSAke2RhdGFUeXBlfWBcclxuICAgICAgOiBgJHt2YWx1ZX0gJHtkYXRhVHlwZX1gO1xyXG5cclxuICAgIHJldHVybiBgJHtuYW1lfTxzcGFuIGNsYXNzPVwidGl0bGUtdG9wLXRleHRcIj4ke3ZhbHVlVGV4dH08L3NwYW4+YDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlTW91c2VPdXQoc3ZnOiBhbnksIG1ldGFEYXRhOiBDaGFydE1ldGFEYXRhKSB7XHJcbiAgICBpZiAoIXRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmRpc3BsYXlUaXRsZU9uVG9wKSByZXR1cm47XHJcblxyXG4gICAgc3ZnLnNlbGVjdEFsbCgncmVjdCcpXHJcbiAgICAgIC5zdHlsZSgnZmlsbCcsIChkOiBhbnkpID0+IHRoaXMuZ2V0QmFyQ29sb3IoZCwgbWV0YURhdGEpKTtcclxuICAgIHN2Zy5zZWxlY3RBbGwoJy5saWItdmVydGljYWxzdGFjay10aXRsZS1vbnRvcCcpLnJlbW92ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJBeGlzTGFiZWxzKFxyXG4gICAgc3ZnOiBhbnksXHJcbiAgICBzdmdZQXhpc0xlZnQ6IGFueSxcclxuICAgIGJvdHRvbUxhYmVsQ29udGFpbmVyOiBhbnksXHJcbiAgICBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSxcclxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXHJcbiAgICBtYXJnaW46IGFueVxyXG4gICkge1xyXG4gICAgaWYgKG1ldGFEYXRhLnlMYWJlbCkge1xyXG4gICAgICB0aGlzLmFkZFlBeGlzTGFiZWwoc3ZnWUF4aXNMZWZ0LCBtZXRhRGF0YS55TGFiZWwsIGRpbWVuc2lvbnMuaGVpZ2h0LCBtYXJnaW4pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChtZXRhRGF0YS54TGFiZWwpIHtcclxuICAgICAgdGhpcy5hZGRYQXhpc0xhYmVsKGJvdHRvbUxhYmVsQ29udGFpbmVyLCBtZXRhRGF0YS54TGFiZWwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRZQXhpc0xhYmVsKHN2Z1lBeGlzTGVmdDogYW55LCBsYWJlbDogc3RyaW5nLCBoZWlnaHQ6IG51bWJlciwgbWFyZ2luOiBhbnkpIHtcclxuICAgIGNvbnN0IGlzcmlhID0gdGhpcy5jdXN0b21DaGFydENvbmZpZ3VyYXRpb24/LmlzUmlhO1xyXG4gICAgY29uc3QgaXNBY3JvbnltID0gdGhpcy5pc0Fjcm9ueW1MYWJlbChsYWJlbCk7XHJcbiAgICBjb25zdCB5UG9zaXRpb24gPSBpc3JpYSA/IC1tYXJnaW4ubGVmdCAvIDIgLSAzMCA6IC1tYXJnaW4ubGVmdCAvIDIgLSA0MDtcclxuXHJcbiAgICBzdmdZQXhpc0xlZnQuc2VsZWN0QWxsKCcubGliLWF4aXMtZ3JvdXAtbGFiZWwsIC5saWIteWxhYmVsLWRyaWxsZG93bmNoYXJ0cywgLmxpYi15bGFiZWwtd2Vla2x5Q2hhcnRzJykucmVtb3ZlKCk7XHJcblxyXG4gICAgc3ZnWUF4aXNMZWZ0XHJcbiAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCB0aGlzLmdldFlBeGlzTGFiZWxDbGFzcygpKVxyXG4gICAgICAuYXR0cignc3R5bGUnLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbWxhYmVsU3R5bGVzKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3JvdGF0ZSgtOTApJylcclxuICAgICAgLmF0dHIoJ3knLCB5UG9zaXRpb24pXHJcbiAgICAgIC5hdHRyKCd4JywgLWhlaWdodCAvIDIpXHJcbiAgICAgIC5hdHRyKCdkeScsICcxZW0nKVxyXG4gICAgICAuc3R5bGUoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXHJcbiAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgIC50ZXh0KGlzQWNyb255bSA/IGxhYmVsLnRvVXBwZXJDYXNlKCkgOiBsYWJlbC50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAuc3R5bGUoJ3RleHQtdHJhbnNmb3JtJywgaXNBY3JvbnltID8gJ25vbmUnIDogJ2NhcGl0YWxpemUnKTtcclxuICB9XHJcblxyXG5wcml2YXRlIGFkZFhBeGlzTGFiZWwoYm90dG9tTGFiZWxDb250YWluZXI6IGFueSwgbGFiZWw6IHN0cmluZykge1xyXG4gIGNvbnN0IGlzQWNyb255bSA9IHRoaXMuaXNBY3JvbnltTGFiZWwobGFiZWwpO1xyXG5cclxuICBib3R0b21MYWJlbENvbnRhaW5lclxyXG4gICAgLmFwcGVuZCgnZGl2JylcclxuICAgIC5zdHlsZSgnd2lkdGgnLCAnMTAwJScpXHJcbiAgICAuc3R5bGUoJ3RleHQtYWxpZ24nLCAnY2VudGVyJylcclxuICAgIC5zdHlsZSgnZm9udC1zaXplJywgJzEycHgnKVxyXG4gICAgLnN0eWxlKCdmb250LXdlaWdodCcsICc2MDAnKVxyXG4gICAgLnN0eWxlKCdmb250LWZhbWlseScsICdzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgXCJTZWdvZSBVSVwiLCBSb2JvdG8nKVxyXG4gICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAuc3R5bGUoJ3RleHQtdHJhbnNmb3JtJywgaXNBY3JvbnltID8gJ25vbmUnIDogJ2NhcGl0YWxpemUnKVxyXG4gICAgLnRleHQoaXNBY3JvbnltID8gbGFiZWwudG9VcHBlckNhc2UoKSA6IGxhYmVsLnRvTG93ZXJDYXNlKCkpO1xyXG59XHJcblxyXG4gIHByaXZhdGUgaXNBY3JvbnltTGFiZWwobGFiZWw6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgY2xlYW5MYWJlbCA9IGxhYmVsLnJlcGxhY2UoL1teQS1aYS16XS9nLCAnJyk7XHJcbiAgICByZXR1cm4gKGxhYmVsLmxlbmd0aCA8PSA0ICYmIC9eW0EtWl0rJC8udGVzdChsYWJlbCkpIHx8XHJcbiAgICAgICAgICAgKGxhYmVsID09PSBsYWJlbC50b1VwcGVyQ2FzZSgpICYmIC9bQS1aXS8udGVzdChsYWJlbCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRZQXhpc0xhYmVsQ2xhc3MoKTogc3RyaW5nIHtcclxuICAgIGxldCBiYXNlQ2xhc3MgPSAnbGliLWF4aXMtZ3JvdXAtbGFiZWwgZm9udC1zaXplLTEnO1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgICAgcmV0dXJuIGAke2Jhc2VDbGFzc30gbGliLXlsYWJlbC1kcmlsbGRvd25jaGFydHNgO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIGAke2Jhc2VDbGFzc30gbGliLXlsYWJlbC13ZWVrbHlDaGFydHNgO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGAke2Jhc2VDbGFzc30gbGliLWF4aXMtd2F0ZXJmYWxsLWxhYmVsYDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0WEF4aXNMYWJlbENsYXNzKCk6IHN0cmluZyB7XHJcbiAgICBsZXQgYmFzZUNsYXNzID0gJ2xpYi1heGlzLWdyb3VwLWxhYmVsIGZvbnQtc2l6ZS0xJztcclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICAgIHJldHVybiBgJHtiYXNlQ2xhc3N9IGxpYi14bGFiZWwtZHJpbGxkb3duY2hhcnRzYDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiBgJHtiYXNlQ2xhc3N9IGxpYi14bGFiZWwtd2Vla2x5Q2hhcnRzYDtcclxuICAgIH1cclxuICAgIHJldHVybiBgJHtiYXNlQ2xhc3N9IGxpYi1heGlzLXdhdGVyZmFsbC1sYWJlbGA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckdyaWRzRnJvbUxlZnRBeGlzKFxyXG4gICAgc3ZnTWFpbjogYW55LFxyXG4gICAgc3ZnWUF4aXNMZWZ0OiBhbnksXHJcbiAgICBzY2FsZXM6IGFueSxcclxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnNcclxuICApIHtcclxuICAgIGlmICghdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNHcmlkKSByZXR1cm47XHJcblxyXG4gICAgLy8gV2Ugd2FudCBob3Jpem9udGFsIGdyaWQgbGluZXMgdG8gc3BhbiB0aGUgZnVsbCB2aXNpYmxlIHdpZHRoOlxyXG4gICAgLy8gdGhlIGlubmVyIFNWRyAocmVxdWlyZWRTdmdXaWR0aCkgcGx1cyB0aGUgcmlnaHQgYXhpcyB3aWR0aC5cclxuICAgIGNvbnN0IGdyaWRTcGFuID0gZGltZW5zaW9ucy5yZXF1aXJlZFN2Z1dpZHRoICsgdGhpcy5DT05TVEFOVFMuUklHSFRfU1ZHX1dJRFRIO1xyXG4gICAgLy8gQXBwZW5kIHRoZSBncmlkIHRvIHRoZSBtYWluIChpbm5lcikgU1ZHIHNvIGxpbmVzIGFyZSByZW5kZXJlZCBhY3Jvc3MgdGhlIHNjcm9sbGFibGUgYXJlYS5cclxuICAgIHN2Z01haW5cclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdncmlkIGhvcml6b250YWwtZ3JpZC1mcm9tLWxlZnQnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgICAgLmNhbGwoXHJcbiAgICAgICAgZDNcclxuICAgICAgICAgIC5heGlzTGVmdChzY2FsZXMueVNjYWxlKVxyXG4gICAgICAgICAgLnRpY2tzKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzKVxyXG4gICAgICAgICAgLnRpY2tTaXplKC1ncmlkU3BhbilcclxuICAgICAgICAgIC50aWNrRm9ybWF0KCcnKVxyXG4gICAgICApXHJcbiAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtZ3JpZC1jb2xvciknKVxyXG4gICAgICAuc3R5bGUoJ29wYWNpdHknLCAnMScpXHJcbiAgICAgIC5jYWxsKChnOiBhbnkpID0+IHtcclxuICAgICAgICBnLnNlbGVjdCgnLmRvbWFpbicpLnJlbW92ZSgpO1xyXG4gICAgICAgIGcuc2VsZWN0QWxsKCcudGljayBsaW5lJylcclxuICAgICAgICAgIC5zdHlsZSgnc3Ryb2tlJywgJ3ZhcigtLWNoYXJ0LWdyaWQtY29sb3IpJylcclxuICAgICAgICAgIC5zdHlsZSgnc3Ryb2tlLXdpZHRoJywgJzFweCcpO1xyXG4gICAgICB9KTtcclxufVxyXG5cclxuICBwcml2YXRlIGFwcGx5Q29uZmlndXJhdGlvbkZsYWdzKCkge1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuaXNIZWFkZXJWaXNpYmxlID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNIZWFkZXJWaXNpYmxlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzVG9wQ2FwdGlvblZpc2libGUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmlzVG9wQ2FwdGlvblZpc2libGUgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1RvcENhcHRpb25WaXNpYmxlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5pc1RyYW5zcGFyZW50QmFja2dyb3VuZCA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZVN0YWNrZWRDaGFydCgpIHtcclxuICAgIC8vIFVzZSBmaXhlZCBjb25maWd1cmF0aW9uIGZvciBhbGwgcmVzb2x1dGlvbnNcclxuICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm1hcmdpbiA9IHsgdG9wOiAyMCwgcmlnaHQ6IDIwLCBib3R0b206IDQwLCBsZWZ0OiA0MCB9O1xyXG4gICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MgPSA1O1xyXG4gICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0ID0gNzA7XHJcbiAgICBcclxuICAgIHRoaXMubWVyZ2VDb25maWd1cmF0aW9ucygpO1xyXG4gICAgdGhpcy5hcHBseUNvbmZpZ3VyYXRpb25GbGFncygpO1xyXG5cclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNoYXJ0RGF0YS5kYXRhO1xyXG4gICAgY29uc3QgbWV0YURhdGEgPSB0aGlzLnByZXBhcmVNZXRhRGF0YSh0aGlzLmNoYXJ0RGF0YS5tZXRhRGF0YSk7XHJcbiAgICBjb25zdCBsaW5lRGF0YSA9IHRoaXMuY2hhcnREYXRhLmxpbmVEYXRhO1xyXG4gICAgY29uc3QgY29sb3JzID0gbWV0YURhdGEuY29sb3JzO1xyXG4gICAgY29uc3Qga2V5TGlzdCA9IG1ldGFEYXRhLmtleUxpc3Q7XHJcblxyXG4gICAgY29uc3QgY2hhcnRDb250YWluZXIgPSBkMy5zZWxlY3QodGhpcy5jb250YWluZXJFbHQubmF0aXZlRWxlbWVudCk7XHJcbiAgICBjb25zdCB2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIgPSBkMy5zZWxlY3QodGhpcy52ZXJ0aWNhbHN0YWNrZWRjb250YWluZXJFbHQubmF0aXZlRWxlbWVudCk7XHJcbiAgICBcclxuICAgIGNvbnN0IG1hcmdpbiA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm1hcmdpbjtcclxuICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0aGlzLmNhbGN1bGF0ZURpbWVuc2lvbnMoXHJcbiAgICAgIGNoYXJ0Q29udGFpbmVyLFxyXG4gICAgICB2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIsXHJcbiAgICAgIG1hcmdpbixcclxuICAgICAgZGF0YS5sZW5ndGhcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgaGFzWExhYmVsID0gISFtZXRhRGF0YS54TGFiZWw7XHJcblxyXG4gICAgY29uc3QgeyBzdmcsIHN2Z1lBeGlzTGVmdCwgc3ZnWUF4aXNSaWdodCwgYm90dG9tTGFiZWxDb250YWluZXIgfSA9IHRoaXMuY3JlYXRlU3ZnQ29udGFpbmVycyhcclxuICAgICAgY2hhcnRDb250YWluZXIsXHJcbiAgICAgIGRpbWVuc2lvbnMsXHJcbiAgICAgIG1hcmdpbixcclxuICAgICAgaGFzWExhYmVsXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHN0YWNrOiBhbnkgPSBkMy5zdGFjaygpLmtleXMoa2V5TGlzdCkub2Zmc2V0KGQzLnN0YWNrT2Zmc2V0Tm9uZSk7XHJcbiAgICBjb25zdCBsYXllcnM6IGFueSA9IHN0YWNrKGRhdGEpO1xyXG4gICAgZGF0YS5zb3J0KChhLCBiKSA9PiBiLnRvdGFsIC0gYS50b3RhbCk7XHJcblxyXG4gICAgY29uc3Qgc2NhbGVzID0gdGhpcy5jcmVhdGVTY2FsZXMoZGF0YSwgbGF5ZXJzLCBsaW5lRGF0YSwgZGltZW5zaW9ucyk7XHJcbiAgICBjb25zdCBheGVzID0gdGhpcy5jcmVhdGVBeGVzKHNjYWxlcyk7XHJcblxyXG4gICAgdGhpcy5yZW5kZXJHcmlkc0Zyb21MZWZ0QXhpcyhzdmcsIHN2Z1lBeGlzTGVmdCwgc2NhbGVzLCBkaW1lbnNpb25zKTtcclxuICAgIHRoaXMucmVuZGVyR3JpZHMoc3ZnLCBzY2FsZXMsIGRpbWVuc2lvbnMpO1xyXG4gICAgY29uc3QgcmVjdCA9IHRoaXMucmVuZGVyQmFycyhzdmcsIGxheWVycywgc2NhbGVzLCBtZXRhRGF0YSwgZGltZW5zaW9ucyk7XHJcbiAgICB0aGlzLnJlbmRlckF4ZXMoc3ZnLCBzdmdZQXhpc0xlZnQsIHN2Z1lBeGlzUmlnaHQsIGF4ZXMsIHNjYWxlcywgZGltZW5zaW9ucywgZGF0YSk7XHJcbiAgICB0aGlzLnJlbmRlckF4aXNMYWJlbHMoc3ZnLCBzdmdZQXhpc0xlZnQsYm90dG9tTGFiZWxDb250YWluZXIsIG1ldGFEYXRhLCBkaW1lbnNpb25zLCBtYXJnaW4pO1xyXG4gICAgdGhpcy5yZW5kZXJUYXJnZXRMaW5lKHN2Zywgc3ZnWUF4aXNSaWdodCwgc2NhbGVzLCBkaW1lbnNpb25zLCBtZXRhRGF0YSk7XHJcbiAgICB0aGlzLnJlbmRlckRhdGFMYWJlbHMocmVjdCwgc2NhbGVzLCBtZXRhRGF0YSwgZGltZW5zaW9ucyk7XHJcbiAgICB0aGlzLnJlbmRlckxpbmVDaGFydChzdmcsIGxpbmVEYXRhLCBzY2FsZXMsIGNvbG9ycywgbWV0YURhdGEpO1xyXG4gIH1cclxuXHJcbnByaXZhdGUgcmVuZGVyR3JpZHMoc3ZnOiBhbnksIHNjYWxlczogYW55LCBkaW1lbnNpb25zOiBEaW1lbnNpb25zKSB7XHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWGdyaWRCZXR3ZWVuTGFiZWxzKSB7XHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdncmlkIHZlcnRpY2FsLWdyaWQnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgke3NjYWxlcy54U2NhbGUuYmFuZHdpZHRoKCkgLyAyfSwke2RpbWVuc2lvbnMuaGVpZ2h0fSlgKVxyXG4gICAgICAuY2FsbChkMy5heGlzQm90dG9tKHNjYWxlcy54U2NhbGUpLnRpY2tTaXplKC1kaW1lbnNpb25zLmhlaWdodCkudGlja0Zvcm1hdCgnJykpXHJcbiAgICAgIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICc1IDUnKVxyXG4gICAgICAuc3R5bGUoJ2NvbG9yJywgJyM5OTk5OTknKVxyXG4gICAgICAuY2FsbCgoZzogYW55KSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpLnJlbW92ZSgpKTtcclxuICB9XHJcblxyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi54QXhpc0dyaWQpIHtcclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueEF4aXNHcmlkLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsIGB4JHtqICsgMn0gYXhpcyR7aiArIDJ9YClcclxuICAgICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LWdyaWQtY29sb3IpJylcclxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7ZGltZW5zaW9ucy5oZWlnaHQgKiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi54QXhpc0dyaWRbal19KWApXHJcbiAgICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbShzY2FsZXMueFNjYWxlKS50aWNrU2l6ZSgwKS50aWNrcyg1KS50aWNrRm9ybWF0KCcnKSlcclxuICAgICAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcblxyXG4gIHByaXZhdGUgcmVuZGVyQXhlcyhcclxuICAgIHN2ZzogYW55LFxyXG4gICAgc3ZnWUF4aXNMZWZ0OiBhbnksXHJcbiAgICBzdmdZQXhpc1JpZ2h0OiBhbnksXHJcbiAgICBheGVzOiBhbnksXHJcbiAgICBzY2FsZXM6IGFueSxcclxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXHJcbiAgICBkYXRhOiBhbnlbXVxyXG4gICkge1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnNob3dYYXhpc1RvcCkge1xyXG4gICAgICBzdmdcclxuICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLWxpbmUtYXhpcy10ZXh0IGxpYi1saW5lLXgtYXhpcy10ZXh0IHgtYXhpcycpXHJcbiAgICAgICAgLmF0dHIoJ3N0eWxlJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueEF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oc2NhbGVzLnhTY2FsZSkudGlja1NpemUoMCkpO1xyXG4gICAgICBzdmcuc2VsZWN0QWxsKCcueC1heGlzID4gZyA+IHRleHQnKS5hdHRyKCdjbGFzcycsICdsaWItZGlzcGxheS1oaWRkZW4nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyU3RhbmRhcmRBeGVzKHN2ZywgYXhlcywgc2NhbGVzLCBkaW1lbnNpb25zLCBkYXRhKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICB0aGlzLnJlbmRlckRyaWxsZG93bkF4ZXMoc3ZnLCBzdmdZQXhpc0xlZnQsIHN2Z1lBeGlzUmlnaHQsIGF4ZXMsIHNjYWxlcywgZGltZW5zaW9ucyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlbmRlck11bHRpQ2hhcnRBeGVzKHN2ZywgYXhlcywgc2NhbGVzLCBkaW1lbnNpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFwcGx5QXhpc1N0eWxpbmcoc3ZnLCBzdmdZQXhpc0xlZnQsIHN2Z1lBeGlzUmlnaHQpO1xyXG4gICAgdGhpcy5hcHBseUF4aXNDb25maWd1cmF0aW9ucyhzdmcsIHNjYWxlcywgZGltZW5zaW9ucywgZGF0YSk7XHJcbiAgfVxyXG5cclxucHJpdmF0ZSByZW5kZXJTdGFuZGFyZEF4ZXMoXHJcbiAgc3ZnOiBhbnksXHJcbiAgYXhlczogYW55LFxyXG4gIHNjYWxlczogYW55LFxyXG4gIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXHJcbiAgZGF0YTogYW55W11cclxuKSB7XHJcbiAgY29uc3QgaXNNb2JpbGVPclRhYmxldCA9IHdpbmRvdy5pbm5lcldpZHRoIDwgMTAyNDtcclxuICBcclxuICAvLyBYLWF4aXMgd2l0aCBsYWJlbHNcclxuICBjb25zdCB4QXhpc0dyb3VwID0gc3ZnXHJcbiAgICAuYXBwZW5kKCdnJylcclxuICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHtkaW1lbnNpb25zLmhlaWdodH0pYClcclxuICAgIC5hdHRyKCdjbGFzcycsICdsaWItc3RhY2tlZC14LWF4aXMtdGV4dCcpXHJcbiAgICAuY2FsbChheGVzLnhBeGlzKTtcclxuXHJcbiAgLy8gU3R5bGUgWC1heGlzIGxhYmVsc1xyXG4gIHhBeGlzR3JvdXBcclxuICAgIC5zZWxlY3RBbGwoJ3RleHQnKVxyXG4gICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgIC5zdHlsZSgnZm9udC1zaXplJywgaXNNb2JpbGVPclRhYmxldCA/ICcxMHB4JyA6ICcxMnB4JylcclxuICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgLmF0dHIoJ2R5JywgJzFlbScpXHJcbiAgICAuZWFjaChmdW5jdGlvbih0aGlzOiBTVkdUZXh0RWxlbWVudCwgZDogYW55KSB7XHJcbiAgICAgIGNvbnN0IHRleHRFbGVtZW50ID0gZDMuc2VsZWN0KHRoaXMpO1xyXG4gICAgICBjb25zdCB0ZXh0ID0gdGV4dEVsZW1lbnQudGV4dCgpO1xyXG4gICAgICAgIFxyXG4gICAgICBpZiAoaXNNb2JpbGVPclRhYmxldCAmJiB0ZXh0Lmxlbmd0aCA+IDEyKSB7XHJcbiAgICAgICAgdGV4dEVsZW1lbnQudGV4dCh0ZXh0LnN1YnN0cmluZygwLCAxMCkgKyAnLi4uJyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuLy8gRW5zdXJlIFgtYXhpcyBsaW5lIHN0YXJ0cyBleGFjdGx5IGF0IHg9MFxyXG4gIHhBeGlzR3JvdXBcclxuICAgIC5zZWxlY3QoJy5kb21haW4nKVxyXG4gICAgLnN0eWxlKCdzdHJva2UnLCAndmFyKC0tY2hhcnQtYXhpcy1jb2xvciknKVxyXG4gICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCAnMXB4JylcclxuICAgIC5hdHRyKCdkJywgYE0wLDAuNUgke2RpbWVuc2lvbnMucmVxdWlyZWRTdmdXaWR0aH1gKTtcclxuXHJcbiAgLy8gWS1heGlzXHJcbiAgc3ZnXHJcbiAgICAuYXBwZW5kKCdnJylcclxuICAgIC5hdHRyKCdjbGFzcycsICdsaWItc3RhY2tlZC15LWF4aXMtdGV4dCcpXHJcbiAgICAuYXR0cignc3R5bGUnLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAuY2FsbChheGVzLnlBeGlzKVxyXG4gICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKTtcclxufVxyXG5cclxuICBwcml2YXRlIHJlbmRlckRyaWxsZG93bkF4ZXMoXHJcbiAgICBzdmc6IGFueSxcclxuICAgIHN2Z1lBeGlzTGVmdDogYW55LFxyXG4gICAgc3ZnWUF4aXNSaWdodDogYW55LFxyXG4gICAgYXhlczogYW55LFxyXG4gICAgc2NhbGVzOiBhbnksXHJcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zXHJcbiAgKSB7XHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHtkaW1lbnNpb25zLmhlaWdodH0pYClcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1zdGFja2VkLXgtYXhpcy10ZXh0IG11bHRpY2hhcnQxJylcclxuICAgICAgLmNhbGwoYXhlcy54QXhpcylcclxuICAgICAgLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuXHJcbiAgICBzdmdZQXhpc0xlZnRcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteWF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93biB5YXhpcy1kYXNoZWQnKVxyXG4gICAgICAuYXR0cignc3R5bGUnLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAgIC5jYWxsKGF4ZXMueUF4aXMpXHJcbiAgICAgIC5zZWxlY3RBbGwoJ3RleHQnKVxyXG4gICAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKTtcclxuXHJcbiAgICBzdmdZQXhpc1JpZ2h0XHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXlheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24geWF4aXMtZGFzaGVkJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAuY2FsbChheGVzLnlBeGlzKVxyXG4gICAgICAuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJNdWx0aUNoYXJ0QXhlcyhzdmc6IGFueSwgYXhlczogYW55LCBzY2FsZXM6IGFueSwgZGltZW5zaW9uczogRGltZW5zaW9ucykge1xyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7ZGltZW5zaW9ucy5oZWlnaHR9KWApXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItc3RhY2tlZC14LWF4aXMtdGV4dCBtdWx0aWNoYXJ0JylcclxuICAgICAgLmNhbGwoYXhlcy54QXhpcylcclxuICAgICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG5cclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1zdGFja2VkLXktYXhpcy10ZXh0IHlheGlzLWRhc2hlZCcpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgICAgLmNhbGwoYXhlcy55QXhpcylcclxuICAgICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUF4aXNTdHlsaW5nKHN2ZzogYW55LCBzdmdZQXhpc0xlZnQ6IGFueSwgc3ZnWUF4aXNSaWdodDogYW55KSB7XHJcbiAgICBjb25zdCBzdHlsZUF4aXNEb21haW4gPSAoY29udGFpbmVyOiBhbnkpID0+IHtcclxuICAgICAgY29udGFpbmVyLnNlbGVjdEFsbCgnLmRvbWFpbicpXHJcbiAgICAgICAgLnN0eWxlKCdzdHJva2UnLCAndmFyKC0tY2hhcnQtYXhpcy1jb2xvciknKVxyXG4gICAgICAgIC5zdHlsZSgnc3Ryb2tlLXdpZHRoJywgJzFweCcpO1xyXG4gICAgfTtcclxuXHJcbiAgICBzdHlsZUF4aXNEb21haW4oc3ZnKTtcclxuICAgIHN0eWxlQXhpc0RvbWFpbihzdmdZQXhpc0xlZnQpO1xyXG4gICAgc3R5bGVBeGlzRG9tYWluKHN2Z1lBeGlzUmlnaHQpO1xyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzRGFzaGVkKSB7XHJcbiAgICAgIGQzLnNlbGVjdEFsbCgnLnlheGlzLWRhc2hlZCcpXHJcbiAgICAgICAgLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5JywgJzUgNScpXHJcbiAgICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC1ncmlkLWNvbG9yKScpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1hheGlzQ29sb3IpIHtcclxuICAgICAgZDMuc2VsZWN0QWxsKCcubXVsdGljaGFydCcpLnN0eWxlKFxyXG4gICAgICAgICdjb2xvcicsXHJcbiAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNYYXhpc0NvbG9yIHx8ICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKSdcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlBeGlzQ29uZmlndXJhdGlvbnMoc3ZnOiBhbnksIHNjYWxlczogYW55LCBkaW1lbnNpb25zOiBEaW1lbnNpb25zLCBkYXRhOiBhbnlbXSkge1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgZDMuc2VsZWN0QWxsKCcubXVsdGljaGFydCA+IGcgPiB0ZXh0JykuYXR0cignY2xhc3MnLCAnbGliLWRpc3BsYXktaGlkZGVuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWGF4aXNMYWJlbEhpZGRlbikge1xyXG4gICAgICBkMy5zZWxlY3RBbGwoJy5tdWx0aWNoYXJ0ID4gZyA+IHRleHQnKS5hdHRyKCdjbGFzcycsICdsaWItZGlzcGxheS1oaWRkZW4nKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNYYXhpc0xhYmVsSGlkZGVuICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5yZW5kZXJDdXN0b21YQXhpcyhzdmcsIHNjYWxlcywgZGltZW5zaW9ucywgZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNMYWJlbEhpZGRlbikge1xyXG4gICAgICBzdmcuc2VsZWN0QWxsKCcueWF4aXMtZGFzaGVkID4gZyA+IHRleHQnKS5hdHRyKCdjbGFzcycsICdsaWItZGlzcGxheS1oaWRkZW4nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0hpZGRlbikge1xyXG4gICAgICBkMy5zZWxlY3RBbGwoJy55YXhpcy1kYXNoZWQnKS5hdHRyKCdjbGFzcycsICdsaWItZGlzcGxheS1oaWRkZW4nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc1pvb21lZE91dCAmJiBkYXRhLmxlbmd0aCA+IDkpIHtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLnNlbGVjdEFsbCgnLmxpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3JvdGF0ZSgtOTApJylcclxuICAgICAgICAuYXR0cigndGV4dC1hbmNob3InLCAnZW5kJylcclxuICAgICAgICAuYXR0cigneCcsICctNScpXHJcbiAgICAgICAgLmF0dHIoJ2R5JywgbnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckN1c3RvbVhBeGlzKHN2ZzogYW55LCBzY2FsZXM6IGFueSwgZGltZW5zaW9uczogRGltZW5zaW9ucywgZGF0YTogYW55W10pIHtcclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ3gxIGF4aXMxJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwke2RpbWVuc2lvbnMuaGVpZ2h0fSlgKVxyXG4gICAgICAuc3R5bGUoJ2NvbG9yJywgJyMwMDAnKVxyXG4gICAgICAuY2FsbChkMy5heGlzQm90dG9tKHNjYWxlcy54U2NhbGUpLnRpY2tTaXplKDApKVxyXG4gICAgICAuY2FsbCgoZzogYW55KSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpLmF0dHIoJ2ZpbGwnLCAnbm9uZScpKTtcclxuXHJcbiAgICB0aGlzLnN0eWxlQ3VzdG9tWEF4aXNUaWNrcyhzdmcsIGRhdGEpO1xyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi54TGFiZWxzT25TYW1lTGluZSkge1xyXG4gICAgICB0aGlzLmFwcGx5WExhYmVsc09uU2FtZUxpbmUoc3ZnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3R5bGVDdXN0b21YQXhpc1RpY2tzKHN2ZzogYW55LCBkYXRhOiBhbnlbXSkge1xyXG4gICAgbGV0IGFsdGVybmF0ZVRleHQgPSBmYWxzZTtcclxuXHJcbiAgICBzdmcuc2VsZWN0QWxsKCcueDEuYXhpczEgLnRpY2sgbGluZScpLmF0dHIoJ3kyJywgKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaGlkZVhheGlzVGljaykgcmV0dXJuIDA7XHJcbiAgICAgIFxyXG4gICAgICBpZiAoYWx0ZXJuYXRlVGV4dCAmJiAhdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNOb0FsdGVybmF0ZVhheGlzVGV4dCkge1xyXG4gICAgICAgIGFsdGVybmF0ZVRleHQgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5DT05TVEFOVFMuTE9OR19USUNLX0xFTkdUSF9CRyAtIDc7XHJcbiAgICAgIH1cclxuICAgICAgYWx0ZXJuYXRlVGV4dCA9IHRydWU7XHJcbiAgICAgIHJldHVybiB0aGlzLkNPTlNUQU5UUy5TSE9SVF9USUNLX0xFTkdUSF9CRyAtIDQ7XHJcbiAgICB9KTtcclxuXHJcbiAgICBhbHRlcm5hdGVUZXh0ID0gZmFsc2U7XHJcbiAgICBzdmdcclxuICAgICAgLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgdGV4dCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICAgICAgcmV0dXJuIGRhdGEubGVuZ3RoID4gOCBcclxuICAgICAgICAgICAgPyAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24tYWx0J1xyXG4gICAgICAgICAgICA6ICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnbGliLXhheGlzLWxhYmVscy10ZXh0cy13ZWVrbHljaGFydHMnO1xyXG4gICAgICB9KVxyXG4gICAgICAuYXR0cigneScsICgpID0+IHtcclxuICAgICAgICBpZiAoYWx0ZXJuYXRlVGV4dCkge1xyXG4gICAgICAgICAgYWx0ZXJuYXRlVGV4dCA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuQ09OU1RBTlRTLkxPTkdfVElDS19MRU5HVEhfQkc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFsdGVybmF0ZVRleHQgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLkNPTlNUQU5UUy5TSE9SVF9USUNLX0xFTkdUSF9CRztcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5WExhYmVsc09uU2FtZUxpbmUoc3ZnOiBhbnkpIHtcclxuICAgIHN2Z1xyXG4gICAgICAuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgICAgLmF0dHIoJ3knLCB0aGlzLkNPTlNUQU5UUy5TSE9SVF9USUNLX0xFTkdUSF9CRylcclxuICAgICAgLnRleHQoKGQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGNvbnN0IHRyaW1tZWQgPSBkLnRyaW0oKTtcclxuICAgICAgICBjb25zdCBzcGFjZUluZGV4ID0gdHJpbW1lZC5pbmRleE9mKCcgJyk7XHJcbiAgICAgICAgcmV0dXJuIHNwYWNlSW5kZXggPiAtMSBcclxuICAgICAgICAgID8gdHJpbW1lZC5zdWJzdHJpbmcoMCwgc3BhY2VJbmRleCkudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgOiB0cmltbWVkLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHN2Z1xyXG4gICAgICAuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljaycpXHJcbiAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgICAuYXR0cigneScsIHRoaXMuQ09OU1RBTlRTLkxPTkdfVElDS19MRU5HVEhfQkcpXHJcbiAgICAgIC5hdHRyKCdmaWxsJywgJ2N1cnJlbnRDb2xvcicpXHJcbiAgICAgIC50ZXh0KChkOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBjb25zdCB0cmltbWVkID0gZC50cmltKCk7XHJcbiAgICAgICAgY29uc3Qgc3BhY2VJbmRleCA9IHRyaW1tZWQuaW5kZXhPZignICcpO1xyXG4gICAgICAgIHJldHVybiBzcGFjZUluZGV4ID4gLTEgXHJcbiAgICAgICAgICA/IHRyaW1tZWQuc3Vic3RyaW5nKHNwYWNlSW5kZXgpLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgIDogJyc7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJEYXRhTGFiZWxzKHJlY3Q6IGFueSwgc2NhbGVzOiBhbnksIG1ldGFEYXRhOiBDaGFydE1ldGFEYXRhLCBkaW1lbnNpb25zOiBEaW1lbnNpb25zKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNDQyAmJiAhdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUpIHtcclxuICAgICAgcmVjdC5hcHBlbmQoJ3N2Zzp0aXRsZScpLnRleHQoKGQ6IGFueSkgPT4gZFsxXSAtIGRbMF0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zaG93VG90YWxPblRvcCkge1xyXG4gICAgICB0aGlzLnJlbmRlclRvcExhYmVscyhyZWN0LCBzY2FsZXMsIG1ldGFEYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc2hvd0FuZ2xlZExhYmVscykge1xyXG4gICAgICB0aGlzLnJlbmRlckFuZ2xlZExhYmVscyhyZWN0LCBzY2FsZXMsIG1ldGFEYXRhKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyVG9wTGFiZWxzKHJlY3Q6IGFueSwgc2NhbGVzOiBhbnksIG1ldGFEYXRhOiBDaGFydE1ldGFEYXRhKSB7XHJcbiAgICBjb25zdCBmb3JtYXRGcm9tQmFja2VuZCA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRGb3JtYXR0ZXJcclxuICAgICAgPyBDaGFydEhlbHBlci5kYXRhVmFsdWVGb3JtYXR0ZXIodGhpcy5jaGFydENvbmZpZ3VyYXRpb24udGV4dEZvcm1hdHRlcilcclxuICAgICAgOiAoZDogYW55KSA9PiBkO1xyXG4gICAgY29uc3QgZm9ybWF0Rm9ySHVnZU51bWJlcnMgPSBDaGFydEhlbHBlci5kYXRhVmFsdWVGb3JtYXR0ZXIoJy4ycycpO1xyXG5cclxuICAgIHJlY3RcclxuICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgIC5hdHRyKCd4JywgKGQ6IGFueSkgPT4gc2NhbGVzLnhTY2FsZShkLmRhdGEubmFtZSkgKyBzY2FsZXMueFNjYWxlLmJhbmR3aWR0aCgpIC8gMilcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi12ZXJ0aWNhbHN0YWNrLWxhYmVscy1vbnRvcC13ZWtseWNoYXJ0cycpXHJcbiAgICAgIC5hdHRyKCd5JywgKGQ6IGFueSkgPT4gc2NhbGVzLnlTY2FsZShkWzFdKSAtIDMpXHJcbiAgICAgIC50ZXh0KChkOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGRbMV0gLSBkWzBdO1xyXG4gICAgICAgIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IDApIHJldHVybjtcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IHZhbHVlIDw9IDk5OSBcclxuICAgICAgICAgID8gZm9ybWF0RnJvbUJhY2tlbmQodmFsdWUpXHJcbiAgICAgICAgICA6IGZvcm1hdEZvckh1Z2VOdW1iZXJzKHZhbHVlKTtcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gbWV0YURhdGEudW5pdCA/IG1ldGFEYXRhLnVuaXQgKyBmb3JtYXR0ZWRWYWx1ZSA6IGZvcm1hdHRlZFZhbHVlO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyQW5nbGVkTGFiZWxzKHJlY3Q6IGFueSwgc2NhbGVzOiBhbnksIG1ldGFEYXRhOiBDaGFydE1ldGFEYXRhKSB7XHJcbiAgICBjb25zdCBmb3JtYXRGcm9tQmFja2VuZCA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRGb3JtYXR0ZXJcclxuICAgICAgPyBDaGFydEhlbHBlci5kYXRhVmFsdWVGb3JtYXR0ZXIodGhpcy5jaGFydENvbmZpZ3VyYXRpb24udGV4dEZvcm1hdHRlcilcclxuICAgICAgOiAoZDogYW55KSA9PiBkO1xyXG4gICAgY29uc3QgZm9ybWF0Rm9ySHVnZU51bWJlcnMgPSBDaGFydEhlbHBlci5kYXRhVmFsdWVGb3JtYXR0ZXIoJy4ycycpO1xyXG4gICAgY29uc3QgdGVtcE9iamVjdEhvbGRlcjogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xyXG5cclxuICAgIHJlY3RcclxuICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgIC5hdHRyKCd4JywgMClcclxuICAgICAgLmF0dHIoJ3knLCAwKVxyXG4gICAgICAuYXR0cignZmlsbCcsIChkOiBhbnkpID0+IG1ldGFEYXRhLmNvbG9yc1tkLmtleV0pXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItZGF0YS1sYWJlbHMtYW5nbGVkLXdlZWtseWNoYXJ0cycpXHJcbiAgICAgIC50ZXh0KChkOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGRbMV0gLSBkWzBdO1xyXG4gICAgICAgIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPD0gMCkgcmV0dXJuO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gdmFsdWUgPD0gOTk5XHJcbiAgICAgICAgICA/IGZvcm1hdEZyb21CYWNrZW5kKHZhbHVlKVxyXG4gICAgICAgICAgOiBmb3JtYXRGb3JIdWdlTnVtYmVycyh2YWx1ZSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIG1ldGFEYXRhLnVuaXQgPyBtZXRhRGF0YS51bml0ICsgZm9ybWF0dGVkVmFsdWUgOiBmb3JtYXR0ZWRWYWx1ZTtcclxuICAgICAgfSlcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIChkOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGRbMV0gLSBkWzBdO1xyXG4gICAgICAgIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPD0gMCkgcmV0dXJuICdyb3RhdGUoMCknO1xyXG5cclxuICAgICAgICBsZXQgdG90YWwgPSAwO1xyXG4gICAgICAgIGxldCBpbmNyZW1lbnRlciA9IDE7XHJcbiAgICAgICAgbWV0YURhdGEua2V5TGlzdC5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICBpZiAoZC5kYXRhW2tleV0pIHtcclxuICAgICAgICAgICAgdG90YWwgKz0gZC5kYXRhW2tleV07XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpbmNyZW1lbnRlciA9IDI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRlbXBPYmplY3RIb2xkZXJbZC5kYXRhLm5hbWVdID0gKHRlbXBPYmplY3RIb2xkZXJbZC5kYXRhLm5hbWVdIHx8IDApICsgaW5jcmVtZW50ZXI7XHJcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0ZW1wT2JqZWN0SG9sZGVyW2QuZGF0YS5uYW1lXTtcclxuICAgICAgICBjb25zdCB4UG9zID0gc2NhbGVzLnhTY2FsZShkLmRhdGEubmFtZSk7XHJcbiAgICAgICAgY29uc3QgYmFuZHdpZHRoID0gc2NhbGVzLnhTY2FsZS5iYW5kd2lkdGgoKTtcclxuICAgICAgICBjb25zdCB5UG9zID0gc2NhbGVzLnlTY2FsZSh0b3RhbCkgLSAzO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKHBvc2l0aW9uKSB7XHJcbiAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgIHJldHVybiBgdHJhbnNsYXRlKCR7eFBvcyArIGJhbmR3aWR0aCAvIDN9LCR7eVBvc30pIHJvdGF0ZSgyNzApYDtcclxuICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgcmV0dXJuIGB0cmFuc2xhdGUoJHt4UG9zICsgYmFuZHdpZHRoIC8gMiArIDJ9LCR7eVBvc30pIHJvdGF0ZSgyNzApYDtcclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBgdHJhbnNsYXRlKCR7eFBvcyArIChiYW5kd2lkdGggKiAzKSAvIDR9LCR7eVBvc30pIHJvdGF0ZSgyNzApYDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJUYXJnZXRMaW5lKFxyXG4gICAgc3ZnOiBhbnksXHJcbiAgICBzdmdZQXhpc1JpZ2h0OiBhbnksXHJcbiAgICBzY2FsZXM6IGFueSxcclxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXHJcbiAgICBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YVxyXG4gICkge1xyXG4gICAgaWYgKCF0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHBhcnNlZFRhcmdldCA9IHRoaXMucGFyc2VUYXJnZXRWYWx1ZSh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpO1xyXG4gICAgY29uc3QgeVplcm8gPSBzY2FsZXMueVNjYWxlKHBhcnNlZFRhcmdldCk7XHJcblxyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2xpbmUnKVxyXG4gICAgICAuYXR0cigneDEnLCAwKVxyXG4gICAgICAuYXR0cigneDInLCBkaW1lbnNpb25zLndpZHRoKVxyXG4gICAgICAuYXR0cigneTEnLCB5WmVybylcclxuICAgICAgLmF0dHIoJ3kyJywgeVplcm8pXHJcbiAgICAgIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICc1IDUnKVxyXG4gICAgICAuc3R5bGUoJ3N0cm9rZScsIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLmNvbG9yKTtcclxuXHJcbiAgICB0aGlzLnJlbmRlclRhcmdldExhYmVsKHN2Z1lBeGlzUmlnaHQsIHlaZXJvLCBtZXRhRGF0YSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBhcnNlVGFyZ2V0VmFsdWUodGFyZ2V0OiBzdHJpbmcgfCBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VGbG9hdChTdHJpbmcodGFyZ2V0KSk7XHJcbiAgICBpZiAoaXNOYU4ocGFyc2VkKSkgcmV0dXJuIDA7XHJcbiAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihwYXJzZWQpID8gcGFyc2VJbnQoU3RyaW5nKHRhcmdldCkpIDogcGFyc2VkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJUYXJnZXRMYWJlbChzdmdZQXhpc1JpZ2h0OiBhbnksIHlaZXJvOiBudW1iZXIsIG1ldGFEYXRhOiBDaGFydE1ldGFEYXRhKSB7XHJcbiAgICBjb25zdCBkYXRhVHlwZSA9IG1ldGFEYXRhLmRhdGFUeXBlIHx8ICcnO1xyXG4gICAgY29uc3QgdGFyZ2V0TmFtZSA9IHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldE5hbWUgfHwgJ3RhcmdldCc7XHJcblxyXG4gICAgc3ZnWUF4aXNSaWdodFxyXG4gICAgICAuYXBwZW5kKCdmb3JlaWduT2JqZWN0JylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwke3laZXJvIC0gMTN9KWApXHJcbiAgICAgIC5hdHRyKCd3aWR0aCcsIHRoaXMuQ09OU1RBTlRTLlJJR0hUX1NWR19XSURUSClcclxuICAgICAgLmF0dHIoJ2hlaWdodCcsIDUwKVxyXG4gICAgICAuYXBwZW5kKCd4aHRtbDpkaXYnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAndGFyZ2V0LWRpc3BsYXknKVxyXG4gICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgICAgLmh0bWwoYDxkaXY+JHt0YXJnZXROYW1lfTwvZGl2PjxkaXY+JHt0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXR9JHtkYXRhVHlwZX08L2Rpdj5gKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyTGluZUNoYXJ0KHN2ZzogYW55LCBsaW5lRGF0YTogYW55W10sIHNjYWxlczogYW55LCBjb2xvcnM6IGFueSwgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEpIHtcclxuICAgIGlmICghbGluZURhdGEgfHwgIWNvbG9ycykgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGRhdGFHcm91cCA9IGQzXHJcbiAgICAgIC5uZXN0KClcclxuICAgICAgLmtleSgoZDogYW55KSA9PiBkLmNhdGVnb3J5KVxyXG4gICAgICAuZW50cmllcyhsaW5lRGF0YSk7XHJcblxyXG4gICAgY29uc3QgbGluZUdlbiA9IGQzXHJcbiAgICAgIC5saW5lKClcclxuICAgICAgLngoKGQ6IGFueSkgPT4gc2NhbGVzLnhTY2FsZShkLm5hbWUpICsgc2NhbGVzLnhTY2FsZS5iYW5kd2lkdGgoKSAvIDIpXHJcbiAgICAgIC55KChkOiBhbnkpID0+IHNjYWxlcy5saW5lWXNjYWxlKGQudmFsdWUpKTtcclxuXHJcbiAgICBkYXRhR3JvdXAuZm9yRWFjaCgoZ3JvdXA6IGFueSkgPT4ge1xyXG4gICAgICBzdmdcclxuICAgICAgICAuYXBwZW5kKCdwYXRoJylcclxuICAgICAgICAuZGF0dW0oZ3JvdXAudmFsdWVzKVxyXG4gICAgICAgIC5hdHRyKCdmaWxsJywgJ25vbmUnKVxyXG4gICAgICAgIC5hdHRyKCdzdHJva2UnLCAoZDogYW55KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZFswXT8uY2F0ZWdvcnkgXHJcbiAgICAgICAgICAgID8gY29sb3JzW2RbMF0uY2F0ZWdvcnldXHJcbiAgICAgICAgICAgIDogdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubGluZUdyYXBoQ29sb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cignc3Ryb2tlLXdpZHRoJywgMi41KVxyXG4gICAgICAgIC5hdHRyKCdkJywgbGluZUdlbik7XHJcblxyXG4gICAgICB0aGlzLnJlbmRlckxpbmVEb3RzKHN2ZywgZ3JvdXAudmFsdWVzLCBzY2FsZXMsIGNvbG9ycyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyTGluZURvdHMoc3ZnOiBhbnksIHZhbHVlczogYW55W10sIHNjYWxlczogYW55LCBjb2xvcnM6IGFueSkge1xyXG4gICAgY29uc3QgZG90ID0gc3ZnXHJcbiAgICAgIC5zZWxlY3RBbGwoJy5saW5lLWRvdHMnKVxyXG4gICAgICAuZGF0YSh2YWx1ZXMpXHJcbiAgICAgIC5lbnRlcigpXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAub24oJ2NsaWNrJywgKGQ6IGFueSkgPT4gdGhpcy5oYW5kbGVDbGljayhkKSk7XHJcblxyXG4gICAgZG90XHJcbiAgICAgIC5hcHBlbmQoJ2NpcmNsZScpXHJcbiAgICAgIC5hdHRyKCdmaWxsJywgKGQ6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBkLmNhdGVnb3J5IFxyXG4gICAgICAgICAgPyBjb2xvcnNbZC5jYXRlZ29yeV1cclxuICAgICAgICAgIDogdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubGluZUdyYXBoQ29sb3I7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hdHRyKCdzdHJva2UnLCAnbm9uZScpXHJcbiAgICAgIC5hdHRyKCdjeCcsIChkOiBhbnkpID0+IHNjYWxlcy54U2NhbGUoZC5uYW1lKSArIHNjYWxlcy54U2NhbGUuYmFuZHdpZHRoKCkgLyAyKVxyXG4gICAgICAuYXR0cignY3knLCAoZDogYW55KSA9PiBzY2FsZXMubGluZVlzY2FsZShkLnZhbHVlKSlcclxuICAgICAgLmF0dHIoJ3InLCAzKVxyXG4gICAgICAuc3R5bGUoJ2N1cnNvcicsICdwb2ludGVyJyk7XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yKSB7XHJcbiAgICAgIGRvdFxyXG4gICAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdkb3RzJylcclxuICAgICAgICAuYXR0cignZmlsbCcsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yKVxyXG4gICAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgJy44NWVtJylcclxuICAgICAgICAuc3R5bGUoJ2ZvbnQtd2VpZ2h0JywgJ2JvbGQnKVxyXG4gICAgICAgIC5hdHRyKCd4JywgKGQ6IGFueSkgPT4gc2NhbGVzLnhTY2FsZShkLm5hbWUpICsgc2NhbGVzLnhTY2FsZS5iYW5kd2lkdGgoKSAvIDIpXHJcbiAgICAgICAgLmF0dHIoJ3knLCAoZDogYW55KSA9PiBzY2FsZXMubGluZVlzY2FsZShkLnZhbHVlKSlcclxuICAgICAgICAuYXR0cignZHknLCAnLTFlbScpXHJcbiAgICAgICAgLnRleHQoKGQ6IGFueSkgPT4gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubGFiZWxGb3JtYXR0ZXIoZC52YWx1ZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ2xpY2soZDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5jaGFydERhdGE/Lm1ldGFEYXRhPy5oYXNEcmlsbERvd24gfHwgZD8udG9nZ2xlRnJvbSkge1xyXG4gICAgICB0aGlzLmNsaWNrRXZlbnQuZW1pdChkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUhlYWRlck1lbnVDbGljayhpZDogYW55KSB7XHJcbiAgICB0aGlzLmhlYWRlck1lbnVjbGlja0V2ZW50LmVtaXQoaWQpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuY2xpY2tFdmVudC5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVpvb21pblpvb21vdXRDbGljayh7IGlzWm9vbU91dCwgZXZlbnQgfTogeyBpc1pvb21PdXQ6IGJvb2xlYW47IGV2ZW50OiBhbnkgfSkge1xyXG4gICAgdGhpcy5pc1pvb21PdXRTZWxlY3RlZChpc1pvb21PdXQpO1xyXG4gIH1cclxufSIsIjxtZXRhIGh0dHAtZXF1aXY9XCJDQUNIRS1DT05UUk9MXCIgY29udGVudD1cIk5PLUNBQ0hFXCIgLz5cclxuPG1ldGEgaHR0cC1lcXVpdj1cIkVYUElSRVNcIiBjb250ZW50PVwiU2F0LCAwMSBKdW4gMjAwNCAxMToxMjowMSBHTVRcIiAvPlxyXG48ZGl2XHJcbiAgI3ZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lclxyXG4gIGNsYXNzPVwibGliLWNoYXJ0LXdyYXBwZXJcIlxyXG4gIFtuZ0NsYXNzXT1cInsgJ2xpYi1uby1iYWNrZ3JvdW5kJzogaXNUcmFuc3BhcmVudEJhY2tncm91bmQgfVwiXHJcbiAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHZhcigtLWNhcmQtYmcpO1wiXHJcblxyXG4gIChyZXNpemVkKT1cIm9uUmVzaXplZCgkZXZlbnQpXCJcclxuPlxyXG4gIDxkaXYgY2xhc3M9XCJoZWFkZXItYWx0XCIgKm5nSWY9XCIhaXNIZWFkZXJWaXNpYmxlXCI+XHJcbiAgICA8bGliLWNoYXJ0LWhlYWRlci12MlxyXG4gICAgICBbY2hhcnREYXRhXT1cImNoYXJ0RGF0YVwiXHJcbiAgICAgIFtjaGFydENvbmZpZ3VyYXRpb25dPVwiY2hhcnRDb25maWd1cmF0aW9uXCJcclxuICAgICAgKGNsaWNrRXZlbnQpPVwiaGFuZGxlQ2xpY2soJGV2ZW50KVwiXHJcbiAgICA+PC9saWItY2hhcnQtaGVhZGVyLXYyPlxyXG5cclxuICAgIDxsaWItY2hhcnQtaGVhZGVyLXYzXHJcbiAgICAgIFtjaGFydERhdGFdPVwiY2hhcnREYXRhXCJcclxuICAgICAgW2NoYXJ0Q29uZmlndXJhdGlvbl09XCJjaGFydENvbmZpZ3VyYXRpb25cIlxyXG4gICAgICAoY29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKT1cImhhbmRsZUNvbXBhcmVCeUZpbHRlclNlbGVjdGlvbigkZXZlbnQpXCJcclxuICAgICAgKHpvb21Jblpvb21PdXRDbGljayk9XCJoYW5kbGVab29taW5ab29tb3V0Q2xpY2soJGV2ZW50KVwiXHJcbiAgICA+PC9saWItY2hhcnQtaGVhZGVyLXYzPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXZcclxuICAgIFtzdHlsZS5oZWlnaHRdPVwiY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodFwiXHJcbiAgICBpZD1cInZlcnRpY2Fsc3RhY2tlZGNoYXJ0Y29udGFpbmVyXCJcclxuICAgICN2ZXJ0aWNhbHN0YWNrZWRjaGFydGNvbnRhaW5lclxyXG4gICAgY2xhc3M9XCJsaWItY2hhcnQtc3ZnXCJcclxuICA+PC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=