axidio-styleguide-library1-v2 0.6.13 → 0.6.15

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.
@@ -269,7 +269,7 @@ export class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUnique
269
269
  if (this.chartConfiguration.isMultiChartGridLine === undefined) {
270
270
  // Normal ticks for dashboard charts
271
271
  // Dynamically adjust Y translation for mobile
272
- let translateY = height;
272
+ let translateY = height - 10;
273
273
  if (isMobile) {
274
274
  translateY = height + 10; // Add extra space at the top for mobile
275
275
  }
@@ -299,7 +299,7 @@ export class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUnique
299
299
  // Increase spacing between axis and labels
300
300
  if (isria && (subgroups.length === 1 || self.chartData.data.length > 1)) {
301
301
  g.selectAll('.tick text')
302
- .attr('dy', '1em'); // Default is '0.71em', increase for more space
302
+ .attr('dy', '0em'); // Default is '0.71em', increase for more space
303
303
  }
304
304
  })
305
305
  .call((g) => {
@@ -459,7 +459,7 @@ export class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUnique
459
459
  applyXLabelsOnSameLine(svg, subgroups, data, metaData, self, shortTickLengthBg, isMobile, isria) {
460
460
  const xAxisLabels = svg.selectAll('g.x1.axis1 g.tick text')
461
461
  .attr('class', 'lib-xaxis-labels-texts-drilldown')
462
- .style('font-size', this.isHeaderVisible && !isria ? '18px' : '11px')
462
+ .style('font-size', this.isHeaderVisible && !isria ? '16px' : '11px')
463
463
  .attr('text-anchor', 'middle')
464
464
  .attr('y', (d) => this.calculateXLabelYPosition(d, subgroups, data, metaData, self, shortTickLengthBg))
465
465
  .attr('x', (d) => (self.chartData.data.length > 8 && !self.isZoomedOut) ? 1 : 0)
@@ -468,9 +468,9 @@ export class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUnique
468
468
  xAxisLabels.each(function (d) {
469
469
  const isDateLabel = /^(\d{2,4}[-\/])?\d{2,4}[-\/]\d{2,4}$/.test(d.trim());
470
470
  const isWeekLabel = /week|wk|w\d+/i.test(d);
471
- if (subgroups.length > 1 && self.isZoomedOut && data.length > 8 && isDateLabel && !isWeekLabel) {
472
- d3.select(this).style('writing-mode', 'sideways-lr');
473
- }
471
+ // if (subgroups.length > 1 && self.isZoomedOut && data.length > 8 && isDateLabel && !isWeekLabel) {
472
+ // d3.select(this).style('writing-mode', 'sideways-lr');
473
+ // }
474
474
  });
475
475
  // Add second line for non-date labels on desktop
476
476
  if (!isMobile) {
@@ -1364,4 +1364,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1364
1364
  }], headerMenuclickEvent: [{
1365
1365
  type: Output
1366
1366
  }] } });
1367
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9yaXpvbnRhbC1ncm91cGVkLWJhci13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ob3Jpem9udGFsLWdyb3VwZWQtYmFyLXdpdGgtc2Nyb2xsLXpvb20vaG9yaXpvbnRhbC1ncm91cGVkLWJhci13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ob3Jpem9udGFsLWdyb3VwZWQtYmFyLXdpdGgtc2Nyb2xsLXpvb20vaG9yaXpvbnRhbC1ncm91cGVkLWJhci13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDakQsT0FBTyxXQUFXLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFFekIsT0FBTyxrQkFBa0IsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7OztBQVdsRCxNQUFNLE9BQU8sMkNBQ1gsU0FBUSxpQkFBaUI7SUF5RXpCO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUEvREEsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDckMseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN6RCxvQkFBZSxHQUFZLElBQUksQ0FBQztRQUNoQyxrQkFBYSxHQUFZLElBQUksQ0FBQztRQUM5Qiw0QkFBdUIsR0FBWSxLQUFLLENBQUM7UUFD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LENBQUMsRUFBRTtRQUN0QixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFDRCxjQUFjLENBQUMsS0FBSztRQUNsQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBQ0QsY0FBYyxDQUFDLEtBQUs7UUFDbEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUNELDhCQUE4QixDQUFDLEtBQUs7UUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQzsrR0F4aURVLDJDQUEyQzttR0FBM0MsMkNBQTJDLGdoQkN6QnhELG1nSkFtSUE7OzRGRDFHYSwyQ0FBMkM7a0JBVHZELFNBQVM7K0JBQ0UsNkNBQTZDLGlCQU14QyxpQkFBaUIsQ0FBQyxJQUFJO3dEQU9yQyxZQUFZO3NCQURYLFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUlsRCxpQkFBaUI7c0JBRGhCLFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUdwQyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgRWxlbWVudFJlZixcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRVbmlxdWVJZCB9IGZyb20gJy4uL3VuaXF1ZS1pZCc7XHJcbmltcG9ydCBDaGFydEhlbHBlciBmcm9tICcuLi9jaGFydC1oZWxwZXInO1xyXG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XHJcbmltcG9ydCB7IFJlc2l6ZWRFdmVudCB9IGZyb20gJ2FuZ3VsYXItcmVzaXplLWV2ZW50JztcclxuaW1wb3J0IEhlYWRlckNvbmZpZ0hlbHBlciBmcm9tICcuLi9oZWFkZXItY29uZmlnJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWhvcml6b250YWwtZ3JvdXBlZC1iYXItd2l0aC1zY3JvbGwtem9vbScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2hvcml6b250YWwtZ3JvdXBlZC1iYXItd2l0aC1zY3JvbGwtem9vbS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbXHJcbiAgICAnLi9ob3Jpem9udGFsLWdyb3VwZWQtYmFyLXdpdGgtc2Nyb2xsLXpvb20uY29tcG9uZW50Lmxlc3MnLFxyXG4gICAgJy4uL2NvbW1vbi1zdHlsZXMubGVzcycsXHJcbiAgXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSG9yaXpvbnRhbEdyb3VwZWRCYXJXaXRoU2Nyb2xsWm9vbUNvbXBvbmVudFxyXG4gIGV4dGVuZHMgQ29tcG9uZW50VW5pcXVlSWRcclxuICBpbXBsZW1lbnRzIE9uSW5pdFxyXG57XHJcbiAgQFZpZXdDaGlsZCgnZ3JvdXBjaGFydGNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZ3JvdXBjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGdyb3VwY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgQElucHV0KCkgY2hhcnREYXRhOiBhbnk7XHJcbiAgQElucHV0KCkgY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uOiBhbnk7XHJcbiAgQE91dHB1dCgpIGNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgaGVhZGVyTWVudWNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBpc0hlYWRlclZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGxlZ2VuZFZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2hhcnRDb25maWd1cmF0aW9uOiBhbnkgPSB7fTtcclxuICBvYmplY3RLZXlzID0gT2JqZWN0LmtleXM7XHJcblxyXG4gIGRlZmF1bHRDb25maWd1cmF0aW9uOiBhbnkgPSB7XHJcbiAgICBtYXJnaW46IHsgdG9wOiAyMCwgcmlnaHQ6IDIwLCBib3R0b206IDIwLCBsZWZ0OiA0MCB9LFxyXG4gICAgbGFiZWxGb3JtYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICBzdmdIZWlnaHQ6IDcwLFxyXG4gICAgbnVtYmVyT2ZZVGlja3M6IDUsXHJcbiAgICBsZWdlbmRKdXN0aWZpZWQ6IHRydWUsXHJcbiAgICB5TGluZUF4aXNMYWJlbEZvbWF0dGVyOiBDaGFydEhlbHBlci5kZWZhdWx0Rm9ybWF0dGVyLFxyXG4gICAgeUF4aXNMYWJlbEZvbWF0dGVyOiBDaGFydEhlbHBlci5kZWZhdWx0Rm9ybWF0dGVyLFxyXG4gICAgbGluZUdyYXBoQ29sb3I6ICcjRjZEMjgzJyxcclxuICAgIHNob3dMaW5lQ2hhcnRBeGlzOiB0cnVlLFxyXG4gICAgc2hvd1ZhbHVlczogdHJ1ZSxcclxuICAgIGhlYWRlck1lbnVPcHRpb25zOiBIZWFkZXJDb25maWdIZWxwZXIuaGVhZGVyQ29uZmlnLmhlYWRlck1lbnVPcHRpb25zLFxyXG4gICAgeEF4aXNHcmlkOiB1bmRlZmluZWQsXHJcbiAgICB5QXhpc0dyaWQ6IGZhbHNlLFxyXG4gICAgbGVnZW5kVmlzaWJsZTogZmFsc2UsXHJcbiAgICBpc0hlYWRlclZpc2libGU6IHVuZGVmaW5lZCxcclxuICAgIGlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOiB1bmRlZmluZWQsXHJcbiAgICBpc011bHRpQ2hhcnRHcmlkTGluZTogdW5kZWZpbmVkLFxyXG4gICAgaXNGdWxsU2NyZWVuOiB1bmRlZmluZWQsXHJcbiAgICBjdXN0b21Zc2NhbGU6IHVuZGVmaW5lZCxcclxuICAgIHRleHRzT25CYXI6IHVuZGVmaW5lZCxcclxuICAgIGlzWGF4aXNMYWJlbEhpZGRlbjogdW5kZWZpbmVkLFxyXG4gICAgaXNZYXhpc0xhYmVsSGlkZGVuOiBmYWxzZSxcclxuICAgIGlzWWF4aXNIaWRkZW46IHVuZGVmaW5lZCxcclxuICAgIGlzWWF4aXNEYXNoZWQ6IHVuZGVmaW5lZCxcclxuICAgIHRleHRGb3JtYXR0ZXI6IHVuZGVmaW5lZCxcclxuICAgIGlzTm9BbHRlcm5hdGVYYXhpc1RleHQ6IHVuZGVmaW5lZCxcclxuICAgIGlzWGdyaWRCZXR3ZWVuTGFiZWxzOiB1bmRlZmluZWQsXHJcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjRkZGRkZGJyxcclxuICAgIGhpZGVMZWdlbmRPblRvcDogdHJ1ZSxcclxuICAgIGlzWGF4aXNDb2xvcjogJyM5OTk5OTknLFxyXG4gICAgbGFiZWxPdmVybGFwTWlub3JGaXg6IHRydWUsXHJcbiAgICBub0hvdmVyRWZmZWN0OiB0cnVlLFxyXG4gICAgbm9Ib3ZlckRpc3BsYXlEYXRhOiB0cnVlLFxyXG4gICAgc2hvd1hheGlzVG9wOiB0cnVlLFxyXG4gICAgZGlzcGxheVlheGlzTGFiZWxzOiB1bmRlZmluZWQsXHJcbiAgICB4TGFiZWxzT25TYW1lTGluZTogdW5kZWZpbmVkLFxyXG4gICAgdGV4dEFsd2F5c0hvcml6b250YWw6IHVuZGVmaW5lZCxcclxuICAgIGxlZ2VuZEF0VG9wUmlnaHQ6IHVuZGVmaW5lZCxcclxuICAgIGlzRHJpbGxkb3duQ2hhcnQ6IHRydWUsXHJcbiAgICBkaXNwbGF5VGl0bGVPblRvcDogdW5kZWZpbmVkLFxyXG4gICAgaXNUb2dnbGVWaXNpYmxlOiB1bmRlZmluZWQsXHJcbiAgICBpc1RpdGxlSGlkZGVuOiB1bmRlZmluZWQsXHJcbiAgICBpc0Rpc3BsYXlCYXJEZXRhaWxzQXRCb3R0b206IHVuZGVmaW5lZCxcclxuICAgIGhvd21hbnlCYXJEZXRhaWxzVG9EaXNwbGF5OiAwLFxyXG4gICAgYmFyVmF1bGVDb2xvcjogdW5kZWZpbmVkLFxyXG4gICAgZGVmYXVsdEJhckhlaWdodDogMixcclxuICB9O1xyXG5cclxuICB1bmlxdWVJZDogYW55ID0gdGhpcy5nZXRVbmlxdWVJZCgpO1xyXG4gIGlzWm9vbWVkT3V0OiBib29sZWFuID0gdHJ1ZTtcclxuICBpc0REMU9wZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0REMk9wZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgb25SZXNpemVkKGV2ZW50OiBSZXNpemVkRXZlbnQpIHtcclxuICAgIGxldCBzZWxmID0gdGhpcztcclxuICAgIHNldFRpbWVvdXQoXHJcbiAgICAgIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBkMy5zZWxlY3QoJyMnICsgc2VsZi51bmlxdWVJZCkucmVtb3ZlKCk7XHJcbiAgICAgICAgc2VsZi5pbml0aWFsaXplZ3JvdXBDaGFydCgpO1xyXG4gICAgICB9LmJpbmQoc2VsZiksXHJcbiAgICAgIDEwXHJcbiAgICApO1xyXG4gIH1cclxuICBpc1pvb21PdXRTZWxlY3RlZChpc1pvb21PdXQsIGV2ZW50KSB7XHJcbiAgICB0aGlzLmlzWm9vbWVkT3V0ID0gaXNab29tT3V0O1xyXG4gICAgdGhpcy5vblJlc2l6ZWQoZXZlbnQpO1xyXG4gIH1cclxuICBoYW5kbGVab29taW5ab29tb3V0Q2xpY2soeyBpc1pvb21PdXQsIGV2ZW50IH0pIHtcclxuICAgIHRoaXMuaXNab29tT3V0U2VsZWN0ZWQoaXNab29tT3V0LCBldmVudCk7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCkge31cclxuICBpc0xlZ2VuZFZpc2libGUoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2hhcnREYXRhICYmXHJcbiAgICAgIHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9ycyAmJlxyXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvcnMpLmxlbmd0aCA+IDFcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2VlcE9yZGVyID0gKGEsIGIpID0+IHtcclxuICAgIHJldHVybiBhO1xyXG4gIH07XHJcblxyXG4gIGdldCBpc0FsZXJ0RW5hYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbj8uaGVhZGVyTWVudU9wdGlvbnM/LnNvbWUoXHJcbiAgICAgIChvcHRpb24pID0+IG9wdGlvbi5pZCA9PT0gJ2VkaXRBbGVydCdcclxuICAgICk7XHJcbiAgfSAgXHJcblxyXG5pbml0aWFsaXplZ3JvdXBDaGFydCgpIHtcclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBWQVJJQUJMRSBERUNMQVJBVElPTlMgPT09PT09PT09PT09PT09PT09PT1cclxuICBjb25zdCBzZWxmID0gdGhpcztcclxuICBsZXQgZGF0YSA9IFtdO1xyXG4gIGxldCBtZXRhRGF0YTogYW55ID0gbnVsbDtcclxuICBsZXQga2V5TGlzdCA9IG51bGw7XHJcbiAgbGV0IGxpbmVEYXRhID0gbnVsbDtcclxuICBsZXQgY29sb3JNYXAgPSB7fTtcclxuICBsZXQgZm9ybWF0RnJvbUJhY2tlbmQ7XHJcbiAgbGV0IGZvcm1hdEZvckh1Z2VOdW1iZXJzO1xyXG4gIFxyXG4gIC8vIERldmljZSBkZXRlY3Rpb25cclxuICBjb25zdCBpc01vYmlsZSA9IHdpbmRvdy5pbm5lcldpZHRoIDwgNTc2O1xyXG4gIGNvbnN0IGlzVGFibGV0ID0gd2luZG93LmlubmVyV2lkdGggPj0gNTc2ICYmIHdpbmRvdy5pbm5lcldpZHRoIDwgOTkyO1xyXG4gIGNvbnN0IGlzRGVza3RvcCA9IHdpbmRvdy5pbm5lcldpZHRoID49IDk5MjtcclxuICBjb25zdCBpc3JpYSA9IHRoaXMuY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uLmlzUmlhO1xyXG5cclxuICAvLyBDaGFydCBzY2FsZSB2YXJpYWJsZXNcclxuICBsZXQgeDogYW55O1xyXG4gIGxldCB0ZW1wU2NhbGU7XHJcblxyXG4gIC8vIFRpY2sgbGVuZ3RoIGNvbnN0YW50c1xyXG4gIGNvbnN0IFNIT1JUX1RJQ0tfTEVOR1RIID0gNDtcclxuICBjb25zdCBMT05HX1RJQ0tfTEVOR1RIID0gMTY7XHJcbiAgY29uc3QgU0hPUlRfVElDS19MRU5HVEhfQkcgPSA1O1xyXG4gIGNvbnN0IExPTkdfVElDS19MRU5HVEhfQkcgPSAzMDtcclxuICBjb25zdCBMRUZUX0FORF9SSUdIVF9TUEFDRVMgPSA1MDtcclxuICBjb25zdCBSSUdIVF9TVkdfV0lEVEggPSA2MDtcclxuICBcclxuICAvLyBGbGFnc1xyXG4gIGxldCBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBDT05GSUdVUkFUSU9OIFNFVFVQID09PT09PT09PT09PT09PT09PT09XHJcbiAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbikge1xyXG4gICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb25ba2V5XSA9IENoYXJ0SGVscGVyLmdldFZhbHVlQnlDb25maWd1cmF0aW9uVHlwZShcclxuICAgICAga2V5LFxyXG4gICAgICB0aGlzLmRlZmF1bHRDb25maWd1cmF0aW9uLFxyXG4gICAgICB0aGlzLmN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvblxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIEV4dHJhY3QgY2hhcnQgZGF0YVxyXG4gIGRhdGEgPSB0aGlzLmNoYXJ0RGF0YS5kYXRhO1xyXG4gIG1ldGFEYXRhID0gdGhpcy5jaGFydERhdGEubWV0YURhdGE7XHJcbiAgbGluZURhdGEgPSB0aGlzLmNoYXJ0RGF0YS5saW5lRGF0YTtcclxuXHJcbiAgLy8gU2V0dXAgY29sb3IgbWFwcGluZ3NcclxuICBpZiAoIW1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXQpIHtcclxuICAgIG1ldGFEYXRhWydjb2xvckFib3ZlVGFyZ2V0J10gPSBtZXRhRGF0YS5jb2xvcnM7XHJcbiAgfVxyXG4gIGNvbG9yTWFwID0gbWV0YURhdGEuY29sb3JzO1xyXG4gIGtleUxpc3QgPSBtZXRhRGF0YS5rZXlMaXN0O1xyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBDT05UQUlORVIgU0VUVVAgPT09PT09PT09PT09PT09PT09PT1cclxuICBjb25zdCBjaGFydENvbnRhaW5lciA9IGQzLnNlbGVjdCh0aGlzLmNvbnRhaW5lckVsdC5uYXRpdmVFbGVtZW50KTtcclxuICBjb25zdCB2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIgPSBkMy5zZWxlY3QodGhpcy5ncm91cGNvbnRhaW5lckVsdC5uYXRpdmVFbGVtZW50KTtcclxuICBjb25zdCBtYXJnaW4gPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5tYXJnaW47XHJcbiAgXHJcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLmNhbGN1bGF0ZUNoYXJ0RGltZW5zaW9ucyhcclxuICAgIGNoYXJ0Q29udGFpbmVyLFxyXG4gICAgdmVydGljYWxzdGFja2VkY29udGFpbmVyLFxyXG4gICAgbWFyZ2luLFxyXG4gICAgc2VsZlxyXG4gICk7XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IFZJU0lCSUxJVFkgQ09ORklHVVJBVElPTiA9PT09PT09PT09PT09PT09PT09PVxyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0hlYWRlclZpc2libGUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5pc0hlYWRlclZpc2libGUgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0hlYWRlclZpc2libGU7XHJcbiAgfVxyXG5cclxuICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubGVnZW5kVmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLmxlZ2VuZFZpc2libGUgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5sZWdlbmRWaXNpYmxlO1xyXG4gIH1cclxuXHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kICE9PSB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuaXNUcmFuc3BhcmVudEJhY2tncm91bmQgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1RyYW5zcGFyZW50QmFja2dyb3VuZDtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IERBVEEgRk9STUFUVElORyA9PT09PT09PT09PT09PT09PT09PVxyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0Rm9ybWF0dGVyICE9PSB1bmRlZmluZWQpIHtcclxuICAgIGZvcm1hdEZyb21CYWNrZW5kID0gQ2hhcnRIZWxwZXIuZGF0YVZhbHVlRm9ybWF0dGVyKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRGb3JtYXR0ZXIpO1xyXG4gICAgZm9ybWF0Rm9ySHVnZU51bWJlcnMgPSBDaGFydEhlbHBlci5kYXRhVmFsdWVGb3JtYXR0ZXIoJy4ycycpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gU1ZHIENPTlRBSU5FUlMgQ1JFQVRJT04gPT09PT09PT09PT09PT09PT09PT1cclxuICBjb25zdCB7XHJcbiAgICBvdXRlckNvbnRhaW5lcixcclxuICAgIHN2Z1lBeGlzTGVmdCxcclxuICAgIHN2Z1lBeGlzUmlnaHQsXHJcbiAgICBpbm5lckNvbnRhaW5lcixcclxuICAgIHN2Z1xyXG4gIH0gPSB0aGlzLmNyZWF0ZUNoYXJ0Q29udGFpbmVycyhjaGFydENvbnRhaW5lciwgbWFyZ2luLCBoZWlnaHQsIFJJR0hUX1NWR19XSURUSCwgc2VsZiwgd2lkdGgpO1xyXG5cclxuICAvLyBPbmx5IGVuYWJsZSBob3Jpem9udGFsIHNjcm9sbGluZyBvbiBtb2JpbGUvdGFibGV0IHdoZW4gaW4gem9vbWVkLW91dFxyXG4gIC8vIG1vZGUgYW5kIHRoZXJlIGFyZSBtYW55IGdyb3VwcyBvciBtdWx0aXBsZSBzdWJncm91cHMuIE90aGVyd2lzZSBrZWVwXHJcbiAgLy8gdGhlIGlubmVyIGNvbnRhaW5lciBmaXhlZCAobm8gc2Nyb2xsYmFyKS5cclxuICB0cnkge1xyXG4gICAgY29uc3QgZ3JvdXBzQ291bnQgPSAoZGF0YSBhcyBhbnkpLmxlbmd0aCB8fCAwO1xyXG4gICAgY29uc3Qgc3ViZ3JvdXBzQ291bnQgPSAoa2V5TGlzdCBhcyBhbnkgJiYgKGtleUxpc3QgYXMgYW55KS5sZW5ndGgpIHx8IDA7XHJcbiAgICAvLyBPbiBtb2JpbGUvdGFibGV0OiBhbHdheXMgZW5hYmxlIGhvcml6b250YWwgc2Nyb2xsaW5nIHdoZW4gdGhlcmUgaXNcclxuICAgIC8vIG1vcmUgdGhhbiBvbmUgc3ViZ3JvdXAgc28gZ3JvdXBlZCBiYXJzIGRvbid0IGdldCBjb25nZXN0ZWQuXHJcbiAgICAvLyBPbiBkZXNrdG9wOiBlbmFibGUgc2Nyb2xsaW5nIHdoZW4gdGhlcmUgYXJlIG1hbnkgZ3JvdXBzIG9yXHJcbiAgICAvLyBtdWx0aXBsZSBzdWJncm91cHMgKGtlZXBzIHByZXZpb3VzIGJlaGF2aW9yKS5cclxuICAgIGlmICgoaXNNb2JpbGUgfHwgaXNUYWJsZXQpICYmIHN1Ymdyb3Vwc0NvdW50ID4gMSkge1xyXG4gICAgICBpbm5lckNvbnRhaW5lci5zdHlsZSgnb3ZlcmZsb3cteCcsICdhdXRvJyk7XHJcbiAgICAgIGlubmVyQ29udGFpbmVyLmNsYXNzZWQoJ3Njcm9sbC1lbmFibGVkJywgdHJ1ZSk7XHJcbiAgICB9IGVsc2UgaWYgKGdyb3Vwc0NvdW50ID4gOCB8fCBzdWJncm91cHNDb3VudCA+IDIpIHtcclxuICAgICAgaW5uZXJDb250YWluZXIuc3R5bGUoJ292ZXJmbG93LXgnLCAnYXV0bycpO1xyXG4gICAgICBpbm5lckNvbnRhaW5lci5jbGFzc2VkKCdzY3JvbGwtZW5hYmxlZCcsIHRydWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaW5uZXJDb250YWluZXIuc3R5bGUoJ292ZXJmbG93LXgnLCAnaGlkZGVuJyk7XHJcbiAgICAgIGlubmVyQ29udGFpbmVyLmNsYXNzZWQoJ3Njcm9sbC1lbmFibGVkJywgZmFsc2UpO1xyXG4gICAgfVxyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIC8vIGlnbm9yZVxyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gU0NBTEVTIFNFVFVQID09PT09PT09PT09PT09PT09PT09XHJcbiAgY29uc3Qgc3ViZ3JvdXBzOiBhbnkgPSBrZXlMaXN0O1xyXG4gIGNvbnN0IGdyb3VwcyA9IGQzLm1hcChkYXRhLCAoZCkgPT4gZC5uYW1lKS5rZXlzKCk7XHJcblxyXG4gIC8vIFgtYXhpcyBzY2FsZSBjb25maWd1cmF0aW9uXHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc3QgcGFkZGluZ1ZhbHVlID0gKGlzcmlhICYmIHN1Ymdyb3Vwcy5sZW5ndGggPT09IDEpID8gMC4xIDogMC41O1xyXG4gICAgeCA9IGQzLnNjYWxlQmFuZCgpXHJcbiAgICAgIC5yYW5nZVJvdW5kKFt3aWR0aCwgMF0pXHJcbiAgICAgIC5hbGlnbigwLjUpXHJcbiAgICAgIC5wYWRkaW5nKFtwYWRkaW5nVmFsdWVdKVxyXG4gICAgICAuZG9tYWluKGRhdGEubWFwKChkOiBhbnkpID0+IGQubmFtZS50b0xvd2VyQ2FzZSgpKSk7XHJcbiAgfSBlbHNlIHtcclxuICAgICBjb25zdCBwYWRkaW5nVmFsdWUgPSAoaXNyaWEgJiYgc2VsZi5jaGFydERhdGEuZGF0YS5sZW5ndGggPj0gOCkgPyAwLjEwIDogMC4zO1xyXG4gICAgeCA9IGQzLnNjYWxlQmFuZCgpXHJcbiAgICAgIC5kb21haW4oZ3JvdXBzKVxyXG4gICAgICAucmFuZ2UoW0xFRlRfQU5EX1JJR0hUX1NQQUNFUywgd2lkdGggLSBSSUdIVF9TVkdfV0lEVEggLSBMRUZUX0FORF9SSUdIVF9TUEFDRVNdKVxyXG4gICAgICAucGFkZGluZyhbcGFkZGluZ1ZhbHVlXSk7XHJcbiAgfVxyXG5cclxuICBjb25zdCB4U2NhbGVGcm9tT3JpZ2luID0gZDMuc2NhbGVCYW5kKClcclxuICAgIC5kb21haW4oZ3JvdXBzKVxyXG4gICAgLnJhbmdlKFswLCB3aWR0aCAtIFJJR0hUX1NWR19XSURUSF0pO1xyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBYLUFYSVMgUkVOREVSSU5HID09PT09PT09PT09PT09PT09PT09XHJcbiAgdGhpcy5yZW5kZXJYQXhpcyhzdmcsIHgsIGhlaWdodCwgbWV0YURhdGEsIHN1Ymdyb3VwcywgZGF0YSwgXHJcbiAgICBTSE9SVF9USUNLX0xFTkdUSF9CRywgTE9OR19USUNLX0xFTkdUSF9CRywgc2VsZiwgaXNyaWEsIGlzTW9iaWxlLCBpc1RhYmxldCk7XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IFktQVhJUyBTRVRVUCA9PT09PT09PT09PT09PT09PT09PVxyXG4gIGNvbnN0IHkgPSBkMy5zY2FsZUxpbmVhcigpLnJhbmdlUm91bmQoW2hlaWdodCwgMF0pO1xyXG4gIGxldCBtYXhWYWx1ZSA9IHRoaXMuY2FsY3VsYXRlTWF4VmFsdWUoZGF0YSwga2V5TGlzdCk7XHJcblxyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXN0b21Zc2NhbGUpIHtcclxuICAgIG1heFZhbHVlID0gbWF4VmFsdWUgKiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXN0b21Zc2NhbGU7XHJcbiAgfVxyXG5cclxuICBpZiAodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEgJiYgbWF4VmFsdWUgPCB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpIHtcclxuICAgIG1heFZhbHVlID0gbWF4VmFsdWUgPCAxMCAmJiB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQgPCAxMFxyXG4gICAgICA/IHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCArIDNcclxuICAgICAgOiB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQgKyAyMDtcclxuICB9XHJcblxyXG4gIHkuZG9tYWluKFswLCBtYXhWYWx1ZV0pLm5pY2UoKTtcclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gTElORSBDSEFSVCBZLVNDQUxFID09PT09PT09PT09PT09PT09PT09XHJcbiAgbGV0IGxpbmVZc2NhbGU7XHJcbiAgbGV0IHlMaW5lQXhpcztcclxuXHJcbiAgaWYgKGxpbmVEYXRhICE9IG51bGwpIHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc2V0dXBMaW5lWVNjYWxlKGxpbmVEYXRhLCBoZWlnaHQsIHNlbGYpO1xyXG4gICAgbGluZVlzY2FsZSA9IHJlc3VsdC5saW5lWXNjYWxlO1xyXG4gICAgeUxpbmVBeGlzID0gcmVzdWx0LnlMaW5lQXhpcztcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IEdSSUQgTElORVMgPT09PT09PT09PT09PT09PT09PT1cclxuICB0aGlzLnJlbmRlckdyaWRMaW5lcyhzdmcsIHgsIHksIGhlaWdodCwgd2lkdGgsIHNlbGYsIGlzcmlhKTtcclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gQkFSUyBSRU5ERVJJTkcgPT09PT09PT09PT09PT09PT09PT1cclxuICBjb25zdCB4U3ViZ3JvdXAgPSB0aGlzLnNldHVwWFN1Ymdyb3VwU2NhbGUoc3ViZ3JvdXBzLCB4LCBzZWxmKTtcclxuICBjb25zdCBjb2xvciA9IGQzLnNjYWxlT3JkaW5hbCgpXHJcbiAgICAuZG9tYWluKHN1Ymdyb3VwcylcclxuICAgIC5yYW5nZShPYmplY3QudmFsdWVzKG1ldGFEYXRhLmNvbG9ycykpO1xyXG5cclxuICB0aGlzLnJlbmRlckJhcnMoc3ZnLCBkYXRhLCBzdWJncm91cHMsIHgsIHhTdWJncm91cCwgeSwgaGVpZ2h0LCBjb2xvciwgXHJcbiAgICBtZXRhRGF0YSwgc2VsZiwgTEVGVF9BTkRfUklHSFRfU1BBQ0VTLCB0ZW1wU2NhbGUsIGlzcmlhKTtcclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gQkFSIExBQkVMUyA9PT09PT09PT09PT09PT09PT09PVxyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0c09uQmFyICE9PSB1bmRlZmluZWQgJiYgIXRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgIHRoaXMucmVuZGVyQmFyTGFiZWxzKHN2ZywgZGF0YSwgc3ViZ3JvdXBzLCB4LCB4U3ViZ3JvdXAsIHksIGhlaWdodCwgXHJcbiAgICAgIG1ldGFEYXRhLCBzZWxmLCB0ZW1wU2NhbGUsIGlzcmlhKTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IFktQVhJUyBSRU5ERVJJTkcgPT09PT09PT09PT09PT09PT09PT1cclxuICB0aGlzLnJlbmRlcllBeGlzKHN2Zywgc3ZnWUF4aXNMZWZ0LCBzdmdZQXhpc1JpZ2h0LCB5LCB5TGluZUF4aXMsIFxyXG4gICAgbGluZURhdGEsIHNlbGYsIGlzcmlhLCBtYXJnaW4pO1xyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBBWElTIExBQkVMUyA9PT09PT09PT09PT09PT09PT09PVxyXG4gIHRoaXMucmVuZGVyQXhpc0xhYmVscyhzdmcsIHN2Z1lBeGlzTGVmdCwgc3ZnWUF4aXNSaWdodCwgbWV0YURhdGEsIFxyXG4gICAgd2lkdGgsIGhlaWdodCwgbWFyZ2luLCBzZWxmLCBpc3JpYSwgUklHSFRfU1ZHX1dJRFRIKTtcclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gVEFSR0VUIExJTkUgPT09PT09PT09PT09PT09PT09PT1cclxuICBpZiAodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEpIHtcclxuICAgIHRoaXMucmVuZGVyVGFyZ2V0TGluZShzdmcsIHN2Z1lBeGlzUmlnaHQsIHksIHdpZHRoLCBSSUdIVF9TVkdfV0lEVEgsIFxyXG4gICAgICBtZXRhRGF0YSwgc2VsZiwgaXNyaWEpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gTElORSBDSEFSVCA9PT09PT09PT09PT09PT09PT09PVxyXG4gIGlmIChsaW5lRGF0YSkge1xyXG4gICAgdGhpcy5yZW5kZXJMaW5lQ2hhcnQoc3ZnLCBsaW5lRGF0YSwgeCwgbGluZVlzY2FsZSwgbWV0YURhdGEsIHNlbGYpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gWk9PTSBIQU5ETElORyA9PT09PT09PT09PT09PT09PT09PVxyXG4gIGlmICh0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICB0aGlzLmhhbmRsZVpvb21PdXQoc3ZnLCBoZWlnaHQsIG1hcmdpbik7XHJcbiAgfVxyXG59XHJcblxyXG4vLyA9PT09PT09PT09PT09PT09PT09PSBIRUxQRVIgTUVUSE9EUyA9PT09PT09PT09PT09PT09PT09PVxyXG5cclxucHJpdmF0ZSByZW5kZXJYQXhpcyhzdmcsIHgsIGhlaWdodCwgbWV0YURhdGEsIHN1Ymdyb3VwcywgZGF0YSwgXHJcbiAgc2hvcnRUaWNrTGVuZ3RoQmcsIGxvbmdUaWNrTGVuZ3RoQmcsIHNlbGYsIGlzcmlhLCBpc01vYmlsZSwgaXNUYWJsZXQpIHtcclxuICBcclxuICBsZXQgYWx0ZXJuYXRlX3RleHQgPSBmYWxzZTtcclxuXHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lID09PSB1bmRlZmluZWQpIHtcclxuICAgIC8vIE5vcm1hbCB0aWNrcyBmb3IgZGFzaGJvYXJkIGNoYXJ0c1xyXG4gICAgLy8gRHluYW1pY2FsbHkgYWRqdXN0IFkgdHJhbnNsYXRpb24gZm9yIG1vYmlsZVxyXG4gICAgbGV0IHRyYW5zbGF0ZVkgPSBoZWlnaHQ7XHJcbiAgICBpZiAoaXNNb2JpbGUpIHtcclxuICAgICAgdHJhbnNsYXRlWSA9IGhlaWdodCArIDEwOyAvLyBBZGQgZXh0cmEgc3BhY2UgYXQgdGhlIHRvcCBmb3IgbW9iaWxlXHJcbiAgICB9XHJcbiAgICBzdmcuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ3gxIGF4aXMxJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwke3RyYW5zbGF0ZVl9KWApXHJcbiAgICAgIC8vIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKC0zNSwke3RyYW5zbGF0ZVl9KWApXHJcbiAgICAgIC8vIC5jYWxsKGQzLmF4aXNCb3R0b20oeCkpXHJcbiAgICAgICAuY2FsbChpc3JpYSA/IGQzLmF4aXNCb3R0b20oeCkudGlja1NpemUoMCkgOiBkMy5heGlzQm90dG9tKHgpKSBcclxuICAgICAgIFxyXG4gICAgICAvLyAuY2FsbCgoZykgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5yZW1vdmUoKSk7XHJcbiAgICAgIC8vIC5jYWxsKChnKSA9PiB7IGlmICghaXNyaWEpIGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCk7IH0pXHJcbiAgICAgIC5jYWxsKGcgPT4ge1xyXG4gICAgLy8gUklBICsgc2luZ2xlIHN1Ymdyb3VwIOKGkiByZW1vdmUgZG9tYWluXHJcbiAgICAvLyBpZiAoaXNyaWEgJiYgKHN1Ymdyb3Vwcy5sZW5ndGggPiAxICYmIHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoID09PTEgKSkge1xyXG4gICAgLy8gICAgIGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCk7XHJcbiAgICAvLyAgIHJldHVybjtcclxuICAgICAgICBcclxuICAgIC8vIH1cclxuICAgIC8vIC8vIERlZmF1bHQgYmVoYXZpb3JcclxuICAgIC8vIGlmICghaXNyaWEpIHtcclxuICAgICAgICBnLnNlbGVjdCgnLmRvbWFpbicpLnJlbW92ZSgpO1xyXG4gICAgLy8gfVxyXG59KVxyXG4gICAgICAvLyAgLmNhbGwoKGcpID0+IHtcclxuICAgIC8vIE1vdmUgb25seSB0aGUgYXhpcyBsaW5lIChkb21haW4pIHRvIHRoZSBsZWZ0XHJcbiAgICAvLyBnLnNlbGVjdCgnLmRvbWFpbicpLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoLTYwLDApJyk7fSlcclxuICAgICAuY2FsbCgoZykgPT4ge1xyXG4gICAgLy8gSW5jcmVhc2Ugc3BhY2luZyBiZXR3ZWVuIGF4aXMgYW5kIGxhYmVsc1xyXG4gICAgaWYoaXNyaWEgJiYgKHN1Ymdyb3Vwcy5sZW5ndGggPT09IDEgfHwgc2VsZi5jaGFydERhdGEuZGF0YS5sZW5ndGggPjEgKSkge1xyXG4gICAgZy5zZWxlY3RBbGwoJy50aWNrIHRleHQnKVxyXG4gICAgICAuYXR0cignZHknLCAnMWVtJyk7IC8vIERlZmF1bHQgaXMgJzAuNzFlbScsIGluY3JlYXNlIGZvciBtb3JlIHNwYWNlXHJcbiAgICB9XHJcbiAgfSlcclxuICAuY2FsbCgoZykgPT4ge1xyXG4gIC8vIFJlbW92ZSBvbmx5IHRoZSBsYXN0IHRpY2tcclxuICAgaWYoaXNyaWEgJiYgc3ViZ3JvdXBzLmxlbmd0aCA9PT0gMSkge1xyXG4gIGNvbnN0IHRpY2tzID0gZy5zZWxlY3RBbGwoJy50aWNrJyk7XHJcbiAgaWYgKHRpY2tzLnNpemUoKSA+IDApIHtcclxuICAgIC8vIGQzLnNlbGVjdCh0aWNrcy5ub2RlcygpW3RpY2tzLnNpemUoKSAtIDFdKS5yZW1vdmUoKTtcclxuICAgICBkMy5zZWxlY3QodGlja3Mubm9kZXMoKVt0aWNrcy5zaXplKCkgLSAxXSkuc2VsZWN0KCdsaW5lJykucmVtb3ZlKCk7XHJcbiAgfVxyXG59XHJcbn0pO1xyXG5cclxuICAgIHN2Zy5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIGxpbmUnKS5yZW1vdmUoKTtcclxuXHJcbiAgICBjb25zdCB5T2Zmc2V0ID0gc3ViZ3JvdXBzLmxlbmd0aCA+IDEgJiYgIW1ldGFEYXRhLnhMYWJlbCA/IDMyIDogMDtcclxuICAgXHJcbiAgICBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAgICAgLy8gLmF0dHIoJ2NsYXNzJywgJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgaXNyaWEgXHJcbiAgICA/ICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bi1yaWEnIFxyXG4gICAgOiAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nXHJcbilcclxuICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgICAgLmF0dHIoJ3knLCB5T2Zmc2V0IHx8IG51bGwpO1xyXG4gXHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIEJpZ2dlciB0aWNrcyBmb3Igd2Vla2x5IGNoYXJ0c1xyXG4gICAgc3ZnLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICd4MSBheGlzMScpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHtoZWlnaHR9KWApXHJcbiAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeCkudGlja1NpemUoMCkpXHJcbiAgICAgIC5jYWxsKChnKSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpLmF0dHIoJ2ZpbGwnLCAnbm9uZScpKTtcclxuXHJcbiAgICAvLyBBbHRlcm5hdGUgdGljayBsaW5lIHNpemVzXHJcbiAgICBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayBsaW5lJykuYXR0cigneTInLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGlmIChhbHRlcm5hdGVfdGV4dCAmJiBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc05vQWx0ZXJuYXRlWGF4aXNUZXh0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBsb25nVGlja0xlbmd0aEJnIC0gNztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHNob3J0VGlja0xlbmd0aEJnIC0gNDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG4gICAgLy8gWC1heGlzIGxhYmVsIHRleHRzXHJcbiAgICBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtd2Vla2x5Y2hhcnRzJylcclxuICAgICAgLmF0dHIoJ3knLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzRnVsbFNjcmVlbikge1xyXG4gICAgICAgICAgcmV0dXJuIHNob3J0VGlja0xlbmd0aEJnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYWx0ZXJuYXRlX3RleHQpIHtcclxuICAgICAgICAgIGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm4gbG9uZ1RpY2tMZW5ndGhCZztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSB0cnVlO1xyXG4gICAgICAgICAgcmV0dXJuIHNob3J0VGlja0xlbmd0aEJnO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIFxyXG4gIC8vIEFwcGx5IGxhYmVscyBvbiBzYW1lIGxpbmUgY29uZmlndXJhdGlvblxyXG4gIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi54TGFiZWxzT25TYW1lTGluZSkge1xyXG4gICAgdGhpcy5hcHBseVhMYWJlbHNPblNhbWVMaW5lKHN2Zywgc3ViZ3JvdXBzLCBkYXRhLCBtZXRhRGF0YSwgc2VsZiwgXHJcbiAgICAgIHNob3J0VGlja0xlbmd0aEJnLCBpc01vYmlsZSwgaXNyaWEpO1xyXG4gIH1cclxuXHJcbiAgLy8gTW9iaWxlIG92ZXJyaWRlIGZvciBSSUFcclxuICBpZiAoaXNyaWEgJiYgc2VsZi5jaGFydERhdGEuZGF0YS5sZW5ndGggPj0zKSB7XHJcbiAgICBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAgICAgLmNsYXNzZWQoJ21vYmlsZS14YXhpcy1vdmVycmlkZScsIGZhbHNlKVxyXG4gICAgICAvLyAvLyAudGV4dCgoZDogc3RyaW5nKSA9PiBkLnN1YnN0cmluZygwLCAzKSlcclxuICAgICAgLy8gLnRleHQoKGQ6IHN0cmluZykgPT4gZC5zdWJzdHJpbmcoMCwgNCkudG9Mb3dlckNhc2UoKSlcclxuICAgICAgLy8gLnRleHQoKGQ6IHN0cmluZykgPT4gZC50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAudGV4dCgoZDogc3RyaW5nKSA9PiBkKVxyXG4gICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICcxMXB4JylcclxuICAgICAgLmF0dHIoJ3knLCA1KVxyXG4gICAgICAuYXR0cigneCcsIDUpXHJcbiAgICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCAnbWlkZGxlJyk7XHJcbiAgfVxyXG4gICAgaWYgKGlzcmlhICYmIHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoID49IDgpIHtcclxuICAgIHN2Zy5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIHRleHQnKVxyXG4gICAgICAuYXR0cigneCcsIC0yMCk7XHJcbiAgfVxyXG4gIC8vICAgIGlmICghaXNyaWEgJiYgc2VsZi5jaGFydERhdGEuZGF0YS5sZW5ndGggPiAxMSAgJiYgIXNlbGYuaXNab29tZWRPdXQgJiYgKHguYmFuZHdpZHRoPCAxMDApKSB7XHJcbiAgLy8gICBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAvLyAgICAgLmF0dHIoJ3gnLCAtMjApO1xyXG4gIC8vIH1cclxuLy8g4pyFIFRhYmxldCBWaWV3IOKAlCBSb3RhdGUgaWYgdGV4dCA+IDEwIGNoYXJhY3RlcnNcclxuaWYgKGlzVGFibGV0KSB7XHJcbiAgIGNvbnN0IHRleHROb2RlcyA9IHN2Zy5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIHRleHQnKTtcclxuICB0ZXh0Tm9kZXMuZWFjaChmdW5jdGlvbiAoZDogYW55KSB7XHJcbiAgICBjb25zdCB0ZXh0ID0gZCA/IGQudG9TdHJpbmcoKS50cmltKCkgOiAnJztcclxuXHJcbiAgICAvLyBEZXRlY3QgZGF0ZSBmb3JtYXRzICh0byBza2lwIHRoZW0pXHJcbiAgICBjb25zdCBpc0RhdGVTdHJpbmcgPVxyXG4gICAgICAvXlxcZHsxLDR9Wy1cXC9dXFxkezEsMn1bLVxcL11cXGR7MSw0fSQvLnRlc3QodGV4dCkgfHwgLy8gZS5nLiAyMDI1LTEwLTI5IG9yIDEwLzI5LzIwMjVcclxuICAgICAgL14oXFxkezEsNH1bLVxcL11cXGR7MSwyfVstXFwvXVxcZHsxLDR9KVxccypbLeKAk11cXHMqKFxcZHsxLDR9Wy1cXC9dXFxkezEsMn1bLVxcL11cXGR7MSw0fSkkLy50ZXN0KHRleHQpOyBcclxuXHJcbiAgICAgIFxyXG4gICAgaWYgKCFpc0RhdGVTdHJpbmcgJiYgdGV4dC5sZW5ndGggPiAxMCkge1xyXG4gICAgICAgIGNvbnN0IHRyaW1tZWQgPSB0ZXh0LnNsaWNlKDAsOSkgKyAn4oCmJztcclxuICAgICAgdGV4dE5vZGVzXHJcbiAgICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnMTBweCcpXHJcbiAgICAgICAgLy8gLnRleHQodHJpbW1lZClcclxuICAgICAgIFxyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG5cclxuICAvLyBNb2JpbGUvdGFibGV0IG92ZXJyaWRlIC0gY2hlY2sgZm9yIHNpbmdsZS1ncm91cCBkYXRlIGNoYXJ0cyBmaXJzdFxyXG4gIGlmIChpc01vYmlsZSkge1xyXG4gICAgY29uc3QgdGV4dE5vZGVzID0gc3ZnLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgdGV4dCcpO1xyXG4gICAgY29uc3QgZ3JvdXBzQ291bnQgPSAoZGF0YSBhcyBhbnkpLmxlbmd0aCB8fCAwO1xyXG4gICAgXHJcbiAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGRhdGVzIGluIHgtYXhpcyBhbmQgc2luZ2xlIGdyb3VwXHJcbiAgICBsZXQgaGFzRGF0ZVZhbHVlcyA9IGZhbHNlO1xyXG4gICAgdGV4dE5vZGVzLmVhY2goZnVuY3Rpb24oZCkge1xyXG4gICAgICAvLyBDaGVjayBmb3IgZGF0ZSB2YWx1ZXMgdXNpbmcgYm90aCBEYXRlLnBhcnNlIGFuZCByZWdleCBmb3IgZGF0ZSBmb3JtYXRcclxuICAgICAgICBjb25zdCBpc0RhdGVTdHJpbmcgPVxyXG4gICAgL15cXGR7MSw0fVstXFwvXVxcZHsxLDJ9Wy1cXC9dXFxkezEsNH0kLy50ZXN0KGQudHJpbSgpKSB8fFxyXG4gICAgL14oXFxkezEsNH1bLVxcL11cXGR7MSwyfVstXFwvXVxcZHsxLDR9KVxccypbLeKAk11cXHMqKFxcZHsxLDR9Wy1cXC9dXFxkezEsMn1bLVxcL11cXGR7MSw0fSkkLy50ZXN0KGQudHJpbSgpKTtcclxuICAgICAgaWYgKCFoYXNEYXRlVmFsdWVzICYmIGlzRGF0ZVN0cmluZykge1xyXG4gICAgICAgIGhhc0RhdGVWYWx1ZXMgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBDb3VudCB1bmlxdWUgeC1heGlzIGxhYmVsc1xyXG4gICAgY29uc3QgdW5pcXVlTGFiZWxzID0gbmV3IFNldCgpO1xyXG4gICAgdGV4dE5vZGVzLmVhY2goZnVuY3Rpb24oZCkge1xyXG4gICAgICB1bmlxdWVMYWJlbHMuYWRkKGQpO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBsYWJlbENvdW50ID0gdW5pcXVlTGFiZWxzLnNpemU7XHJcbiAgICBpZiAoaGFzRGF0ZVZhbHVlcyAmJiBsYWJlbENvdW50IDwgMykge1xyXG4gICAgICAvLyBGb3IgMyBvciBmZXdlciBsYWJlbHMsIGtlZXAgaG9yaXpvbnRhbCBkaXNwbGF5XHJcbiAgICAgIHRleHROb2Rlc1xyXG4gICAgICAgIC5zdHlsZSgnd3JpdGluZy1tb2RlJywgJ2hvcml6b250YWwtdGInKSAgLy8gRXhwbGljaXRseSBzZXQgaG9yaXpvbnRhbFxyXG4gICAgICAgIC5jbGFzc2VkKCdtb2JpbGUteGF4aXMtb3ZlcnJpZGUnLCBmYWxzZSkgLy8gUmVtb3ZlIHZlcnRpY2FsIGNsYXNzXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICdyb3RhdGUoMCknKSAgICAgICAgICAvLyBSZW1vdmUgYW55IHJvdGF0aW9uXHJcbiAgICAgICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpICAgICAgICAgICAvLyBDZW50ZXIgYWxpZ25cclxuICAgICAgICAuYXR0cigneScsICFpc3JpYSA/IDIwIDogbnVsbCkgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFB1c2ggZG93biBhIGJpdFxyXG4gICAgICAgIC5hdHRyKCdkeCcsICcwJykgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXNldCBhbnkgeCBvZmZzZXRcclxuICAgICAgICAuYXR0cignZHknLCAnMCcpOyAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXQgYW55IHkgb2Zmc2V0XHJcbiAgICB9IGVsc2UgaWYgKGxhYmVsQ291bnQgPj0gMykge1xyXG4gICAgICAvLyBGb3IgbW9yZSB0aGFuIDMgbGFiZWxzLCB1c2UgdmVydGljYWwgYWxpZ25tZW50XHJcbiAgICAgIHRleHROb2Rlc1xyXG4gICAgICAgIC8vIC5zdHlsZSgnd3JpdGluZy1tb2RlJywgJ3NpZGV3YXlzLWxyJykgICAvLyBWZXJ0aWNhbCB0ZXh0XHJcbiAgICAgICAgLmNsYXNzZWQoJ21vYmlsZS14YXhpcy1vdmVycmlkZScsIHRydWUpIC8vIEFkZCB2ZXJ0aWNhbCBjbGFzc1xyXG4gICAgICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKSAgICAgICAgICAvLyBDZW50ZXIgYWxpZ25cclxuICAgICAgICAuYXR0cigneScsIDMwKSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRqdXN0IHZlcnRpY2FsIHBvc2l0aW9uXHJcbiAgICAgICAgLmF0dHIoJ3gnLCAwKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IHggcG9zaXRpb25cclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNIZWFkZXJWaXNpYmxlKSB7XHJcbiAgICAgIC8vIERlZmF1bHQgbW9iaWxlIGJlaGF2aW9yIGZvciBub24tZGF0ZSBvciBtdWx0aS1ncm91cFxyXG4gICAgICB0ZXh0Tm9kZXMuY2xhc3NlZCgnbW9iaWxlLXhheGlzLW92ZXJyaWRlJywgdHJ1ZSk7XHJcbiAgICB9ICBcclxuICB9XHJcbiAgICBpZiAoIWlzcmlhICYmICFzZWxmLmlzWm9vbWVkT3V0ICYmIHN1Ymdyb3Vwcy5sZW5ndGggPiAxICYmIGRhdGEubGVuZ3RoID4gOCAmJiB4LmJhbmR3aWR0aCgpID4gMTAwKSB7XHJcbiAgY29uc3QgaXNHcm91cGVkQmFycyA9IHN1Ymdyb3Vwcy5sZW5ndGggPiAxOyAvLyBNdWx0aXBsZSBiYXIgdHlwZXMgZGVmaW5lZFxyXG4gIC8vIEFsc28gdmVyaWZ5IGJhcnMgYXJlIGFjdHVhbGx5IHNpZGUtYnktc2lkZSBieSBjaGVja2luZyBmaXJzdCBncm91cFxyXG4gIGNvbnN0IGZpcnN0R3JvdXBIYXNNdWx0aXBsZUJhcnMgPSBzdWJncm91cHMuZmlsdGVyKGtleSA9PiB7XHJcbiAgICByZXR1cm4gZGF0YVswXVtrZXldICE9IG51bGwgJiYgZGF0YVswXVtrZXldICE9PSAtMTtcclxuICB9KS5sZW5ndGggPiAxO1xyXG4gIFxyXG4gIGlmICghZmlyc3RHcm91cEhhc011bHRpcGxlQmFycykge1xyXG4gICAgc3ZnLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgdGV4dCcpXHJcbiAgICAgIC5hdHRyKCd4JywgLTIwKTtcclxuICB9XHJcbiAgfVxyXG59XHJcblxyXG5wcml2YXRlIGFwcGx5WExhYmVsc09uU2FtZUxpbmUoc3ZnLCBzdWJncm91cHMsIGRhdGEsIG1ldGFEYXRhLCBzZWxmLCBcclxuICBzaG9ydFRpY2tMZW5ndGhCZywgaXNNb2JpbGUsIGlzcmlhKSB7XHJcbiAgXHJcbiAgY29uc3QgeEF4aXNMYWJlbHMgPSBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAgIC5hdHRyKCdjbGFzcycsICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bicpXHJcbiAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsIHRoaXMuaXNIZWFkZXJWaXNpYmxlICAmJiAhaXNyaWEgPyAnMThweCcgOiAnMTFweCcpXHJcbiAgICAuYXR0cigndGV4dC1hbmNob3InLCAnbWlkZGxlJylcclxuICAgIC5hdHRyKCd5JywgKGQpID0+IHRoaXMuY2FsY3VsYXRlWExhYmVsWVBvc2l0aW9uKGQsIHN1Ymdyb3VwcywgZGF0YSwgbWV0YURhdGEsIHNlbGYsIHNob3J0VGlja0xlbmd0aEJnKSlcclxuICAgIC5hdHRyKCd4JywgKGQpID0+IChzZWxmLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA+IDggJiYgIXNlbGYuaXNab29tZWRPdXQpID8gMSA6IDApXHJcbiAgICAudGV4dCgoZCkgPT4gdGhpcy5mb3JtYXRYTGFiZWxUZXh0KGQsIGRhdGEsIG1ldGFEYXRhLCBzdWJncm91cHMsIHNlbGYsIGlzTW9iaWxlKSk7XHJcblxyXG4gIC8vIEFwcGx5IHdyaXRpbmctbW9kZSBmb3IgZ3JvdXBlZCBjaGFydHMgd2l0aCBkYXRlIGxhYmVscyBpbiB6b29tZWQtb3V0IHZpZXdcclxuICB4QXhpc0xhYmVscy5lYWNoKGZ1bmN0aW9uKHRoaXM6IFNWR1RleHRFbGVtZW50LCBkOiBhbnkpIHtcclxuICAgIGNvbnN0IGlzRGF0ZUxhYmVsID0gL14oXFxkezIsNH1bLVxcL10pP1xcZHsyLDR9Wy1cXC9dXFxkezIsNH0kLy50ZXN0KGQudHJpbSgpKTtcclxuICAgIGNvbnN0IGlzV2Vla0xhYmVsID0gL3dlZWt8d2t8d1xcZCsvaS50ZXN0KGQpO1xyXG4gICAgXHJcbiAgICBpZiAoc3ViZ3JvdXBzLmxlbmd0aCA+IDEgJiYgc2VsZi5pc1pvb21lZE91dCAmJiBkYXRhLmxlbmd0aCA+IDggJiYgaXNEYXRlTGFiZWwgJiYgIWlzV2Vla0xhYmVsKSB7XHJcbiAgICAgIGQzLnNlbGVjdCh0aGlzKS5zdHlsZSgnd3JpdGluZy1tb2RlJywgJ3NpZGV3YXlzLWxyJyk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIC8vIEFkZCBzZWNvbmQgbGluZSBmb3Igbm9uLWRhdGUgbGFiZWxzIG9uIGRlc2t0b3BcclxuICBpZiAoIWlzTW9iaWxlKSB7XHJcbiAgICBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljaycpXHJcbiAgICAgIC5maWx0ZXIoKGQpID0+ICEvXFxkezIsNH1bLVxcL10vLnRlc3QoZCkpXHJcbiAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgICAuYXR0cigneScsMzApXHJcbiAgICAgIC5hdHRyKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgICAgLmF0dHIoJ3gnLCAoZCkgPT4gKHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoID4gOCAmJiAhc2VsZi5pc1pvb21lZE91dCkgPyAxIDogMClcclxuICAgICAgLnRleHQoKGQpID0+IHtcclxuICAgICAgICBpZiAoZC50cmltKCkuaW5kZXhPZignICcpID4gLTEpIHtcclxuICAgICAgICAgIHJldHVybiBkLnRyaW0oKS5zdWJzdHJpbmcoZC5pbmRleE9mKCcgJyksIGQubGVuZ3RoKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxucHJpdmF0ZSBjYWxjdWxhdGVYTGFiZWxZUG9zaXRpb24oZCwgc3ViZ3JvdXBzLCBkYXRhLCBtZXRhRGF0YSwgc2VsZiwgc2hvcnRUaWNrTGVuZ3RoQmcpIHtcclxuICAvLyBGb3IgZ3JvdXBlZCBiYXIgY2hhcnRzIHdpdGggbWFueSBiYXJzIGFuZCB4TGFiZWwgcHJlc2VudFxyXG4gIGlmIChzdWJncm91cHMubGVuZ3RoID4gMSAmJiBkYXRhLmxlbmd0aCA+IDggJiYgbWV0YURhdGEueExhYmVsKSB7XHJcbiAgICBjb25zdCBpc0RhdGVMYWJlbCA9IC9cXGR7Miw0fVstXFwvXS8udGVzdChkKTtcclxuICAgIHJldHVybiBpc0RhdGVMYWJlbCA/IHNob3J0VGlja0xlbmd0aEJnICsgMTQgOiBzaG9ydFRpY2tMZW5ndGhCZztcclxuICB9XHJcblxyXG4gIC8vIEZvciBncm91cGVkIGJhciBjaGFydHMgd2l0aCBtYW55IGJhcnMgYW5kIE5PIHhMYWJlbFxyXG4gIGlmIChzdWJncm91cHMubGVuZ3RoID4gMSAmJiBkYXRhLmxlbmd0aCA+IDggJiYgIW1ldGFEYXRhLnhMYWJlbCkge1xyXG4gICAgY29uc3QgY2hhcnRIYXNFeHRyYUJvdHRvbSA9IHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLm1hcmdpbiAmJiBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5tYXJnaW4uYm90dG9tID49IDQwO1xyXG4gICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzRnVsbFNjcmVlbikge1xyXG4gICAgICByZXR1cm4gc2hvcnRUaWNrTGVuZ3RoQmcgKyAyO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNoYXJ0SGFzRXh0cmFCb3R0b20gPyBzaG9ydFRpY2tMZW5ndGhCZyA6IHNob3J0VGlja0xlbmd0aEJnICsgMTA7XHJcbiAgfVxyXG5cclxuICAvLyBEZWZhdWx0L2ZhbGxiYWNrIGxvZ2ljXHJcbiAgY29uc3QgaXNyaWEgPSB0aGlzLmN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbi5pc1JpYTtcclxuICBsZXQgYmFzZVkgPSBzZWxmLmlzSGVhZGVyVmlzaWJsZSAmJiAhaXNyaWEgPyBzaG9ydFRpY2tMZW5ndGhCZyArIDI1IDogc2hvcnRUaWNrTGVuZ3RoQmc7XHJcbiAgXHJcbiAgaWYgKHN1Ymdyb3Vwcy5sZW5ndGggPiAxICYmICFtZXRhRGF0YS54TGFiZWwgJiYgICFpc3JpYSAmJlxyXG4gICAgICAoL1xcZHsyLDR9Wy1cXC9dXFxkezJ9Wy1cXC9dXFxkezIsNH0vLnRlc3QoZCkgfHwgL1xcZHsyLDR9Wy1cXC9dXFxkezIsNH0vLnRlc3QoZCkpKSB7XHJcbiAgICBiYXNlWSA9IHNlbGYuaXNIZWFkZXJWaXNpYmxlID8gc2hvcnRUaWNrTGVuZ3RoQmcgKyAxNSA6IHNob3J0VGlja0xlbmd0aEJnICsgMjU7XHJcbiAgfVxyXG5cclxuICBpZiAoL1xcZHsyLDR9Wy1cXC9dXFxkezIsNH0vLnRlc3QoZCkgJiYgZC5pbmRleE9mKCcgJykgPiAtMSAmJiAhaXNyaWEpIHtcclxuICAgIGJhc2VZICs9IDQ7XHJcbiAgfVxyXG5cclxuICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNGdWxsU2NyZWVuICYmIHN1Ymdyb3Vwcy5sZW5ndGggPiAxKSB7XHJcbiAgICBiYXNlWSA9IE1hdGgubWF4KHNob3J0VGlja0xlbmd0aEJnLCBiYXNlWSAtIDEwKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBiYXNlWTtcclxufVxyXG5cclxucHJpdmF0ZSBmb3JtYXRYTGFiZWxUZXh0KGQsIGRhdGEsIG1ldGFEYXRhLCBzdWJncm91cHMsIHNlbGYsIGlzTW9iaWxlKSB7XHJcbiAgLy8gQ2hlY2sgaWYgd2UncmUgb24gbW9iaWxlIG9yIHRhYmxldFxyXG4gIGNvbnN0IGlzU21hbGxTY3JlZW4gPSB3aW5kb3cuaW5uZXJXaWR0aCA8IDk5MjsgLy8gTGVzcyB0aGFuIDk5MnB4IChtb2JpbGUgb3IgdGFibGV0KVxyXG4gIFxyXG4gIC8vIEhlbHBlciB0byBleHRyYWN0IGFuZCBmb3JtYXQgd2VlayBudW1iZXJcclxuICBjb25zdCBleHRyYWN0V2Vla051bWJlciA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsID0+IHtcclxuICAgIGNvbnN0IG1hdGNoID0gdGV4dC5tYXRjaCgvKD86d2Vla3x3a3x3KVxccyooXFxkKykvaSk7XHJcbiAgICByZXR1cm4gbWF0Y2ggPyBgVyR7bWF0Y2hbMV19YCA6IG51bGw7XHJcbiAgfTtcclxuXHJcbiAgLy8gSGVscGVyIHRvIGV4dHJhY3QgZGF0ZSBwYXJ0XHJcbiAgY29uc3QgZXh0cmFjdERhdGUgPSAodGV4dDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCA9PiB7XHJcbiAgICBjb25zdCBtYXRjaCA9IHRleHQubWF0Y2goL1xcZHsyfVstXFwvXVxcZHsyfVstXFwvXVxcZHsyLDR9Lyk7XHJcbiAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFswXSA6IG51bGw7XHJcbiAgfTtcclxuXHJcbiAgLy8gQ2hlY2sgaWYgbGFiZWwgY29udGFpbnMgYm90aCBkYXRlIGFuZCB3ZWVrIGluZm9ybWF0aW9uXHJcbiAgY29uc3QgaGFzRGF0ZUFuZFRpbWUgPSAodGV4dDogc3RyaW5nKSA9PiB7XHJcbiAgICBjb25zdCBkYXRlTWF0Y2ggPSAvXFxkezIsNH1bLVxcL11cXGR7MSwyfVstXFwvXVxcZHsxLDR9Ly50ZXN0KHRleHQpO1xyXG4gICAgY29uc3Qgd2Vla01hdGNoID0gLyg/OndlZWt8d2t8dylcXHMqXFxkKy9pLnRlc3QodGV4dCk7XHJcbiAgICByZXR1cm4geyBpc0RhdGU6IGRhdGVNYXRjaCwgaXNXZWVrOiB3ZWVrTWF0Y2ggfTtcclxuICB9O1xyXG5cclxuICBjb25zdCBsYWJlbEluZm8gPSBoYXNEYXRlQW5kVGltZShkKTtcclxuXHJcbiAgLy8gTW9iaWxlIGhhbmRsaW5nOiBmb3JtYXQgZGF0ZSBhbmQgd2VlayBwYXJ0c1xyXG4gIGlmIChpc01vYmlsZSkge1xyXG4gICAgLy8gSWYgaGVhZGVyIGlzIGhpZGRlbiAoY29tcGFjdCBtb2JpbGUpXHJcbiAgICBpZiAoIXNlbGYuaXNIZWFkZXJWaXNpYmxlKSB7XHJcbiAgICAgIC8vIElmIGl0IGhhcyBib3RoIGRhdGUgYW5kIHdlZWssIGZvcm1hdCBhcHByb3ByaWF0ZWx5XHJcbiAgICAgIGlmIChsYWJlbEluZm8uaXNEYXRlICYmIGxhYmVsSW5mby5pc1dlZWspIHtcclxuICAgICAgICBjb25zdCBkYXRlUGFydCA9IGV4dHJhY3REYXRlKGQpO1xyXG4gICAgICAgIGNvbnN0IHdlZWtQYXJ0ID0gZXh0cmFjdFdlZWtOdW1iZXIoZCk7XHJcbiAgICAgICAgaWYgKGRhdGVQYXJ0ICYmIHdlZWtQYXJ0KSB7XHJcbiAgICAgICAgICByZXR1cm4gYCR7ZGF0ZVBhcnR9XFxuJHt3ZWVrUGFydH1gO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBJZiBpdCdzIGp1c3QgYSBkYXRlLCByZXR1cm4gaXQgdW5jaGFuZ2VkXHJcbiAgICAgIGlmIChsYWJlbEluZm8uaXNEYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIGV4dHJhY3REYXRlKGQpIHx8IGQ7XHJcbiAgICAgIH1cclxuICAgICAgLy8gSWYgaXQgaGFzIGp1c3Qgd2VlayBudW1iZXIsIGZvcm1hdCBpdCBhcyBXIyNcclxuICAgICAgaWYgKGxhYmVsSW5mby5pc1dlZWspIHtcclxuICAgICAgICBjb25zdCB3ZWVrUGFydCA9IGV4dHJhY3RXZWVrTnVtYmVyKGQpO1xyXG4gICAgICAgIGlmICh3ZWVrUGFydCkge1xyXG4gICAgICAgICAgcmV0dXJuIHdlZWtQYXJ0O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBGb3Igbm9uLWRhdGUgbGFiZWxzLCB0cmltIGFzIGJlZm9yZVxyXG4gICAgICBjb25zdCBmaXJzdFBhcnQgPSBkLnNwbGl0KC9bXFxzXFwtXSsvKVswXTtcclxuICAgICAgcmV0dXJuIGZpcnN0UGFydC5zdWJzdHJpbmcoMCwgMykudG9Mb3dlckNhc2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIENoZWNrIGlmIHZhbHVlIHNob3VsZCBiZSBpZ25vcmVkXHJcbiAgY29uc3QgaXNWYWx1ZVRvQmVJZ25vcmVkID0gZGF0YS5zb21lKChpbmRpdjogYW55KSA9PiBcclxuICAgIGluZGl2Lm5hbWUgJiYgaW5kaXYubmFtZS50b0xvd2VyQ2FzZSgpID09PSBkLnRyaW0oKS50b0xvd2VyQ2FzZSgpICYmIFxyXG4gICAgaW5kaXZbbWV0YURhdGEua2V5TGlzdFswXV0gPT09IC0xXHJcbiAgKTtcclxuXHJcbiAgaWYgKGlzVmFsdWVUb0JlSWdub3JlZCkge1xyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgLy8gSGFuZGxlIGRhdGUgcmFuZ2UgbGFiZWxzXHJcbiAgY29uc3QgZGF0ZVJhbmdlUmVnZXggPSAvKFxcZHsyLDR9Wy1cXC9dXFxkezJ9Wy1cXC9dXFxkezIsNH0pXFxzKi1cXHMqKFxcZHsyLDR9Wy1cXC9dXFxkezJ9Wy1cXC9dXFxkezIsNH0pLztcclxuICBpZiAoZGF0ZVJhbmdlUmVnZXgudGVzdChkLnRyaW0oKSkpIHtcclxuICAgIHJldHVybiBkLnRyaW0oKS5yZXBsYWNlKGRhdGVSYW5nZVJlZ2V4LCAobSwgZDEsIGQyKSA9PiBgJHtkMX0gLSAke2QyfWApO1xyXG4gIH1cclxuXHJcbiAgLy8gSGFuZGxlIHNwbGl0dGluZyBvZiBtdWx0aS1wYXJ0IGxhYmVsc1xyXG4gIGlmIChzdWJncm91cHMubGVuZ3RoID4gMSAmJiAhc2VsZi5pc1pvb21lZE91dCAmJiBkYXRhLmxlbmd0aCA+IDggJiYgXHJcbiAgICAgIGQuaW5kZXhPZignICcpID4gLTEgJiYgKGxhYmVsSW5mby5pc0RhdGUgfHwgbGFiZWxJbmZvLmlzV2VlaykpIHtcclxuICAgIGNvbnN0IGZpcnN0ID0gZC5zdWJzdHJpbmcoMCwgZC5pbmRleE9mKCcgJykpO1xyXG4gICAgY29uc3Qgc2Vjb25kID0gZC5zdWJzdHJpbmcoZC5pbmRleE9mKCcgJykgKyAxKS50cmltKCk7XHJcbiAgICByZXR1cm4gYCR7Zmlyc3R9XFxuJHtzZWNvbmR9YDtcclxuICB9XHJcblxyXG4gIC8vIEhhbmRsZSBkYXRlIGxhYmVscyBpbiBtaW5pbWl6ZWQgdmlld1xyXG4gIGlmIChsYWJlbEluZm8uaXNEYXRlKSB7XHJcbiAgICBpZiAoIXNlbGYuaXNIZWFkZXJWaXNpYmxlICYmIGQuaW5kZXhPZignICcpID4gLTEpIHtcclxuICAgICAgY29uc3QgZmlyc3QgPSBkLnN1YnN0cmluZygwLCBkLmluZGV4T2YoJyAnKSk7XHJcbiAgICAgIGNvbnN0IHNlY29uZCA9IGQuc3Vic3RyaW5nKGQuaW5kZXhPZignICcpICsgMSkudHJpbSgpO1xyXG4gICAgICByZXR1cm4gYCR7Zmlyc3R9XFxuJHtzZWNvbmR9YDtcclxuICAgIH1cclxuICAgIHJldHVybiBkO1xyXG4gIH1cclxuXHJcbiAgLy8gSGFuZGxlIGxhYmVscyB3aXRoIHNwYWNlc1xyXG4gIGlmIChkLnRyaW0oKS5pbmRleE9mKCcgJykgPiAtMSkge1xyXG4gICAgcmV0dXJuIGQudHJpbSgpLnN1YnN0cmluZygwLCBkLmluZGV4T2YoJyAnKSkudG9Mb3dlckNhc2UoKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBkLnRvTG93ZXJDYXNlKCk7XHJcbn1cclxuXHJcbnByaXZhdGUgY2FsY3VsYXRlTWF4VmFsdWUoZGF0YSwga2V5TGlzdCkge1xyXG4gIGxldCBtYXhWYWx1ZSA9IGQzLm1heChkYXRhLCAoZCkgPT4gZDMubWF4KGtleUxpc3QsIChrZXkpID0+ICtkW2tleV0pKTtcclxuICBcclxuICBpZiAobWF4VmFsdWUgPT09IDApIHtcclxuICAgIGlmICh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSkge1xyXG4gICAgICBtYXhWYWx1ZSA9IHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCArIDIwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbWF4VmFsdWUgPSAxMDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gbWF4VmFsdWU7XHJcbn1cclxuXHJcbnByaXZhdGUgc2V0dXBMaW5lWVNjYWxlKGxpbmVEYXRhLCBoZWlnaHQsIHNlbGYpIHtcclxuICBsZXQgbWF4TGluZVZhbHVlID0gZDMubWF4KGxpbmVEYXRhLCAoZCkgPT4gK2QudmFsdWUpO1xyXG4gIG1heExpbmVWYWx1ZSA9IG1heExpbmVWYWx1ZSAqIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmN1c3RvbVlzY2FsZTtcclxuXHJcbiAgbGV0IG1pbkxpbmVWYWx1ZSA9IGQzLm1pbihsaW5lRGF0YSwgKGQpID0+ICtkLnZhbHVlKTtcclxuICBpZiAobWF4TGluZVZhbHVlID4gMCkgbWluTGluZVZhbHVlID0gbWluTGluZVZhbHVlIC0gMztcclxuICBpZiAobWluTGluZVZhbHVlID4gMCkgbWluTGluZVZhbHVlID0gMDtcclxuXHJcbiAgY29uc3QgbGluZVlzY2FsZSA9IGQzLnNjYWxlTGluZWFyKClcclxuICAgIC5kb21haW4oW21pbkxpbmVWYWx1ZSwgbWF4TGluZVZhbHVlXSlcclxuICAgIC5yYW5nZShbaGVpZ2h0LCBtaW5MaW5lVmFsdWVdKTtcclxuXHJcbiAgY29uc3QgeUxpbmVBeGlzID0gZDMuYXhpc1JpZ2h0KGxpbmVZc2NhbGUpXHJcbiAgICAudGlja3Moc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAudGlja1NpemUoMClcclxuICAgIC50aWNrRm9ybWF0KHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlMaW5lQXhpc0xhYmVsRm9tYXR0ZXIpO1xyXG5cclxuICByZXR1cm4geyBsaW5lWXNjYWxlLCB5TGluZUF4aXMgfTtcclxufVxyXG5cclxucHJpdmF0ZSByZW5kZXJHcmlkTGluZXMoc3ZnLCB4LCB5LCBoZWlnaHQsIHdpZHRoLCBzZWxmLCBpc3JpYSkge1xyXG4gIC8vIFgtYXhpcyBncmlkIGJldHdlZW4gbGFiZWxzXHJcbiAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzWGdyaWRCZXR3ZWVuTGFiZWxzKSB7XHJcbiAgICBzdmcuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2dyaWQnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgke3guYmFuZHdpZHRoKCkgLyAyfSwke2hlaWdodH0pYClcclxuICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4KS50aWNrU2l6ZSgtaGVpZ2h0KS50aWNrRm9ybWF0KCcnKSlcclxuICAgICAgLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5JywgJzUgNScpXHJcbiAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtZ3JpZC1jb2xvciwgIzk5OTk5OSknKVxyXG4gICAgICAuY2FsbCgoZykgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5yZW1vdmUoKSk7XHJcbiAgfVxyXG5cclxuICAvLyBZLWF4aXMgZ3JpZFxyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0dyaWQgfHwgaXNyaWEpIHtcclxuICAgIHN2Zy5hcHBlbmQoJ2cnKVxyXG4gICAgICAuY2FsbChkMy5heGlzTGVmdCh5KS50aWNrcyhzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5udW1iZXJPZllUaWNrcykudGlja1NpemUoLXdpZHRoKSlcclxuICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC1heGlzLWNvbG9yLCAjQjlCOUI5KScpXHJcbiAgICAgIC5zdHlsZSgnb3BhY2l0eScsICcwLjUnKVxyXG4gICAgICAuY2FsbCgoZykgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5yZW1vdmUoKS5zdHlsZSgnc3Ryb2tlJywgJ3ZhcigtLWNoYXJ0LWRvbWFpbi1jb2xvciwgIzAwMDAwMCknKSk7XHJcbiAgfSBlbHNle1xyXG4gICAgc3ZnLmFwcGVuZCgnZycpXHJcbiAgICAgIC5jYWxsKGQzLmF4aXNMZWZ0KHkpLnRpY2tzKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzKSlcclxuICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC1heGlzLWNvbG9yLCAjQjlCOUI5KScpXHJcbiAgICAgIC5zdHlsZSgnb3BhY2l0eScsICcwLjUnKVxyXG4gICAgICAuY2FsbCgoZykgPT4gZy5zZWxlY3QoJy5kb21haW4nKVxyXG4gICAgICAgIC5zdHlsZSgnc3Ryb2tlJywgJ3ZhcigtLWNoYXJ0LWRvbWFpbi1jb2xvciwgIzAwMDAwMCknKVxyXG4gICAgICAgIC5zdHlsZSgnc3Ryb2tlLXdpZHRoJywgJzFweCcpKTtcclxuICB9XHJcbn1cclxuXHJcbnByaXZhdGUgc2V0dXBYU3ViZ3JvdXBTY2FsZShzdWJncm91cHMsIHgsIHNlbGYpIHtcclxuICBjb25zdCB4U3ViZ3JvdXAgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oc3ViZ3JvdXBzKTtcclxuXHJcbiAgaWYgKHN1Ymdyb3Vwcy5sZW5ndGggPiAxICYmICF0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICB4U3ViZ3JvdXAucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICB9IGVsc2UgaWYgKHN1Ymdyb3Vwcy5sZW5ndGggPT09IDEgJiYgIXRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgIHhTdWJncm91cC5yYW5nZShbMCwgMTAwXSk7XHJcbiAgfSBlbHNlIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICB4U3ViZ3JvdXAucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICB9IGVsc2Uge1xyXG4gICAgeFN1Ymdyb3VwLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4geFN1Ymdyb3VwO1xyXG59XHJcblxyXG5wcml2YXRlIHJlbmRlckJhcnMoc3ZnLCBkYXRhLCBzdWJncm91cHMsIHgsIHhTdWJncm91cCwgeSwgaGVpZ2h0LCBjb2xvciwgXHJcbiAgbWV0YURhdGEsIHNlbGYsIGxlZnRBbmRSaWdodFNwYWNlcywgdGVtcFNjYWxlLCBpc3JpYSkge1xyXG4gIFxyXG4gIGNvbnN0IHN0YXRlID0gc3ZnLmFwcGVuZCgnZycpXHJcbiAgICAuc2VsZWN0QWxsKCcuc3RhdGUnKVxyXG4gICAgLmRhdGEoZGF0YSlcclxuICAgIC5lbnRlcigpXHJcbiAgICAuYXBwZW5kKCdnJylcclxuICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAoZCkgPT4gYHRyYW5zbGF0ZSgke3goZC5uYW1lKX0sMClgKTtcclxuXHJcbiAgY29uc3QgYmFycyA9IHN0YXRlLnNlbGVjdEFsbCgncmVjdCcpXHJcbiAgICAuZGF0YSgoZCkgPT4gdGhpcy5wcmVwYXJlQmFyRGF0YShkLCBzdWJncm91cHMpKVxyXG4gICAgLmVudGVyKClcclxuICAgIC5hcHBlbmQoJ3JlY3QnKVxyXG4gICAgLmF0dHIoJ2NsYXNzJywgJ2JhcnMnKVxyXG4gICAgLm9uKCdjbGljaycsIChkKSA9PiB0aGlzLmhhbmRsZUJhckNsaWNrKGQsIG1ldGFEYXRhLCBzZWxmKSlcclxuICAgIC5hdHRyKCd4JywgKGQpID0+IHRoaXMuY2FsY3VsYXRlQmFyWChkLCBkYXRhLCB4LCB4U3ViZ3JvdXAsIHNlbGYsIHRlbXBTY2FsZSkpXHJcbiAgICAuYXR0cigneScsIChkKSA9PiB0aGlzLmNhbGN1bGF0ZUJhclkoZCwgeSwgaGVpZ2h0LCBzZWxmKSlcclxuICAgIC5hdHRyKCd3aWR0aCcsIChkKSA9PiB7XHJcbiAgICAgICAgIGxldCB3aWR0aCA9IHRoaXMuY2FsY3VsYXRlQmFyV2lkdGgoZCwgZGF0YSwgc3ViZ3JvdXBzLCB4LCB4U3ViZ3JvdXAsIHNlbGYsIHRlbXBTY2FsZSk7XHJcbiAgICAgICAgIGlmIChpc3JpYSAmJiBzZWxmLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA+PSA4KSB7XHJcbiAgICAgICAgd2lkdGggPSBNYXRoLm1heCgwLCB3aWR0aCAtIDIwKTsgIC8vIFByZXZlbnQgbmVnYXRpdmUgd2lkdGhcclxuICB9XHJcbiAgcmV0dXJuIHdpZHRoO1xyXG59KVxyXG5cclxuICAgIC5hdHRyKCdoZWlnaHQnLCAoZCkgPT4gdGhpcy5jYWxjdWxhdGVCYXJIZWlnaHQoZCwgeSwgaGVpZ2h0LCBzZWxmKSlcclxuICAgIC5zdHlsZSgnY3Vyc29yJywgKCkgPT4gKG1ldGFEYXRhLmhhc0RyaWxsRG93biAmJiAhaXNyaWEpID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnKVxyXG4gICAgLmF0dHIoJ2ZpbGwnLCAoZCkgPT4gdGhpcy5nZXRCYXJDb2xvcihkLCBtZXRhRGF0YSwgc2VsZikpO1xyXG5cclxuICAvLyBBdHRhY2ggbW91c2UgZXZlbnRzIGlmIG5vdCBSSUFcclxuICBpZiAoIWlzcmlhICYmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5kaXNwbGF5VGl0bGVPblRvcCB8fCBcclxuICAgICAgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRzT25CYXIgPT09IHVuZGVmaW5lZCAmJiBcclxuICAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmRpc3BsYXlUaXRsZU9uVG9wID09PSB1bmRlZmluZWQpKSkge1xyXG4gICAgYmFycy5vbignbW91c2VvdXQnLCAoZCwgaSkgPT4gdGhpcy5oYW5kbGVNb3VzZU91dChzdmcpKVxyXG4gICAgICAgIC5vbignbW91c2VvdmVyJywgKGQsIGkpID0+IHRoaXMuaGFuZGxlTW91c2VPdmVyKGQsIHN2ZywgZGF0YSwgeCwgeSwgaGVpZ2h0LCBtZXRhRGF0YSwgc2VsZiwgbGVmdEFuZFJpZ2h0U3BhY2VzLCB0ZW1wU2NhbGUpKTtcclxuICB9XHJcbn1cclxuXHJcbnByaXZhdGUgcHJlcGFyZUJhckRhdGEoZCwgc3ViZ3JvdXBzKSB7XHJcbiAgY29uc3QgbmV3TGlzdDogYW55ID0gW107XHJcbiAgc3ViZ3JvdXBzLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgbmV3TGlzdC5wdXNoKHsga2V5OiBrZXksIHZhbHVlOiBkW2tleV0sIG5hbWU6IGQubmFtZSB9KTtcclxuICB9KTtcclxuICByZXR1cm4gbmV3TGlzdDtcclxufVxyXG5cclxucHJpdmF0ZSBoYW5kbGVCYXJDbGljayhkLCBtZXRhRGF0YSwgc2VsZikge1xyXG4gIGlmIChkLmtleSAhPT0gJ1RhcmdldCcpIHtcclxuICAgIGlmICghbWV0YURhdGEuYmFyV2l0aG91dENsaWNrIHx8ICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2subGVuZ3RoIHx8XHJcbiAgICAgICAgKCFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2suaW5jbHVkZXMoZD8ubmFtZSkgJiYgXHJcbiAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2suaW5jbHVkZXMoZD8ua2V5KSkpIHtcclxuICAgICAgc2VsZi5oYW5kbGVDbGljayhkKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbnByaXZhdGUgY2FsY3VsYXRlQmFyWChkLCBkYXRhLCB4LCB4U3ViZ3JvdXAsIHNlbGYsIHRlbXBTY2FsZSkge1xyXG4gIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVEcmlsbGRvd25CYXJYKGQsIGRhdGEsIHgsIHNlbGYsIHRlbXBTY2FsZSk7XHJcbiAgfVxyXG4gIHJldHVybiB4U3ViZ3JvdXAoZC5rZXkpO1xyXG59XHJcblxyXG4vLyBwcml2YXRlIGNhbGN1bGF0ZURyaWxsZG93bkJhclgoZCwgZGF0YSwgeCwgc2VsZiwgdGVtcFNjYWxlKSB7XHJcbi8vICAgZGF0YS5mb3JFYWNoKChpbmRpdjogYW55KSA9PiB7XHJcbi8vICAgICBpZiAoaW5kaXYubmFtZSA9PT0gZC5uYW1lKSB7XHJcbi8vICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhpbmRpdikuZmlsdGVyKCh0ZW1wLCBpKSA9PiBpICE9PSAwKTtcclxuLy8gICAgICAgdGVtcFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgIFxyXG4vLyAgICAgICBpZiAoeC5iYW5kd2lkdGgoKSA+IDEwMCkge1xyXG4vLyAgICAgICAgIGNvbnN0IHJlZHVjZWRCYXJXaWR0aCA9IHNlbGYuaXNab29tZWRPdXQgPyA2MCA6IDMwO1xyXG4vLyAgICAgICAgIGNvbnN0IG9mZnNldCA9ICh4LmJhbmR3aWR0aCgpIC0gcmVkdWNlZEJhcldpZHRoKSAvIDI7XHJcbi8vICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtvZmZzZXQsIHguYmFuZHdpZHRoKCkgLSBvZmZzZXRdKTtcclxuLy8gICAgICAgfVxyXG4vLyAgICAgfVxyXG4vLyAgIH0pO1xyXG4vLyAgIHJldHVybiB0ZW1wU2NhbGUoZC5rZXkpIHx8IDA7XHJcbi8vIH1cclxuXHJcbnByaXZhdGUgY2FsY3VsYXRlRHJpbGxkb3duQmFyWChkLCBkYXRhLCB4LCBzZWxmLCB0ZW1wU2NhbGUpIHtcclxuICAgIGxldCBjYWxjdWxhdGVkU2NhbGUgPSB0ZW1wU2NhbGU7XHJcbiAgICBcclxuICAgIGRhdGEuZm9yRWFjaCgoaW5kaXY6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoaW5kaXYubmFtZSA9PT0gZC5uYW1lKSB7XHJcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGluZGl2KS5maWx0ZXIoKHRlbXAsIGkpID0+IGkgIT09IDApO1xyXG4gICAgICAgIGNhbGN1bGF0ZWRTY2FsZSA9IGQzLnNjYWxlQmFuZCgpLmRvbWFpbihrZXlzKS5yYW5nZShbMCwgeC5iYW5kd2lkdGgoKV0pO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICh4LmJhbmR3aWR0aCgpID4gMTAwKSB7XHJcbiAgICAgICAgICBjb25zdCByZWR1Y2VkQmFyV2lkdGggPSBzZWxmLmlzWm9vbWVkT3V0ID8gNjAgOiAxMDA7XHJcbiAgICAgICAgICBjb25zdCBvZmZzZXQgPSAoeC5iYW5kd2lkdGgoKSAtIHJlZHVjZWRCYXJXaWR0aCkgLyAyO1xyXG4gICAgICAgICAgY2FsY3VsYXRlZFNjYWxlLnJhbmdlKFtvZmZzZXQsIHguYmFuZHdpZHRoKCkgLSBvZmZzZXRdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgXHJcbiAgICAvLyBSZXR1cm4gcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIGdyb3VwIChzaW5jZSBiYXJzIGFyZSBpbnNpZGUgYSB0cmFuc2xhdGVkIGdyb3VwIGVsZW1lbnQpXHJcbiAgICByZXR1cm4gY2FsY3VsYXRlZFNjYWxlKGQua2V5KSB8fCAwO1xyXG4gIH1cclxuXHJcbnByaXZhdGUgY2FsY3VsYXRlQmFyWShkLCB5LCBoZWlnaHQsIHNlbGYpIHtcclxuICBpZiAoZC52YWx1ZSA9PT0gLTEpIHtcclxuICAgIHJldHVybiB5KDApO1xyXG4gIH1cclxuXHJcbiAgaWYgKGQudmFsdWUgPj0gMCkge1xyXG4gICAgY29uc3QgYmFySGVpZ2h0ID0gaGVpZ2h0IC0geShkLnZhbHVlKTtcclxuICAgIGNvbnN0IG1pbkhlaWdodCA9IHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmRlZmF1bHRCYXJIZWlnaHQgfHwgMjtcclxuICAgIHJldHVybiBiYXJIZWlnaHQgPCBtaW5IZWlnaHQgPyB5KDApIC0gbWluSGVpZ2h0IDogeShkLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIHJldHVybiB5KDApO1xyXG59XHJcblxyXG5wcml2YXRlIGNhbGN1bGF0ZUJhcldpZHRoKGQsIGRhdGEsIHN1Ymdyb3VwcywgeCwgeFN1Ymdyb3VwLCBzZWxmLCB0ZW1wU2NhbGUpIHtcclxuICAvLyBEZXZpY2UgZGV0ZWN0aW9uIGZvciByZXNwb25zaXZlIHNpemluZ1xyXG4gIGNvbnN0IGlzTW9iaWxlID0gd2luZG93LmlubmVyV2lkdGggPCA1NzY7XHJcbiAgY29uc3QgaXNUYWJsZXQgPSB3aW5kb3cuaW5uZXJXaWR0aCA+PSA1NzYgJiYgd2luZG93LmlubmVyV2lkdGggPCA5OTI7XHJcblxyXG4gIC8vIEZvciBncm91cGVkIGJhciBjaGFydHMgaW4gem9vbS1pbiB2aWV3XHJcbiAgaWYgKHN1Ymdyb3Vwcy5sZW5ndGggPiAxICYmICFzZWxmLmlzWm9vbWVkT3V0KSB7XHJcbiAgICByZXR1cm4gaXNNb2JpbGUgPyAyMiA6IGlzVGFibGV0ID8gMzYgOiA1MDtcclxuICB9XHJcblxyXG4gIC8vIEZvciBzaW5nbGUtYmFyIGNoYXJ0cyBpbiB6b29tLWluIHZpZXdcclxuICBpZiAoc3ViZ3JvdXBzLmxlbmd0aCA9PT0gMSAmJiAhc2VsZi5pc1pvb21lZE91dCkge1xyXG4gICAgcmV0dXJuIGlzTW9iaWxlID8gNjAgOiA4MDtcclxuICB9XHJcblxyXG4gIC8vIE1pbmltdW0gYmFyIHdpZHRocyBmb3Igem9vbWVkLW91dCBzdGF0ZVxyXG4gIGNvbnN0IG1pbkJhcldpZHRoID0gKCgpID0+IHtcclxuICAgIGlmIChzdWJncm91cHMubGVuZ3RoID4gMikge1xyXG4gICAgICByZXR1cm4gaXNNb2JpbGUgPyAxOCA6IGlzVGFibGV0ID8gMjQgOiAzMDtcclxuICAgIH1cclxuICAgIHJldHVybiBpc01vYmlsZSA/IDEyIDogaXNUYWJsZXQgPyAxNiA6IDIwO1xyXG4gIH0pKCk7XHJcblxyXG4gIC8vIERlZmF1bHQgbG9naWMgZm9yIGRyaWxsZG93biBjaGFydHNcclxuICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgbGV0IGNhbGN1bGF0ZWRTY2FsZSA9IGQzLnNjYWxlQmFuZCgpLmRvbWFpbihbXSkucmFuZ2UoWzAsIDBdKTtcclxuICAgIFxyXG4gICAgZGF0YS5mb3JFYWNoKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgIGlmIChpbmRpdi5uYW1lID09PSBkLm5hbWUpIHtcclxuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaW5kaXYpLmZpbHRlcigodGVtcCwgaSkgPT4gaSAhPT0gMCk7XHJcbiAgICAgICAgY2FsY3VsYXRlZFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHguYmFuZHdpZHRoKCkgPiAxMDApIHtcclxuICAgICAgICAgIGNvbnN0IHJlZHVjZWRCYXJXaWR0aCA9IHNlbGYuaXNab29tZWRPdXQgPyA2MCA6IDEwMDtcclxuICAgICAgICAgIGNvbnN0IG9mZnNldCA9ICh4LmJhbmR3aWR0aCgpIC0gcmVkdWNlZEJhcldpZHRoKSAvIDI7XHJcbiAgICAgICAgICBjYWxjdWxhdGVkU2NhbGUucmFuZ2UoW29mZnNldCwgeC5iYW5kd2lkdGgoKSAtIG9mZnNldF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBcclxuICAgIC8vIEVuc3VyZSBtaW5pbXVtIHdpZHRoIGV2ZW4gaW4gZHJpbGxkb3duIG1vZGVcclxuICAgIHJldHVybiBNYXRoLm1heChjYWxjdWxhdGVkU2NhbGUuYmFuZHdpZHRoKCksIG1pbkJhcldpZHRoKTtcclxuICB9XHJcblxyXG4gIC8vIEZvciByZWd1bGFyIGNoYXJ0cywgZW5zdXJlIG1pbmltdW0gd2lkdGhcclxuICByZXR1cm4gTWF0aC5tYXgoeFN1Ymdyb3VwLmJhbmR3aWR0aCgpLCBtaW5CYXJXaWR0aCk7XHJcbn1cclxuXHJcbnByaXZhdGUgY2FsY3VsYXRlQmFySGVpZ2h0KGQsIHksIGhlaWdodCwgc2VsZikge1xyXG4gIGlmIChkLnZhbHVlID09PSAtMSkge1xyXG4gICAgcmV0dXJuIGhlaWdodCAtIHkoMCk7XHJcbiAgfVxyXG5cclxuICBpZiAoZC52YWx1ZSA+PSAwKSB7XHJcbiAgICBjb25zdCBiYXJIZWlnaHQgPSBoZWlnaHQgLSB5KGQudmFsdWUpO1xyXG4gICAgY29uc3QgbWluSGVpZ2h0ID0gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uZGVmYXVsdEJhckhlaWdodCB8fCAyO1xyXG4gICAgcmV0dXJuIE1hdGgubWF4KGJhckhlaWdodCwgbWluSGVpZ2h0KTtcclxuICB9XHJcblxyXG4gIHJldHVybiBoZWlnaHQgLSB5KDApO1xyXG59XHJcblxyXG5wcml2YXRlIGdldEJhckNvbG9yKGQsIG1ldGFEYXRhLCBzZWxmKSB7XHJcbiAgaWYgKGQudmFsdWUgJiYgc2VsZi5jaGFydERhdGEudGFyZ2V0TGluZURhdGEgJiYgXHJcbiAgICAgIGQudmFsdWUgPj0gcGFyc2VGbG9hdChzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpICYmIFxyXG4gICAgICBzZWxmLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvckFib3ZlVGFyZ2V0KSB7XHJcbiAgICBcclxuICAgIGNvbnN0IGtleSA9IGQua2V5LnRvTG93ZXJDYXNlKCk7XHJcbiAgICBjb25zdCBjb2xvckFib3ZlVGFyZ2V0ID0gT2JqZWN0LmtleXMoc2VsZi5jaGFydERhdGEubWV0YURhdGEuY29sb3JBYm92ZVRhcmdldClcclxuICAgICAgLmZpbmQoayA9PiBrLnRvTG93ZXJDYXNlKCkgPT09IGtleSk7XHJcbiAgICBcclxuICAgIGlmIChjb2xvckFib3ZlVGFyZ2V0KSB7XHJcbiAgICAgIHJldHVybiBzZWxmLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvckFib3ZlVGFyZ2V0W2NvbG9yQWJvdmVUYXJnZXRdO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gc2VsZi5jaGFydERhdGEubWV0YURhdGEuY29sb3JzW2Qua2V5XTtcclxufVxyXG5cclxucHJpdmF0ZSByZW5kZXJCYXJMYWJlbHMoc3ZnLCBkYXRhLCBzdWJncm91cHMsIHgsIHhTdWJncm91cCwgeSwgaGVpZ2h0LCBcclxuICBtZXRhRGF0YSwgc2VsZiwgdGVtcFNjYWxlLCBpc3JpYSkge1xyXG4gIFxyXG4gIGNvbnN0IHN0YXRlID0gc3ZnLnNlbGVjdEFsbCgnLnN0YXRlJyk7XHJcbiAgXHJcbiAgY29uc3QgbGFiZWxzID0gc3RhdGUuc2VsZWN0QWxsKCd0ZXh0JylcclxuICAgIC5kYXRhKChkKSA9PiB0aGlzLnByZXBhcmVCYXJEYXRhKGQsIHN1Ymdyb3VwcykpXHJcbiAgICAuZW50ZXIoKVxyXG4gICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAuYXR0cignZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAuYXR0cigneCcsIDApXHJcbiAgICAuYXR0cigneScsIDApXHJcbiAgICAuYXR0cignY2xhc3MnLCAnbGliLWRhdGEtbGFiZWxzLXdlZWtseWNoYXJ0cycpXHJcbiAgICAudGV4dCgoZCkgPT4gdGhpcy5mb3JtYXRCYXJMYWJlbChkKSlcclxuICAgIC5zdHlsZSgnZmlsbCcsICcjMDAwJylcclxuICAgIC5zdHlsZSgnZm9udC13ZWlnaHQnLCAnYm9sZCcpXHJcbiAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsIChkKSA9PiB0aGlzLmNhbGN1bGF0ZUxhYmVsRm9udFNpemUoc2VsZikpXHJcbiAgICAuYXR0cigndHJhbnNmb3JtJywgKGQpID0+IHRoaXMuY2FsY3VsYXRlTGFiZWxUcmFuc2Zvcm0oZCwgZGF0YSwgeCwgeFN1Ymdyb3VwLCB5LCBzZWxmLCB0ZW1wU2NhbGUpKVxyXG4gICAgLm9uKCdjbGljaycsIChkKSA9PiB0aGlzLmhhbmRsZUJhckNsaWNrKGQsIG1ldGFEYXRhLCBzZWxmKSk7XHJcblxyXG4gIGlmICghaXNyaWEpIHtcclxuICAgIGxhYmVscy5vbignbW91c2VvdXQnLCAoKSA9PiB0aGlzLmhhbmRsZU1vdXNlT3V0KHN2ZykpXHJcbiAgICAgICAgICAub24oJ21vdXNlb3ZlcicsIChkKSA9PiB0aGlzLmhhbmRsZU1vdXNlT3ZlcihkLCBzdmcsIGRhdGEsIHgsIHksIGhlaWdodCwgbWV0YURhdGEsIHNlbGYsIDUwLCB0ZW1wU2NhbGUpKTtcclxuICB9XHJcbn1cclxuXHJcbnByaXZhdGUgZm9ybWF0QmFyTGFiZWwoZCkge1xyXG4gIGlmICghZC5rZXkgfHwgIWQudmFsdWUpIHJldHVybiAnJztcclxuICByZXR1cm4gZC5rZXkubGVuZ3RoID4gMjAgPyBkLmtleS5zdWJzdHJpbmcoMCwgMTcpICsgJy4uLicgOiBkLmtleTtcclxufVxyXG5cclxucHJpdmF0ZSBjYWxjdWxhdGVMYWJlbEZvbnRTaXplKHNlbGYpIHtcclxuICBpZiAoc2VsZi5pc1pvb21lZE91dCkgcmV0dXJuICc5cHgnO1xyXG5cclxuICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoID4gMTkwMCkgcmV0dXJuICcxOHB4JztcclxuICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDE0MDApIHJldHVybiAnMTBweCc7XHJcbiAgICByZXR1cm4gJzE0cHgnO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuICcxNHB4JztcclxufVxyXG5cclxucHJpdmF0ZSBjYWxjdWxhdGVMYWJlbFRyYW5zZm9ybShkLCBkYXRhLCB4LCB4U3ViZ3JvdXAsIHksIHNlbGYsIHRlbXBTY2FsZSkge1xyXG4gIGxldCBjYWxjdWxhdGVkU2NhbGU7XHJcbiAgXHJcbiAgZGF0YS5mb3JFYWNoKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICBpZiAoaW5kaXYubmFtZSA9PT0gZC5uYW1lKSB7XHJcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhpbmRpdikuZmlsdGVyKCh0ZW1wLCBpKSA9PiBpICE9PSAwKTtcclxuICAgICAgY2FsY3VsYXRlZFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgIFxyXG4gICAgICBpZiAoeC5iYW5kd2lkdGgoKSA+IDEwMCkge1xyXG4gICAgICAgIGlmIChzZWxmLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgY29uc3QgcmVkdWNlZFdpZHRoID0gT2JqZWN0LmtleXMoc2VsZi5jaGFydERhdGEuZGF0YVswXSkubGVuZ3RoID09PSAyID8gMjAwIDogMzAwO1xyXG4gICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gKHguYmFuZHdpZHRoKCkgLSByZWR1Y2VkV2lkdGgpIC8gMjtcclxuICAgICAgICAgIGNhbGN1bGF0ZWRTY2FsZS5yYW5nZShbb2Zmc2V0LCB4LmJhbmR3aWR0aCgpIC0gb2Zmc2V0XSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IG9mZnNldCA9ICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDI7XHJcbiAgICAgICAgICBjYWxjdWxhdGVkU2NhbGUucmFuZ2UoW29mZnNldCwgeC5iYW5kd2lkdGgoKSAtIG9mZnNldF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24udGV4dEFsd2F5c0hvcml6b250YWwpIHtcclxuICAgIHJldHVybiBgdHJhbnNsYXRlKCR7eFN1Ymdyb3VwKGQua2V5KX0sJHt5KGQudmFsdWUpIC0gM30pYDtcclxuICB9XHJcblxyXG4gIGlmICghaXNOYU4oY2FsY3VsYXRlZFNjYWxlKGQua2V5KSkpIHtcclxuICAgIHJldHVybiBgdHJhbnNsYXRlKCR7Y2FsY3VsYXRlZFNjYWxlKGQua2V5KSArIGNhbGN1bGF0ZWRTY2FsZS5iYW5kd2lkdGgoKSAqIDAuNTV9LCR7eSgwKSAtIDEwfSkgcm90YXRlKDI3MClgO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuICd0cmFuc2xhdGUoMCwwKSc7XHJcbn1cclxuXHJcbnByaXZhdGUgaGFuZGxlTW91c2VPdmVyKGQsIHN2ZywgZGF0YSwgeCwgeSwgaGVpZ2h0LCBtZXRhRGF0YSwgc2VsZiwgbGVmdEFuZFJpZ2h0U3BhY2VzLCB0ZW1wU2NhbGUpIHtcclxuICBzdmcuc2VsZWN0QWxsKCcubGliLXZlcnRpY2Fsc3RhY2stdGl0bGUtb250b3AnKS5yZW1vdmUoKTtcclxuXHJcbiAgbGV0IGNhbGN1bGF0ZWRTY2FsZTtcclxuICBsZXQgZWxlbWVudHNDb3VudGVyO1xyXG5cclxuICBkYXRhLmZvckVhY2goKGluZGl2OiBhbnkpID0+IHtcclxuICAgIGlmIChpbmRpdi5uYW1lID09PSBkLm5hbWUpIHtcclxuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGluZGl2KS5maWx0ZXIoKHRlbXAsIGkpID0+IGkgIT09IDApO1xyXG4gICAgICBlbGVtZW50c0NvdW50ZXIgPSBrZXlzLmxlbmd0aDtcclxuICAgICAgY2FsY3VsYXRlZFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgIFxyXG4gICAgICBpZiAoeC5iYW5kd2lkdGgoKSA+IDEwMCkge1xyXG4gICAgICAgIGlmIChzZWxmLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgY29uc3QgcmVkdWNlZFdpZHRoID0gT2JqZWN0LmtleXMoc2VsZi5jaGFydERhdGEuZGF0YVswXSkubGVuZ3RoID09PSAyID8gMjAwIDogMzAwO1xyXG4gICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gKHguYmFuZHdpZHRoKCkgLSByZWR1Y2VkV2lkdGgpIC8gMjtcclxuICAgICAgICAgIGNhbGN1bGF0ZWRTY2FsZS5yYW5nZShbb2Zmc2V0LCB4LmJhbmR3aWR0aCgpIC0gb2Zmc2V0XSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IG9mZnNldCA9ICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDI7XHJcbiAgICAgICAgICBjYWxjdWxhdGVkU2NhbGUucmFuZ2UoW29mZnNldCwgeC5iYW5kd2lkdGgoKSAtIG9mZnNldF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICBjb25zdCB4UG9zaXRpb24gPSB0aGlzLmNhbGN1bGF0ZVRvb2x0aXBYKGQsIHgsIGNhbGN1bGF0ZWRTY2FsZSwgbWV0YURhdGEsIGxlZnRBbmRSaWdodFNwYWNlcyk7XHJcbiAgY29uc3Qgd2lkdGggPSB0aGlzLmNhbGN1bGF0ZVRvb2x0aXBXaWR0aChjYWxjdWxhdGVkU2NhbGUsIG1ldGFEYXRhLCBsZWZ0QW5kUmlnaHRTcGFjZXMpO1xyXG5cclxuICBzdmcuYXBwZW5kKCdmb3JlaWduT2JqZWN0JylcclxuICAgIC5hdHRyKCd4JywgeFBvc2l0aW9uKVxyXG4gICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi12ZXJ0aWNhbHN0YWNrLXRpdGxlLW9udG9wJylcclxuICAgIC5hdHRyKCd5JywgeShkLnZhbHVlKSAtIDMgLSA0MCAtIDEwKVxyXG4gICAgLmF0dHIoJ2R5JywgZC5jbGFzcylcclxuICAgIC5hdHRyKCd3aWR0aCcsIHdpZHRoKVxyXG4gICAgLmF0dHIoJ2hlaWdodCcsIDUwKVxyXG4gICAgLmFwcGVuZCgneGh0bWw6ZGl2JylcclxuICAgIC5hdHRyKCdjbGFzcycsICd0aXRsZScpXHJcbiAgICAuc3R5bGUoJ3otaW5kZXgnLCA5OSlcclxuICAgIC5odG1sKCgpID0+IHRoaXMuZ2VuZXJhdGVUb29sdGlwSFRNTChkLCBtZXRhRGF0YSkpO1xyXG59XHJcblxyXG5wcml2YXRlIGNhbGN1bGF0ZVRvb2x0aXBYKGQsIHgsIGNhbGN1bGF0ZWRTY2FsZSwgbWV0YURhdGEsIGxlZnRBbmRSaWdodFNwYWNlcykge1xyXG4gIGlmIChtZXRhRGF0YS5oYXNEcmlsbERvd24pIHtcclxuICAgIGlmIChjYWxjdWxhdGVkU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyID4gMTgwKSB7XHJcbiAgICAgIHJldHVybiB4KGQubmFtZSkgKyBjYWxjdWxhdGVkU2NhbGUoZC5rZXkpICsgY2FsY3VsYXRlZFNjYWxlLmJhbmR3aWR0aCgpIC8gMiAtIDkwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHgoZC5uYW1lKSArIGNhbGN1bGF0ZWRTY2FsZShkLmtleSkgLSBcclxuICAgICAgICAgICAoY2FsY3VsYXRlZFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMikgLyAyICsgXHJcbiAgICAgICAgICAgY2FsY3VsYXRlZFNjYWxlLmJhbmR3aWR0aCgpIC8gMjtcclxuICB9XHJcbiAgcmV0dXJuIHgoZC5uYW1lKSArIGNhbGN1bGF0ZWRTY2FsZShkLmtleSkgLSBcclxuICAgICAgICAgKGNhbGN1bGF0ZWRTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIpIC8gMiArIFxyXG4gICAgICAgICBjYWxjdWxhdGVkU2NhbGUuYmFuZHdpZHRoKCkgLyAyO1xyXG59XHJcblxyXG5wcml2YXRlIGNhbGN1bGF0ZVRvb2x0aXBXaWR0aChjYWxjdWxhdGVkU2NhbGUsIG1ldGFEYXRhLCBsZWZ0QW5kUmlnaHRTcGFjZXMpIHtcclxuICBpZiAobWV0YURhdGEuaGFzRHJpbGxEb3duKSB7XHJcbiAgICBpZiAoY2FsY3VsYXRlZFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMiA+IDE4MCkge1xyXG4gICAgICByZXR1cm4gJzE4MHB4JztcclxuICAgIH1cclxuICAgIHJldHVybiBjYWxjdWxhdGVkU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyO1xyXG4gIH1cclxuICByZXR1cm4gY2FsY3VsYXRlZFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMjtcclxufVxyXG5cclxucHJpdmF0ZSBnZW5lcmF0ZVRvb2x0aXBIVE1MKGQsIG1ldGFEYXRhKSB7XHJcbiAgY29uc3QgYmFyTGFiZWwgPSBkLmtleTtcclxuICBjb25zdCBkYXRhVHlwZSA9IG1ldGFEYXRhLmRhdGFUeXBlIHx8ICcnO1xyXG4gIGNvbnN0IHZhbHVlID0gZC52YWx1ZTtcclxuICBcclxuICBsZXQgaHRtbCA9IGA8c3BhbiBjbGFzcz1cInRpdGxlLWJhci1uYW1lXCI+JHtiYXJMYWJlbH08L3NwYW4+YDtcclxuICBodG1sICs9IGA8c3BhbiBjbGFzcz1cInRpdGxlLWJhci12YWx1ZVwiPjxzcGFuPiR7dmFsdWV9PC9zcGFuPiR7ZGF0YVR5cGV9PC9zcGFuPmA7XHJcbiAgXHJcbiAgcmV0dXJuIGh0bWw7XHJcbn1cclxuXHJcbnByaXZhdGUgaGFuZGxlTW91c2VPdXQoc3ZnKSB7XHJcbiAgc3ZnLnNlbGVjdEFsbCgnLmxpYi12ZXJ0aWNhbHN0YWNrLXRpdGxlLW9udG9wJykucmVtb3ZlKCk7XHJcbn1cclxuXHJcbnByaXZhdGUgcmVuZGVyWUF4aXMoc3ZnLCBzdmdZQXhpc0xlZnQsIHN2Z1lBeGlzUmlnaHQsIHksIHlMaW5lQXhpcywgbGluZURhdGEsIHNlbGYsIGlzcmlhLCBtYXJnaW4pIHtcclxuICAvLyBIaWRkZW4geS1heGlzIGZvciByZWZlcmVuY2VcclxuICBzdmcuYXBwZW5kKCdnJylcclxuICAgIC5hdHRyKCdjbGFzcycsICdsaWItc3RhY2tlZC15LWF4aXMtdGV4dCB5YXhpcy1kYXNoZWQnKVxyXG4gICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwwKScpXHJcbiAgICAuY2FsbCh5KVxyXG4gICAgLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuXHJcbiAgLy8gTGVmdCB5LWF4aXNcclxuICBzdmdZQXhpc0xlZnQuYXBwZW5kKCdnJylcclxuICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi15YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duIHlheGlzLWRhc2hlZCcpXHJcbiAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgIC5jYWxsKGQzLmF4aXNMZWZ0KHkpXHJcbiAgICAgIC50aWNrU2l6ZSgwKVxyXG4gICAgICAudGlja3Moc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAgIC50aWNrRm9ybWF0KChkKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNMYWJlbEZvbWF0dGVyIFxyXG4gICAgICAgICAgPyBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0xhYmVsRm9tYXR0ZXIoZCkgXHJcbiAgICAgICAgICA6IGQ7XHJcbiAgICAgICAgcmV0dXJuIGZvcm1hdHRlZCA+PSAxMDAwID8gZm9ybWF0dGVkIC8gMTAwMCArICdrJyA6IGZvcm1hdHRlZDtcclxuICAgICAgfSkpXHJcbiAgICAuY2FsbCgoZykgPT4ge1xyXG4gICAgICBnLnNlbGVjdCgnLmRvbWFpbicpXHJcbiAgICAgICAgLnN0eWxlKCdzdHJva2UnLCAndmFyKC0tY2hhcnQtZG9tYWluLWNvbG9yLCAjMDAwMDAwKScpXHJcbiAgICAgICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCAnMXB4Jyk7XHJcbiAgICB9KVxyXG4gICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsIGlzcmlhID8gJzExcHgnIDogbnVsbClcclxuICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG5cclxuICAvLyBSaWdodCB5LWF4aXMgKGhpZGRlbiBieSBkZWZhdWx0KVxyXG4gIHN2Z1lBeGlzUmlnaHQuYXBwZW5kKCdnJylcclxuICAgIC5hdHRyKCdjbGFzcycsICdsaWIteWF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93biB5YXhpcy1kYXNoZWQnKVxyXG4gICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwwKScpXHJcbiAgICAuY2FsbCh5KVxyXG4gICAgLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuXHJcbiAgLy8gTGluZSBjaGFydCBheGlzIGlmIGFwcGxpY2FibGVcclxuICBpZiAobGluZURhdGEgIT0gbnVsbCAmJiBsaW5lRGF0YSAmJiBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5zaG93TGluZUNoYXJ0QXhpcykge1xyXG4gICAgc3ZnWUF4aXNSaWdodC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXN0YWNrZWQteS1heGlzLXRleHQxJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgICAgLmNhbGwoeUxpbmVBeGlzKTtcclxuICB9XHJcblxyXG4gIC8vIEFwcGx5IGF4aXMgdmlzaWJpbGl0eSBjb25maWd1cmF0aW9uc1xyXG4gIHRoaXMuYXBwbHlBeGlzVmlzaWJpbGl0eUNvbmZpZyhzZWxmKTtcclxufVxyXG5cclxucHJpdmF0ZSBhcHBseUF4aXNWaXNpYmlsaXR5Q29uZmlnKHNlbGYpIHtcclxuICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNYYXhpc0xhYmVsSGlkZGVuKSB7XHJcbiAgICBkMy5zZWxlY3RBbGwoJ2cubGliLWxpbmUteC1heGlzLXRleHQgPiBnID4gdGV4dCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItZGlzcGxheS1oaWRkZW4nKTtcclxuICB9XHJcblxyXG4gIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzTGFiZWxIaWRkZW4pIHtcclxuICAgIGQzLnNlbGVjdEFsbCgnLnlheGlzLWRhc2hlZCA+IGcgPiB0ZXh0JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNIaWRkZW4pIHtcclxuICAgIGQzLnNlbGVjdEFsbCgnLnlheGlzLWRhc2hlZCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItZGlzcGxheS1oaWRkZW4nKTtcclxuICB9XHJcblxyXG4gIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzRGFzaGVkKSB7XHJcbiAgICBkMy5zZWxlY3RBbGwoJy55YXhpcy1kYXNoZWQnKVxyXG4gICAgICAuc3R5bGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnNSA1JylcclxuICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC1heGlzLWNvbG9yLCAjOTk5OTk5KScpO1xyXG4gIH1cclxufVxyXG5cclxucHJpdmF0ZSByZW5kZXJBeGlzTGFiZWxzKHN2Zywgc3ZnWUF4aXNMZWZ0LCBzdmdZQXhpc1JpZ2h0LCBtZXRhRGF0YSwgd2lkdGgsIGhlaWdodCwgbWFyZ2luLCBzZWxmLCBpc3JpYSwgcmlnaHRTdmdXaWR0aCkge1xyXG4gIC8vIFktYXhpcyBsYWJlbCBwaWVjZXMsdWludHMgZXRjXHJcbiAgaWYgKG1ldGFEYXRhLnlMYWJlbCkge1xyXG4gICAgY29uc3QgeVBvc2l0aW9uID0gaXNyaWEgPyAwIC0gbWFyZ2luLmxlZnQgLyAyIC0gMzAgOiAwIC0gbWFyZ2luLmxlZnQgLyAyIC0gNDA7XHJcblxyXG4gICAgc3ZnWUF4aXNMZWZ0LmFwcGVuZCgndGV4dCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItYXhpcy1ncm91cC1sYWJlbCBmb250LXNpemUtMScpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tbGFiZWxTdHlsZXMpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAncm90YXRlKC05MCknKVxyXG4gICAgICAuYXR0cigneScsIHlQb3NpdGlvbilcclxuICAgICAgLmF0dHIoJ3gnLCAwIC0gaGVpZ2h0IC8gMilcclxuICAgICAgLmF0dHIoJ2R5JywgJzAuNWVtJylcclxuICAgICAgLnN0eWxlKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgICAuYXR0cignZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHN2Z1lBeGlzTGVmdC5zZWxlY3RBbGwoJy5saWItYXhpcy1ncm91cC1sYWJlbCcpXHJcbiAgICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnc21hbGxlcicpXHJcbiAgICAgICAgLnRleHQobWV0YURhdGEueUxhYmVsKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN2Zy5zZWxlY3RBbGwoJy5saWItYXhpcy1ncm91cC1sYWJlbCcpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi15bGFiZWwtd2Vla2x5Q2hhcnRzJylcclxuICAgICAgICAudGV4dChtZXRhRGF0YS55TGFiZWwudG9Mb3dlckNhc2UoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBYLWF4aXMgbGFiZWxcclxuICBpZiAobWV0YURhdGEueExhYmVsKSB7XHJcbiAgICBjb25zdCBpc0Fjcm9ueW0gPSB0aGlzLmlzTGFiZWxBY3JvbnltKG1ldGFEYXRhLnhMYWJlbCk7XHJcbiAgICAvLyBjb25zdCB4UG9zaXRpb24gPSBpc3JpYSBcclxuICAgIC8vICAgPyAoaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20gLSAxNSkgXHJcbiAgICAvLyAgIDogKGhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tICsgNDApO1xyXG4gICAgY29uc3QgeFBvc2l0aW9uID0gaXNyaWFcclxuICA/ICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0hlYWRlclZpc2libGVcclxuICAgICAgPyAoaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20gLSA0NSkgICAvLyBpc3JpYSArIGhlYWRlciB2aXNpYmxlXHJcbiAgICAgIDogKGhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tKSAgICAgICAgLy8gaXNyaWEgKyBoZWFkZXIgTk9UIHZpc2libGVcclxuICAgIClcclxuICA6IChoZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSArIDQwKTsgICAgICAvLyBub3QgaXNyaWFcclxuXHJcblxyXG4gICAgc3ZnLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsIHRoaXMuZ2V0WExhYmVsQ2xhc3Moc2VsZikpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnhBeGlzQ3VzdG9tbGFiZWxTdHlsZXMpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKCR7d2lkdGggLyAyfSwke3hQb3NpdGlvbn0pYClcclxuICAgICAgLnN0eWxlKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAudGV4dChpc0Fjcm9ueW0gPyBtZXRhRGF0YS54TGFiZWwudG9VcHBlckNhc2UoKSA6IG1ldGFEYXRhLnhMYWJlbC50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAuc3R5bGUoJ3RleHQtdHJhbnNmb3JtJywgaXNBY3JvbnltID8gJ25vbmUnIDogJ2NhcGl0YWxpemUnKTtcclxuICB9XHJcblxyXG4gIC8vIExpbmUgeS1heGlzIGxhYmVsXHJcbiAgaWYgKG1ldGFEYXRhLmxpbmV5TGFiZWwpIHtcclxuICAgIHN2Z1lBeGlzUmlnaHQuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1heGlzLWdyb3VwLWxhYmVsIGxpYi1saW5lLWF4aXMnKVxyXG4gICAgICAuYXR0cignZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tbGFiZWxTdHlsZXMpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsMCkgcm90YXRlKDkwKScpXHJcbiAgICAgIC5hdHRyKCd5JywgLTEwMClcclxuICAgICAgLmF0dHIoJ3gnLCAxMDApXHJcbiAgICAgIC5hdHRyKCdkeScsICc1ZW0nKVxyXG4gICAgICAuc3R5bGUoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXHJcbiAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgJ3NtYWxsZXInKVxyXG4gICAgICAudGV4dChtZXRhRGF0YS5saW5leUxhYmVsKTtcclxuICB9XHJcblxyXG4gIC8vIEFwcGx5IGRyaWxsZG93biBjaGFydCBzcGVjaWZpYyBzdHlsZXNcclxuICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgc3ZnLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgbGluZScpLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuICB9XHJcbn1cclxuXHJcbnByaXZhdGUgaXNMYWJlbEFjcm9ueW0obGFiZWwpIHtcclxuICByZXR1cm4gKGxhYmVsLmxlbmd0aCA8PSA0ICYmIC9eW0EtWl0rJC8udGVzdChsYWJlbCkpIHx8XHJcbiAgICAgICAgIChsYWJlbCA9PT0gbGFiZWwudG9VcHBlckNhc2UoKSAmJiAvW0EtWl0vLnRlc3QobGFiZWwpKTtcclxufVxyXG5cclxucHJpdmF0ZSBnZXRYTGFiZWxDbGFzcyhzZWxmKSB7XHJcbiAgbGV0IGJhc2VDbGFzcyA9ICdsaWItYXhpcy1ncm91cC1sYWJlbCBmb250LXNpemUtMSc7XHJcbiAgXHJcbiAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgIHJldHVybiBiYXNlQ2xhc3MgKyAnIGxpYi14bGFiZWwtZHJpbGxkb3duY2hhcnRzJztcclxuICB9XHJcbiAgXHJcbiAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lICE9PSB1bmRlZmluZWQpIHtcclxuICAgIHJldHVybiBiYXNlQ2xhc3MgKyAnIGxpYi14bGFiZWwtd2Vla2x5Q2hhcnRzJztcclxuICB9XHJcbiAgXHJcbiAgcmV0dXJuIGJhc2VDbGFzcyArICcgbGliLWF4aXMtd2F0ZXJmYWxsLWxhYmVsJztcclxufVxyXG5cclxucHJpdmF0ZSByZW5kZXJUYXJnZXRMaW5lKHN2Zywgc3ZnWUF4aXNSaWdodCwgeSwgd2lkdGgsIHJpZ2h0U3ZnV2lkdGgsIG1ldGFEYXRhLCBzZWxmLGlzcmlhKSB7XHJcbiAgY29uc3QgeVplcm8gPSB5KHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCk7XHJcbiAgLy8gRHJhdyB0YXJnZXQgbGluZVxyXG4gIHN2Zy5hcHBlbmQoJ2xpbmUnKVxyXG4gICAgLy8gLmF0dHIoJ3gxJywgMjApXHJcbiAgICAuYXR0cigneDEnLCBpc3JpYSA/IDAgOiAwKVxyXG4gICAgLmF0dHIoJ3gyJywgd2lkdGgpXHJcbiAgICAuYXR0cigneTEnLCB5WmVybylcclxuICAgIC5hdHRyKCd5MicsIHlaZXJvKVxyXG4gICAgLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5JywgJzUgNScpXHJcbiAgICAuc3R5bGUoJ3N0cm9rZScsIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLmNvbG9yKTtcclxuXHJcbiAgLy8gQWRkIHRhcmdldCBsYWJlbFxyXG4gIGNvbnN0IGRhdGFUeXBlVGVtcCA9IG1ldGFEYXRhLmRhdGFUeXBlIHx8ICcnO1xyXG4gIGNvbnN0IHRhcmdldExpbmVOYW1lID0gdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0TmFtZSB8fCAndGFyZ2V0JztcclxuICAgIFxyXG5cclxuXHJcbiAgc3ZnWUF4aXNSaWdodC5hcHBlbmQoJ2ZvcmVpZ25PYmplY3QnKVxyXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwke3laZXJvIC0gMzB9KWApXHJcbiAgICAuYXR0cignd2lkdGgnLCByaWdodFN2Z1dpZHRoKVxyXG4gICAgLmF0dHIoJ2hlaWdodCcsIDUwKVxyXG4gICAgLmFwcGVuZCgneGh0bWw6ZGl2JylcclxuICAgIC5hdHRyKCdjbGFzcycsIGlzcmlhID8gJ3RhcmdldC1kaXNwbGF5LXJpYScgOiAndGFyZ2V0LWRpc3BsYXknKVxyXG4gICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAuaHRtbChgPGRpdj4ke3RhcmdldExpbmVOYW1lfTwvZGl2PjxkaXY+JHtzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXR9JHtkYXRhVHlwZVRlbXB9PC9kaXY+YCk7XHJcbn1cclxuXHJcbnByaXZhdGUgcmVuZGVyTGluZUNoYXJ0KHN2ZywgbGluZURhdGEsIHgsIGxpbmVZc2NhbGUsIG1ldGFEYXRhLCBzZWxmKSB7XHJcbiAgLy8gRHJhdyBsaW5lIHBhdGhcclxuICBzdmcuYXBwZW5kKCdwYXRoJylcclxuICAgIC5kYXR1bShsaW5lRGF0YSlcclxuICAgIC5hdHRyKCdmaWxsJywgJ25vbmUnKVxyXG4gICAgLmF0dHIoJ3N0cm9rZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yKVxyXG4gICAgLmF0dHIoJ3N0cm9rZS13aWR0aCcsIDEuNSlcclxuICAgIC5hdHRyKCdkJywgZDMubGluZSgpXHJcbiAgICAgIC54KChkKSA9PiB4KGQubmFtZSkgKyB4LmJhbmR3aWR0aCgpIC8gMilcclxuICAgICAgLnkoKGQpID0+IGxpbmVZc2NhbGUoZC52YWx1ZSkpKTtcclxuXHJcbiAgLy8gQWRkIGRvdHNcclxuICBjb25zdCBkb3QgPSBzdmcuc2VsZWN0QWxsKCdteUNpcmNsZXMnKVxyXG4gICAgLmRhdGEobGluZURhdGEpXHJcbiAgICAuZW50ZXIoKVxyXG4gICAgLmFwcGVuZCgnZycpXHJcbiAgICAub24oJ2NsaWNrJywgKGQpID0+IHtcclxuICAgICAgaWYgKCFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2sgfHwgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5sZW5ndGggfHxcclxuICAgICAgICAgICghbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmluY2x1ZGVzKGQ/Lm5hbWUpICYmIFxyXG4gICAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2suaW5jbHVkZXMoZD8ua2V5KSkpIHtcclxuICAgICAgICBzZWxmLmhhbmRsZUNsaWNrKGQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgZG90LmFwcGVuZCgnY2lyY2xlJylcclxuICAgIC5hdHRyKCdmaWxsJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubGluZUdyYXBoQ29sb3IpXHJcbiAgICAuYXR0cignc3Ryb2tlJywgJ25vbmUnKVxyXG4gICAgLmF0dHIoJ2N4JywgKGQpID0+IHgoZC5uYW1lKSArIHguYmFuZHdpZHRoKCkgLyAyKVxyXG4gICAgLmF0dHIoJ2N5JywgKGQpID0+IGxpbmVZc2NhbGUoZC52YWx1ZSkpXHJcbiAgICAuc3R5bGUoJ2N1cnNvcicsICgpID0+IHNlbGYuY2hhcnREYXRhLm1ldGFEYXRhLmhhc0RyaWxsRG93biA/ICdwb2ludGVyJyA6ICdkZWZhdWx0JylcclxuICAgIC5hdHRyKCdyJywgMyk7XHJcblxyXG4gIC8vIEFkZCB2YWx1ZSBsYWJlbHNcclxuICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubGluZUdyYXBoQ29sb3IpIHtcclxuICAgIGRvdC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnZG90JylcclxuICAgICAgLmF0dHIoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAuYXR0cignY29sb3InLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcilcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgJ2ZvbnQtc2l6ZTogLjg1ZW0nKVxyXG4gICAgICAuYXR0cigneCcsIChkKSA9PiB4KGQubmFtZSkgKyB4LmJhbmR3aWR0aCgpIC8gMilcclxuICAgICAgLmF0dHIoJ3knLCAoZCkgPT4gbGluZVlzY2FsZShkLnZhbHVlKSlcclxuICAgICAgLmF0dHIoJ2R5JywgJy0xZW0nKVxyXG4gICAgICAudGV4dCgoZCkgPT4gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubGFiZWxGb3JtYXR0ZXIoZC52YWx1ZSkpO1xyXG4gIH1cclxufVxyXG5cclxucHJpdmF0ZSBoYW5kbGVab29tT3V0KHN2ZywgaGVpZ2h0LCBtYXJnaW4pIHtcclxuICBzdmcuc2VsZWN0QWxsKCcubGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgLmVhY2goKGQsIGksIG5vZGVzKSA9PiB7XHJcbiAgICAgIGNvbnN0IHRleHQgPSBkMy5zZWxlY3Qobm9kZXNbaV0pO1xyXG4gICAgICBjb25zdCBsYWJlbCA9IHRleHQudGV4dCgpO1xyXG4gICAgICBcclxuICAgICAgaWYgKGxhYmVsLmluZGV4T2YoJ1xcbicpID4gLTEpIHtcclxuICAgICAgICBjb25zdCBsaW5lcyA9IGxhYmVsLnNwbGl0KCdcXG4nKTtcclxuICAgICAgICB0ZXh0LnRleHQobnVsbCk7XHJcbiAgICAgICAgbGluZXMuZm9yRWFjaCgobGluZSwgaWR4KSA9PiB7XHJcbiAgICAgICAgICB0ZXh0LmFwcGVuZCgndHNwYW4nKVxyXG4gICAgICAgICAgICAudGV4dChsaW5lKVxyXG4gICAgICAgICAgICAuYXR0cigneCcsIDApXHJcbiAgICAgICAgICAgIC5hdHRyKCdkeScsIGlkeCA9PT0gMCA/ICcwLjVlbScgOiAnMWVtJyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3Qgd29yZHMgPSBsYWJlbC5zcGxpdCgnICcpO1xyXG4gICAgICAgIHRleHQudGV4dChudWxsKTtcclxuICAgICAgICB3b3Jkcy5mb3JFYWNoKCh3b3JkKSA9PiB7XHJcbiAgICAgICAgICB0ZXh0LmFwcGVuZCgndHNwYW4nKS50ZXh0KHdvcmQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBudWxsKTtcclxuXHJcbiAgc3ZnLnNlbGVjdCgnLngtYXhpcycpXHJcbiAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCAke2hlaWdodCAtIG1hcmdpbi5ib3R0b20gKyAxMH0pYCk7XHJcbn1cclxuXHJcbnByaXZhdGUgY2FsY3VsYXRlQ2hhcnREaW1lbnNpb25zKGNoYXJ0Q29udGFpbmVyOiBhbnksIHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lcjogYW55LCBtYXJnaW46IGFueSwgc2VsZjogYW55KSB7XHJcbiAgbGV0IHdpZHRoID0gcGFyc2VJbnQoY2hhcnRDb250YWluZXIuc3R5bGUoJ3dpZHRoJykpIC0gbWFyZ2luLmxlZnQgLSBtYXJnaW4ucmlnaHQ7XHJcbiAgY29uc3QgZGF0YUxlbmd0aCA9IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoO1xyXG4gIGNvbnN0IHN1Ymdyb3Vwc0NvdW50ID0gKHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhLmtleUxpc3QgYXMgYW55IHx8IFtdKS5sZW5ndGg7XHJcbiAgY29uc3QgaXNNb2JpbGUgPSB3aW5kb3cuaW5uZXJXaWR0aCA8IDU3NjtcclxuICBjb25zdCBpc1RhYmxldCA9IHdpbmRvdy5pbm5lcldpZHRoID49IDU3NiAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8IDk5MjtcclxuICBjb25zdCBpczJLID0gd2luZG93LmlubmVyV2lkdGggPj0gMjAwMCAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8IDM4NDA7XHJcbiAgY29uc3QgaXNyaWEgPSB0aGlzLmN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbi5pc1JpYTtcclxuXHJcbiAgLy8gTWluaW11bSB3aWR0aCBwZXIgYmFyIGdyb3VwIGJhc2VkIG9uIGRldmljZSBhbmQgbnVtYmVyIG9mIHN1Ymdyb3Vwc1xyXG4gIGNvbnN0IG1pbldpZHRoUGVyR3JvdXAgPSAoKCkgPT4ge1xyXG4gICAgaWYgKHN1Ymdyb3Vwc0NvdW50ID4gMikge1xyXG4gICAgICByZXR1cm4gaXNNb2JpbGUgPyAxMDAgOiBpc1RhYmxldCA/IDEwMCA6IDEyMDsgLy8gV2lkZXIgZm9yIG11bHRpcGxlIHN1Ymdyb3Vwc1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzTW9iaWxlID8gNDAgOiBpc1RhYmxldCA/IDYwIDogODA7IC8vIE5vcm1hbCB3aWR0aCBmb3IgMS0yIHN1Ymdyb3Vwc1xyXG4gIH0pKCk7XHJcblxyXG4gIC8vIENhbGN1bGF0ZSBtaW5pbXVtIHJlcXVpcmVkIHdpZHRoIGZvciBhbGwgZ3JvdXBzXHJcbiAgY29uc3QgbWluUmVxdWlyZWRXaWR0aCA9IGRhdGFMZW5ndGggKiBtaW5XaWR0aFBlckdyb3VwO1xyXG5cclxuICAvLyBJbiB6b29tZWQtb3V0IHN0YXRlLCBlbnN1cmUgbWluaW11bSB3aWR0aCBmb3IgcmVhZGFiaWxpdHlcclxuICBpZiAodGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgLy8gSWYgd2UgaGF2ZSBtYW55IGdyb3VwcyBvciBtdWx0aXBsZSBzdWJncm91cHMsIGVuc3VyZSBtaW5pbXVtIHdpZHRoXHJcbiAgICBpZiAoZGF0YUxlbmd0aCA+IDggfHwgc3ViZ3JvdXBzQ291bnQgPiAyKSB7XHJcbiAgICAgIHdpZHRoID0gTWF0aC5tYXgod2lkdGgsIG1pblJlcXVpcmVkV2lkdGgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gSW4gem9vbWVkLWluIHN0YXRlLCBhbHdheXMgZW5zdXJlIGdlbmVyb3VzIHNwYWNpbmdcclxuICBpZiAoZGF0YUxlbmd0aCA+IDggJiYgIXRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jaGFydERhdGEuZHJvcGRvd25EYXRhMiAmJlxyXG4gICAgICB3aWR0aCA8IGRhdGFMZW5ndGggKiAyNTBcclxuICAgICkge1xyXG4gICAgICB3aWR0aCA9IGRhdGFMZW5ndGggKiAyNTA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBJbmNyZWFzZSB3aWR0aCBmb3IgbXVsdGlwbGUgc3ViZ3JvdXBzXHJcbiAgICAgIHdpZHRoID0gZGF0YUxlbmd0aCAqIChzdWJncm91cHNDb3VudCA+IDIgPyAyMDAgOiAxNjApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLSBIZWlnaHQgTG9naWMgKG5vIGNoYW5nZSkgLS0tLVxyXG4gIGxldCBoZWlnaHQgPVxyXG4gICAgcGFyc2VJbnQodmVydGljYWxzdGFja2VkY29udGFpbmVyLnN0eWxlKCdoZWlnaHQnKSkgKlxyXG4gICAgICAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0IC8gMTAwKSAtXHJcbiAgICBtYXJnaW4udG9wIC1cclxuICAgIG1hcmdpbi5ib3R0b207XHJcblxyXG4gIGlmIChcclxuICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRnVsbFNjcmVlbiAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0Z1bGxTY3JlZW5cclxuICApIHtcclxuICAgIGhlaWdodCA9XHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodCAhPT0gNzBcclxuICAgICAgICA/IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodFxyXG4gICAgICAgIDogcGFyc2VJbnQodmVydGljYWxzdGFja2VkY29udGFpbmVyLnN0eWxlKCdoZWlnaHQnKSk7XHJcbiAgfVxyXG5cclxuICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCAmJiAhdGhpcy5pc0hlYWRlclZpc2libGUpIHtcclxuICAgICBjb25zdCBib3R0b21EZWR1Y3Rpb24gPSBpc3JpYSA/IDUwIDogMTMwO1xyXG4gICAgaGVpZ2h0ID1cclxuICAgICAgcGFyc2VJbnQodmVydGljYWxzdGFja2VkY29udGFpbmVyLnN0eWxlKCdoZWlnaHQnKSkgLVxyXG4gICAgICBtYXJnaW4udG9wIC1cclxuICAgICAgbWFyZ2luLmJvdHRvbSAtXHJcbiAgICAgIGJvdHRvbURlZHVjdGlvbjtcclxuICB9XHJcblxyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0hlYWRlclZpc2libGUpIHtcclxuICAgY29uc3QgYm90dG9tRGVkdWN0aW9uID0gaXNyaWEgPyA2MCA6IDEwMDtcclxuICAgIGhlaWdodCA9XHJcbiAgICAgIHBhcnNlSW50KHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lci5zdHlsZSgnaGVpZ2h0JykpIC1cclxuICAgICAgbWFyZ2luLnRvcCAtXHJcbiAgICAgIG1hcmdpbi5ib3R0b20gLVxyXG4gICAgICBib3R0b21EZWR1Y3Rpb247XHJcblxyXG4gICAgaWYgKGlzMksgJiYgdGhpcy5pc0hlYWRlclZpc2libGUgJiYgIWlzcmlhKSB7XHJcbiAgICAgIGhlaWdodCAtPSA1NTsgLy8gcmVkdWNlIGEgYml0IG1vcmUgZm9yIDJLXHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiB7IHdpZHRoLCBoZWlnaHQgfTtcclxufVxyXG5wcml2YXRlIGNyZWF0ZUNoYXJ0Q29udGFpbmVycyhcclxuICBjaGFydENvbnRhaW5lcjogYW55LFxyXG4gIG1hcmdpbjogYW55LFxyXG4gIGhlaWdodDogbnVtYmVyLFxyXG4gIHJpZ2h0U3ZnV2lkdGg6IG51bWJlcixcclxuICBzZWxmOiBhbnksXHJcbiAgd2lkdGg6IG51bWJlclxyXG4pIHtcclxuICAvLyBPdXRlciBjb250YWluZXJcclxuICAgY29uc3QgaXNyaWEgPSB0aGlzLmN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbi5pc1JpYTtcclxuICBjb25zdCBvdXRlckNvbnRhaW5lciA9IGNoYXJ0Q29udGFpbmVyXHJcbiAgICAuYXBwZW5kKCdkaXYnKVxyXG4gICAgLmF0dHIoJ2lkJywgc2VsZi51bmlxdWVJZClcclxuICAgIC5hdHRyKCdjbGFzcycsICdvdXRlci1jb250YWluZXInKVxyXG4gICAgLnN0eWxlKCd3aWR0aCcsICcxMDAlJylcclxuICAgIC5zdHlsZSgnaGVpZ2h0JywgaGVpZ2h0KVxyXG4gICAgLnN0eWxlKCdvdmVyZmxvdycsICd2aXNpYmxlJykgLy8gQWxsb3cgb3ZlcmZsb3cgdG8gc2hvdyBzY3JvbGxiYXJzXHJcbiAgICAvLyAuc3R5bGUoJ3BhZGRpbmctbGVmdCcsIGAke21hcmdpbi5sZWZ0fXB4YClcclxuICAgIC5zdHlsZSgncGFkZGluZy1sZWZ0JywgYCR7aXNyaWEgPyBtYXJnaW4ubGVmdCArIDE4IDogbWFyZ2luLmxlZnQgKyAxNX1weGApXHJcbiAgICAuc3R5bGUoJ3BhZGRpbmctcmlnaHQnLCBgJHtyaWdodFN2Z1dpZHRofXB4YClcclxuICAgIC5zdHlsZSgnbWFyZ2luLWxlZnQnLCAnNnB4Jyk7XHJcblxyXG4gIC8vIExlZnQgWS1BeGlzXHJcbiAgY29uc3Qgc3ZnWUF4aXNMZWZ0ID0gb3V0ZXJDb250YWluZXJcclxuICAgIC5hcHBlbmQoJ3N2ZycpXHJcbiAgICAuYXR0cignd2lkdGgnLCAnMTAwJylcclxuICAgIC5hdHRyKCdoZWlnaHQnLCBoZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSArIDEwKVxyXG4gICAgLnN0eWxlKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpXHJcbiAgICAvLyAuc3R5bGUoJ2xlZnQnLCAnMCcpXHJcbiAgICAuc3R5bGUoJ2xlZnQnLCBpc3JpYSA/ICcycHgnIDogJzAnKVxyXG4gICAgLnN0eWxlKCd6LWluZGV4JywgMSlcclxuICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHttYXJnaW4ubGVmdCArIDE1fSwke21hcmdpbi50b3B9KWApO1xyXG5cclxuICAvLyBSaWdodCBZLUF4aXNcclxuICBjb25zdCBzdmdZQXhpc1JpZ2h0ID0gb3V0ZXJDb250YWluZXJcclxuICAgIC5hcHBlbmQoJ3N2ZycpXHJcbiAgICAuYXR0cignd2lkdGgnLCByaWdodFN2Z1dpZHRoKVxyXG4gICAgLmF0dHIoJ2hlaWdodCcsIGhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tICsgMTApXHJcbiAgICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJylcclxuICAgIC5zdHlsZSgncmlnaHQnLCAnMTJweCcpXHJcbiAgICAuc3R5bGUoJ3otaW5kZXgnLCAxKVxyXG4gICAgLmFwcGVuZCgnZycpXHJcbiAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7bWFyZ2luLnRvcH0pYCk7IFxyXG5cclxuICAvLyBJbm5lciBzY3JvbGxhYmxlIGNvbnRhaW5lclxyXG4gIGNvbnN0IGlubmVyQ29udGFpbmVyID0gb3V0ZXJDb250YWluZXJcclxuICAgIC5hcHBlbmQoJ2RpdicpXHJcbiAgICAuYXR0cignY2xhc3MnLCAnaW5uZXItY29udGFpbmVyJylcclxuICAgIC5zdHlsZSgnd2lkdGgnLCAnMTAwJScpXHJcbiAgICAuc3R5bGUoJ292ZXJmbG93LXgnLCAnYXV0bycpXHJcbiAgICAuc3R5bGUoJ2hlaWdodCcsIGlzcmlhID8gJzI0MnB4JyA6IG51bGwpO1xyXG5cclxuICAvLyBNYWluIFNWR1xyXG4gIGNvbnN0IHN2ZyA9IGlubmVyQ29udGFpbmVyXHJcbiAgICAuYXBwZW5kKCdzdmcnKVxyXG4gICAgLmF0dHIoJ3dpZHRoJywgTWF0aC5tYXgod2lkdGggLSByaWdodFN2Z1dpZHRoLCB3aW5kb3cuaW5uZXJXaWR0aCAqIDAuOCkpIC8vIEVuc3VyZSBtaW5pbXVtIHdpZHRoXHJcbiAgICAuYXR0cignaGVpZ2h0JywgaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20gKyA2MClcclxuICAgIC5zdHlsZSgnbWluLXdpZHRoJywgJzEwMCUnKSAvLyBQcmV2ZW50IHN2ZyBmcm9tIHNocmlua2luZ1xyXG4gICAgLmFwcGVuZCgnZycpXHJcbiAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7bWFyZ2luLnRvcH0pYCk7XHJcblxyXG4gIHJldHVybiB7IG91dGVyQ29udGFpbmVyLCBzdmdZQXhpc0xlZnQsIHN2Z1lBeGlzUmlnaHQsIGlubmVyQ29udGFpbmVyLCBzdmcgfTtcclxufVxyXG4gIGhhbmRsZUNsaWNrKGQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhLmhhc0RyaWxsRG93biB8fCBkPy50b2dnbGVGcm9tKVxyXG4gICAgICB0aGlzLmNsaWNrRXZlbnQuZW1pdChkKTtcclxuICB9XHJcbiAgaGFuZGxlSGVhZGVyTWVudUNsaWNrKGlkKSB7XHJcbiAgICB0aGlzLmhlYWRlck1lbnVjbGlja0V2ZW50LmVtaXQoaWQpO1xyXG4gIH1cclxuICBoYW5kbGVERDFDbGljayhldmVudCkge1xyXG4gICAgdGhpcy5pc0REMU9wZW4gPSB0cnVlO1xyXG4gICAgdGhpcy5pc0REMk9wZW4gPSBmYWxzZTtcclxuICB9XHJcbiAgaGFuZGxlREQyQ2xpY2soZXZlbnQpIHtcclxuICAgIHRoaXMuaXNERDJPcGVuID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNERDFPcGVuID0gZmFsc2U7XHJcbiAgfVxyXG4gIGhhbmRsZUNvbXBhcmVCeUZpbHRlclNlbGVjdGlvbihldmVudCkge1xyXG4gICAgdGhpcy5jbGlja0V2ZW50LmVtaXQoZXZlbnQpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2XHJcbiAgI2dyb3VwY29udGFpbmVyXHJcbiAgY2xhc3M9XCJsaWItY2hhcnQtd3JhcHBlclwiXHJcbiAgW25nQ2xhc3NdPVwieyAnbGliLW5vLWJhY2tncm91bmQnOiBpc1RyYW5zcGFyZW50QmFja2dyb3VuZCB9XCJcclxuICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHZhcigtLWNhcmQtYmcpO1wiXHJcbiAgKHJlc2l6ZWQpPVwib25SZXNpemVkKCRldmVudClcIlxyXG4+XHJcbiAgPGRpdiBjbGFzcz1cImhlYWRlci1hbHRcIiAqbmdJZj1cIiFpc0hlYWRlclZpc2libGVcIj5cclxuICAgIDxsaWItY2hhcnQtaGVhZGVyLXYyXHJcbiAgICAgIFtjaGFydERhdGFdPVwiY2hhcnREYXRhXCJcclxuICAgICAgW2NoYXJ0Q29uZmlndXJhdGlvbl09XCJjaGFydENvbmZpZ3VyYXRpb25cIlxyXG4gICAgICAoY2xpY2tFdmVudCk9XCJoYW5kbGVDbGljaygkZXZlbnQpXCJcclxuICAgICAgIChjb21wYXJlQnlGaWx0ZXJTZWxlY3Rpb24pPVwiaGFuZGxlQ29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKCRldmVudClcIlxyXG4gICAgICAoem9vbUluWm9vbU91dENsaWNrKT1cImhhbmRsZVpvb21pblpvb21vdXRDbGljaygkZXZlbnQpXCJcclxuICAgID48L2xpYi1jaGFydC1oZWFkZXItdjI+XHJcbiAgICA8IS0tIDxsaWItY2hhcnQtaGVhZGVyLXYzXHJcbiAgICAgIFtjaGFydERhdGFdPVwiY2hhcnREYXRhXCJcclxuICAgICAgW2NoYXJ0Q29uZmlndXJhdGlvbl09XCJjaGFydENvbmZpZ3VyYXRpb25cIlxyXG4gICAgICAoY29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKT1cImhhbmRsZUNvbXBhcmVCeUZpbHRlclNlbGVjdGlvbigkZXZlbnQpXCJcclxuICAgICAgKHpvb21Jblpvb21PdXRDbGljayk9XCJoYW5kbGVab29taW5ab29tb3V0Q2xpY2soJGV2ZW50KVwiXHJcbiAgICA+PC9saWItY2hhcnQtaGVhZGVyLXYzPiAtLT5cclxuICA8L2Rpdj5cclxuICA8bGliLWNoYXJ0LWhlYWRlci12MVxyXG4gICAgW3RpdGxlXT1cImNoYXJ0RGF0YS5tZXRhRGF0YS50aXRsZVwiXHJcbiAgICBbaGFzRHJpbGxEb3duXT1cImNoYXJ0RGF0YS5tZXRhRGF0YS5oYXNEcmlsbERvd25cIlxyXG4gICAgW2lzRWRpdEVuYWJsZWRdPVwiY2hhcnREYXRhLm1ldGFEYXRhLmlzRWRpdEVuYWJsZWRcIlxyXG4gICAgW21lbnVPcHRpb25zXT1cImNoYXJ0Q29uZmlndXJhdGlvbi5oZWFkZXJNZW51T3B0aW9uc1wiXHJcbiAgICBbaXNyaWFdPVwiY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uLmlzUmlhXCJcclxuICAgIFtzZWxlY3RlZEtwaVRvb2x0b3BdPVwiY2hhcnRDb25maWd1cmF0aW9uLnNlbGVjdGVkS3BpVG9vbHRvcFwiXHJcbiAgICAobWVudU9wdGlvbkNsaWNrRXZlbnQpPVwiaGFuZGxlSGVhZGVyTWVudUNsaWNrKCRldmVudClcIlxyXG4gICAgW2lzQWxlcnRFbmFibGVkXT1cImlzQWxlcnRFbmFibGVkXCJcclxuICAgICpuZ0lmPVwiaXNIZWFkZXJWaXNpYmxlXCJcclxuICA+PC9saWItY2hhcnQtaGVhZGVyLXYxPlxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwiXHJcbiAgICAgIGNoYXJ0RGF0YSAmJlxyXG4gICAgICBjaGFydERhdGEubWV0YURhdGEgJiZcclxuICAgICAgY2hhcnRDb25maWd1cmF0aW9uLmxlZ2VuZEp1c3RpZmllZCAmJlxyXG4gICAgICBsZWdlbmRWaXNpYmxlICYmXHJcbiAgICAgIGNoYXJ0Q29uZmlndXJhdGlvbi5sZWdlbmRBdFRvcFJpZ2h0XHJcbiAgICBcIlxyXG4gICAgY2xhc3M9XCJsZWdlbmQtaG9sZGVyLXJpZ2h0XCJcclxuICAgIFtzdHlsZS5oZWlnaHRdPVwiY2hhcnRDb25maWd1cmF0aW9uLmZvb3RlckhlaWdodFwiXHJcbiAgPlxyXG4gICAgPHVsIGNsYXNzPVwiZGlzcGxheS1mbGV4XCI+XHJcbiAgICAgIDxsaVxyXG4gICAgICAgIGNsYXNzPVwibGVnZW5kcy1wb3NpdGlvbmluZy1pbmxpbmVcIlxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvcnMgfCBrZXl2YWx1ZSA6IGtlZXBPcmRlclwiXHJcbiAgICAgID5cclxuICAgICAgICA8c3BhblxyXG4gICAgICAgICAgY2xhc3M9XCJsaWItZG9udXQtanVzdGlmaWVkLWxhYmVsLWljb24tZHJpbGxkb3duXCJcclxuICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIml0ZW0udmFsdWVcIlxyXG4gICAgICAgID48L3NwYW5cclxuICAgICAgICA+PHNwYW4+e3sgaXRlbS5rZXkgfX08L3NwYW4+XHJcbiAgICAgIDwvbGk+XHJcbiAgICA8L3VsPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXZcclxuICAgIFtzdHlsZS5oZWlnaHRdPVwiY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodFwiXHJcbiAgICBpZD1cImdyb3VwY2hhcnRjb250YWluZXJcIlxyXG4gICAgI2dyb3VwY2hhcnRjb250YWluZXJcclxuICAgIGNsYXNzPVwibGliLWNoYXJ0LXN2Z1wiXHJcbiAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICdtdC0zJzogIWNoYXJ0Q29uZmlndXJhdGlvbi5pc0hlYWRlclZpc2libGVcclxuICB9XCJcclxuICA+PC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJoZWFkZXItYWx0XCIgKm5nSWY9XCIhaXNIZWFkZXJWaXNpYmxlXCI+XHJcbiAgPGxpYi1jaGFydC1oZWFkZXItdjNcclxuICAgICAgW2NoYXJ0RGF0YV09XCJjaGFydERhdGFcIlxyXG4gICAgICBbY2hhcnRDb25maWd1cmF0aW9uXT1cImNoYXJ0Q29uZmlndXJhdGlvblwiXHJcbiAgICAgIChjb21wYXJlQnlGaWx0ZXJTZWxlY3Rpb24pPVwiaGFuZGxlQ29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKCRldmVudClcIlxyXG4gICAgICAoem9vbUluWm9vbU91dENsaWNrKT1cImhhbmRsZVpvb21pblpvb21vdXRDbGljaygkZXZlbnQpXCJcclxuICAgID48L2xpYi1jaGFydC1oZWFkZXItdjM+XHJcbiAgICA8L2Rpdj5cclxuICA8IS0tIDxkaXZcclxuICAgICpuZ0lmPVwiXHJcbiAgICAgIGNoYXJ0RGF0YSAmJlxyXG4gICAgICBjaGFydERhdGEubWV0YURhdGEgJiZcclxuICAgICAgY2hhcnRDb25maWd1cmF0aW9uLmxlZ2VuZEp1c3RpZmllZCAmJlxyXG4gICAgICBsZWdlbmRWaXNpYmxlICYmXHJcbiAgICAgICFjaGFydENvbmZpZ3VyYXRpb24ubGVnZW5kQXRUb3BSaWdodFxyXG4gICAgXCJcclxuICAgIGNsYXNzPVwibGliLWRvbnV0LWNoYXJ0LWZvb3RlclwiXHJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cImNoYXJ0Q29uZmlndXJhdGlvbi5mb290ZXJIZWlnaHRcIlxyXG4gID5cclxuICAgIDx1bCBjbGFzcz1cImxpYi1kb251dC1qdXN0aWZpZWQtbGFiZWwtd3JhcHBlclwiPlxyXG4gICAgICA8bGlcclxuICAgICAgICBjbGFzcz1cImxpYi1kb251dC1qdXN0aWZpZWQtbGFiZWwtaXRlbVwiXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9ycyB8IGtleXZhbHVlXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxzcGFuXHJcbiAgICAgICAgICBjbGFzcz1cImxpYi1kb251dC1qdXN0aWZpZWQtbGFiZWwtaWNvblwiXHJcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJpdGVtLnZhbHVlXCJcclxuICAgICAgICA+PC9zcGFuXHJcbiAgICAgICAgPjxzcGFuPnt7IGl0ZW0ua2V5IH19PC9zcGFuPlxyXG4gICAgICA8L2xpPlxyXG4gICAgPC91bD5cclxuICA8L2Rpdj4gLS0+XHJcblxyXG5cclxuICA8IS0tIDxkaXYgKm5nSWY9XCJjaGFydENvbmZpZ3VyYXRpb24/LmlzRGlzcGxheUJhckRldGFpbHNBdEJvdHRvbVwiPlxyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzcz1cImJhci12YWx1ZXMgbGliLWRpc3BsYXktZmxleCBsaWItanVzdGlmeS1jb250ZW50LWNlbnRlciBsaWItYWxpZ24taXRlbXMtY2VudGVyXCJcclxuICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgbGV0IGl0ZW0gb2YgY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9ycyB8IGtleXZhbHVlIDoga2VlcE9yZGVyO1xyXG4gICAgICAgIGxldCBpID0gaW5kZXhcclxuICAgICAgXCI+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImJhci1uYW1lIGZvbnQtc2l6ZS0xXCJcclxuICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgY2hhcnREYXRhLmRhdGFbMF1baXRlbS5rZXldICYmXHJcbiAgICAgICAgICBpIDw9IGNoYXJ0Q29uZmlndXJhdGlvbi5ob3dtYW55QmFyRGV0YWlsc1RvRGlzcGxheVxyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyBpdGVtLmtleSB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiYmFyLXZhbHVlIGxpYi1kaXNwbGF5LWZsZXggbGliLWFsaWduLWl0ZW1zLWNlbnRlciBmb250LXNpemUtMVwiXHJcbiAgICAgICAgW3N0eWxlLmNvbG9yXT1cIlxyXG4gICAgICAgICAgY2hhcnRDb25maWd1cmF0aW9uLmJhclZhdWxlQ29sb3IgPyBiYXJWYXVsZUNvbG9yIDogaXRlbS52YWx1ZVxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgIGNoYXJ0RGF0YS5kYXRhWzBdW2l0ZW0ua2V5XSAmJlxyXG4gICAgICAgICAgaSA8PSBjaGFydENvbmZpZ3VyYXRpb24uaG93bWFueUJhckRldGFpbHNUb0Rpc3BsYXlcclxuICAgICAgICBcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgY2hhcnREYXRhLmRhdGFbMF1baXRlbS5rZXldIH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+IC0tPlxyXG48L2Rpdj5cclxuIl19
1367
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9yaXpvbnRhbC1ncm91cGVkLWJhci13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ob3Jpem9udGFsLWdyb3VwZWQtYmFyLXdpdGgtc2Nyb2xsLXpvb20vaG9yaXpvbnRhbC1ncm91cGVkLWJhci13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ob3Jpem9udGFsLWdyb3VwZWQtYmFyLXdpdGgtc2Nyb2xsLXpvb20vaG9yaXpvbnRhbC1ncm91cGVkLWJhci13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDakQsT0FBTyxXQUFXLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFFekIsT0FBTyxrQkFBa0IsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7OztBQVdsRCxNQUFNLE9BQU8sMkNBQ1gsU0FBUSxpQkFBaUI7SUF5RXpCO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUEvREEsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDckMseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN6RCxvQkFBZSxHQUFZLElBQUksQ0FBQztRQUNoQyxrQkFBYSxHQUFZLElBQUksQ0FBQztRQUM5Qiw0QkFBdUIsR0FBWSxLQUFLLENBQUM7UUFD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Q0FBQztJQUN6QixDQUFDO0lBQ0QsY0FBYyxDQUFDLEtBQUs7UUFDbEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUNELDhCQUE4QixDQUFDLEtBQUs7UUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQzsrR0F4aURVLDJDQUEyQzttR0FBM0MsMkNBQTJDLGdoQkN6QnhELG1nSkFtSUE7OzRGRDFHYSwyQ0FBMkM7a0JBVHZELFNBQVM7K0JBQ0UsNkNBQTZDLGlCQU14QyxpQkFBaUIsQ0FBQyxJQUFJO3dEQU9yQyxZQUFZO3NCQURYLFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUlsRCxpQkFBaUI7c0JBRGhCLFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUdwQyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgRWxlbWVudFJlZixcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRVbmlxdWVJZCB9IGZyb20gJy4uL3VuaXF1ZS1pZCc7XHJcbmltcG9ydCBDaGFydEhlbHBlciBmcm9tICcuLi9jaGFydC1oZWxwZXInO1xyXG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XHJcbmltcG9ydCB7IFJlc2l6ZWRFdmVudCB9IGZyb20gJ2FuZ3VsYXItcmVzaXplLWV2ZW50JztcclxuaW1wb3J0IEhlYWRlckNvbmZpZ0hlbHBlciBmcm9tICcuLi9oZWFkZXItY29uZmlnJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWhvcml6b250YWwtZ3JvdXBlZC1iYXItd2l0aC1zY3JvbGwtem9vbScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2hvcml6b250YWwtZ3JvdXBlZC1iYXItd2l0aC1zY3JvbGwtem9vbS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbXHJcbiAgICAnLi9ob3Jpem9udGFsLWdyb3VwZWQtYmFyLXdpdGgtc2Nyb2xsLXpvb20uY29tcG9uZW50Lmxlc3MnLFxyXG4gICAgJy4uL2NvbW1vbi1zdHlsZXMubGVzcycsXHJcbiAgXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSG9yaXpvbnRhbEdyb3VwZWRCYXJXaXRoU2Nyb2xsWm9vbUNvbXBvbmVudFxyXG4gIGV4dGVuZHMgQ29tcG9uZW50VW5pcXVlSWRcclxuICBpbXBsZW1lbnRzIE9uSW5pdFxyXG57XHJcbiAgQFZpZXdDaGlsZCgnZ3JvdXBjaGFydGNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZ3JvdXBjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGdyb3VwY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgQElucHV0KCkgY2hhcnREYXRhOiBhbnk7XHJcbiAgQElucHV0KCkgY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uOiBhbnk7XHJcbiAgQE91dHB1dCgpIGNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgaGVhZGVyTWVudWNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBpc0hlYWRlclZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGxlZ2VuZFZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2hhcnRDb25maWd1cmF0aW9uOiBhbnkgPSB7fTtcclxuICBvYmplY3RLZXlzID0gT2JqZWN0LmtleXM7XHJcblxyXG4gIGRlZmF1bHRDb25maWd1cmF0aW9uOiBhbnkgPSB7XHJcbiAgICBtYXJnaW46IHsgdG9wOiAyMCwgcmlnaHQ6IDIwLCBib3R0b206IDIwLCBsZWZ0OiA0MCB9LFxyXG4gICAgbGFiZWxGb3JtYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICBzdmdIZWlnaHQ6IDcwLFxyXG4gICAgbnVtYmVyT2ZZVGlja3M6IDUsXHJcbiAgICBsZWdlbmRKdXN0aWZpZWQ6IHRydWUsXHJcbiAgICB5TGluZUF4aXNMYWJlbEZvbWF0dGVyOiBDaGFydEhlbHBlci5kZWZhdWx0Rm9ybWF0dGVyLFxyXG4gICAgeUF4aXNMYWJlbEZvbWF0dGVyOiBDaGFydEhlbHBlci5kZWZhdWx0Rm9ybWF0dGVyLFxyXG4gICAgbGluZUdyYXBoQ29sb3I6ICcjRjZEMjgzJyxcclxuICAgIHNob3dMaW5lQ2hhcnRBeGlzOiB0cnVlLFxyXG4gICAgc2hvd1ZhbHVlczogdHJ1ZSxcclxuICAgIGhlYWRlck1lbnVPcHRpb25zOiBIZWFkZXJDb25maWdIZWxwZXIuaGVhZGVyQ29uZmlnLmhlYWRlck1lbnVPcHRpb25zLFxyXG4gICAgeEF4aXNHcmlkOiB1bmRlZmluZWQsXHJcbiAgICB5QXhpc0dyaWQ6IGZhbHNlLFxyXG4gICAgbGVnZW5kVmlzaWJsZTogZmFsc2UsXHJcbiAgICBpc0hlYWRlclZpc2libGU6IHVuZGVmaW5lZCxcclxuICAgIGlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOiB1bmRlZmluZWQsXHJcbiAgICBpc011bHRpQ2hhcnRHcmlkTGluZTogdW5kZWZpbmVkLFxyXG4gICAgaXNGdWxsU2NyZWVuOiB1bmRlZmluZWQsXHJcbiAgICBjdXN0b21Zc2NhbGU6IHVuZGVmaW5lZCxcclxuICAgIHRleHRzT25CYXI6IHVuZGVmaW5lZCxcclxuICAgIGlzWGF4aXNMYWJlbEhpZGRlbjogdW5kZWZpbmVkLFxyXG4gICAgaXNZYXhpc0xhYmVsSGlkZGVuOiBmYWxzZSxcclxuICAgIGlzWWF4aXNIaWRkZW46IHVuZGVmaW5lZCxcclxuICAgIGlzWWF4aXNEYXNoZWQ6IHVuZGVmaW5lZCxcclxuICAgIHRleHRGb3JtYXR0ZXI6IHVuZGVmaW5lZCxcclxuICAgIGlzTm9BbHRlcm5hdGVYYXhpc1RleHQ6IHVuZGVmaW5lZCxcclxuICAgIGlzWGdyaWRCZXR3ZWVuTGFiZWxzOiB1bmRlZmluZWQsXHJcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjRkZGRkZGJyxcclxuICAgIGhpZGVMZWdlbmRPblRvcDogdHJ1ZSxcclxuICAgIGlzWGF4aXNDb2xvcjogJyM5OTk5OTknLFxyXG4gICAgbGFiZWxPdmVybGFwTWlub3JGaXg6IHRydWUsXHJcbiAgICBub0hvdmVyRWZmZWN0OiB0cnVlLFxyXG4gICAgbm9Ib3ZlckRpc3BsYXlEYXRhOiB0cnVlLFxyXG4gICAgc2hvd1hheGlzVG9wOiB0cnVlLFxyXG4gICAgZGlzcGxheVlheGlzTGFiZWxzOiB1bmRlZmluZWQsXHJcbiAgICB4TGFiZWxzT25TYW1lTGluZTogdW5kZWZpbmVkLFxyXG4gICAgdGV4dEFsd2F5c0hvcml6b250YWw6IHVuZGVmaW5lZCxcclxuICAgIGxlZ2VuZEF0VG9wUmlnaHQ6IHVuZGVmaW5lZCxcclxuICAgIGlzRHJpbGxkb3duQ2hhcnQ6IHRydWUsXHJcbiAgICBkaXNwbGF5VGl0bGVPblRvcDogdW5kZWZpbmVkLFxyXG4gICAgaXNUb2dnbGVWaXNpYmxlOiB1bmRlZmluZWQsXHJcbiAgICBpc1RpdGxlSGlkZGVuOiB1bmRlZmluZWQsXHJcbiAgICBpc0Rpc3BsYXlCYXJEZXRhaWxzQXRCb3R0b206IHVuZGVmaW5lZCxcclxuICAgIGhvd21hbnlCYXJEZXRhaWxzVG9EaXNwbGF5OiAwLFxyXG4gICAgYmFyVmF1bGVDb2xvcjogdW5kZWZpbmVkLFxyXG4gICAgZGVmYXVsdEJhckhlaWdodDogMixcclxuICB9O1xyXG5cclxuICB1bmlxdWVJZDogYW55ID0gdGhpcy5nZXRVbmlxdWVJZCgpO1xyXG4gIGlzWm9vbWVkT3V0OiBib29sZWFuID0gdHJ1ZTtcclxuICBpc0REMU9wZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0REMk9wZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgb25SZXNpemVkKGV2ZW50OiBSZXNpemVkRXZlbnQpIHtcclxuICAgIGxldCBzZWxmID0gdGhpcztcclxuICAgIHNldFRpbWVvdXQoXHJcbiAgICAgIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBkMy5zZWxlY3QoJyMnICsgc2VsZi51bmlxdWVJZCkucmVtb3ZlKCk7XHJcbiAgICAgICAgc2VsZi5pbml0aWFsaXplZ3JvdXBDaGFydCgpO1xyXG4gICAgICB9LmJpbmQoc2VsZiksXHJcbiAgICAgIDEwXHJcbiAgICApO1xyXG4gIH1cclxuICBpc1pvb21PdXRTZWxlY3RlZChpc1pvb21PdXQsIGV2ZW50KSB7XHJcbiAgICB0aGlzLmlzWm9vbWVkT3V0ID0gaXNab29tT3V0O1xyXG4gICAgdGhpcy5vblJlc2l6ZWQoZXZlbnQpO1xyXG4gIH1cclxuICBoYW5kbGVab29taW5ab29tb3V0Q2xpY2soeyBpc1pvb21PdXQsIGV2ZW50IH0pIHtcclxuICAgIHRoaXMuaXNab29tT3V0U2VsZWN0ZWQoaXNab29tT3V0LCBldmVudCk7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCkge31cclxuICBpc0xlZ2VuZFZpc2libGUoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2hhcnREYXRhICYmXHJcbiAgICAgIHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9ycyAmJlxyXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvcnMpLmxlbmd0aCA+IDFcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2VlcE9yZGVyID0gKGEsIGIpID0+IHtcclxuICAgIHJldHVybiBhO1xyXG4gIH07XHJcblxyXG4gIGdldCBpc0FsZXJ0RW5hYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbj8uaGVhZGVyTWVudU9wdGlvbnM/LnNvbWUoXHJcbiAgICAgIChvcHRpb24pID0+IG9wdGlvbi5pZCA9PT0gJ2VkaXRBbGVydCdcclxuICAgICk7XHJcbiAgfSAgXHJcblxyXG5pbml0aWFsaXplZ3JvdXBDaGFydCgpIHtcclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBWQVJJQUJMRSBERUNMQVJBVElPTlMgPT09PT09PT09PT09PT09PT09PT1cclxuICBjb25zdCBzZWxmID0gdGhpcztcclxuICBsZXQgZGF0YSA9IFtdO1xyXG4gIGxldCBtZXRhRGF0YTogYW55ID0gbnVsbDtcclxuICBsZXQga2V5TGlzdCA9IG51bGw7XHJcbiAgbGV0IGxpbmVEYXRhID0gbnVsbDtcclxuICBsZXQgY29sb3JNYXAgPSB7fTtcclxuICBsZXQgZm9ybWF0RnJvbUJhY2tlbmQ7XHJcbiAgbGV0IGZvcm1hdEZvckh1Z2VOdW1iZXJzO1xyXG4gIFxyXG4gIC8vIERldmljZSBkZXRlY3Rpb25cclxuICBjb25zdCBpc01vYmlsZSA9IHdpbmRvdy5pbm5lcldpZHRoIDwgNTc2O1xyXG4gIGNvbnN0IGlzVGFibGV0ID0gd2luZG93LmlubmVyV2lkdGggPj0gNTc2ICYmIHdpbmRvdy5pbm5lcldpZHRoIDwgOTkyO1xyXG4gIGNvbnN0IGlzRGVza3RvcCA9IHdpbmRvdy5pbm5lcldpZHRoID49IDk5MjtcclxuICBjb25zdCBpc3JpYSA9IHRoaXMuY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uLmlzUmlhO1xyXG5cclxuICAvLyBDaGFydCBzY2FsZSB2YXJpYWJsZXNcclxuICBsZXQgeDogYW55O1xyXG4gIGxldCB0ZW1wU2NhbGU7XHJcblxyXG4gIC8vIFRpY2sgbGVuZ3RoIGNvbnN0YW50c1xyXG4gIGNvbnN0IFNIT1JUX1RJQ0tfTEVOR1RIID0gNDtcclxuICBjb25zdCBMT05HX1RJQ0tfTEVOR1RIID0gMTY7XHJcbiAgY29uc3QgU0hPUlRfVElDS19MRU5HVEhfQkcgPSA1O1xyXG4gIGNvbnN0IExPTkdfVElDS19MRU5HVEhfQkcgPSAzMDtcclxuICBjb25zdCBMRUZUX0FORF9SSUdIVF9TUEFDRVMgPSA1MDtcclxuICBjb25zdCBSSUdIVF9TVkdfV0lEVEggPSA2MDtcclxuICBcclxuICAvLyBGbGFnc1xyXG4gIGxldCBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBDT05GSUdVUkFUSU9OIFNFVFVQID09PT09PT09PT09PT09PT09PT09XHJcbiAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbikge1xyXG4gICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb25ba2V5XSA9IENoYXJ0SGVscGVyLmdldFZhbHVlQnlDb25maWd1cmF0aW9uVHlwZShcclxuICAgICAga2V5LFxyXG4gICAgICB0aGlzLmRlZmF1bHRDb25maWd1cmF0aW9uLFxyXG4gICAgICB0aGlzLmN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvblxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIEV4dHJhY3QgY2hhcnQgZGF0YVxyXG4gIGRhdGEgPSB0aGlzLmNoYXJ0RGF0YS5kYXRhO1xyXG4gIG1ldGFEYXRhID0gdGhpcy5jaGFydERhdGEubWV0YURhdGE7XHJcbiAgbGluZURhdGEgPSB0aGlzLmNoYXJ0RGF0YS5saW5lRGF0YTtcclxuXHJcbiAgLy8gU2V0dXAgY29sb3IgbWFwcGluZ3NcclxuICBpZiAoIW1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXQpIHtcclxuICAgIG1ldGFEYXRhWydjb2xvckFib3ZlVGFyZ2V0J10gPSBtZXRhRGF0YS5jb2xvcnM7XHJcbiAgfVxyXG4gIGNvbG9yTWFwID0gbWV0YURhdGEuY29sb3JzO1xyXG4gIGtleUxpc3QgPSBtZXRhRGF0YS5rZXlMaXN0O1xyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBDT05UQUlORVIgU0VUVVAgPT09PT09PT09PT09PT09PT09PT1cclxuICBjb25zdCBjaGFydENvbnRhaW5lciA9IGQzLnNlbGVjdCh0aGlzLmNvbnRhaW5lckVsdC5uYXRpdmVFbGVtZW50KTtcclxuICBjb25zdCB2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIgPSBkMy5zZWxlY3QodGhpcy5ncm91cGNvbnRhaW5lckVsdC5uYXRpdmVFbGVtZW50KTtcclxuICBjb25zdCBtYXJnaW4gPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5tYXJnaW47XHJcbiAgXHJcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLmNhbGN1bGF0ZUNoYXJ0RGltZW5zaW9ucyhcclxuICAgIGNoYXJ0Q29udGFpbmVyLFxyXG4gICAgdmVydGljYWxzdGFja2VkY29udGFpbmVyLFxyXG4gICAgbWFyZ2luLFxyXG4gICAgc2VsZlxyXG4gICk7XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IFZJU0lCSUxJVFkgQ09ORklHVVJBVElPTiA9PT09PT09PT09PT09PT09PT09PVxyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0hlYWRlclZpc2libGUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5pc0hlYWRlclZpc2libGUgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0hlYWRlclZpc2libGU7XHJcbiAgfVxyXG5cclxuICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubGVnZW5kVmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLmxlZ2VuZFZpc2libGUgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5sZWdlbmRWaXNpYmxlO1xyXG4gIH1cclxuXHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kICE9PSB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuaXNUcmFuc3BhcmVudEJhY2tncm91bmQgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1RyYW5zcGFyZW50QmFja2dyb3VuZDtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IERBVEEgRk9STUFUVElORyA9PT09PT09PT09PT09PT09PT09PVxyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0Rm9ybWF0dGVyICE9PSB1bmRlZmluZWQpIHtcclxuICAgIGZvcm1hdEZyb21CYWNrZW5kID0gQ2hhcnRIZWxwZXIuZGF0YVZhbHVlRm9ybWF0dGVyKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRGb3JtYXR0ZXIpO1xyXG4gICAgZm9ybWF0Rm9ySHVnZU51bWJlcnMgPSBDaGFydEhlbHBlci5kYXRhVmFsdWVGb3JtYXR0ZXIoJy4ycycpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gU1ZHIENPTlRBSU5FUlMgQ1JFQVRJT04gPT09PT09PT09PT09PT09PT09PT1cclxuICBjb25zdCB7XHJcbiAgICBvdXRlckNvbnRhaW5lcixcclxuICAgIHN2Z1lBeGlzTGVmdCxcclxuICAgIHN2Z1lBeGlzUmlnaHQsXHJcbiAgICBpbm5lckNvbnRhaW5lcixcclxuICAgIHN2Z1xyXG4gIH0gPSB0aGlzLmNyZWF0ZUNoYXJ0Q29udGFpbmVycyhjaGFydENvbnRhaW5lciwgbWFyZ2luLCBoZWlnaHQsIFJJR0hUX1NWR19XSURUSCwgc2VsZiwgd2lkdGgpO1xyXG5cclxuICAvLyBPbmx5IGVuYWJsZSBob3Jpem9udGFsIHNjcm9sbGluZyBvbiBtb2JpbGUvdGFibGV0IHdoZW4gaW4gem9vbWVkLW91dFxyXG4gIC8vIG1vZGUgYW5kIHRoZXJlIGFyZSBtYW55IGdyb3VwcyBvciBtdWx0aXBsZSBzdWJncm91cHMuIE90aGVyd2lzZSBrZWVwXHJcbiAgLy8gdGhlIGlubmVyIGNvbnRhaW5lciBmaXhlZCAobm8gc2Nyb2xsYmFyKS5cclxuICB0cnkge1xyXG4gICAgY29uc3QgZ3JvdXBzQ291bnQgPSAoZGF0YSBhcyBhbnkpLmxlbmd0aCB8fCAwO1xyXG4gICAgY29uc3Qgc3ViZ3JvdXBzQ291bnQgPSAoa2V5TGlzdCBhcyBhbnkgJiYgKGtleUxpc3QgYXMgYW55KS5sZW5ndGgpIHx8IDA7XHJcbiAgICAvLyBPbiBtb2JpbGUvdGFibGV0OiBhbHdheXMgZW5hYmxlIGhvcml6b250YWwgc2Nyb2xsaW5nIHdoZW4gdGhlcmUgaXNcclxuICAgIC8vIG1vcmUgdGhhbiBvbmUgc3ViZ3JvdXAgc28gZ3JvdXBlZCBiYXJzIGRvbid0IGdldCBjb25nZXN0ZWQuXHJcbiAgICAvLyBPbiBkZXNrdG9wOiBlbmFibGUgc2Nyb2xsaW5nIHdoZW4gdGhlcmUgYXJlIG1hbnkgZ3JvdXBzIG9yXHJcbiAgICAvLyBtdWx0aXBsZSBzdWJncm91cHMgKGtlZXBzIHByZXZpb3VzIGJlaGF2aW9yKS5cclxuICAgIGlmICgoaXNNb2JpbGUgfHwgaXNUYWJsZXQpICYmIHN1Ymdyb3Vwc0NvdW50ID4gMSkge1xyXG4gICAgICBpbm5lckNvbnRhaW5lci5zdHlsZSgnb3ZlcmZsb3cteCcsICdhdXRvJyk7XHJcbiAgICAgIGlubmVyQ29udGFpbmVyLmNsYXNzZWQoJ3Njcm9sbC1lbmFibGVkJywgdHJ1ZSk7XHJcbiAgICB9IGVsc2UgaWYgKGdyb3Vwc0NvdW50ID4gOCB8fCBzdWJncm91cHNDb3VudCA+IDIpIHtcclxuICAgICAgaW5uZXJDb250YWluZXIuc3R5bGUoJ292ZXJmbG93LXgnLCAnYXV0bycpO1xyXG4gICAgICBpbm5lckNvbnRhaW5lci5jbGFzc2VkKCdzY3JvbGwtZW5hYmxlZCcsIHRydWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaW5uZXJDb250YWluZXIuc3R5bGUoJ292ZXJmbG93LXgnLCAnaGlkZGVuJyk7XHJcbiAgICAgIGlubmVyQ29udGFpbmVyLmNsYXNzZWQoJ3Njcm9sbC1lbmFibGVkJywgZmFsc2UpO1xyXG4gICAgfVxyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIC8vIGlnbm9yZVxyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gU0NBTEVTIFNFVFVQID09PT09PT09PT09PT09PT09PT09XHJcbiAgY29uc3Qgc3ViZ3JvdXBzOiBhbnkgPSBrZXlMaXN0O1xyXG4gIGNvbnN0IGdyb3VwcyA9IGQzLm1hcChkYXRhLCAoZCkgPT4gZC5uYW1lKS5rZXlzKCk7XHJcblxyXG4gIC8vIFgtYXhpcyBzY2FsZSBjb25maWd1cmF0aW9uXHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc3QgcGFkZGluZ1ZhbHVlID0gKGlzcmlhICYmIHN1Ymdyb3Vwcy5sZW5ndGggPT09IDEpID8gMC4xIDogMC41O1xyXG4gICAgeCA9IGQzLnNjYWxlQmFuZCgpXHJcbiAgICAgIC5yYW5nZVJvdW5kKFt3aWR0aCwgMF0pXHJcbiAgICAgIC5hbGlnbigwLjUpXHJcbiAgICAgIC5wYWRkaW5nKFtwYWRkaW5nVmFsdWVdKVxyXG4gICAgICAuZG9tYWluKGRhdGEubWFwKChkOiBhbnkpID0+IGQubmFtZS50b0xvd2VyQ2FzZSgpKSk7XHJcbiAgfSBlbHNlIHtcclxuICAgICBjb25zdCBwYWRkaW5nVmFsdWUgPSAoaXNyaWEgJiYgc2VsZi5jaGFydERhdGEuZGF0YS5sZW5ndGggPj0gOCkgPyAwLjEwIDogMC4zO1xyXG4gICAgeCA9IGQzLnNjYWxlQmFuZCgpXHJcbiAgICAgIC5kb21haW4oZ3JvdXBzKVxyXG4gICAgICAucmFuZ2UoW0xFRlRfQU5EX1JJR0hUX1NQQUNFUywgd2lkdGggLSBSSUdIVF9TVkdfV0lEVEggLSBMRUZUX0FORF9SSUdIVF9TUEFDRVNdKVxyXG4gICAgICAucGFkZGluZyhbcGFkZGluZ1ZhbHVlXSk7XHJcbiAgfVxyXG5cclxuICBjb25zdCB4U2NhbGVGcm9tT3JpZ2luID0gZDMuc2NhbGVCYW5kKClcclxuICAgIC5kb21haW4oZ3JvdXBzKVxyXG4gICAgLnJhbmdlKFswLCB3aWR0aCAtIFJJR0hUX1NWR19XSURUSF0pO1xyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBYLUFYSVMgUkVOREVSSU5HID09PT09PT09PT09PT09PT09PT09XHJcbiAgdGhpcy5yZW5kZXJYQXhpcyhzdmcsIHgsIGhlaWdodCwgbWV0YURhdGEsIHN1Ymdyb3VwcywgZGF0YSwgXHJcbiAgICBTSE9SVF9USUNLX0xFTkdUSF9CRywgTE9OR19USUNLX0xFTkdUSF9CRywgc2VsZiwgaXNyaWEsIGlzTW9iaWxlLCBpc1RhYmxldCk7XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IFktQVhJUyBTRVRVUCA9PT09PT09PT09PT09PT09PT09PVxyXG4gIGNvbnN0IHkgPSBkMy5zY2FsZUxpbmVhcigpLnJhbmdlUm91bmQoW2hlaWdodCwgMF0pO1xyXG4gIGxldCBtYXhWYWx1ZSA9IHRoaXMuY2FsY3VsYXRlTWF4VmFsdWUoZGF0YSwga2V5TGlzdCk7XHJcblxyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXN0b21Zc2NhbGUpIHtcclxuICAgIG1heFZhbHVlID0gbWF4VmFsdWUgKiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXN0b21Zc2NhbGU7XHJcbiAgfVxyXG5cclxuICBpZiAodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEgJiYgbWF4VmFsdWUgPCB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpIHtcclxuICAgIG1heFZhbHVlID0gbWF4VmFsdWUgPCAxMCAmJiB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQgPCAxMFxyXG4gICAgICA/IHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCArIDNcclxuICAgICAgOiB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQgKyAyMDtcclxuICB9XHJcblxyXG4gIHkuZG9tYWluKFswLCBtYXhWYWx1ZV0pLm5pY2UoKTtcclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gTElORSBDSEFSVCBZLVNDQUxFID09PT09PT09PT09PT09PT09PT09XHJcbiAgbGV0IGxpbmVZc2NhbGU7XHJcbiAgbGV0IHlMaW5lQXhpcztcclxuXHJcbiAgaWYgKGxpbmVEYXRhICE9IG51bGwpIHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc2V0dXBMaW5lWVNjYWxlKGxpbmVEYXRhLCBoZWlnaHQsIHNlbGYpO1xyXG4gICAgbGluZVlzY2FsZSA9IHJlc3VsdC5saW5lWXNjYWxlO1xyXG4gICAgeUxpbmVBeGlzID0gcmVzdWx0LnlMaW5lQXhpcztcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IEdSSUQgTElORVMgPT09PT09PT09PT09PT09PT09PT1cclxuICB0aGlzLnJlbmRlckdyaWRMaW5lcyhzdmcsIHgsIHksIGhlaWdodCwgd2lkdGgsIHNlbGYsIGlzcmlhKTtcclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gQkFSUyBSRU5ERVJJTkcgPT09PT09PT09PT09PT09PT09PT1cclxuICBjb25zdCB4U3ViZ3JvdXAgPSB0aGlzLnNldHVwWFN1Ymdyb3VwU2NhbGUoc3ViZ3JvdXBzLCB4LCBzZWxmKTtcclxuICBjb25zdCBjb2xvciA9IGQzLnNjYWxlT3JkaW5hbCgpXHJcbiAgICAuZG9tYWluKHN1Ymdyb3VwcylcclxuICAgIC5yYW5nZShPYmplY3QudmFsdWVzKG1ldGFEYXRhLmNvbG9ycykpO1xyXG5cclxuICB0aGlzLnJlbmRlckJhcnMoc3ZnLCBkYXRhLCBzdWJncm91cHMsIHgsIHhTdWJncm91cCwgeSwgaGVpZ2h0LCBjb2xvciwgXHJcbiAgICBtZXRhRGF0YSwgc2VsZiwgTEVGVF9BTkRfUklHSFRfU1BBQ0VTLCB0ZW1wU2NhbGUsIGlzcmlhKTtcclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gQkFSIExBQkVMUyA9PT09PT09PT09PT09PT09PT09PVxyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0c09uQmFyICE9PSB1bmRlZmluZWQgJiYgIXRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgIHRoaXMucmVuZGVyQmFyTGFiZWxzKHN2ZywgZGF0YSwgc3ViZ3JvdXBzLCB4LCB4U3ViZ3JvdXAsIHksIGhlaWdodCwgXHJcbiAgICAgIG1ldGFEYXRhLCBzZWxmLCB0ZW1wU2NhbGUsIGlzcmlhKTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IFktQVhJUyBSRU5ERVJJTkcgPT09PT09PT09PT09PT09PT09PT1cclxuICB0aGlzLnJlbmRlcllBeGlzKHN2Zywgc3ZnWUF4aXNMZWZ0LCBzdmdZQXhpc1JpZ2h0LCB5LCB5TGluZUF4aXMsIFxyXG4gICAgbGluZURhdGEsIHNlbGYsIGlzcmlhLCBtYXJnaW4pO1xyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBBWElTIExBQkVMUyA9PT09PT09PT09PT09PT09PT09PVxyXG4gIHRoaXMucmVuZGVyQXhpc0xhYmVscyhzdmcsIHN2Z1lBeGlzTGVmdCwgc3ZnWUF4aXNSaWdodCwgbWV0YURhdGEsIFxyXG4gICAgd2lkdGgsIGhlaWdodCwgbWFyZ2luLCBzZWxmLCBpc3JpYSwgUklHSFRfU1ZHX1dJRFRIKTtcclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gVEFSR0VUIExJTkUgPT09PT09PT09PT09PT09PT09PT1cclxuICBpZiAodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEpIHtcclxuICAgIHRoaXMucmVuZGVyVGFyZ2V0TGluZShzdmcsIHN2Z1lBeGlzUmlnaHQsIHksIHdpZHRoLCBSSUdIVF9TVkdfV0lEVEgsIFxyXG4gICAgICBtZXRhRGF0YSwgc2VsZiwgaXNyaWEpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gTElORSBDSEFSVCA9PT09PT09PT09PT09PT09PT09PVxyXG4gIGlmIChsaW5lRGF0YSkge1xyXG4gICAgdGhpcy5yZW5kZXJMaW5lQ2hhcnQoc3ZnLCBsaW5lRGF0YSwgeCwgbGluZVlzY2FsZSwgbWV0YURhdGEsIHNlbGYpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gWk9PTSBIQU5ETElORyA9PT09PT09PT09PT09PT09PT09PVxyXG4gIGlmICh0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICB0aGlzLmhhbmRsZVpvb21PdXQoc3ZnLCBoZWlnaHQsIG1hcmdpbik7XHJcbiAgfVxyXG59XHJcblxyXG4vLyA9PT09PT09PT09PT09PT09PT09PSBIRUxQRVIgTUVUSE9EUyA9PT09PT09PT09PT09PT09PT09PVxyXG5cclxucHJpdmF0ZSByZW5kZXJYQXhpcyhzdmcsIHgsIGhlaWdodCwgbWV0YURhdGEsIHN1Ymdyb3VwcywgZGF0YSwgXHJcbiAgc2hvcnRUaWNrTGVuZ3RoQmcsIGxvbmdUaWNrTGVuZ3RoQmcsIHNlbGYsIGlzcmlhLCBpc01vYmlsZSwgaXNUYWJsZXQpIHtcclxuICBcclxuICBsZXQgYWx0ZXJuYXRlX3RleHQgPSBmYWxzZTtcclxuXHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lID09PSB1bmRlZmluZWQpIHtcclxuICAgIC8vIE5vcm1hbCB0aWNrcyBmb3IgZGFzaGJvYXJkIGNoYXJ0c1xyXG4gICAgLy8gRHluYW1pY2FsbHkgYWRqdXN0IFkgdHJhbnNsYXRpb24gZm9yIG1vYmlsZVxyXG4gICAgbGV0IHRyYW5zbGF0ZVkgPSBoZWlnaHQtMTA7XHJcbiAgICBpZiAoaXNNb2JpbGUpIHtcclxuICAgICAgdHJhbnNsYXRlWSA9IGhlaWdodCArIDEwOyAvLyBBZGQgZXh0cmEgc3BhY2UgYXQgdGhlIHRvcCBmb3IgbW9iaWxlXHJcbiAgICB9XHJcbiAgICBzdmcuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ3gxIGF4aXMxJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwke3RyYW5zbGF0ZVl9KWApXHJcbiAgICAgIC8vIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKC0zNSwke3RyYW5zbGF0ZVl9KWApXHJcbiAgICAgIC8vIC5jYWxsKGQzLmF4aXNCb3R0b20oeCkpXHJcbiAgICAgICAuY2FsbChpc3JpYSA/IGQzLmF4aXNCb3R0b20oeCkudGlja1NpemUoMCkgOiBkMy5heGlzQm90dG9tKHgpKSBcclxuICAgICAgIFxyXG4gICAgICAvLyAuY2FsbCgoZykgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5yZW1vdmUoKSk7XHJcbiAgICAgIC8vIC5jYWxsKChnKSA9PiB7IGlmICghaXNyaWEpIGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCk7IH0pXHJcbiAgICAgIC5jYWxsKGcgPT4ge1xyXG4gICAgLy8gUklBICsgc2luZ2xlIHN1Ymdyb3VwIOKGkiByZW1vdmUgZG9tYWluXHJcbiAgICAvLyBpZiAoaXNyaWEgJiYgKHN1Ymdyb3Vwcy5sZW5ndGggPiAxICYmIHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoID09PTEgKSkge1xyXG4gICAgLy8gICAgIGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCk7XHJcbiAgICAvLyAgIHJldHVybjtcclxuICAgICAgICBcclxuICAgIC8vIH1cclxuICAgIC8vIC8vIERlZmF1bHQgYmVoYXZpb3JcclxuICAgIC8vIGlmICghaXNyaWEpIHtcclxuICAgICAgICBnLnNlbGVjdCgnLmRvbWFpbicpLnJlbW92ZSgpO1xyXG4gICAgLy8gfVxyXG59KVxyXG4gICAgICAvLyAgLmNhbGwoKGcpID0+IHtcclxuICAgIC8vIE1vdmUgb25seSB0aGUgYXhpcyBsaW5lIChkb21haW4pIHRvIHRoZSBsZWZ0XHJcbiAgICAvLyBnLnNlbGVjdCgnLmRvbWFpbicpLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoLTYwLDApJyk7fSlcclxuICAgICAuY2FsbCgoZykgPT4ge1xyXG4gICAgLy8gSW5jcmVhc2Ugc3BhY2luZyBiZXR3ZWVuIGF4aXMgYW5kIGxhYmVsc1xyXG4gICAgaWYoaXNyaWEgJiYgKHN1Ymdyb3Vwcy5sZW5ndGggPT09IDEgfHwgc2VsZi5jaGFydERhdGEuZGF0YS5sZW5ndGggPjEgKSkge1xyXG4gICAgZy5zZWxlY3RBbGwoJy50aWNrIHRleHQnKVxyXG4gICAgICAuYXR0cignZHknLCAnMGVtJyk7IC8vIERlZmF1bHQgaXMgJzAuNzFlbScsIGluY3JlYXNlIGZvciBtb3JlIHNwYWNlXHJcbiAgICB9XHJcbiAgfSlcclxuICAuY2FsbCgoZykgPT4ge1xyXG4gIC8vIFJlbW92ZSBvbmx5IHRoZSBsYXN0IHRpY2tcclxuICAgaWYoaXNyaWEgJiYgc3ViZ3JvdXBzLmxlbmd0aCA9PT0gMSkge1xyXG4gIGNvbnN0IHRpY2tzID0gZy5zZWxlY3RBbGwoJy50aWNrJyk7XHJcbiAgaWYgKHRpY2tzLnNpemUoKSA+IDApIHtcclxuICAgIC8vIGQzLnNlbGVjdCh0aWNrcy5ub2RlcygpW3RpY2tzLnNpemUoKSAtIDFdKS5yZW1vdmUoKTtcclxuICAgICBkMy5zZWxlY3QodGlja3Mubm9kZXMoKVt0aWNrcy5zaXplKCkgLSAxXSkuc2VsZWN0KCdsaW5lJykucmVtb3ZlKCk7XHJcbiAgfVxyXG59XHJcbn0pO1xyXG5cclxuICAgIHN2Zy5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIGxpbmUnKS5yZW1vdmUoKTtcclxuXHJcbiAgICBjb25zdCB5T2Zmc2V0ID0gc3ViZ3JvdXBzLmxlbmd0aCA+IDEgJiYgIW1ldGFEYXRhLnhMYWJlbCA/IDMyIDogMDtcclxuICAgXHJcbiAgICBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAgICAgLy8gLmF0dHIoJ2NsYXNzJywgJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgaXNyaWEgXHJcbiAgICA/ICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bi1yaWEnIFxyXG4gICAgOiAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nXHJcbilcclxuICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgICAgLmF0dHIoJ3knLCB5T2Zmc2V0IHx8IG51bGwpO1xyXG4gXHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIEJpZ2dlciB0aWNrcyBmb3Igd2Vla2x5IGNoYXJ0c1xyXG4gICAgc3ZnLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICd4MSBheGlzMScpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHtoZWlnaHR9KWApXHJcbiAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeCkudGlja1NpemUoMCkpXHJcbiAgICAgIC5jYWxsKChnKSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpLmF0dHIoJ2ZpbGwnLCAnbm9uZScpKTtcclxuXHJcbiAgICAvLyBBbHRlcm5hdGUgdGljayBsaW5lIHNpemVzXHJcbiAgICBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayBsaW5lJykuYXR0cigneTInLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGlmIChhbHRlcm5hdGVfdGV4dCAmJiBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc05vQWx0ZXJuYXRlWGF4aXNUZXh0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBsb25nVGlja0xlbmd0aEJnIC0gNztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHNob3J0VGlja0xlbmd0aEJnIC0gNDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG4gICAgLy8gWC1heGlzIGxhYmVsIHRleHRzXHJcbiAgICBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtd2Vla2x5Y2hhcnRzJylcclxuICAgICAgLmF0dHIoJ3knLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzRnVsbFNjcmVlbikge1xyXG4gICAgICAgICAgcmV0dXJuIHNob3J0VGlja0xlbmd0aEJnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYWx0ZXJuYXRlX3RleHQpIHtcclxuICAgICAgICAgIGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm4gbG9uZ1RpY2tMZW5ndGhCZztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSB0cnVlO1xyXG4gICAgICAgICAgcmV0dXJuIHNob3J0VGlja0xlbmd0aEJnO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIFxyXG4gIC8vIEFwcGx5IGxhYmVscyBvbiBzYW1lIGxpbmUgY29uZmlndXJhdGlvblxyXG4gIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi54TGFiZWxzT25TYW1lTGluZSkge1xyXG4gICAgdGhpcy5hcHBseVhMYWJlbHNPblNhbWVMaW5lKHN2Zywgc3ViZ3JvdXBzLCBkYXRhLCBtZXRhRGF0YSwgc2VsZiwgXHJcbiAgICAgIHNob3J0VGlja0xlbmd0aEJnLCBpc01vYmlsZSwgaXNyaWEpO1xyXG4gIH1cclxuXHJcbiAgLy8gTW9iaWxlIG92ZXJyaWRlIGZvciBSSUFcclxuICBpZiAoaXNyaWEgJiYgc2VsZi5jaGFydERhdGEuZGF0YS5sZW5ndGggPj0zKSB7XHJcbiAgICBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAgICAgLmNsYXNzZWQoJ21vYmlsZS14YXhpcy1vdmVycmlkZScsIGZhbHNlKVxyXG4gICAgICAvLyAvLyAudGV4dCgoZDogc3RyaW5nKSA9PiBkLnN1YnN0cmluZygwLCAzKSlcclxuICAgICAgLy8gLnRleHQoKGQ6IHN0cmluZykgPT4gZC5zdWJzdHJpbmcoMCwgNCkudG9Mb3dlckNhc2UoKSlcclxuICAgICAgLy8gLnRleHQoKGQ6IHN0cmluZykgPT4gZC50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAudGV4dCgoZDogc3RyaW5nKSA9PiBkKVxyXG4gICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICcxMXB4JylcclxuICAgICAgLmF0dHIoJ3knLCA1KVxyXG4gICAgICAuYXR0cigneCcsIDUpXHJcbiAgICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCAnbWlkZGxlJyk7XHJcbiAgfVxyXG4gICAgaWYgKGlzcmlhICYmIHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoID49IDgpIHtcclxuICAgIHN2Zy5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIHRleHQnKVxyXG4gICAgICAuYXR0cigneCcsIC0yMCk7XHJcbiAgfVxyXG4gIC8vICAgIGlmICghaXNyaWEgJiYgc2VsZi5jaGFydERhdGEuZGF0YS5sZW5ndGggPiAxMSAgJiYgIXNlbGYuaXNab29tZWRPdXQgJiYgKHguYmFuZHdpZHRoPCAxMDApKSB7XHJcbiAgLy8gICBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAvLyAgICAgLmF0dHIoJ3gnLCAtMjApO1xyXG4gIC8vIH1cclxuLy8g4pyFIFRhYmxldCBWaWV3IOKAlCBSb3RhdGUgaWYgdGV4dCA+IDEwIGNoYXJhY3RlcnNcclxuaWYgKGlzVGFibGV0KSB7XHJcbiAgIGNvbnN0IHRleHROb2RlcyA9IHN2Zy5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIHRleHQnKTtcclxuICB0ZXh0Tm9kZXMuZWFjaChmdW5jdGlvbiAoZDogYW55KSB7XHJcbiAgICBjb25zdCB0ZXh0ID0gZCA/IGQudG9TdHJpbmcoKS50cmltKCkgOiAnJztcclxuXHJcbiAgICAvLyBEZXRlY3QgZGF0ZSBmb3JtYXRzICh0byBza2lwIHRoZW0pXHJcbiAgICBjb25zdCBpc0RhdGVTdHJpbmcgPVxyXG4gICAgICAvXlxcZHsxLDR9Wy1cXC9dXFxkezEsMn1bLVxcL11cXGR7MSw0fSQvLnRlc3QodGV4dCkgfHwgLy8gZS5nLiAyMDI1LTEwLTI5IG9yIDEwLzI5LzIwMjVcclxuICAgICAgL14oXFxkezEsNH1bLVxcL11cXGR7MSwyfVstXFwvXVxcZHsxLDR9KVxccypbLeKAk11cXHMqKFxcZHsxLDR9Wy1cXC9dXFxkezEsMn1bLVxcL11cXGR7MSw0fSkkLy50ZXN0KHRleHQpOyBcclxuXHJcbiAgICAgIFxyXG4gICAgaWYgKCFpc0RhdGVTdHJpbmcgJiYgdGV4dC5sZW5ndGggPiAxMCkge1xyXG4gICAgICAgIGNvbnN0IHRyaW1tZWQgPSB0ZXh0LnNsaWNlKDAsOSkgKyAn4oCmJztcclxuICAgICAgdGV4dE5vZGVzXHJcbiAgICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnMTBweCcpXHJcbiAgICAgICAgLy8gLnRleHQodHJpbW1lZClcclxuICAgICAgIFxyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG5cclxuICAvLyBNb2JpbGUvdGFibGV0IG92ZXJyaWRlIC0gY2hlY2sgZm9yIHNpbmdsZS1ncm91cCBkYXRlIGNoYXJ0cyBmaXJzdFxyXG4gIGlmIChpc01vYmlsZSkge1xyXG4gICAgY29uc3QgdGV4dE5vZGVzID0gc3ZnLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgdGV4dCcpO1xyXG4gICAgY29uc3QgZ3JvdXBzQ291bnQgPSAoZGF0YSBhcyBhbnkpLmxlbmd0aCB8fCAwO1xyXG4gICAgXHJcbiAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGRhdGVzIGluIHgtYXhpcyBhbmQgc2luZ2xlIGdyb3VwXHJcbiAgICBsZXQgaGFzRGF0ZVZhbHVlcyA9IGZhbHNlO1xyXG4gICAgdGV4dE5vZGVzLmVhY2goZnVuY3Rpb24oZCkge1xyXG4gICAgICAvLyBDaGVjayBmb3IgZGF0ZSB2YWx1ZXMgdXNpbmcgYm90aCBEYXRlLnBhcnNlIGFuZCByZWdleCBmb3IgZGF0ZSBmb3JtYXRcclxuICAgICAgICBjb25zdCBpc0RhdGVTdHJpbmcgPVxyXG4gICAgL15cXGR7MSw0fVstXFwvXVxcZHsxLDJ9Wy1cXC9dXFxkezEsNH0kLy50ZXN0KGQudHJpbSgpKSB8fFxyXG4gICAgL14oXFxkezEsNH1bLVxcL11cXGR7MSwyfVstXFwvXVxcZHsxLDR9KVxccypbLeKAk11cXHMqKFxcZHsxLDR9Wy1cXC9dXFxkezEsMn1bLVxcL11cXGR7MSw0fSkkLy50ZXN0KGQudHJpbSgpKTtcclxuICAgICAgaWYgKCFoYXNEYXRlVmFsdWVzICYmIGlzRGF0ZVN0cmluZykge1xyXG4gICAgICAgIGhhc0RhdGVWYWx1ZXMgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBDb3VudCB1bmlxdWUgeC1heGlzIGxhYmVsc1xyXG4gICAgY29uc3QgdW5pcXVlTGFiZWxzID0gbmV3IFNldCgpO1xyXG4gICAgdGV4dE5vZGVzLmVhY2goZnVuY3Rpb24oZCkge1xyXG4gICAgICB1bmlxdWVMYWJlbHMuYWRkKGQpO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBsYWJlbENvdW50ID0gdW5pcXVlTGFiZWxzLnNpemU7XHJcbiAgICBpZiAoaGFzRGF0ZVZhbHVlcyAmJiBsYWJlbENvdW50IDwgMykge1xyXG4gICAgICAvLyBGb3IgMyBvciBmZXdlciBsYWJlbHMsIGtlZXAgaG9yaXpvbnRhbCBkaXNwbGF5XHJcbiAgICAgIHRleHROb2Rlc1xyXG4gICAgICAgIC5zdHlsZSgnd3JpdGluZy1tb2RlJywgJ2hvcml6b250YWwtdGInKSAgLy8gRXhwbGljaXRseSBzZXQgaG9yaXpvbnRhbFxyXG4gICAgICAgIC5jbGFzc2VkKCdtb2JpbGUteGF4aXMtb3ZlcnJpZGUnLCBmYWxzZSkgLy8gUmVtb3ZlIHZlcnRpY2FsIGNsYXNzXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICdyb3RhdGUoMCknKSAgICAgICAgICAvLyBSZW1vdmUgYW55IHJvdGF0aW9uXHJcbiAgICAgICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpICAgICAgICAgICAvLyBDZW50ZXIgYWxpZ25cclxuICAgICAgICAuYXR0cigneScsICFpc3JpYSA/IDIwIDogbnVsbCkgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFB1c2ggZG93biBhIGJpdFxyXG4gICAgICAgIC5hdHRyKCdkeCcsICcwJykgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXNldCBhbnkgeCBvZmZzZXRcclxuICAgICAgICAuYXR0cignZHknLCAnMCcpOyAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXQgYW55IHkgb2Zmc2V0XHJcbiAgICB9IGVsc2UgaWYgKGxhYmVsQ291bnQgPj0gMykge1xyXG4gICAgICAvLyBGb3IgbW9yZSB0aGFuIDMgbGFiZWxzLCB1c2UgdmVydGljYWwgYWxpZ25tZW50XHJcbiAgICAgIHRleHROb2Rlc1xyXG4gICAgICAgIC8vIC5zdHlsZSgnd3JpdGluZy1tb2RlJywgJ3NpZGV3YXlzLWxyJykgICAvLyBWZXJ0aWNhbCB0ZXh0XHJcbiAgICAgICAgLmNsYXNzZWQoJ21vYmlsZS14YXhpcy1vdmVycmlkZScsIHRydWUpIC8vIEFkZCB2ZXJ0aWNhbCBjbGFzc1xyXG4gICAgICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKSAgICAgICAgICAvLyBDZW50ZXIgYWxpZ25cclxuICAgICAgICAuYXR0cigneScsIDMwKSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRqdXN0IHZlcnRpY2FsIHBvc2l0aW9uXHJcbiAgICAgICAgLmF0dHIoJ3gnLCAwKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IHggcG9zaXRpb25cclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNIZWFkZXJWaXNpYmxlKSB7XHJcbiAgICAgIC8vIERlZmF1bHQgbW9iaWxlIGJlaGF2aW9yIGZvciBub24tZGF0ZSBvciBtdWx0aS1ncm91cFxyXG4gICAgICB0ZXh0Tm9kZXMuY2xhc3NlZCgnbW9iaWxlLXhheGlzLW92ZXJyaWRlJywgdHJ1ZSk7XHJcbiAgICB9ICBcclxuICB9XHJcbiAgICBpZiAoIWlzcmlhICYmICFzZWxmLmlzWm9vbWVkT3V0ICYmIHN1Ymdyb3Vwcy5sZW5ndGggPiAxICYmIGRhdGEubGVuZ3RoID4gOCAmJiB4LmJhbmR3aWR0aCgpID4gMTAwKSB7XHJcbiAgY29uc3QgaXNHcm91cGVkQmFycyA9IHN1Ymdyb3Vwcy5sZW5ndGggPiAxOyAvLyBNdWx0aXBsZSBiYXIgdHlwZXMgZGVmaW5lZFxyXG4gIC8vIEFsc28gdmVyaWZ5IGJhcnMgYXJlIGFjdHVhbGx5IHNpZGUtYnktc2lkZSBieSBjaGVja2luZyBmaXJzdCBncm91cFxyXG4gIGNvbnN0IGZpcnN0R3JvdXBIYXNNdWx0aXBsZUJhcnMgPSBzdWJncm91cHMuZmlsdGVyKGtleSA9PiB7XHJcbiAgICByZXR1cm4gZGF0YVswXVtrZXldICE9IG51bGwgJiYgZGF0YVswXVtrZXldICE9PSAtMTtcclxuICB9KS5sZW5ndGggPiAxO1xyXG4gIFxyXG4gIGlmICghZmlyc3RHcm91cEhhc011bHRpcGxlQmFycykge1xyXG4gICAgc3ZnLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgdGV4dCcpXHJcbiAgICAgIC5hdHRyKCd4JywgLTIwKTtcclxuICB9XHJcbiAgfVxyXG59XHJcblxyXG5wcml2YXRlIGFwcGx5WExhYmVsc09uU2FtZUxpbmUoc3ZnLCBzdWJncm91cHMsIGRhdGEsIG1ldGFEYXRhLCBzZWxmLCBcclxuICBzaG9ydFRpY2tMZW5ndGhCZywgaXNNb2JpbGUsIGlzcmlhKSB7XHJcbiAgXHJcbiAgY29uc3QgeEF4aXNMYWJlbHMgPSBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAgIC5hdHRyKCdjbGFzcycsICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bicpXHJcbiAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsIHRoaXMuaXNIZWFkZXJWaXNpYmxlICAmJiAhaXNyaWEgPyAnMTZweCcgOiAnMTFweCcpXHJcbiAgICAuYXR0cigndGV4dC1hbmNob3InLCAnbWlkZGxlJylcclxuICAgIC5hdHRyKCd5JywgKGQpID0+IHRoaXMuY2FsY3VsYXRlWExhYmVsWVBvc2l0aW9uKGQsIHN1Ymdyb3VwcywgZGF0YSwgbWV0YURhdGEsIHNlbGYsIHNob3J0VGlja0xlbmd0aEJnKSlcclxuICAgIC5hdHRyKCd4JywgKGQpID0+IChzZWxmLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA+IDggJiYgIXNlbGYuaXNab29tZWRPdXQpID8gMSA6IDApXHJcbiAgICAudGV4dCgoZCkgPT4gdGhpcy5mb3JtYXRYTGFiZWxUZXh0KGQsIGRhdGEsIG1ldGFEYXRhLCBzdWJncm91cHMsIHNlbGYsIGlzTW9iaWxlKSk7XHJcblxyXG4gIC8vIEFwcGx5IHdyaXRpbmctbW9kZSBmb3IgZ3JvdXBlZCBjaGFydHMgd2l0aCBkYXRlIGxhYmVscyBpbiB6b29tZWQtb3V0IHZpZXdcclxuICB4QXhpc0xhYmVscy5lYWNoKGZ1bmN0aW9uKHRoaXM6IFNWR1RleHRFbGVtZW50LCBkOiBhbnkpIHtcclxuICAgIGNvbnN0IGlzRGF0ZUxhYmVsID0gL14oXFxkezIsNH1bLVxcL10pP1xcZHsyLDR9Wy1cXC9dXFxkezIsNH0kLy50ZXN0KGQudHJpbSgpKTtcclxuICAgIGNvbnN0IGlzV2Vla0xhYmVsID0gL3dlZWt8d2t8d1xcZCsvaS50ZXN0KGQpO1xyXG4gICAgXHJcbiAgICAvLyBpZiAoc3ViZ3JvdXBzLmxlbmd0aCA+IDEgJiYgc2VsZi5pc1pvb21lZE91dCAmJiBkYXRhLmxlbmd0aCA+IDggJiYgaXNEYXRlTGFiZWwgJiYgIWlzV2Vla0xhYmVsKSB7XHJcbiAgICAvLyAgIGQzLnNlbGVjdCh0aGlzKS5zdHlsZSgnd3JpdGluZy1tb2RlJywgJ3NpZGV3YXlzLWxyJyk7XHJcbiAgICAvLyB9XHJcbiAgfSk7XHJcblxyXG4gIC8vIEFkZCBzZWNvbmQgbGluZSBmb3Igbm9uLWRhdGUgbGFiZWxzIG9uIGRlc2t0b3BcclxuICBpZiAoIWlzTW9iaWxlKSB7XHJcbiAgICBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljaycpXHJcbiAgICAgIC5maWx0ZXIoKGQpID0+ICEvXFxkezIsNH1bLVxcL10vLnRlc3QoZCkpXHJcbiAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgICAuYXR0cigneScsMzApXHJcbiAgICAgIC5hdHRyKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgICAgLmF0dHIoJ3gnLCAoZCkgPT4gKHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoID4gOCAmJiAhc2VsZi5pc1pvb21lZE91dCkgPyAxIDogMClcclxuICAgICAgLnRleHQoKGQpID0+IHtcclxuICAgICAgICBpZiAoZC50cmltKCkuaW5kZXhPZignICcpID4gLTEpIHtcclxuICAgICAgICAgIHJldHVybiBkLnRyaW0oKS5zdWJzdHJpbmcoZC5pbmRleE9mKCcgJyksIGQubGVuZ3RoKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxucHJpdmF0ZSBjYWxjdWxhdGVYTGFiZWxZUG9zaXRpb24oZCwgc3ViZ3JvdXBzLCBkYXRhLCBtZXRhRGF0YSwgc2VsZiwgc2hvcnRUaWNrTGVuZ3RoQmcpIHtcclxuICAvLyBGb3IgZ3JvdXBlZCBiYXIgY2hhcnRzIHdpdGggbWFueSBiYXJzIGFuZCB4TGFiZWwgcHJlc2VudFxyXG4gIGlmIChzdWJncm91cHMubGVuZ3RoID4gMSAmJiBkYXRhLmxlbmd0aCA+IDggJiYgbWV0YURhdGEueExhYmVsKSB7XHJcbiAgICBjb25zdCBpc0RhdGVMYWJlbCA9IC9cXGR7Miw0fVstXFwvXS8udGVzdChkKTtcclxuICAgIHJldHVybiBpc0RhdGVMYWJlbCA/IHNob3J0VGlja0xlbmd0aEJnICsgMTQgOiBzaG9ydFRpY2tMZW5ndGhCZztcclxuICB9XHJcblxyXG4gIC8vIEZvciBncm91cGVkIGJhciBjaGFydHMgd2l0aCBtYW55IGJhcnMgYW5kIE5PIHhMYWJlbFxyXG4gIGlmIChzdWJncm91cHMubGVuZ3RoID4gMSAmJiBkYXRhLmxlbmd0aCA+IDggJiYgIW1ldGFEYXRhLnhMYWJlbCkge1xyXG4gICAgY29uc3QgY2hhcnRIYXNFeHRyYUJvdHRvbSA9IHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLm1hcmdpbiAmJiBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5tYXJnaW4uYm90dG9tID49IDQwO1xyXG4gICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzRnVsbFNjcmVlbikge1xyXG4gICAgICByZXR1cm4gc2hvcnRUaWNrTGVuZ3RoQmcgKyAyO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNoYXJ0SGFzRXh0cmFCb3R0b20gPyBzaG9ydFRpY2tMZW5ndGhCZyA6IHNob3J0VGlja0xlbmd0aEJnICsgMTA7XHJcbiAgfVxyXG5cclxuICAvLyBEZWZhdWx0L2ZhbGxiYWNrIGxvZ2ljXHJcbiAgY29uc3QgaXNyaWEgPSB0aGlzLmN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbi5pc1JpYTtcclxuICBsZXQgYmFzZVkgPSBzZWxmLmlzSGVhZGVyVmlzaWJsZSAmJiAhaXNyaWEgPyBzaG9ydFRpY2tMZW5ndGhCZyArIDI1IDogc2hvcnRUaWNrTGVuZ3RoQmc7XHJcbiAgXHJcbiAgaWYgKHN1Ymdyb3Vwcy5sZW5ndGggPiAxICYmICFtZXRhRGF0YS54TGFiZWwgJiYgICFpc3JpYSAmJlxyXG4gICAgICAoL1xcZHsyLDR9Wy1cXC9dXFxkezJ9Wy1cXC9dXFxkezIsNH0vLnRlc3QoZCkgfHwgL1xcZHsyLDR9Wy1cXC9dXFxkezIsNH0vLnRlc3QoZCkpKSB7XHJcbiAgICBiYXNlWSA9IHNlbGYuaXNIZWFkZXJWaXNpYmxlID8gc2hvcnRUaWNrTGVuZ3RoQmcgKyAxNSA6IHNob3J0VGlja0xlbmd0aEJnICsgMjU7XHJcbiAgfVxyXG5cclxuICBpZiAoL1xcZHsyLDR9Wy1cXC9dXFxkezIsNH0vLnRlc3QoZCkgJiYgZC5pbmRleE9mKCcgJykgPiAtMSAmJiAhaXNyaWEpIHtcclxuICAgIGJhc2VZICs9IDQ7XHJcbiAgfVxyXG5cclxuICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNGdWxsU2NyZWVuICYmIHN1Ymdyb3Vwcy5sZW5ndGggPiAxKSB7XHJcbiAgICBiYXNlWSA9IE1hdGgubWF4KHNob3J0VGlja0xlbmd0aEJnLCBiYXNlWSAtIDEwKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBiYXNlWTtcclxufVxyXG5cclxucHJpdmF0ZSBmb3JtYXRYTGFiZWxUZXh0KGQsIGRhdGEsIG1ldGFEYXRhLCBzdWJncm91cHMsIHNlbGYsIGlzTW9iaWxlKSB7XHJcbiAgLy8gQ2hlY2sgaWYgd2UncmUgb24gbW9iaWxlIG9yIHRhYmxldFxyXG4gIGNvbnN0IGlzU21hbGxTY3JlZW4gPSB3aW5kb3cuaW5uZXJXaWR0aCA8IDk5MjsgLy8gTGVzcyB0aGFuIDk5MnB4IChtb2JpbGUgb3IgdGFibGV0KVxyXG4gIFxyXG4gIC8vIEhlbHBlciB0byBleHRyYWN0IGFuZCBmb3JtYXQgd2VlayBudW1iZXJcclxuICBjb25zdCBleHRyYWN0V2Vla051bWJlciA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsID0+IHtcclxuICAgIGNvbnN0IG1hdGNoID0gdGV4dC5tYXRjaCgvKD86d2Vla3x3a3x3KVxccyooXFxkKykvaSk7XHJcbiAgICByZXR1cm4gbWF0Y2ggPyBgVyR7bWF0Y2hbMV19YCA6IG51bGw7XHJcbiAgfTtcclxuXHJcbiAgLy8gSGVscGVyIHRvIGV4dHJhY3QgZGF0ZSBwYXJ0XHJcbiAgY29uc3QgZXh0cmFjdERhdGUgPSAodGV4dDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCA9PiB7XHJcbiAgICBjb25zdCBtYXRjaCA9IHRleHQubWF0Y2goL1xcZHsyfVstXFwvXVxcZHsyfVstXFwvXVxcZHsyLDR9Lyk7XHJcbiAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFswXSA6IG51bGw7XHJcbiAgfTtcclxuXHJcbiAgLy8gQ2hlY2sgaWYgbGFiZWwgY29udGFpbnMgYm90aCBkYXRlIGFuZCB3ZWVrIGluZm9ybWF0aW9uXHJcbiAgY29uc3QgaGFzRGF0ZUFuZFRpbWUgPSAodGV4dDogc3RyaW5nKSA9PiB7XHJcbiAgICBjb25zdCBkYXRlTWF0Y2ggPSAvXFxkezIsNH1bLVxcL11cXGR7MSwyfVstXFwvXVxcZHsxLDR9Ly50ZXN0KHRleHQpO1xyXG4gICAgY29uc3Qgd2Vla01hdGNoID0gLyg/OndlZWt8d2t8dylcXHMqXFxkKy9pLnRlc3QodGV4dCk7XHJcbiAgICByZXR1cm4geyBpc0RhdGU6IGRhdGVNYXRjaCwgaXNXZWVrOiB3ZWVrTWF0Y2ggfTtcclxuICB9O1xyXG5cclxuICBjb25zdCBsYWJlbEluZm8gPSBoYXNEYXRlQW5kVGltZShkKTtcclxuXHJcbiAgLy8gTW9iaWxlIGhhbmRsaW5nOiBmb3JtYXQgZGF0ZSBhbmQgd2VlayBwYXJ0c1xyXG4gIGlmIChpc01vYmlsZSkge1xyXG4gICAgLy8gSWYgaGVhZGVyIGlzIGhpZGRlbiAoY29tcGFjdCBtb2JpbGUpXHJcbiAgICBpZiAoIXNlbGYuaXNIZWFkZXJWaXNpYmxlKSB7XHJcbiAgICAgIC8vIElmIGl0IGhhcyBib3RoIGRhdGUgYW5kIHdlZWssIGZvcm1hdCBhcHByb3ByaWF0ZWx5XHJcbiAgICAgIGlmIChsYWJlbEluZm8uaXNEYXRlICYmIGxhYmVsSW5mby5pc1dlZWspIHtcclxuICAgICAgICBjb25zdCBkYXRlUGFydCA9IGV4dHJhY3REYXRlKGQpO1xyXG4gICAgICAgIGNvbnN0IHdlZWtQYXJ0ID0gZXh0cmFjdFdlZWtOdW1iZXIoZCk7XHJcbiAgICAgICAgaWYgKGRhdGVQYXJ0ICYmIHdlZWtQYXJ0KSB7XHJcbiAgICAgICAgICByZXR1cm4gYCR7ZGF0ZVBhcnR9XFxuJHt3ZWVrUGFydH1gO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBJZiBpdCdzIGp1c3QgYSBkYXRlLCByZXR1cm4gaXQgdW5jaGFuZ2VkXHJcbiAgICAgIGlmIChsYWJlbEluZm8uaXNEYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIGV4dHJhY3REYXRlKGQpIHx8IGQ7XHJcbiAgICAgIH1cclxuICAgICAgLy8gSWYgaXQgaGFzIGp1c3Qgd2VlayBudW1iZXIsIGZvcm1hdCBpdCBhcyBXIyNcclxuICAgICAgaWYgKGxhYmVsSW5mby5pc1dlZWspIHtcclxuICAgICAgICBjb25zdCB3ZWVrUGFydCA9IGV4dHJhY3RXZWVrTnVtYmVyKGQpO1xyXG4gICAgICAgIGlmICh3ZWVrUGFydCkge1xyXG4gICAgICAgICAgcmV0dXJuIHdlZWtQYXJ0O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBGb3Igbm9uLWRhdGUgbGFiZWxzLCB0cmltIGFzIGJlZm9yZVxyXG4gICAgICBjb25zdCBmaXJzdFBhcnQgPSBkLnNwbGl0KC9bXFxzXFwtXSsvKVswXTtcclxuICAgICAgcmV0dXJuIGZpcnN0UGFydC5zdWJzdHJpbmcoMCwgMykudG9Mb3dlckNhc2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIENoZWNrIGlmIHZhbHVlIHNob3VsZCBiZSBpZ25vcmVkXHJcbiAgY29uc3QgaXNWYWx1ZVRvQmVJZ25vcmVkID0gZGF0YS5zb21lKChpbmRpdjogYW55KSA9PiBcclxuICAgIGluZGl2Lm5hbWUgJiYgaW5kaXYubmFtZS50b0xvd2VyQ2FzZSgpID09PSBkLnRyaW0oKS50b0xvd2VyQ2FzZSgpICYmIFxyXG4gICAgaW5kaXZbbWV0YURhdGEua2V5TGlzdFswXV0gPT09IC0xXHJcbiAgKTtcclxuXHJcbiAgaWYgKGlzVmFsdWVUb0JlSWdub3JlZCkge1xyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgLy8gSGFuZGxlIGRhdGUgcmFuZ2UgbGFiZWxzXHJcbiAgY29uc3QgZGF0ZVJhbmdlUmVnZXggPSAvKFxcZHsyLDR9Wy1cXC9dXFxkezJ9Wy1cXC9dXFxkezIsNH0pXFxzKi1cXHMqKFxcZHsyLDR9Wy1cXC9dXFxkezJ9Wy1cXC9dXFxkezIsNH0pLztcclxuICBpZiAoZGF0ZVJhbmdlUmVnZXgudGVzdChkLnRyaW0oKSkpIHtcclxuICAgIHJldHVybiBkLnRyaW0oKS5yZXBsYWNlKGRhdGVSYW5nZVJlZ2V4LCAobSwgZDEsIGQyKSA9PiBgJHtkMX0gLSAke2QyfWApO1xyXG4gIH1cclxuXHJcbiAgLy8gSGFuZGxlIHNwbGl0dGluZyBvZiBtdWx0aS1wYXJ0IGxhYmVsc1xyXG4gIGlmIChzdWJncm91cHMubGVuZ3RoID4gMSAmJiAhc2VsZi5pc1pvb21lZE91dCAmJiBkYXRhLmxlbmd0aCA+IDggJiYgXHJcbiAgICAgIGQuaW5kZXhPZignICcpID4gLTEgJiYgKGxhYmVsSW5mby5pc0RhdGUgfHwgbGFiZWxJbmZvLmlzV2VlaykpIHtcclxuICAgIGNvbnN0IGZpcnN0ID0gZC5zdWJzdHJpbmcoMCwgZC5pbmRleE9mKCcgJykpO1xyXG4gICAgY29uc3Qgc2Vjb25kID0gZC5zdWJzdHJpbmcoZC5pbmRleE9mKCcgJykgKyAxKS50cmltKCk7XHJcbiAgICByZXR1cm4gYCR7Zmlyc3R9XFxuJHtzZWNvbmR9YDtcclxuICB9XHJcblxyXG4gIC8vIEhhbmRsZSBkYXRlIGxhYmVscyBpbiBtaW5pbWl6ZWQgdmlld1xyXG4gIGlmIChsYWJlbEluZm8uaXNEYXRlKSB7XHJcbiAgICBpZiAoIXNlbGYuaXNIZWFkZXJWaXNpYmxlICYmIGQuaW5kZXhPZignICcpID4gLTEpIHtcclxuICAgICAgY29uc3QgZmlyc3QgPSBkLnN1YnN0cmluZygwLCBkLmluZGV4T2YoJyAnKSk7XHJcbiAgICAgIGNvbnN0IHNlY29uZCA9IGQuc3Vic3RyaW5nKGQuaW5kZXhPZignICcpICsgMSkudHJpbSgpO1xyXG4gICAgICByZXR1cm4gYCR7Zmlyc3R9XFxuJHtzZWNvbmR9YDtcclxuICAgIH1cclxuICAgIHJldHVybiBkO1xyXG4gIH1cclxuXHJcbiAgLy8gSGFuZGxlIGxhYmVscyB3aXRoIHNwYWNlc1xyXG4gIGlmIChkLnRyaW0oKS5pbmRleE9mKCcgJykgPiAtMSkge1xyXG4gICAgcmV0dXJuIGQudHJpbSgpLnN1YnN0cmluZygwLCBkLmluZGV4T2YoJyAnKSkudG9Mb3dlckNhc2UoKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBkLnRvTG93ZXJDYXNlKCk7XHJcbn1cclxuXHJcbnByaXZhdGUgY2FsY3VsYXRlTWF4VmFsdWUoZGF0YSwga2V5TGlzdCkge1xyXG4gIGxldCBtYXhWYWx1ZSA9IGQzLm1heChkYXRhLCAoZCkgPT4gZDMubWF4KGtleUxpc3QsIChrZXkpID0+ICtkW2tleV0pKTtcclxuICBcclxuICBpZiAobWF4VmFsdWUgPT09IDApIHtcclxuICAgIGlmICh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSkge1xyXG4gICAgICBtYXhWYWx1ZSA9IHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCArIDIwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbWF4VmFsdWUgPSAxMDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gbWF4VmFsdWU7XHJcbn1cclxuXHJcbnByaXZhdGUgc2V0dXBMaW5lWVNjYWxlKGxpbmVEYXRhLCBoZWlnaHQsIHNlbGYpIHtcclxuICBsZXQgbWF4TGluZVZhbHVlID0gZDMubWF4KGxpbmVEYXRhLCAoZCkgPT4gK2QudmFsdWUpO1xyXG4gIG1heExpbmVWYWx1ZSA9IG1heExpbmVWYWx1ZSAqIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmN1c3RvbVlzY2FsZTtcclxuXHJcbiAgbGV0IG1pbkxpbmVWYWx1ZSA9IGQzLm1pbihsaW5lRGF0YSwgKGQpID0+ICtkLnZhbHVlKTtcclxuICBpZiAobWF4TGluZVZhbHVlID4gMCkgbWluTGluZVZhbHVlID0gbWluTGluZVZhbHVlIC0gMztcclxuICBpZiAobWluTGluZVZhbHVlID4gMCkgbWluTGluZVZhbHVlID0gMDtcclxuXHJcbiAgY29uc3QgbGluZVlzY2FsZSA9IGQzLnNjYWxlTGluZWFyKClcclxuICAgIC5kb21haW4oW21pbkxpbmVWYWx1ZSwgbWF4TGluZVZhbHVlXSlcclxuICAgIC5yYW5nZShbaGVpZ2h0LCBtaW5MaW5lVmFsdWVdKTtcclxuXHJcbiAgY29uc3QgeUxpbmVBeGlzID0gZDMuYXhpc1JpZ2h0KGxpbmVZc2NhbGUpXHJcbiAgICAudGlja3Moc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAudGlja1NpemUoMClcclxuICAgIC50aWNrRm9ybWF0KHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlMaW5lQXhpc0xhYmVsRm9tYXR0ZXIpO1xyXG5cclxuICByZXR1cm4geyBsaW5lWXNjYWxlLCB5TGluZUF4aXMgfTtcclxufVxyXG5cclxucHJpdmF0ZSByZW5kZXJHcmlkTGluZXMoc3ZnLCB4LCB5LCBoZWlnaHQsIHdpZHRoLCBzZWxmLCBpc3JpYSkge1xyXG4gIC8vIFgtYXhpcyBncmlkIGJldHdlZW4gbGFiZWxzXHJcbiAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzWGdyaWRCZXR3ZWVuTGFiZWxzKSB7XHJcbiAgICBzdmcuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2dyaWQnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgke3guYmFuZHdpZHRoKCkgLyAyfSwke2hlaWdodH0pYClcclxuICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4KS50aWNrU2l6ZSgtaGVpZ2h0KS50aWNrRm9ybWF0KCcnKSlcclxuICAgICAgLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5JywgJzUgNScpXHJcbiAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtZ3JpZC1jb2xvciwgIzk5OTk5OSknKVxyXG4gICAgICAuY2FsbCgoZykgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5yZW1vdmUoKSk7XHJcbiAgfVxyXG5cclxuICAvLyBZLWF4aXMgZ3JpZFxyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0dyaWQgfHwgaXNyaWEpIHtcclxuICAgIHN2Zy5hcHBlbmQoJ2cnKVxyXG4gICAgICAuY2FsbChkMy5heGlzTGVmdCh5KS50aWNrcyhzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5udW1iZXJPZllUaWNrcykudGlja1NpemUoLXdpZHRoKSlcclxuICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC1heGlzLWNvbG9yLCAjQjlCOUI5KScpXHJcbiAgICAgIC5zdHlsZSgnb3BhY2l0eScsICcwLjUnKVxyXG4gICAgICAuY2FsbCgoZykgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5yZW1vdmUoKS5zdHlsZSgnc3Ryb2tlJywgJ3ZhcigtLWNoYXJ0LWRvbWFpbi1jb2xvciwgIzAwMDAwMCknKSk7XHJcbiAgfSBlbHNle1xyXG4gICAgc3ZnLmFwcGVuZCgnZycpXHJcbiAgICAgIC5jYWxsKGQzLmF4aXNMZWZ0KHkpLnRpY2tzKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzKSlcclxuICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC1heGlzLWNvbG9yLCAjQjlCOUI5KScpXHJcbiAgICAgIC5zdHlsZSgnb3BhY2l0eScsICcwLjUnKVxyXG4gICAgICAuY2FsbCgoZykgPT4gZy5zZWxlY3QoJy5kb21haW4nKVxyXG4gICAgICAgIC5zdHlsZSgnc3Ryb2tlJywgJ3ZhcigtLWNoYXJ0LWRvbWFpbi1jb2xvciwgIzAwMDAwMCknKVxyXG4gICAgICAgIC5zdHlsZSgnc3Ryb2tlLXdpZHRoJywgJzFweCcpKTtcclxuICB9XHJcbn1cclxuXHJcbnByaXZhdGUgc2V0dXBYU3ViZ3JvdXBTY2FsZShzdWJncm91cHMsIHgsIHNlbGYpIHtcclxuICBjb25zdCB4U3ViZ3JvdXAgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oc3ViZ3JvdXBzKTtcclxuXHJcbiAgaWYgKHN1Ymdyb3Vwcy5sZW5ndGggPiAxICYmICF0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICB4U3ViZ3JvdXAucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICB9IGVsc2UgaWYgKHN1Ymdyb3Vwcy5sZW5ndGggPT09IDEgJiYgIXRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgIHhTdWJncm91cC5yYW5nZShbMCwgMTAwXSk7XHJcbiAgfSBlbHNlIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICB4U3ViZ3JvdXAucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICB9IGVsc2Uge1xyXG4gICAgeFN1Ymdyb3VwLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4geFN1Ymdyb3VwO1xyXG59XHJcblxyXG5wcml2YXRlIHJlbmRlckJhcnMoc3ZnLCBkYXRhLCBzdWJncm91cHMsIHgsIHhTdWJncm91cCwgeSwgaGVpZ2h0LCBjb2xvciwgXHJcbiAgbWV0YURhdGEsIHNlbGYsIGxlZnRBbmRSaWdodFNwYWNlcywgdGVtcFNjYWxlLCBpc3JpYSkge1xyXG4gIFxyXG4gIGNvbnN0IHN0YXRlID0gc3ZnLmFwcGVuZCgnZycpXHJcbiAgICAuc2VsZWN0QWxsKCcuc3RhdGUnKVxyXG4gICAgLmRhdGEoZGF0YSlcclxuICAgIC5lbnRlcigpXHJcbiAgICAuYXBwZW5kKCdnJylcclxuICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAoZCkgPT4gYHRyYW5zbGF0ZSgke3goZC5uYW1lKX0sMClgKTtcclxuXHJcbiAgY29uc3QgYmFycyA9IHN0YXRlLnNlbGVjdEFsbCgncmVjdCcpXHJcbiAgICAuZGF0YSgoZCkgPT4gdGhpcy5wcmVwYXJlQmFyRGF0YShkLCBzdWJncm91cHMpKVxyXG4gICAgLmVudGVyKClcclxuICAgIC5hcHBlbmQoJ3JlY3QnKVxyXG4gICAgLmF0dHIoJ2NsYXNzJywgJ2JhcnMnKVxyXG4gICAgLm9uKCdjbGljaycsIChkKSA9PiB0aGlzLmhhbmRsZUJhckNsaWNrKGQsIG1ldGFEYXRhLCBzZWxmKSlcclxuICAgIC5hdHRyKCd4JywgKGQpID0+IHRoaXMuY2FsY3VsYXRlQmFyWChkLCBkYXRhLCB4LCB4U3ViZ3JvdXAsIHNlbGYsIHRlbXBTY2FsZSkpXHJcbiAgICAuYXR0cigneScsIChkKSA9PiB0aGlzLmNhbGN1bGF0ZUJhclkoZCwgeSwgaGVpZ2h0LCBzZWxmKSlcclxuICAgIC5hdHRyKCd3aWR0aCcsIChkKSA9PiB7XHJcbiAgICAgICAgIGxldCB3aWR0aCA9IHRoaXMuY2FsY3VsYXRlQmFyV2lkdGgoZCwgZGF0YSwgc3ViZ3JvdXBzLCB4LCB4U3ViZ3JvdXAsIHNlbGYsIHRlbXBTY2FsZSk7XHJcbiAgICAgICAgIGlmIChpc3JpYSAmJiBzZWxmLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA+PSA4KSB7XHJcbiAgICAgICAgd2lkdGggPSBNYXRoLm1heCgwLCB3aWR0aCAtIDIwKTsgIC8vIFByZXZlbnQgbmVnYXRpdmUgd2lkdGhcclxuICB9XHJcbiAgcmV0dXJuIHdpZHRoO1xyXG59KVxyXG5cclxuICAgIC5hdHRyKCdoZWlnaHQnLCAoZCkgPT4gdGhpcy5jYWxjdWxhdGVCYXJIZWlnaHQoZCwgeSwgaGVpZ2h0LCBzZWxmKSlcclxuICAgIC5zdHlsZSgnY3Vyc29yJywgKCkgPT4gKG1ldGFEYXRhLmhhc0RyaWxsRG93biAmJiAhaXNyaWEpID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnKVxyXG4gICAgLmF0dHIoJ2ZpbGwnLCAoZCkgPT4gdGhpcy5nZXRCYXJDb2xvcihkLCBtZXRhRGF0YSwgc2VsZikpO1xyXG5cclxuICAvLyBBdHRhY2ggbW91c2UgZXZlbnRzIGlmIG5vdCBSSUFcclxuICBpZiAoIWlzcmlhICYmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5kaXNwbGF5VGl0bGVPblRvcCB8fCBcclxuICAgICAgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRzT25CYXIgPT09IHVuZGVmaW5lZCAmJiBcclxuICAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmRpc3BsYXlUaXRsZU9uVG9wID09PSB1bmRlZmluZWQpKSkge1xyXG4gICAgYmFycy5vbignbW91c2VvdXQnLCAoZCwgaSkgPT4gdGhpcy5oYW5kbGVNb3VzZU91dChzdmcpKVxyXG4gICAgICAgIC5vbignbW91c2VvdmVyJywgKGQsIGkpID0+IHRoaXMuaGFuZGxlTW91c2VPdmVyKGQsIHN2ZywgZGF0YSwgeCwgeSwgaGVpZ2h0LCBtZXRhRGF0YSwgc2VsZiwgbGVmdEFuZFJpZ2h0U3BhY2VzLCB0ZW1wU2NhbGUpKTtcclxuICB9XHJcbn1cclxuXHJcbnByaXZhdGUgcHJlcGFyZUJhckRhdGEoZCwgc3ViZ3JvdXBzKSB7XHJcbiAgY29uc3QgbmV3TGlzdDogYW55ID0gW107XHJcbiAgc3ViZ3JvdXBzLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgbmV3TGlzdC5wdXNoKHsga2V5OiBrZXksIHZhbHVlOiBkW2tleV0sIG5hbWU6IGQubmFtZSB9KTtcclxuICB9KTtcclxuICByZXR1cm4gbmV3TGlzdDtcclxufVxyXG5cclxucHJpdmF0ZSBoYW5kbGVCYXJDbGljayhkLCBtZXRhRGF0YSwgc2VsZikge1xyXG4gIGlmIChkLmtleSAhPT0gJ1RhcmdldCcpIHtcclxuICAgIGlmICghbWV0YURhdGEuYmFyV2l0aG91dENsaWNrIHx8ICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2subGVuZ3RoIHx8XHJcbiAgICAgICAgKCFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2suaW5jbHVkZXMoZD8ubmFtZSkgJiYgXHJcbiAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2suaW5jbHVkZXMoZD8ua2V5KSkpIHtcclxuICAgICAgc2VsZi5oYW5kbGVDbGljayhkKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbnByaXZhdGUgY2FsY3VsYXRlQmFyWChkLCBkYXRhLCB4LCB4U3ViZ3JvdXAsIHNlbGYsIHRlbXBTY2FsZSkge1xyXG4gIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVEcmlsbGRvd25CYXJYKGQsIGRhdGEsIHgsIHNlbGYsIHRlbXBTY2FsZSk7XHJcbiAgfVxyXG4gIHJldHVybiB4U3ViZ3JvdXAoZC5rZXkpO1xyXG59XHJcblxyXG4vLyBwcml2YXRlIGNhbGN1bGF0ZURyaWxsZG93bkJhclgoZCwgZGF0YSwgeCwgc2VsZiwgdGVtcFNjYWxlKSB7XHJcbi8vICAgZGF0YS5mb3JFYWNoKChpbmRpdjogYW55KSA9PiB7XHJcbi8vICAgICBpZiAoaW5kaXYubmFtZSA9PT0gZC5uYW1lKSB7XHJcbi8vICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhpbmRpdikuZmlsdGVyKCh0ZW1wLCBpKSA9PiBpICE9PSAwKTtcclxuLy8gICAgICAgdGVtcFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgIFxyXG4vLyAgICAgICBpZiAoeC5iYW5kd2lkdGgoKSA+IDEwMCkge1xyXG4vLyAgICAgICAgIGNvbnN0IHJlZHVjZWRCYXJXaWR0aCA9IHNlbGYuaXNab29tZWRPdXQgPyA2MCA6IDMwO1xyXG4vLyAgICAgICAgIGNvbnN0IG9mZnNldCA9ICh4LmJhbmR3aWR0aCgpIC0gcmVkdWNlZEJhcldpZHRoKSAvIDI7XHJcbi8vICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtvZmZzZXQsIHguYmFuZHdpZHRoKCkgLSBvZmZzZXRdKTtcclxuLy8gICAgICAgfVxyXG4vLyAgICAgfVxyXG4vLyAgIH0pO1xyXG4vLyAgIHJldHVybiB0ZW1wU2NhbGUoZC5rZXkpIHx8IDA7XHJcbi8vIH1cclxuXHJcbnByaXZhdGUgY2FsY3VsYXRlRHJpbGxkb3duQmFyWChkLCBkYXRhLCB4LCBzZWxmLCB0ZW1wU2NhbGUpIHtcclxuICAgIGxldCBjYWxjdWxhdGVkU2NhbGUgPSB0ZW1wU2NhbGU7XHJcbiAgICBcclxuICAgIGRhdGEuZm9yRWFjaCgoaW5kaXY6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoaW5kaXYubmFtZSA9PT0gZC5uYW1lKSB7XHJcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGluZGl2KS5maWx0ZXIoKHRlbXAsIGkpID0+IGkgIT09IDApO1xyXG4gICAgICAgIGNhbGN1bGF0ZWRTY2FsZSA9IGQzLnNjYWxlQmFuZCgpLmRvbWFpbihrZXlzKS5yYW5nZShbMCwgeC5iYW5kd2lkdGgoKV0pO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICh4LmJhbmR3aWR0aCgpID4gMTAwKSB7XHJcbiAgICAgICAgICBjb25zdCByZWR1Y2VkQmFyV2lkdGggPSBzZWxmLmlzWm9vbWVkT3V0ID8gNjAgOiAxMDA7XHJcbiAgICAgICAgICBjb25zdCBvZmZzZXQgPSAoeC5iYW5kd2lkdGgoKSAtIHJlZHVjZWRCYXJXaWR0aCkgLyAyO1xyXG4gICAgICAgICAgY2FsY3VsYXRlZFNjYWxlLnJhbmdlKFtvZmZzZXQsIHguYmFuZHdpZHRoKCkgLSBvZmZzZXRdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgXHJcbiAgICAvLyBSZXR1cm4gcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIGdyb3VwIChzaW5jZSBiYXJzIGFyZSBpbnNpZGUgYSB0cmFuc2xhdGVkIGdyb3VwIGVsZW1lbnQpXHJcbiAgICByZXR1cm4gY2FsY3VsYXRlZFNjYWxlKGQua2V5KSB8fCAwO1xyXG4gIH1cclxuXHJcbnByaXZhdGUgY2FsY3VsYXRlQmFyWShkLCB5LCBoZWlnaHQsIHNlbGYpIHtcclxuICBpZiAoZC52YWx1ZSA9PT0gLTEpIHtcclxuICAgIHJldHVybiB5KDApO1xyXG4gIH1cclxuXHJcbiAgaWYgKGQudmFsdWUgPj0gMCkge1xyXG4gICAgY29uc3QgYmFySGVpZ2h0ID0gaGVpZ2h0IC0geShkLnZhbHVlKTtcclxuICAgIGNvbnN0IG1pbkhlaWdodCA9IHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmRlZmF1bHRCYXJIZWlnaHQgfHwgMjtcclxuICAgIHJldHVybiBiYXJIZWlnaHQgPCBtaW5IZWlnaHQgPyB5KDApIC0gbWluSGVpZ2h0IDogeShkLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIHJldHVybiB5KDApO1xyXG59XHJcblxyXG5wcml2YXRlIGNhbGN1bGF0ZUJhcldpZHRoKGQsIGRhdGEsIHN1Ymdyb3VwcywgeCwgeFN1Ymdyb3VwLCBzZWxmLCB0ZW1wU2NhbGUpIHtcclxuICAvLyBEZXZpY2UgZGV0ZWN0aW9uIGZvciByZXNwb25zaXZlIHNpemluZ1xyXG4gIGNvbnN0IGlzTW9iaWxlID0gd2luZG93LmlubmVyV2lkdGggPCA1NzY7XHJcbiAgY29uc3QgaXNUYWJsZXQgPSB3aW5kb3cuaW5uZXJXaWR0aCA+PSA1NzYgJiYgd2luZG93LmlubmVyV2lkdGggPCA5OTI7XHJcblxyXG4gIC8vIEZvciBncm91cGVkIGJhciBjaGFydHMgaW4gem9vbS1pbiB2aWV3XHJcbiAgaWYgKHN1Ymdyb3Vwcy5sZW5ndGggPiAxICYmICFzZWxmLmlzWm9vbWVkT3V0KSB7XHJcbiAgICByZXR1cm4gaXNNb2JpbGUgPyAyMiA6IGlzVGFibGV0ID8gMzYgOiA1MDtcclxuICB9XHJcblxyXG4gIC8vIEZvciBzaW5nbGUtYmFyIGNoYXJ0cyBpbiB6b29tLWluIHZpZXdcclxuICBpZiAoc3ViZ3JvdXBzLmxlbmd0aCA9PT0gMSAmJiAhc2VsZi5pc1pvb21lZE91dCkge1xyXG4gICAgcmV0dXJuIGlzTW9iaWxlID8gNjAgOiA4MDtcclxuICB9XHJcblxyXG4gIC8vIE1pbmltdW0gYmFyIHdpZHRocyBmb3Igem9vbWVkLW91dCBzdGF0ZVxyXG4gIGNvbnN0IG1pbkJhcldpZHRoID0gKCgpID0+IHtcclxuICAgIGlmIChzdWJncm91cHMubGVuZ3RoID4gMikge1xyXG4gICAgICByZXR1cm4gaXNNb2JpbGUgPyAxOCA6IGlzVGFibGV0ID8gMjQgOiAzMDtcclxuICAgIH1cclxuICAgIHJldHVybiBpc01vYmlsZSA/IDEyIDogaXNUYWJsZXQgPyAxNiA6IDIwO1xyXG4gIH0pKCk7XHJcblxyXG4gIC8vIERlZmF1bHQgbG9naWMgZm9yIGRyaWxsZG93biBjaGFydHNcclxuICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgbGV0IGNhbGN1bGF0ZWRTY2FsZSA9IGQzLnNjYWxlQmFuZCgpLmRvbWFpbihbXSkucmFuZ2UoWzAsIDBdKTtcclxuICAgIFxyXG4gICAgZGF0YS5mb3JFYWNoKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgIGlmIChpbmRpdi5uYW1lID09PSBkLm5hbWUpIHtcclxuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaW5kaXYpLmZpbHRlcigodGVtcCwgaSkgPT4gaSAhPT0gMCk7XHJcbiAgICAgICAgY2FsY3VsYXRlZFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHguYmFuZHdpZHRoKCkgPiAxMDApIHtcclxuICAgICAgICAgIGNvbnN0IHJlZHVjZWRCYXJXaWR0aCA9IHNlbGYuaXNab29tZWRPdXQgPyA2MCA6IDEwMDtcclxuICAgICAgICAgIGNvbnN0IG9mZnNldCA9ICh4LmJhbmR3aWR0aCgpIC0gcmVkdWNlZEJhcldpZHRoKSAvIDI7XHJcbiAgICAgICAgICBjYWxjdWxhdGVkU2NhbGUucmFuZ2UoW29mZnNldCwgeC5iYW5kd2lkdGgoKSAtIG9mZnNldF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBcclxuICAgIC8vIEVuc3VyZSBtaW5pbXVtIHdpZHRoIGV2ZW4gaW4gZHJpbGxkb3duIG1vZGVcclxuICAgIHJldHVybiBNYXRoLm1heChjYWxjdWxhdGVkU2NhbGUuYmFuZHdpZHRoKCksIG1pbkJhcldpZHRoKTtcclxuICB9XHJcblxyXG4gIC8vIEZvciByZWd1bGFyIGNoYXJ0cywgZW5zdXJlIG1pbmltdW0gd2lkdGhcclxuICByZXR1cm4gTWF0aC5tYXgoeFN1Ymdyb3VwLmJhbmR3aWR0aCgpLCBtaW5CYXJXaWR0aCk7XHJcbn1cclxuXHJcbnByaXZhdGUgY2FsY3VsYXRlQmFySGVpZ2h0KGQsIHksIGhlaWdodCwgc2VsZikge1xyXG4gIGlmIChkLnZhbHVlID09PSAtMSkge1xyXG4gICAgcmV0dXJuIGhlaWdodCAtIHkoMCk7XHJcbiAgfVxyXG5cclxuICBpZiAoZC52YWx1ZSA+PSAwKSB7XHJcbiAgICBjb25zdCBiYXJIZWlnaHQgPSBoZWlnaHQgLSB5KGQudmFsdWUpO1xyXG4gICAgY29uc3QgbWluSGVpZ2h0ID0gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uZGVmYXVsdEJhckhlaWdodCB8fCAyO1xyXG4gICAgcmV0dXJuIE1hdGgubWF4KGJhckhlaWdodCwgbWluSGVpZ2h0KTtcclxuICB9XHJcblxyXG4gIHJldHVybiBoZWlnaHQgLSB5KDApO1xyXG59XHJcblxyXG5wcml2YXRlIGdldEJhckNvbG9yKGQsIG1ldGFEYXRhLCBzZWxmKSB7XHJcbiAgaWYgKGQudmFsdWUgJiYgc2VsZi5jaGFydERhdGEudGFyZ2V0TGluZURhdGEgJiYgXHJcbiAgICAgIGQudmFsdWUgPj0gcGFyc2VGbG9hdChzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpICYmIFxyXG4gICAgICBzZWxmLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvckFib3ZlVGFyZ2V0KSB7XHJcbiAgICBcclxuICAgIGNvbnN0IGtleSA9IGQua2V5LnRvTG93ZXJDYXNlKCk7XHJcbiAgICBjb25zdCBjb2xvckFib3ZlVGFyZ2V0ID0gT2JqZWN0LmtleXMoc2VsZi5jaGFydERhdGEubWV0YURhdGEuY29sb3JBYm92ZVRhcmdldClcclxuICAgICAgLmZpbmQoayA9PiBrLnRvTG93ZXJDYXNlKCkgPT09IGtleSk7XHJcbiAgICBcclxuICAgIGlmIChjb2xvckFib3ZlVGFyZ2V0KSB7XHJcbiAgICAgIHJldHVybiBzZWxmLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvckFib3ZlVGFyZ2V0W2NvbG9yQWJvdmVUYXJnZXRdO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gc2VsZi5jaGFydERhdGEubWV0YURhdGEuY29sb3JzW2Qua2V5XTtcclxufVxyXG5cclxucHJpdmF0ZSByZW5kZXJCYXJMYWJlbHMoc3ZnLCBkYXRhLCBzdWJncm91cHMsIHgsIHhTdWJncm91cCwgeSwgaGVpZ2h0LCBcclxuICBtZXRhRGF0YSwgc2VsZiwgdGVtcFNjYWxlLCBpc3JpYSkge1xyXG4gIFxyXG4gIGNvbnN0IHN0YXRlID0gc3ZnLnNlbGVjdEFsbCgnLnN0YXRlJyk7XHJcbiAgXHJcbiAgY29uc3QgbGFiZWxzID0gc3RhdGUuc2VsZWN0QWxsKCd0ZXh0JylcclxuICAgIC5kYXRhKChkKSA9PiB0aGlzLnByZXBhcmVCYXJEYXRhKGQsIHN1Ymdyb3VwcykpXHJcbiAgICAuZW50ZXIoKVxyXG4gICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAuYXR0cignZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAuYXR0cigneCcsIDApXHJcbiAgICAuYXR0cigneScsIDApXHJcbiAgICAuYXR0cignY2xhc3MnLCAnbGliLWRhdGEtbGFiZWxzLXdlZWtseWNoYXJ0cycpXHJcbiAgICAudGV4dCgoZCkgPT4gdGhpcy5mb3JtYXRCYXJMYWJlbChkKSlcclxuICAgIC5zdHlsZSgnZmlsbCcsICcjMDAwJylcclxuICAgIC5zdHlsZSgnZm9udC13ZWlnaHQnLCAnYm9sZCcpXHJcbiAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsIChkKSA9PiB0aGlzLmNhbGN1bGF0ZUxhYmVsRm9udFNpemUoc2VsZikpXHJcbiAgICAuYXR0cigndHJhbnNmb3JtJywgKGQpID0+IHRoaXMuY2FsY3VsYXRlTGFiZWxUcmFuc2Zvcm0oZCwgZGF0YSwgeCwgeFN1Ymdyb3VwLCB5LCBzZWxmLCB0ZW1wU2NhbGUpKVxyXG4gICAgLm9uKCdjbGljaycsIChkKSA9PiB0aGlzLmhhbmRsZUJhckNsaWNrKGQsIG1ldGFEYXRhLCBzZWxmKSk7XHJcblxyXG4gIGlmICghaXNyaWEpIHtcclxuICAgIGxhYmVscy5vbignbW91c2VvdXQnLCAoKSA9PiB0aGlzLmhhbmRsZU1vdXNlT3V0KHN2ZykpXHJcbiAgICAgICAgICAub24oJ21vdXNlb3ZlcicsIChkKSA9PiB0aGlzLmhhbmRsZU1vdXNlT3ZlcihkLCBzdmcsIGRhdGEsIHgsIHksIGhlaWdodCwgbWV0YURhdGEsIHNlbGYsIDUwLCB0ZW1wU2NhbGUpKTtcclxuICB9XHJcbn1cclxuXHJcbnByaXZhdGUgZm9ybWF0QmFyTGFiZWwoZCkge1xyXG4gIGlmICghZC5rZXkgfHwgIWQudmFsdWUpIHJldHVybiAnJztcclxuICByZXR1cm4gZC5rZXkubGVuZ3RoID4gMjAgPyBkLmtleS5zdWJzdHJpbmcoMCwgMTcpICsgJy4uLicgOiBkLmtleTtcclxufVxyXG5cclxucHJpdmF0ZSBjYWxjdWxhdGVMYWJlbEZvbnRTaXplKHNlbGYpIHtcclxuICBpZiAoc2VsZi5pc1pvb21lZE91dCkgcmV0dXJuICc5cHgnO1xyXG5cclxuICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoID4gMTkwMCkgcmV0dXJuICcxOHB4JztcclxuICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDE0MDApIHJldHVybiAnMTBweCc7XHJcbiAgICByZXR1cm4gJzE0cHgnO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuICcxNHB4JztcclxufVxyXG5cclxucHJpdmF0ZSBjYWxjdWxhdGVMYWJlbFRyYW5zZm9ybShkLCBkYXRhLCB4LCB4U3ViZ3JvdXAsIHksIHNlbGYsIHRlbXBTY2FsZSkge1xyXG4gIGxldCBjYWxjdWxhdGVkU2NhbGU7XHJcbiAgXHJcbiAgZGF0YS5mb3JFYWNoKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICBpZiAoaW5kaXYubmFtZSA9PT0gZC5uYW1lKSB7XHJcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhpbmRpdikuZmlsdGVyKCh0ZW1wLCBpKSA9PiBpICE9PSAwKTtcclxuICAgICAgY2FsY3VsYXRlZFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgIFxyXG4gICAgICBpZiAoeC5iYW5kd2lkdGgoKSA+IDEwMCkge1xyXG4gICAgICAgIGlmIChzZWxmLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgY29uc3QgcmVkdWNlZFdpZHRoID0gT2JqZWN0LmtleXMoc2VsZi5jaGFydERhdGEuZGF0YVswXSkubGVuZ3RoID09PSAyID8gMjAwIDogMzAwO1xyXG4gICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gKHguYmFuZHdpZHRoKCkgLSByZWR1Y2VkV2lkdGgpIC8gMjtcclxuICAgICAgICAgIGNhbGN1bGF0ZWRTY2FsZS5yYW5nZShbb2Zmc2V0LCB4LmJhbmR3aWR0aCgpIC0gb2Zmc2V0XSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IG9mZnNldCA9ICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDI7XHJcbiAgICAgICAgICBjYWxjdWxhdGVkU2NhbGUucmFuZ2UoW29mZnNldCwgeC5iYW5kd2lkdGgoKSAtIG9mZnNldF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24udGV4dEFsd2F5c0hvcml6b250YWwpIHtcclxuICAgIHJldHVybiBgdHJhbnNsYXRlKCR7eFN1Ymdyb3VwKGQua2V5KX0sJHt5KGQudmFsdWUpIC0gM30pYDtcclxuICB9XHJcblxyXG4gIGlmICghaXNOYU4oY2FsY3VsYXRlZFNjYWxlKGQua2V5KSkpIHtcclxuICAgIHJldHVybiBgdHJhbnNsYXRlKCR7Y2FsY3VsYXRlZFNjYWxlKGQua2V5KSArIGNhbGN1bGF0ZWRTY2FsZS5iYW5kd2lkdGgoKSAqIDAuNTV9LCR7eSgwKSAtIDEwfSkgcm90YXRlKDI3MClgO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuICd0cmFuc2xhdGUoMCwwKSc7XHJcbn1cclxuXHJcbnByaXZhdGUgaGFuZGxlTW91c2VPdmVyKGQsIHN2ZywgZGF0YSwgeCwgeSwgaGVpZ2h0LCBtZXRhRGF0YSwgc2VsZiwgbGVmdEFuZFJpZ2h0U3BhY2VzLCB0ZW1wU2NhbGUpIHtcclxuICBzdmcuc2VsZWN0QWxsKCcubGliLXZlcnRpY2Fsc3RhY2stdGl0bGUtb250b3AnKS5yZW1vdmUoKTtcclxuXHJcbiAgbGV0IGNhbGN1bGF0ZWRTY2FsZTtcclxuICBsZXQgZWxlbWVudHNDb3VudGVyO1xyXG5cclxuICBkYXRhLmZvckVhY2goKGluZGl2OiBhbnkpID0+IHtcclxuICAgIGlmIChpbmRpdi5uYW1lID09PSBkLm5hbWUpIHtcclxuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGluZGl2KS5maWx0ZXIoKHRlbXAsIGkpID0+IGkgIT09IDApO1xyXG4gICAgICBlbGVtZW50c0NvdW50ZXIgPSBrZXlzLmxlbmd0aDtcclxuICAgICAgY2FsY3VsYXRlZFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgIFxyXG4gICAgICBpZiAoeC5iYW5kd2lkdGgoKSA+IDEwMCkge1xyXG4gICAgICAgIGlmIChzZWxmLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgY29uc3QgcmVkdWNlZFdpZHRoID0gT2JqZWN0LmtleXMoc2VsZi5jaGFydERhdGEuZGF0YVswXSkubGVuZ3RoID09PSAyID8gMjAwIDogMzAwO1xyXG4gICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gKHguYmFuZHdpZHRoKCkgLSByZWR1Y2VkV2lkdGgpIC8gMjtcclxuICAgICAgICAgIGNhbGN1bGF0ZWRTY2FsZS5yYW5nZShbb2Zmc2V0LCB4LmJhbmR3aWR0aCgpIC0gb2Zmc2V0XSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IG9mZnNldCA9ICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDI7XHJcbiAgICAgICAgICBjYWxjdWxhdGVkU2NhbGUucmFuZ2UoW29mZnNldCwgeC5iYW5kd2lkdGgoKSAtIG9mZnNldF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICBjb25zdCB4UG9zaXRpb24gPSB0aGlzLmNhbGN1bGF0ZVRvb2x0aXBYKGQsIHgsIGNhbGN1bGF0ZWRTY2FsZSwgbWV0YURhdGEsIGxlZnRBbmRSaWdodFNwYWNlcyk7XHJcbiAgY29uc3Qgd2lkdGggPSB0aGlzLmNhbGN1bGF0ZVRvb2x0aXBXaWR0aChjYWxjdWxhdGVkU2NhbGUsIG1ldGFEYXRhLCBsZWZ0QW5kUmlnaHRTcGFjZXMpO1xyXG5cclxuICBzdmcuYXBwZW5kKCdmb3JlaWduT2JqZWN0JylcclxuICAgIC5hdHRyKCd4JywgeFBvc2l0aW9uKVxyXG4gICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi12ZXJ0aWNhbHN0YWNrLXRpdGxlLW9udG9wJylcclxuICAgIC5hdHRyKCd5JywgeShkLnZhbHVlKSAtIDMgLSA0MCAtIDEwKVxyXG4gICAgLmF0dHIoJ2R5JywgZC5jbGFzcylcclxuICAgIC5hdHRyKCd3aWR0aCcsIHdpZHRoKVxyXG4gICAgLmF0dHIoJ2hlaWdodCcsIDUwKVxyXG4gICAgLmFwcGVuZCgneGh0bWw6ZGl2JylcclxuICAgIC5hdHRyKCdjbGFzcycsICd0aXRsZScpXHJcbiAgICAuc3R5bGUoJ3otaW5kZXgnLCA5OSlcclxuICAgIC5odG1sKCgpID0+IHRoaXMuZ2VuZXJhdGVUb29sdGlwSFRNTChkLCBtZXRhRGF0YSkpO1xyXG59XHJcblxyXG5wcml2YXRlIGNhbGN1bGF0ZVRvb2x0aXBYKGQsIHgsIGNhbGN1bGF0ZWRTY2FsZSwgbWV0YURhdGEsIGxlZnRBbmRSaWdodFNwYWNlcykge1xyXG4gIGlmIChtZXRhRGF0YS5oYXNEcmlsbERvd24pIHtcclxuICAgIGlmIChjYWxjdWxhdGVkU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyID4gMTgwKSB7XHJcbiAgICAgIHJldHVybiB4KGQubmFtZSkgKyBjYWxjdWxhdGVkU2NhbGUoZC5rZXkpICsgY2FsY3VsYXRlZFNjYWxlLmJhbmR3aWR0aCgpIC8gMiAtIDkwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHgoZC5uYW1lKSArIGNhbGN1bGF0ZWRTY2FsZShkLmtleSkgLSBcclxuICAgICAgICAgICAoY2FsY3VsYXRlZFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMikgLyAyICsgXHJcbiAgICAgICAgICAgY2FsY3VsYXRlZFNjYWxlLmJhbmR3aWR0aCgpIC8gMjtcclxuICB9XHJcbiAgcmV0dXJuIHgoZC5uYW1lKSArIGNhbGN1bGF0ZWRTY2FsZShkLmtleSkgLSBcclxuICAgICAgICAgKGNhbGN1bGF0ZWRTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIpIC8gMiArIFxyXG4gICAgICAgICBjYWxjdWxhdGVkU2NhbGUuYmFuZHdpZHRoKCkgLyAyO1xyXG59XHJcblxyXG5wcml2YXRlIGNhbGN1bGF0ZVRvb2x0aXBXaWR0aChjYWxjdWxhdGVkU2NhbGUsIG1ldGFEYXRhLCBsZWZ0QW5kUmlnaHRTcGFjZXMpIHtcclxuICBpZiAobWV0YURhdGEuaGFzRHJpbGxEb3duKSB7XHJcbiAgICBpZiAoY2FsY3VsYXRlZFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMiA+IDE4MCkge1xyXG4gICAgICByZXR1cm4gJzE4MHB4JztcclxuICAgIH1cclxuICAgIHJldHVybiBjYWxjdWxhdGVkU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyO1xyXG4gIH1cclxuICByZXR1cm4gY2FsY3VsYXRlZFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMjtcclxufVxyXG5cclxucHJpdmF0ZSBnZW5lcmF0ZVRvb2x0aXBIVE1MKGQsIG1ldGFEYXRhKSB7XHJcbiAgY29uc3QgYmFyTGFiZWwgPSBkLmtleTtcclxuICBjb25zdCBkYXRhVHlwZSA9IG1ldGFEYXRhLmRhdGFUeXBlIHx8ICcnO1xyXG4gIGNvbnN0IHZhbHVlID0gZC52YWx1ZTtcclxuICBcclxuICBsZXQgaHRtbCA9IGA8c3BhbiBjbGFzcz1cInRpdGxlLWJhci1uYW1lXCI+JHtiYXJMYWJlbH08L3NwYW4+YDtcclxuICBodG1sICs9IGA8c3BhbiBjbGFzcz1cInRpdGxlLWJhci12YWx1ZVwiPjxzcGFuPiR7dmFsdWV9PC9zcGFuPiR7ZGF0YVR5cGV9PC9zcGFuPmA7XHJcbiAgXHJcbiAgcmV0dXJuIGh0bWw7XHJcbn1cclxuXHJcbnByaXZhdGUgaGFuZGxlTW91c2VPdXQoc3ZnKSB7XHJcbiAgc3ZnLnNlbGVjdEFsbCgnLmxpYi12ZXJ0aWNhbHN0YWNrLXRpdGxlLW9udG9wJykucmVtb3ZlKCk7XHJcbn1cclxuXHJcbnByaXZhdGUgcmVuZGVyWUF4aXMoc3ZnLCBzdmdZQXhpc0xlZnQsIHN2Z1lBeGlzUmlnaHQsIHksIHlMaW5lQXhpcywgbGluZURhdGEsIHNlbGYsIGlzcmlhLCBtYXJnaW4pIHtcclxuICAvLyBIaWRkZW4geS1heGlzIGZvciByZWZlcmVuY2VcclxuICBzdmcuYXBwZW5kKCdnJylcclxuICAgIC5hdHRyKCdjbGFzcycsICdsaWItc3RhY2tlZC15LWF4aXMtdGV4dCB5YXhpcy1kYXNoZWQnKVxyXG4gICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwwKScpXHJcbiAgICAuY2FsbCh5KVxyXG4gICAgLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuXHJcbiAgLy8gTGVmdCB5LWF4aXNcclxuICBzdmdZQXhpc0xlZnQuYXBwZW5kKCdnJylcclxuICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi15YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duIHlheGlzLWRhc2hlZCcpXHJcbiAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgIC5jYWxsKGQzLmF4aXNMZWZ0KHkpXHJcbiAgICAgIC50aWNrU2l6ZSgwKVxyXG4gICAgICAudGlja3Moc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAgIC50aWNrRm9ybWF0KChkKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNMYWJlbEZvbWF0dGVyIFxyXG4gICAgICAgICAgPyBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0xhYmVsRm9tYXR0ZXIoZCkgXHJcbiAgICAgICAgICA6IGQ7XHJcbiAgICAgICAgcmV0dXJuIGZvcm1hdHRlZCA+PSAxMDAwID8gZm9ybWF0dGVkIC8gMTAwMCArICdrJyA6IGZvcm1hdHRlZDtcclxuICAgICAgfSkpXHJcbiAgICAuY2FsbCgoZykgPT4ge1xyXG4gICAgICBnLnNlbGVjdCgnLmRvbWFpbicpXHJcbiAgICAgICAgLnN0eWxlKCdzdHJva2UnLCAndmFyKC0tY2hhcnQtZG9tYWluLWNvbG9yLCAjMDAwMDAwKScpXHJcbiAgICAgICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCAnMXB4Jyk7XHJcbiAgICB9KVxyXG4gICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsIGlzcmlhID8gJzExcHgnIDogbnVsbClcclxuICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG5cclxuICAvLyBSaWdodCB5LWF4aXMgKGhpZGRlbiBieSBkZWZhdWx0KVxyXG4gIHN2Z1lBeGlzUmlnaHQuYXBwZW5kKCdnJylcclxuICAgIC5hdHRyKCdjbGFzcycsICdsaWIteWF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93biB5YXhpcy1kYXNoZWQnKVxyXG4gICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwwKScpXHJcbiAgICAuY2FsbCh5KVxyXG4gICAgLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuXHJcbiAgLy8gTGluZSBjaGFydCBheGlzIGlmIGFwcGxpY2FibGVcclxuICBpZiAobGluZURhdGEgIT0gbnVsbCAmJiBsaW5lRGF0YSAmJiBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5zaG93TGluZUNoYXJ0QXhpcykge1xyXG4gICAgc3ZnWUF4aXNSaWdodC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXN0YWNrZWQteS1heGlzLXRleHQxJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgICAgLmNhbGwoeUxpbmVBeGlzKTtcclxuICB9XHJcblxyXG4gIC8vIEFwcGx5IGF4aXMgdmlzaWJpbGl0eSBjb25maWd1cmF0aW9uc1xyXG4gIHRoaXMuYXBwbHlBeGlzVmlzaWJpbGl0eUNvbmZpZyhzZWxmKTtcclxufVxyXG5cclxucHJpdmF0ZSBhcHBseUF4aXNWaXNpYmlsaXR5Q29uZmlnKHNlbGYpIHtcclxuICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNYYXhpc0xhYmVsSGlkZGVuKSB7XHJcbiAgICBkMy5zZWxlY3RBbGwoJ2cubGliLWxpbmUteC1heGlzLXRleHQgPiBnID4gdGV4dCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItZGlzcGxheS1oaWRkZW4nKTtcclxuICB9XHJcblxyXG4gIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzTGFiZWxIaWRkZW4pIHtcclxuICAgIGQzLnNlbGVjdEFsbCgnLnlheGlzLWRhc2hlZCA+IGcgPiB0ZXh0JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNIaWRkZW4pIHtcclxuICAgIGQzLnNlbGVjdEFsbCgnLnlheGlzLWRhc2hlZCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItZGlzcGxheS1oaWRkZW4nKTtcclxuICB9XHJcblxyXG4gIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzRGFzaGVkKSB7XHJcbiAgICBkMy5zZWxlY3RBbGwoJy55YXhpcy1kYXNoZWQnKVxyXG4gICAgICAuc3R5bGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnNSA1JylcclxuICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC1heGlzLWNvbG9yLCAjOTk5OTk5KScpO1xyXG4gIH1cclxufVxyXG5cclxucHJpdmF0ZSByZW5kZXJBeGlzTGFiZWxzKHN2Zywgc3ZnWUF4aXNMZWZ0LCBzdmdZQXhpc1JpZ2h0LCBtZXRhRGF0YSwgd2lkdGgsIGhlaWdodCwgbWFyZ2luLCBzZWxmLCBpc3JpYSwgcmlnaHRTdmdXaWR0aCkge1xyXG4gIC8vIFktYXhpcyBsYWJlbCBwaWVjZXMsdWludHMgZXRjXHJcbiAgaWYgKG1ldGFEYXRhLnlMYWJlbCkge1xyXG4gICAgY29uc3QgeVBvc2l0aW9uID0gaXNyaWEgPyAwIC0gbWFyZ2luLmxlZnQgLyAyIC0gMzAgOiAwIC0gbWFyZ2luLmxlZnQgLyAyIC0gNDA7XHJcblxyXG4gICAgc3ZnWUF4aXNMZWZ0LmFwcGVuZCgndGV4dCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItYXhpcy1ncm91cC1sYWJlbCBmb250LXNpemUtMScpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tbGFiZWxTdHlsZXMpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAncm90YXRlKC05MCknKVxyXG4gICAgICAuYXR0cigneScsIHlQb3NpdGlvbilcclxuICAgICAgLmF0dHIoJ3gnLCAwIC0gaGVpZ2h0IC8gMilcclxuICAgICAgLmF0dHIoJ2R5JywgJzAuNWVtJylcclxuICAgICAgLnN0eWxlKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgICAuYXR0cignZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHN2Z1lBeGlzTGVmdC5zZWxlY3RBbGwoJy5saWItYXhpcy1ncm91cC1sYWJlbCcpXHJcbiAgICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnc21hbGxlcicpXHJcbiAgICAgICAgLnRleHQobWV0YURhdGEueUxhYmVsKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN2Zy5zZWxlY3RBbGwoJy5saWItYXhpcy1ncm91cC1sYWJlbCcpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi15bGFiZWwtd2Vla2x5Q2hhcnRzJylcclxuICAgICAgICAudGV4dChtZXRhRGF0YS55TGFiZWwudG9Mb3dlckNhc2UoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBYLWF4aXMgbGFiZWxcclxuICBpZiAobWV0YURhdGEueExhYmVsKSB7XHJcbiAgICBjb25zdCBpc0Fjcm9ueW0gPSB0aGlzLmlzTGFiZWxBY3JvbnltKG1ldGFEYXRhLnhMYWJlbCk7XHJcbiAgICAvLyBjb25zdCB4UG9zaXRpb24gPSBpc3JpYSBcclxuICAgIC8vICAgPyAoaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20gLSAxNSkgXHJcbiAgICAvLyAgIDogKGhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tICsgNDApO1xyXG4gICAgY29uc3QgeFBvc2l0aW9uID0gaXNyaWFcclxuICA/ICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0hlYWRlclZpc2libGVcclxuICAgICAgPyAoaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20gLSA0NSkgICAvLyBpc3JpYSArIGhlYWRlciB2aXNpYmxlXHJcbiAgICAgIDogKGhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tKSAgICAgICAgLy8gaXNyaWEgKyBoZWFkZXIgTk9UIHZpc2libGVcclxuICAgIClcclxuICA6IChoZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSArIDQwKTsgICAgICAvLyBub3QgaXNyaWFcclxuXHJcblxyXG4gICAgc3ZnLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsIHRoaXMuZ2V0WExhYmVsQ2xhc3Moc2VsZikpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnhBeGlzQ3VzdG9tbGFiZWxTdHlsZXMpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKCR7d2lkdGggLyAyfSwke3hQb3NpdGlvbn0pYClcclxuICAgICAgLnN0eWxlKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAudGV4dChpc0Fjcm9ueW0gPyBtZXRhRGF0YS54TGFiZWwudG9VcHBlckNhc2UoKSA6IG1ldGFEYXRhLnhMYWJlbC50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAuc3R5bGUoJ3RleHQtdHJhbnNmb3JtJywgaXNBY3JvbnltID8gJ25vbmUnIDogJ2NhcGl0YWxpemUnKTtcclxuICB9XHJcblxyXG4gIC8vIExpbmUgeS1heGlzIGxhYmVsXHJcbiAgaWYgKG1ldGFEYXRhLmxpbmV5TGFiZWwpIHtcclxuICAgIHN2Z1lBeGlzUmlnaHQuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1heGlzLWdyb3VwLWxhYmVsIGxpYi1saW5lLWF4aXMnKVxyXG4gICAgICAuYXR0cignZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tbGFiZWxTdHlsZXMpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsMCkgcm90YXRlKDkwKScpXHJcbiAgICAgIC5hdHRyKCd5JywgLTEwMClcclxuICAgICAgLmF0dHIoJ3gnLCAxMDApXHJcbiAgICAgIC5hdHRyKCdkeScsICc1ZW0nKVxyXG4gICAgICAuc3R5bGUoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXHJcbiAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgJ3NtYWxsZXInKVxyXG4gICAgICAudGV4dChtZXRhRGF0YS5saW5leUxhYmVsKTtcclxuICB9XHJcblxyXG4gIC8vIEFwcGx5IGRyaWxsZG93biBjaGFydCBzcGVjaWZpYyBzdHlsZXNcclxuICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgc3ZnLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgbGluZScpLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuICB9XHJcbn1cclxuXHJcbnByaXZhdGUgaXNMYWJlbEFjcm9ueW0obGFiZWwpIHtcclxuICByZXR1cm4gKGxhYmVsLmxlbmd0aCA8PSA0ICYmIC9eW0EtWl0rJC8udGVzdChsYWJlbCkpIHx8XHJcbiAgICAgICAgIChsYWJlbCA9PT0gbGFiZWwudG9VcHBlckNhc2UoKSAmJiAvW0EtWl0vLnRlc3QobGFiZWwpKTtcclxufVxyXG5cclxucHJpdmF0ZSBnZXRYTGFiZWxDbGFzcyhzZWxmKSB7XHJcbiAgbGV0IGJhc2VDbGFzcyA9ICdsaWItYXhpcy1ncm91cC1sYWJlbCBmb250LXNpemUtMSc7XHJcbiAgXHJcbiAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgIHJldHVybiBiYXNlQ2xhc3MgKyAnIGxpYi14bGFiZWwtZHJpbGxkb3duY2hhcnRzJztcclxuICB9XHJcbiAgXHJcbiAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lICE9PSB1bmRlZmluZWQpIHtcclxuICAgIHJldHVybiBiYXNlQ2xhc3MgKyAnIGxpYi14bGFiZWwtd2Vla2x5Q2hhcnRzJztcclxuICB9XHJcbiAgXHJcbiAgcmV0dXJuIGJhc2VDbGFzcyArICcgbGliLWF4aXMtd2F0ZXJmYWxsLWxhYmVsJztcclxufVxyXG5cclxucHJpdmF0ZSByZW5kZXJUYXJnZXRMaW5lKHN2Zywgc3ZnWUF4aXNSaWdodCwgeSwgd2lkdGgsIHJpZ2h0U3ZnV2lkdGgsIG1ldGFEYXRhLCBzZWxmLGlzcmlhKSB7XHJcbiAgY29uc3QgeVplcm8gPSB5KHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCk7XHJcbiAgLy8gRHJhdyB0YXJnZXQgbGluZVxyXG4gIHN2Zy5hcHBlbmQoJ2xpbmUnKVxyXG4gICAgLy8gLmF0dHIoJ3gxJywgMjApXHJcbiAgICAuYXR0cigneDEnLCBpc3JpYSA/IDAgOiAwKVxyXG4gICAgLmF0dHIoJ3gyJywgd2lkdGgpXHJcbiAgICAuYXR0cigneTEnLCB5WmVybylcclxuICAgIC5hdHRyKCd5MicsIHlaZXJvKVxyXG4gICAgLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5JywgJzUgNScpXHJcbiAgICAuc3R5bGUoJ3N0cm9rZScsIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLmNvbG9yKTtcclxuXHJcbiAgLy8gQWRkIHRhcmdldCBsYWJlbFxyXG4gIGNvbnN0IGRhdGFUeXBlVGVtcCA9IG1ldGFEYXRhLmRhdGFUeXBlIHx8ICcnO1xyXG4gIGNvbnN0IHRhcmdldExpbmVOYW1lID0gdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0TmFtZSB8fCAndGFyZ2V0JztcclxuICAgIFxyXG5cclxuXHJcbiAgc3ZnWUF4aXNSaWdodC5hcHBlbmQoJ2ZvcmVpZ25PYmplY3QnKVxyXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwke3laZXJvIC0gMzB9KWApXHJcbiAgICAuYXR0cignd2lkdGgnLCByaWdodFN2Z1dpZHRoKVxyXG4gICAgLmF0dHIoJ2hlaWdodCcsIDUwKVxyXG4gICAgLmFwcGVuZCgneGh0bWw6ZGl2JylcclxuICAgIC5hdHRyKCdjbGFzcycsIGlzcmlhID8gJ3RhcmdldC1kaXNwbGF5LXJpYScgOiAndGFyZ2V0LWRpc3BsYXknKVxyXG4gICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAuaHRtbChgPGRpdj4ke3RhcmdldExpbmVOYW1lfTwvZGl2PjxkaXY+JHtzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXR9JHtkYXRhVHlwZVRlbXB9PC9kaXY+YCk7XHJcbn1cclxuXHJcbnByaXZhdGUgcmVuZGVyTGluZUNoYXJ0KHN2ZywgbGluZURhdGEsIHgsIGxpbmVZc2NhbGUsIG1ldGFEYXRhLCBzZWxmKSB7XHJcbiAgLy8gRHJhdyBsaW5lIHBhdGhcclxuICBzdmcuYXBwZW5kKCdwYXRoJylcclxuICAgIC5kYXR1bShsaW5lRGF0YSlcclxuICAgIC5hdHRyKCdmaWxsJywgJ25vbmUnKVxyXG4gICAgLmF0dHIoJ3N0cm9rZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yKVxyXG4gICAgLmF0dHIoJ3N0cm9rZS13aWR0aCcsIDEuNSlcclxuICAgIC5hdHRyKCdkJywgZDMubGluZSgpXHJcbiAgICAgIC54KChkKSA9PiB4KGQubmFtZSkgKyB4LmJhbmR3aWR0aCgpIC8gMilcclxuICAgICAgLnkoKGQpID0+IGxpbmVZc2NhbGUoZC52YWx1ZSkpKTtcclxuXHJcbiAgLy8gQWRkIGRvdHNcclxuICBjb25zdCBkb3QgPSBzdmcuc2VsZWN0QWxsKCdteUNpcmNsZXMnKVxyXG4gICAgLmRhdGEobGluZURhdGEpXHJcbiAgICAuZW50ZXIoKVxyXG4gICAgLmFwcGVuZCgnZycpXHJcbiAgICAub24oJ2NsaWNrJywgKGQpID0+IHtcclxuICAgICAgaWYgKCFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2sgfHwgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5sZW5ndGggfHxcclxuICAgICAgICAgICghbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmluY2x1ZGVzKGQ/Lm5hbWUpICYmIFxyXG4gICAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2suaW5jbHVkZXMoZD8ua2V5KSkpIHtcclxuICAgICAgICBzZWxmLmhhbmRsZUNsaWNrKGQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgZG90LmFwcGVuZCgnY2lyY2xlJylcclxuICAgIC5hdHRyKCdmaWxsJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubGluZUdyYXBoQ29sb3IpXHJcbiAgICAuYXR0cignc3Ryb2tlJywgJ25vbmUnKVxyXG4gICAgLmF0dHIoJ2N4JywgKGQpID0+IHgoZC5uYW1lKSArIHguYmFuZHdpZHRoKCkgLyAyKVxyXG4gICAgLmF0dHIoJ2N5JywgKGQpID0+IGxpbmVZc2NhbGUoZC52YWx1ZSkpXHJcbiAgICAuc3R5bGUoJ2N1cnNvcicsICgpID0+IHNlbGYuY2hhcnREYXRhLm1ldGFEYXRhLmhhc0RyaWxsRG93biA/ICdwb2ludGVyJyA6ICdkZWZhdWx0JylcclxuICAgIC5hdHRyKCdyJywgMyk7XHJcblxyXG4gIC8vIEFkZCB2YWx1ZSBsYWJlbHNcclxuICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubGluZUdyYXBoQ29sb3IpIHtcclxuICAgIGRvdC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnZG90JylcclxuICAgICAgLmF0dHIoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAuYXR0cignY29sb3InLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcilcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgJ2ZvbnQtc2l6ZTogLjg1ZW0nKVxyXG4gICAgICAuYXR0cigneCcsIChkKSA9PiB4KGQubmFtZSkgKyB4LmJhbmR3aWR0aCgpIC8gMilcclxuICAgICAgLmF0dHIoJ3knLCAoZCkgPT4gbGluZVlzY2FsZShkLnZhbHVlKSlcclxuICAgICAgLmF0dHIoJ2R5JywgJy0xZW0nKVxyXG4gICAgICAudGV4dCgoZCkgPT4gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubGFiZWxGb3JtYXR0ZXIoZC52YWx1ZSkpO1xyXG4gIH1cclxufVxyXG5cclxucHJpdmF0ZSBoYW5kbGVab29tT3V0KHN2ZywgaGVpZ2h0LCBtYXJnaW4pIHtcclxuICBzdmcuc2VsZWN0QWxsKCcubGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgLmVhY2goKGQsIGksIG5vZGVzKSA9PiB7XHJcbiAgICAgIGNvbnN0IHRleHQgPSBkMy5zZWxlY3Qobm9kZXNbaV0pO1xyXG4gICAgICBjb25zdCBsYWJlbCA9IHRleHQudGV4dCgpO1xyXG4gICAgICBcclxuICAgICAgaWYgKGxhYmVsLmluZGV4T2YoJ1xcbicpID4gLTEpIHtcclxuICAgICAgICBjb25zdCBsaW5lcyA9IGxhYmVsLnNwbGl0KCdcXG4nKTtcclxuICAgICAgICB0ZXh0LnRleHQobnVsbCk7XHJcbiAgICAgICAgbGluZXMuZm9yRWFjaCgobGluZSwgaWR4KSA9PiB7XHJcbiAgICAgICAgICB0ZXh0LmFwcGVuZCgndHNwYW4nKVxyXG4gICAgICAgICAgICAudGV4dChsaW5lKVxyXG4gICAgICAgICAgICAuYXR0cigneCcsIDApXHJcbiAgICAgICAgICAgIC5hdHRyKCdkeScsIGlkeCA9PT0gMCA/ICcwLjVlbScgOiAnMWVtJyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3Qgd29yZHMgPSBsYWJlbC5zcGxpdCgnICcpO1xyXG4gICAgICAgIHRleHQudGV4dChudWxsKTtcclxuICAgICAgICB3b3Jkcy5mb3JFYWNoKCh3b3JkKSA9PiB7XHJcbiAgICAgICAgICB0ZXh0LmFwcGVuZCgndHNwYW4nKS50ZXh0KHdvcmQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBudWxsKTtcclxuXHJcbiAgc3ZnLnNlbGVjdCgnLngtYXhpcycpXHJcbiAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCAke2hlaWdodCAtIG1hcmdpbi5ib3R0b20gKyAxMH0pYCk7XHJcbn1cclxuXHJcbnByaXZhdGUgY2FsY3VsYXRlQ2hhcnREaW1lbnNpb25zKGNoYXJ0Q29udGFpbmVyOiBhbnksIHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lcjogYW55LCBtYXJnaW46IGFueSwgc2VsZjogYW55KSB7XHJcbiAgbGV0IHdpZHRoID0gcGFyc2VJbnQoY2hhcnRDb250YWluZXIuc3R5bGUoJ3dpZHRoJykpIC0gbWFyZ2luLmxlZnQgLSBtYXJnaW4ucmlnaHQ7XHJcbiAgY29uc3QgZGF0YUxlbmd0aCA9IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoO1xyXG4gIGNvbnN0IHN1Ymdyb3Vwc0NvdW50ID0gKHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhLmtleUxpc3QgYXMgYW55IHx8IFtdKS5sZW5ndGg7XHJcbiAgY29uc3QgaXNNb2JpbGUgPSB3aW5kb3cuaW5uZXJXaWR0aCA8IDU3NjtcclxuICBjb25zdCBpc1RhYmxldCA9IHdpbmRvdy5pbm5lcldpZHRoID49IDU3NiAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8IDk5MjtcclxuICBjb25zdCBpczJLID0gd2luZG93LmlubmVyV2lkdGggPj0gMjAwMCAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8IDM4NDA7XHJcbiAgY29uc3QgaXNyaWEgPSB0aGlzLmN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbi5pc1JpYTtcclxuXHJcbiAgLy8gTWluaW11bSB3aWR0aCBwZXIgYmFyIGdyb3VwIGJhc2VkIG9uIGRldmljZSBhbmQgbnVtYmVyIG9mIHN1Ymdyb3Vwc1xyXG4gIGNvbnN0IG1pbldpZHRoUGVyR3JvdXAgPSAoKCkgPT4ge1xyXG4gICAgaWYgKHN1Ymdyb3Vwc0NvdW50ID4gMikge1xyXG4gICAgICByZXR1cm4gaXNNb2JpbGUgPyAxMDAgOiBpc1RhYmxldCA/IDEwMCA6IDEyMDsgLy8gV2lkZXIgZm9yIG11bHRpcGxlIHN1Ymdyb3Vwc1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzTW9iaWxlID8gNDAgOiBpc1RhYmxldCA/IDYwIDogODA7IC8vIE5vcm1hbCB3aWR0aCBmb3IgMS0yIHN1Ymdyb3Vwc1xyXG4gIH0pKCk7XHJcblxyXG4gIC8vIENhbGN1bGF0ZSBtaW5pbXVtIHJlcXVpcmVkIHdpZHRoIGZvciBhbGwgZ3JvdXBzXHJcbiAgY29uc3QgbWluUmVxdWlyZWRXaWR0aCA9IGRhdGFMZW5ndGggKiBtaW5XaWR0aFBlckdyb3VwO1xyXG5cclxuICAvLyBJbiB6b29tZWQtb3V0IHN0YXRlLCBlbnN1cmUgbWluaW11bSB3aWR0aCBmb3IgcmVhZGFiaWxpdHlcclxuICBpZiAodGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgLy8gSWYgd2UgaGF2ZSBtYW55IGdyb3VwcyBvciBtdWx0aXBsZSBzdWJncm91cHMsIGVuc3VyZSBtaW5pbXVtIHdpZHRoXHJcbiAgICBpZiAoZGF0YUxlbmd0aCA+IDggfHwgc3ViZ3JvdXBzQ291bnQgPiAyKSB7XHJcbiAgICAgIHdpZHRoID0gTWF0aC5tYXgod2lkdGgsIG1pblJlcXVpcmVkV2lkdGgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gSW4gem9vbWVkLWluIHN0YXRlLCBhbHdheXMgZW5zdXJlIGdlbmVyb3VzIHNwYWNpbmdcclxuICBpZiAoZGF0YUxlbmd0aCA+IDggJiYgIXRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jaGFydERhdGEuZHJvcGRvd25EYXRhMiAmJlxyXG4gICAgICB3aWR0aCA8IGRhdGFMZW5ndGggKiAyNTBcclxuICAgICkge1xyXG4gICAgICB3aWR0aCA9IGRhdGFMZW5ndGggKiAyNTA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBJbmNyZWFzZSB3aWR0aCBmb3IgbXVsdGlwbGUgc3ViZ3JvdXBzXHJcbiAgICAgIHdpZHRoID0gZGF0YUxlbmd0aCAqIChzdWJncm91cHNDb3VudCA+IDIgPyAyMDAgOiAxNjApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLSBIZWlnaHQgTG9naWMgKG5vIGNoYW5nZSkgLS0tLVxyXG4gIGxldCBoZWlnaHQgPVxyXG4gICAgcGFyc2VJbnQodmVydGljYWxzdGFja2VkY29udGFpbmVyLnN0eWxlKCdoZWlnaHQnKSkgKlxyXG4gICAgICAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0IC8gMTAwKSAtXHJcbiAgICBtYXJnaW4udG9wIC1cclxuICAgIG1hcmdpbi5ib3R0b207XHJcblxyXG4gIGlmIChcclxuICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRnVsbFNjcmVlbiAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0Z1bGxTY3JlZW5cclxuICApIHtcclxuICAgIGhlaWdodCA9XHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodCAhPT0gNzBcclxuICAgICAgICA/IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodFxyXG4gICAgICAgIDogcGFyc2VJbnQodmVydGljYWxzdGFja2VkY29udGFpbmVyLnN0eWxlKCdoZWlnaHQnKSk7XHJcbiAgfVxyXG5cclxuICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCAmJiAhdGhpcy5pc0hlYWRlclZpc2libGUpIHtcclxuICAgICBjb25zdCBib3R0b21EZWR1Y3Rpb24gPSBpc3JpYSA/IDUwIDogMTMwO1xyXG4gICAgaGVpZ2h0ID1cclxuICAgICAgcGFyc2VJbnQodmVydGljYWxzdGFja2VkY29udGFpbmVyLnN0eWxlKCdoZWlnaHQnKSkgLVxyXG4gICAgICBtYXJnaW4udG9wIC1cclxuICAgICAgbWFyZ2luLmJvdHRvbSAtXHJcbiAgICAgIGJvdHRvbURlZHVjdGlvbjtcclxuICB9XHJcblxyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0hlYWRlclZpc2libGUpIHtcclxuICAgY29uc3QgYm90dG9tRGVkdWN0aW9uID0gaXNyaWEgPyA2MCA6IDEwMDtcclxuICAgIGhlaWdodCA9XHJcbiAgICAgIHBhcnNlSW50KHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lci5zdHlsZSgnaGVpZ2h0JykpIC1cclxuICAgICAgbWFyZ2luLnRvcCAtXHJcbiAgICAgIG1hcmdpbi5ib3R0b20gLVxyXG4gICAgICBib3R0b21EZWR1Y3Rpb247XHJcblxyXG4gICAgaWYgKGlzMksgJiYgdGhpcy5pc0hlYWRlclZpc2libGUgJiYgIWlzcmlhKSB7XHJcbiAgICAgIGhlaWdodCAtPSA1NTsgLy8gcmVkdWNlIGEgYml0IG1vcmUgZm9yIDJLXHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiB7IHdpZHRoLCBoZWlnaHQgfTtcclxufVxyXG5wcml2YXRlIGNyZWF0ZUNoYXJ0Q29udGFpbmVycyhcclxuICBjaGFydENvbnRhaW5lcjogYW55LFxyXG4gIG1hcmdpbjogYW55LFxyXG4gIGhlaWdodDogbnVtYmVyLFxyXG4gIHJpZ2h0U3ZnV2lkdGg6IG51bWJlcixcclxuICBzZWxmOiBhbnksXHJcbiAgd2lkdGg6IG51bWJlclxyXG4pIHtcclxuICAvLyBPdXRlciBjb250YWluZXJcclxuICAgY29uc3QgaXNyaWEgPSB0aGlzLmN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbi5pc1JpYTtcclxuICBjb25zdCBvdXRlckNvbnRhaW5lciA9IGNoYXJ0Q29udGFpbmVyXHJcbiAgICAuYXBwZW5kKCdkaXYnKVxyXG4gICAgLmF0dHIoJ2lkJywgc2VsZi51bmlxdWVJZClcclxuICAgIC5hdHRyKCdjbGFzcycsICdvdXRlci1jb250YWluZXInKVxyXG4gICAgLnN0eWxlKCd3aWR0aCcsICcxMDAlJylcclxuICAgIC5zdHlsZSgnaGVpZ2h0JywgaGVpZ2h0KVxyXG4gICAgLnN0eWxlKCdvdmVyZmxvdycsICd2aXNpYmxlJykgLy8gQWxsb3cgb3ZlcmZsb3cgdG8gc2hvdyBzY3JvbGxiYXJzXHJcbiAgICAvLyAuc3R5bGUoJ3BhZGRpbmctbGVmdCcsIGAke21hcmdpbi5sZWZ0fXB4YClcclxuICAgIC5zdHlsZSgncGFkZGluZy1sZWZ0JywgYCR7aXNyaWEgPyBtYXJnaW4ubGVmdCArIDE4IDogbWFyZ2luLmxlZnQgKyAxNX1weGApXHJcbiAgICAuc3R5bGUoJ3BhZGRpbmctcmlnaHQnLCBgJHtyaWdodFN2Z1dpZHRofXB4YClcclxuICAgIC5zdHlsZSgnbWFyZ2luLWxlZnQnLCAnNnB4Jyk7XHJcblxyXG4gIC8vIExlZnQgWS1BeGlzXHJcbiAgY29uc3Qgc3ZnWUF4aXNMZWZ0ID0gb3V0ZXJDb250YWluZXJcclxuICAgIC5hcHBlbmQoJ3N2ZycpXHJcbiAgICAuYXR0cignd2lkdGgnLCAnMTAwJylcclxuICAgIC5hdHRyKCdoZWlnaHQnLCBoZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSArIDEwKVxyXG4gICAgLnN0eWxlKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpXHJcbiAgICAvLyAuc3R5bGUoJ2xlZnQnLCAnMCcpXHJcbiAgICAuc3R5bGUoJ2xlZnQnLCBpc3JpYSA/ICcycHgnIDogJzAnKVxyXG4gICAgLnN0eWxlKCd6LWluZGV4JywgMSlcclxuICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHttYXJnaW4ubGVmdCArIDE1fSwke21hcmdpbi50b3B9KWApO1xyXG5cclxuICAvLyBSaWdodCBZLUF4aXNcclxuICBjb25zdCBzdmdZQXhpc1JpZ2h0ID0gb3V0ZXJDb250YWluZXJcclxuICAgIC5hcHBlbmQoJ3N2ZycpXHJcbiAgICAuYXR0cignd2lkdGgnLCByaWdodFN2Z1dpZHRoKVxyXG4gICAgLmF0dHIoJ2hlaWdodCcsIGhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tICsgMTApXHJcbiAgICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJylcclxuICAgIC5zdHlsZSgncmlnaHQnLCAnMTJweCcpXHJcbiAgICAuc3R5bGUoJ3otaW5kZXgnLCAxKVxyXG4gICAgLmFwcGVuZCgnZycpXHJcbiAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7bWFyZ2luLnRvcH0pYCk7IFxyXG5cclxuICAvLyBJbm5lciBzY3JvbGxhYmxlIGNvbnRhaW5lclxyXG4gIGNvbnN0IGlubmVyQ29udGFpbmVyID0gb3V0ZXJDb250YWluZXJcclxuICAgIC5hcHBlbmQoJ2RpdicpXHJcbiAgICAuYXR0cignY2xhc3MnLCAnaW5uZXItY29udGFpbmVyJylcclxuICAgIC5zdHlsZSgnd2lkdGgnLCAnMTAwJScpXHJcbiAgICAuc3R5bGUoJ292ZXJmbG93LXgnLCAnYXV0bycpXHJcbiAgICAuc3R5bGUoJ2hlaWdodCcsIGlzcmlhID8gJzI0MnB4JyA6IG51bGwpO1xyXG5cclxuICAvLyBNYWluIFNWR1xyXG4gIGNvbnN0IHN2ZyA9IGlubmVyQ29udGFpbmVyXHJcbiAgICAuYXBwZW5kKCdzdmcnKVxyXG4gICAgLmF0dHIoJ3dpZHRoJywgTWF0aC5tYXgod2lkdGggLSByaWdodFN2Z1dpZHRoLCB3aW5kb3cuaW5uZXJXaWR0aCAqIDAuOCkpIC8vIEVuc3VyZSBtaW5pbXVtIHdpZHRoXHJcbiAgICAuYXR0cignaGVpZ2h0JywgaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20gKyA2MClcclxuICAgIC5zdHlsZSgnbWluLXdpZHRoJywgJzEwMCUnKSAvLyBQcmV2ZW50IHN2ZyBmcm9tIHNocmlua2luZ1xyXG4gICAgLmFwcGVuZCgnZycpXHJcbiAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7bWFyZ2luLnRvcH0pYCk7XHJcblxyXG4gIHJldHVybiB7IG91dGVyQ29udGFpbmVyLCBzdmdZQXhpc0xlZnQsIHN2Z1lBeGlzUmlnaHQsIGlubmVyQ29udGFpbmVyLCBzdmcgfTtcclxufVxyXG4gIGhhbmRsZUNsaWNrKGQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhLmhhc0RyaWxsRG93biB8fCBkPy50b2dnbGVGcm9tKVxyXG4gICAgICB0aGlzLmNsaWNrRXZlbnQuZW1pdChkKTtcclxuICB9XHJcbiAgaGFuZGxlSGVhZGVyTWVudUNsaWNrKGlkKSB7XHJcbiAgICB0aGlzLmhlYWRlck1lbnVjbGlja0V2ZW50LmVtaXQoaWQpO1xyXG4gIH1cclxuICBoYW5kbGVERDFDbGljayhldmVudCkge1xyXG4gICAgdGhpcy5pc0REMU9wZW4gPSB0cnVlO1xyXG4gICAgdGhpcy5pc0REMk9wZW4gPSBmYWxzZTtcclxuICB9XHJcbiAgaGFuZGxlREQyQ2xpY2soZXZlbnQpIHtcclxuICAgIHRoaXMuaXNERDJPcGVuID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNERDFPcGVuID0gZmFsc2U7XHJcbiAgfVxyXG4gIGhhbmRsZUNvbXBhcmVCeUZpbHRlclNlbGVjdGlvbihldmVudCkge1xyXG4gICAgdGhpcy5jbGlja0V2ZW50LmVtaXQoZXZlbnQpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2XHJcbiAgI2dyb3VwY29udGFpbmVyXHJcbiAgY2xhc3M9XCJsaWItY2hhcnQtd3JhcHBlclwiXHJcbiAgW25nQ2xhc3NdPVwieyAnbGliLW5vLWJhY2tncm91bmQnOiBpc1RyYW5zcGFyZW50QmFja2dyb3VuZCB9XCJcclxuICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHZhcigtLWNhcmQtYmcpO1wiXHJcbiAgKHJlc2l6ZWQpPVwib25SZXNpemVkKCRldmVudClcIlxyXG4+XHJcbiAgPGRpdiBjbGFzcz1cImhlYWRlci1hbHRcIiAqbmdJZj1cIiFpc0hlYWRlclZpc2libGVcIj5cclxuICAgIDxsaWItY2hhcnQtaGVhZGVyLXYyXHJcbiAgICAgIFtjaGFydERhdGFdPVwiY2hhcnREYXRhXCJcclxuICAgICAgW2NoYXJ0Q29uZmlndXJhdGlvbl09XCJjaGFydENvbmZpZ3VyYXRpb25cIlxyXG4gICAgICAoY2xpY2tFdmVudCk9XCJoYW5kbGVDbGljaygkZXZlbnQpXCJcclxuICAgICAgIChjb21wYXJlQnlGaWx0ZXJTZWxlY3Rpb24pPVwiaGFuZGxlQ29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKCRldmVudClcIlxyXG4gICAgICAoem9vbUluWm9vbU91dENsaWNrKT1cImhhbmRsZVpvb21pblpvb21vdXRDbGljaygkZXZlbnQpXCJcclxuICAgID48L2xpYi1jaGFydC1oZWFkZXItdjI+XHJcbiAgICA8IS0tIDxsaWItY2hhcnQtaGVhZGVyLXYzXHJcbiAgICAgIFtjaGFydERhdGFdPVwiY2hhcnREYXRhXCJcclxuICAgICAgW2NoYXJ0Q29uZmlndXJhdGlvbl09XCJjaGFydENvbmZpZ3VyYXRpb25cIlxyXG4gICAgICAoY29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKT1cImhhbmRsZUNvbXBhcmVCeUZpbHRlclNlbGVjdGlvbigkZXZlbnQpXCJcclxuICAgICAgKHpvb21Jblpvb21PdXRDbGljayk9XCJoYW5kbGVab29taW5ab29tb3V0Q2xpY2soJGV2ZW50KVwiXHJcbiAgICA+PC9saWItY2hhcnQtaGVhZGVyLXYzPiAtLT5cclxuICA8L2Rpdj5cclxuICA8bGliLWNoYXJ0LWhlYWRlci12MVxyXG4gICAgW3RpdGxlXT1cImNoYXJ0RGF0YS5tZXRhRGF0YS50aXRsZVwiXHJcbiAgICBbaGFzRHJpbGxEb3duXT1cImNoYXJ0RGF0YS5tZXRhRGF0YS5oYXNEcmlsbERvd25cIlxyXG4gICAgW2lzRWRpdEVuYWJsZWRdPVwiY2hhcnREYXRhLm1ldGFEYXRhLmlzRWRpdEVuYWJsZWRcIlxyXG4gICAgW21lbnVPcHRpb25zXT1cImNoYXJ0Q29uZmlndXJhdGlvbi5oZWFkZXJNZW51T3B0aW9uc1wiXHJcbiAgICBbaXNyaWFdPVwiY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uLmlzUmlhXCJcclxuICAgIFtzZWxlY3RlZEtwaVRvb2x0b3BdPVwiY2hhcnRDb25maWd1cmF0aW9uLnNlbGVjdGVkS3BpVG9vbHRvcFwiXHJcbiAgICAobWVudU9wdGlvbkNsaWNrRXZlbnQpPVwiaGFuZGxlSGVhZGVyTWVudUNsaWNrKCRldmVudClcIlxyXG4gICAgW2lzQWxlcnRFbmFibGVkXT1cImlzQWxlcnRFbmFibGVkXCJcclxuICAgICpuZ0lmPVwiaXNIZWFkZXJWaXNpYmxlXCJcclxuICA+PC9saWItY2hhcnQtaGVhZGVyLXYxPlxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwiXHJcbiAgICAgIGNoYXJ0RGF0YSAmJlxyXG4gICAgICBjaGFydERhdGEubWV0YURhdGEgJiZcclxuICAgICAgY2hhcnRDb25maWd1cmF0aW9uLmxlZ2VuZEp1c3RpZmllZCAmJlxyXG4gICAgICBsZWdlbmRWaXNpYmxlICYmXHJcbiAgICAgIGNoYXJ0Q29uZmlndXJhdGlvbi5sZWdlbmRBdFRvcFJpZ2h0XHJcbiAgICBcIlxyXG4gICAgY2xhc3M9XCJsZWdlbmQtaG9sZGVyLXJpZ2h0XCJcclxuICAgIFtzdHlsZS5oZWlnaHRdPVwiY2hhcnRDb25maWd1cmF0aW9uLmZvb3RlckhlaWdodFwiXHJcbiAgPlxyXG4gICAgPHVsIGNsYXNzPVwiZGlzcGxheS1mbGV4XCI+XHJcbiAgICAgIDxsaVxyXG4gICAgICAgIGNsYXNzPVwibGVnZW5kcy1wb3NpdGlvbmluZy1pbmxpbmVcIlxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvcnMgfCBrZXl2YWx1ZSA6IGtlZXBPcmRlclwiXHJcbiAgICAgID5cclxuICAgICAgICA8c3BhblxyXG4gICAgICAgICAgY2xhc3M9XCJsaWItZG9udXQtanVzdGlmaWVkLWxhYmVsLWljb24tZHJpbGxkb3duXCJcclxuICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIml0ZW0udmFsdWVcIlxyXG4gICAgICAgID48L3NwYW5cclxuICAgICAgICA+PHNwYW4+e3sgaXRlbS5rZXkgfX08L3NwYW4+XHJcbiAgICAgIDwvbGk+XHJcbiAgICA8L3VsPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXZcclxuICAgIFtzdHlsZS5oZWlnaHRdPVwiY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodFwiXHJcbiAgICBpZD1cImdyb3VwY2hhcnRjb250YWluZXJcIlxyXG4gICAgI2dyb3VwY2hhcnRjb250YWluZXJcclxuICAgIGNsYXNzPVwibGliLWNoYXJ0LXN2Z1wiXHJcbiAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICdtdC0zJzogIWNoYXJ0Q29uZmlndXJhdGlvbi5pc0hlYWRlclZpc2libGVcclxuICB9XCJcclxuICA+PC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJoZWFkZXItYWx0XCIgKm5nSWY9XCIhaXNIZWFkZXJWaXNpYmxlXCI+XHJcbiAgPGxpYi1jaGFydC1oZWFkZXItdjNcclxuICAgICAgW2NoYXJ0RGF0YV09XCJjaGFydERhdGFcIlxyXG4gICAgICBbY2hhcnRDb25maWd1cmF0aW9uXT1cImNoYXJ0Q29uZmlndXJhdGlvblwiXHJcbiAgICAgIChjb21wYXJlQnlGaWx0ZXJTZWxlY3Rpb24pPVwiaGFuZGxlQ29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKCRldmVudClcIlxyXG4gICAgICAoem9vbUluWm9vbU91dENsaWNrKT1cImhhbmRsZVpvb21pblpvb21vdXRDbGljaygkZXZlbnQpXCJcclxuICAgID48L2xpYi1jaGFydC1oZWFkZXItdjM+XHJcbiAgICA8L2Rpdj5cclxuICA8IS0tIDxkaXZcclxuICAgICpuZ0lmPVwiXHJcbiAgICAgIGNoYXJ0RGF0YSAmJlxyXG4gICAgICBjaGFydERhdGEubWV0YURhdGEgJiZcclxuICAgICAgY2hhcnRDb25maWd1cmF0aW9uLmxlZ2VuZEp1c3RpZmllZCAmJlxyXG4gICAgICBsZWdlbmRWaXNpYmxlICYmXHJcbiAgICAgICFjaGFydENvbmZpZ3VyYXRpb24ubGVnZW5kQXRUb3BSaWdodFxyXG4gICAgXCJcclxuICAgIGNsYXNzPVwibGliLWRvbnV0LWNoYXJ0LWZvb3RlclwiXHJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cImNoYXJ0Q29uZmlndXJhdGlvbi5mb290ZXJIZWlnaHRcIlxyXG4gID5cclxuICAgIDx1bCBjbGFzcz1cImxpYi1kb251dC1qdXN0aWZpZWQtbGFiZWwtd3JhcHBlclwiPlxyXG4gICAgICA8bGlcclxuICAgICAgICBjbGFzcz1cImxpYi1kb251dC1qdXN0aWZpZWQtbGFiZWwtaXRlbVwiXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9ycyB8IGtleXZhbHVlXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxzcGFuXHJcbiAgICAgICAgICBjbGFzcz1cImxpYi1kb251dC1qdXN0aWZpZWQtbGFiZWwtaWNvblwiXHJcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJpdGVtLnZhbHVlXCJcclxuICAgICAgICA+PC9zcGFuXHJcbiAgICAgICAgPjxzcGFuPnt7IGl0ZW0ua2V5IH19PC9zcGFuPlxyXG4gICAgICA8L2xpPlxyXG4gICAgPC91bD5cclxuICA8L2Rpdj4gLS0+XHJcblxyXG5cclxuICA8IS0tIDxkaXYgKm5nSWY9XCJjaGFydENvbmZpZ3VyYXRpb24/LmlzRGlzcGxheUJhckRldGFpbHNBdEJvdHRvbVwiPlxyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzcz1cImJhci12YWx1ZXMgbGliLWRpc3BsYXktZmxleCBsaWItanVzdGlmeS1jb250ZW50LWNlbnRlciBsaWItYWxpZ24taXRlbXMtY2VudGVyXCJcclxuICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgbGV0IGl0ZW0gb2YgY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9ycyB8IGtleXZhbHVlIDoga2VlcE9yZGVyO1xyXG4gICAgICAgIGxldCBpID0gaW5kZXhcclxuICAgICAgXCI+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImJhci1uYW1lIGZvbnQtc2l6ZS0xXCJcclxuICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgY2hhcnREYXRhLmRhdGFbMF1baXRlbS5rZXldICYmXHJcbiAgICAgICAgICBpIDw9IGNoYXJ0Q29uZmlndXJhdGlvbi5ob3dtYW55QmFyRGV0YWlsc1RvRGlzcGxheVxyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyBpdGVtLmtleSB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiYmFyLXZhbHVlIGxpYi1kaXNwbGF5LWZsZXggbGliLWFsaWduLWl0ZW1zLWNlbnRlciBmb250LXNpemUtMVwiXHJcbiAgICAgICAgW3N0eWxlLmNvbG9yXT1cIlxyXG4gICAgICAgICAgY2hhcnRDb25maWd1cmF0aW9uLmJhclZhdWxlQ29sb3IgPyBiYXJWYXVsZUNvbG9yIDogaXRlbS52YWx1ZVxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgIGNoYXJ0RGF0YS5kYXRhWzBdW2l0ZW0ua2V5XSAmJlxyXG4gICAgICAgICAgaSA8PSBjaGFydENvbmZpZ3VyYXRpb24uaG93bWFueUJhckRldGFpbHNUb0Rpc3BsYXlcclxuICAgICAgICBcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgY2hhcnREYXRhLmRhdGFbMF1baXRlbS5rZXldIH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+IC0tPlxyXG48L2Rpdj5cclxuIl19