ng-easycommerce 0.0.629 → 0.0.631

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.
@@ -45,18 +45,63 @@ let FiltersEcComponent = class FiltersEcComponent extends ComponentHelper {
45
45
  this.ecOnInit();
46
46
  }
47
47
  // Método para actualizar los valores de precio seleccionados
48
- updatePriceRange(min, max, priceFilter) {
49
- priceFilter.setSelected(min, max);
50
- this.setSelected(priceFilter);
48
+ updatePriceRange(filter) {
49
+ if (!(filter instanceof PriceRangeFilter))
50
+ return;
51
+ const min = filter.currentMinPrice;
52
+ const max = filter.currentMaxPrice;
53
+ filter.setSelected(min, max);
54
+ this.setSelected(filter);
55
+ }
56
+ getSliderStyle(filter) {
57
+ if (!(filter instanceof PriceRangeFilter))
58
+ return { left: '0%', right: '0%' };
59
+ const left = this.calculateLeftPercentage(filter);
60
+ const right = this.calculateRightPercentage(filter);
61
+ return { left: `${left}%`, right: `${right}%` };
51
62
  }
52
63
  // Métodos para actualizar la barra del filtro por precio
53
- calculateLeftPercentage(currentMinPrice, minPrice, maxPrice) {
54
- const minVal = Math.max(minPrice, Math.min((currentMinPrice !== null && currentMinPrice !== void 0 ? currentMinPrice : minPrice), maxPrice));
55
- return Math.max(0, Math.min(((minVal - minPrice) / (maxPrice - minPrice)) * 100, 100));
64
+ calculateLeftPercentage(filter) {
65
+ var _a;
66
+ if (!(filter instanceof PriceRangeFilter))
67
+ return 0;
68
+ const min = filter.minPrice;
69
+ const max = filter.maxPrice;
70
+ const currentMin = (_a = filter.currentMinPrice, (_a !== null && _a !== void 0 ? _a : min));
71
+ const clampedMin = Math.max(min, Math.min(currentMin, max));
72
+ return Math.max(0, Math.min(((clampedMin - min) / (max - min)) * 100, 100));
73
+ }
74
+ calculateRightPercentage(filter) {
75
+ var _a;
76
+ if (!(filter instanceof PriceRangeFilter))
77
+ return 0;
78
+ const min = filter.minPrice;
79
+ const max = filter.maxPrice;
80
+ const currentMax = (_a = filter.currentMaxPrice, (_a !== null && _a !== void 0 ? _a : max));
81
+ const clampedMax = Math.max(min, Math.min(currentMax, max));
82
+ return Math.max(0, Math.min(100 - ((clampedMax - min) / (max - min)) * 100, 100));
83
+ }
84
+ getMinValue(filter) {
85
+ return (filter instanceof PriceRangeFilter && filter.currentMinPrice != null)
86
+ ? filter.currentMinPrice
87
+ : filter.minPrice;
88
+ }
89
+ getMaxValue(filter) {
90
+ return (filter instanceof PriceRangeFilter && filter.currentMaxPrice != null)
91
+ ? filter.currentMaxPrice
92
+ : filter.maxPrice;
93
+ }
94
+ getFormattedMinPrice(filter) {
95
+ const value = (filter instanceof PriceRangeFilter && filter.currentMinPrice != null)
96
+ ? filter.currentMinPrice
97
+ : filter.minPrice;
98
+ return value;
56
99
  }
57
- calculateRightPercentage(currentMaxPrice, minPrice, maxPrice) {
58
- const maxVal = Math.max(minPrice, Math.min((currentMaxPrice !== null && currentMaxPrice !== void 0 ? currentMaxPrice : maxPrice), maxPrice));
59
- return Math.max(0, Math.min(100 - ((maxVal - minPrice) / (maxPrice - minPrice)) * 100, 100));
100
+ getFormattedMaxPrice(filter) {
101
+ const value = (filter instanceof PriceRangeFilter && filter.currentMaxPrice != null)
102
+ ? filter.currentMaxPrice
103
+ : filter.maxPrice;
104
+ return value;
60
105
  }
61
106
  uniqueSelection(filter, filterChild) {
62
107
  // Buscar si hay un filtro de tipo PriceRangeFilter en la lista de filtros
@@ -168,4 +213,4 @@ FiltersEcComponent = __decorate([
168
213
  __param(1, Inject(DOCUMENT))
169
214
  ], FiltersEcComponent);
170
215
  export { FiltersEcComponent };
171
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVycy1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvZWMtY29tcG9uZW50L2ZpbHRlcnMtZWMvZmlsdGVycy1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDM0YsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRTFFLGVBQWU7QUFNZixJQUFhLGtCQUFrQixHQUEvQixNQUFhLGtCQUFtQixTQUFRLGVBQWU7SUFPbkQsWUFBc0IsTUFBaUIsRUFBMkIsUUFBa0IsRUFBVSxjQUE4QjtRQUN4SCxLQUFLLEVBQUUsQ0FBQztRQURVLFdBQU0sR0FBTixNQUFNLENBQVc7UUFBMkIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUhySCxXQUFNLEdBQVksSUFBSSxDQUFDO1FBb0M5QixtQkFBbUI7UUFDbkIsd0VBQXdFO1FBQ3hFLHFCQUFxQjtRQUNyQixNQUFNO1FBR04sVUFBSyxHQUFHLENBQUMsWUFBWSxFQUFFLEVBQUU7WUFDckIsdUJBQXVCO1lBQ3ZCLG1GQUFtRjtZQUNuRiw4RUFBOEU7WUFDOUUsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQyxDQUFDO1FBcUJGLGFBQVEsR0FBRyxHQUFHLEVBQUU7WUFDWixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMs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QU0sQ0FBQyxJQUFJLDBDQUFFLElBQUksQ0FBQyxDQUFDLGFBQWtCLEVBQUUsRUFBRTtnQkFDNUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDdkMsT0FBTyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUN0RTtnQkFDRCxPQUFPLGFBQWEsQ0FBQyxRQUFRLENBQUM7WUFDbEMsQ0FBQyxFQUFFO1FBQ1AsQ0FBQyx3Q0FBSyxLQUFLLEVBQUM7SUFDaEIsQ0FBQztDQUVKLENBQUE7O1lBOUlpQyxTQUFTO1lBQXFDLFFBQVEsdUJBQTFDLE1BQU0sU0FBQyxRQUFRO1lBQXFELGNBQWM7O0FBTG5IO0lBQVIsS0FBSyxFQUFFO3VEQUFhO0FBQ1o7SUFBUixLQUFLLEVBQUU7bURBQVM7QUFIUixrQkFBa0I7SUFMOUIsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLGdCQUFnQjtRQUMxQixZQUEwQzs7S0FFN0MsQ0FBQztJQVE0QyxXQUFBLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtHQVBqRCxrQkFBa0IsQ0FxSjlCO1NBckpZLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBJbmplY3QsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvcmUuY29uc3RzJztcbmltcG9ydCB7IENvbXBvbmVudEhlbHBlciB9IGZyb20gJy4uLy4uL2NsYXNzZXMvY29tcG9uZW50LWhlbHBlcic7XG5pbXBvcnQgeyBGaWx0ZXJzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpbHRlcnMuc2VydmljZSc7XG5pbXBvcnQgeyBQcmljZVJhbmdlRmlsdGVyIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9maWx0ZXJzL1ByaWNlUmFuZ2VGaWx0ZXInO1xuXG4vKiogQGR5bmFtaWMgKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLWZpbHRlcnMtZWMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXJzLWVjLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9maWx0ZXJzLWVjLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyc0VjQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50SGVscGVyIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuXG4gICAgQElucHV0KCkgc2V0U2VsZWN0ZWQ7XG4gICAgQElucHV0KCkgZmlsdGVycztcbiAgICBwdWJsaWMgZXhwYW5kOiBib29sZWFuID0gdHJ1ZTtcblxuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGNvbnN0czogQ29uc3RhbnRzLCBASW5qZWN0KERPQ1VNRU5UKSBwdWJsaWMgZG9jdW1lbnQ6IERvY3VtZW50LCBwcml2YXRlIGZpbHRlcnNTZXJ2aWNlOiBGaWx0ZXJzU2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmVjT25Db25zdHJ1Y3QoKVxuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIC8vY29uc29sZS5sb2coY2hhbmdlc1snZmlsdGVycyddKVxuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmV4cGFuZCA9ICF0aGlzLmNvbnN0cy5tb2JpbGUoKVxuICAgICAgICB0aGlzLmVjT25Jbml0KClcblxuICAgIH1cblxuICAgIC8vIE3DqXRvZG8gcGFyYSBhY3R1YWxpemFyIGxvcyB2YWxvcmVzIGRlIHByZWNpbyBzZWxlY2Npb25hZG9zXG4gICAgdXBkYXRlUHJpY2VSYW5nZShtaW46IG51bWJlciwgbWF4OiBudW1iZXIsIHByaWNlRmlsdGVyOiBQcmljZVJhbmdlRmlsdGVyKSB7XG4gICAgICAgIHByaWNlRmlsdGVyLnNldFNlbGVjdGVkKG1pbiwgbWF4KTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZChwcmljZUZpbHRlcik7XG4gICAgfVxuXG4gICAgLy8gTcOpdG9kb3MgcGFyYSBhY3R1YWxpemFyIGxhIGJhcnJhIGRlbCBmaWx0cm8gcG9yIHByZWNpb1xuICAgIGNhbGN1bGF0ZUxlZnRQZXJjZW50YWdlKGN1cnJlbnRNaW5QcmljZTogbnVtYmVyLCBtaW5QcmljZTogbnVtYmVyLCBtYXhQcmljZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgbWluVmFsID0gTWF0aC5tYXgobWluUHJpY2UsIE1hdGgubWluKGN1cnJlbnRNaW5QcmljZSA/PyBtaW5QcmljZSwgbWF4UHJpY2UpKTtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKCgobWluVmFsIC0gbWluUHJpY2UpIC8gKG1heFByaWNlIC0gbWluUHJpY2UpKSAqIDEwMCwgMTAwKSk7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlUmlnaHRQZXJjZW50YWdlKGN1cnJlbnRNYXhQcmljZTogbnVtYmVyLCBtaW5QcmljZTogbnVtYmVyLCBtYXhQcmljZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgbWF4VmFsID0gTWF0aC5tYXgobWluUHJpY2UsIE1hdGgubWluKGN1cnJlbnRNYXhQcmljZSA/PyBtYXhQcmljZSwgbWF4UHJpY2UpKTtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCAtICgobWF4VmFsIC0gbWluUHJpY2UpIC8gKG1heFByaWNlIC0gbWluUHJpY2UpKSAqIDEwMCwgMTAwKSk7XG4gICAgfVxuXG5cblxuICAgIC8vICBjbG9zZSA9ICgpID0+IHtcbiAgICAvLyAgICAgICB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZmlsdHJvc1wiKS5jbGFzc0xpc3QucmVtb3ZlKCdpbicpO1xuICAgIC8vICAgICAgIHJldHVybiB0cnVlO1xuICAgIC8vICB9O1xuXG5cbiAgICBjbG9zZSA9IChhY2NvcmRpb25faWQpID0+IHtcbiAgICAgICAgLy8gdGhpcy5jb25zdHMubW9iaWxlKClcbiAgICAgICAgLy8gICAgICA/IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhY2NvcmRpb25FeGFtcGxlXCIpLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKVxuICAgICAgICAvLyAgICAgIDogdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChhY2NvcmRpb25faWQpLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIHVuaXF1ZVNlbGVjdGlvbihmaWx0ZXIsIGZpbHRlckNoaWxkKSB7XG4gICAgICAgIC8vIEJ1c2NhciBzaSBoYXkgdW4gZmlsdHJvIGRlIHRpcG8gUHJpY2VSYW5nZUZpbHRlciBlbiBsYSBsaXN0YSBkZSBmaWx0cm9zXG4gICAgICAgIGNvbnN0IHByaWNlUmFuZ2VGaWx0ZXIgPSB0aGlzLmZpbHRlcnMuZmluZChmID0+IGYgaW5zdGFuY2VvZiBQcmljZVJhbmdlRmlsdGVyKTtcblxuICAgICAgICBpZiAocHJpY2VSYW5nZUZpbHRlcikge1xuICAgICAgICAgICAgcHJpY2VSYW5nZUZpbHRlci5yZXNldCgpO1xuICAgICAgICB9XG4gICAgICAgIGZpbHRlci5kYXRhLmZvckVhY2goZmlsdGVyRWxlbWVudCA9PiB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyRWxlbWVudC5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIGZpbHRlckVsZW1lbnQuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbHRlckVsZW1lbnQuY2hpbGRyZW4uZm9yRWFjaChmaWx0ZXJDaGlsZHJlbiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlckNoaWxkcmVuICE9IGZpbHRlckNoaWxkICYmIGZpbHRlckNoaWxkcmVuLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckNoaWxkcmVuLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNjcm9sbFVwID0gKCkgPT4ge1xuICAgICAgICB3aW5kb3cuc2Nyb2xsKDAsIDApO1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlZG9uZGVhIGFsIG3Dumx0aXBsbyBkZSAnc3RlcCcgcmVzcGV0YW5kbyBlbCByZWRvbmRlbyBlbnRlcm86XG4gICAgICogLSBNw61uaW1vOiByZWRvbmRlYSBoYWNpYSBhYmFqby5cbiAgICAgKiAtIE3DoXhpbW86IHJlZG9uZGVhIGhhY2lhIGFycmliYS5cbiAgICAgKi9cbiAgICByb3VuZFRvTmVhcmVzdCh2YWx1ZTogbnVtYmVyLCBzdGVwOiBudW1iZXIsIHR5cGU6ICdtaW4nIHwgJ21heCcsIGZpbHRlcjogYW55KTogbnVtYmVyIHtcbiAgICAgICAgbGV0IHJvdW5kZWQgPSBNYXRoLnJvdW5kKHZhbHVlIC8gc3RlcCkgKiBzdGVwO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ21heCcgJiYgcm91bmRlZCA8IGZpbHRlci5tYXhQcmljZSkge1xuICAgICAgICAgICAgcm91bmRlZCA9IE1hdGguY2VpbCh2YWx1ZSAvIHN0ZXApICogc3RlcDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZSA9PT0gJ21pbicgJiYgcm91bmRlZCA+IGZpbHRlci5taW5QcmljZSkge1xuICAgICAgICAgICAgcm91bmRlZCA9IE1hdGguZmxvb3IodmFsdWUgLyBzdGVwKSAqIHN0ZXA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJvdW5kZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWN0dWFsaXphIGxvcyB2YWxvcmVzIGRlbCBmaWx0cm8gcGVybWl0aWVuZG8gcXVlIHVuIGlucHV0IGVtcHVqZSBhbCBvdHJvLlxuICAgICAqL1xuICAgIHVwZGF0ZUZpbHRlclByaWNlcyh0eXBlOiAnbWluJyB8ICdtYXgnLCB2YWx1ZTogbnVtYmVyLCBmaWx0ZXI6IGFueSwgcHJpY2VHYXA6IG51bWJlcikge1xuICAgICAgICBjb25zdCBnbG9iYWxNaW4gPSBmaWx0ZXIubWluUHJpY2UgPz8gMDtcbiAgICAgICAgY29uc3QgZ2xvYmFsTWF4ID0gZmlsdGVyLm1heFByaWNlO1xuXG4gICAgICAgIGxldCBjdXJyZW50TWluID0gZmlsdGVyLmN1cnJlbnRNaW5QcmljZSA/PyBnbG9iYWxNaW47XG4gICAgICAgIGxldCBjdXJyZW50TWF4ID0gZmlsdGVyLmN1cnJlbnRNYXhQcmljZSA/PyBnbG9iYWxNYXg7XG5cbiAgICAgICAgaWYgKHR5cGUgPT09ICdtaW4nKSB7XG4gICAgICAgICAgICBsZXQgbmV3TWluID0gTWF0aC5taW4oTWF0aC5tYXgodmFsdWUsIGdsb2JhbE1pbiksIGdsb2JhbE1heCk7XG4gICAgICAgICAgICBpZiAobmV3TWluICsgcHJpY2VHYXAgPiBjdXJyZW50TWF4KSB7XG4gICAgICAgICAgICAgICAgbGV0IG5ld01heENhbmRpZGF0ZSA9IG5ld01pbiArIHByaWNlR2FwO1xuICAgICAgICAgICAgICAgIGlmIChuZXdNYXhDYW5kaWRhdGUgPD0gZ2xvYmFsTWF4KSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRNYXggPSBuZXdNYXhDYW5kaWRhdGU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3TWluID0gZ2xvYmFsTWF4IC0gcHJpY2VHYXA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsdGVyLmN1cnJlbnRNaW5QcmljZSA9IG5ld01pbjtcbiAgICAgICAgICAgIGZpbHRlci5jdXJyZW50TWF4UHJpY2UgPSBjdXJyZW50TWF4O1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdtYXgnKSB7XG4gICAgICAgICAgICBsZXQgbmV3TWF4ID0gTWF0aC5tYXgoTWF0aC5taW4odmFsdWUsIGdsb2JhbE1heCksIGdsb2JhbE1pbik7XG4gICAgICAgICAgICBpZiAobmV3TWF4IC0gcHJpY2VHYXAgPCBjdXJyZW50TWluKSB7XG4gICAgICAgICAgICAgICAgbGV0IG5ld01pbkNhbmRpZGF0ZSA9IG5ld01heCAtIHByaWNlR2FwO1xuICAgICAgICAgICAgICAgIGlmIChuZXdNaW5DYW5kaWRhdGUgPj0gZ2xvYmFsTWluKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRNaW4gPSBuZXdNaW5DYW5kaWRhdGU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3TWF4ID0gZ2xvYmFsTWluICsgcHJpY2VHYXA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsdGVyLmN1cnJlbnRNYXhQcmljZSA9IG5ld01heDtcbiAgICAgICAgICAgIGZpbHRlci5jdXJyZW50TWluUHJpY2UgPSBjdXJyZW50TWluO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFzQXBwbGllZEZpbHRlcnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlcnM/LnNvbWUoKGZpbHRlcjogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyLnR5cGU/LigpID09PSAncHJpY2VfcmFuZ2UnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWluU2V0ID0gZmlsdGVyLmN1cnJlbnRNaW5QcmljZSAhPT0gbnVsbCAmJiBmaWx0ZXIuY3VycmVudE1pblByaWNlICE9PSAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1heFNldCA9IGZpbHRlci5jdXJyZW50TWF4UHJpY2UgIT09IG51bGwgJiYgZmlsdGVyLmN1cnJlbnRNYXhQcmljZSAhPT0gZmlsdGVyLm1heFByaWNlO1xuICAgICAgICAgICAgICAgIGlmIChtaW5TZXQgfHwgbWF4U2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlci5kYXRhPy5zb21lKChmaWx0ZXJFbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXJFbGVtZW50LmNoaWxkcmVuKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyRWxlbWVudC5jaGlsZHJlbi5zb21lKChjaGlsZDogYW55KSA9PiBjaGlsZC5zZWxlY3RlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmaWx0ZXJFbGVtZW50LnNlbGVjdGVkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pID8/IGZhbHNlO1xuICAgIH1cblxufVxuIl19
216
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVycy1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvZWMtY29tcG9uZW50L2ZpbHRlcnMtZWMvZmlsdGVycy1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDM0YsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRTFFLGVBQWU7QUFNZixJQUFhLGtCQUFrQixHQUEvQixNQUFhLGtCQUFtQixTQUFRLGVBQWU7SUFPbkQsWUFBc0IsTUFBaUIsRUFBMkIsUUFBa0IsRUFBVSxjQUE4QjtRQUN4SCxLQUFLLEVBQUUsQ0FBQztRQURVLFdBQU0sR0FBTixNQUFNLENBQVc7UUFBMkIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUhySCxXQUFNLEdBQVksSUFBSSxDQUFDO1FBcUY5QixtQkFBbUI7UUFDbkIsd0VBQXdFO1FBQ3hFLHFCQUFxQjtRQUNyQixNQUFNO1FBR04sVUFBSyxHQUFHLENBQUMsWUFBWSxFQUFFLEVBQUU7WUFDckIsdUJBQXVCO1lBQ3ZCLG1GQUFtRjtZQUNuRiw4RUFBOEU7WUFDOUUsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQyxDQUFDO1FBcUJGLGFBQVEsR0FBRyxHQUFHLEVBQUU7WUFDWixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNwQixPQUFPLElBQUksQ0FBQTtRQUNmLENBQUMsQ0FBQTtRQW5IRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7SUFDeEIsQ0FBQztJQUNELFdBQVcsQ0FBQyxPQUFzQjtRQUM5QixpQ0FBaUM7SUFDckMsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQTtRQUNuQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUE7SUFFbkIsQ0FBQztJQUVELDZEQUE2RDtJQUM3RCxnQkFBZ0IsQ0FBQyxNQUFXO1FBQ3hCLElBQUksQ0FBQyxDQUFDLE1BQU0sWUFBWSxnQkFBZ0IsQ0FBQztZQUFFLE9BQU87UUFFbEQsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQztRQUNuQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDO1FBQ25DLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUFXO1FBQ3RCLElBQUksQ0FBQyxDQUFDLE1BQU0sWUFBWSxnQkFBZ0IsQ0FBQztZQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUU5RSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BELE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ3BELENBQUM7SUFFRCx5REFBeUQ7SUFDekQsdUJBQXVCLENBQUMsTUFBVzs7UUFDL0IsSUFBSSxDQUFDLENBQUMsTUFBTSxZQUFZLGdCQUFnQixDQUFDO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFFcEQsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUM1QixNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQzVCLE1BQU0sVUFBVSxTQUFHLE1BQU0sQ0FBQyxlQUFlLHVDQUFJLEdBQUcsRUFBQSxDQUFDO1FBRWpELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDNUQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQsd0JBQXdCLENBQUMsTUFBVzs7UUFDaEMsSUFBSSxDQUFDLENBQUMsTUFBTSxZQUFZLGdCQUFnQixDQUFDO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFFcEQsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUM1QixNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQzVCLE1BQU0sVUFBVSxTQUFHLE1BQU0sQ0FBQyxlQUFlLHVDQUFJLEdBQUcsRUFBQSxDQUFDO1FBRWpELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDNUQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FB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QkFBMUMsTUFBTSxTQUFDLFFBQVE7WUFBcUQsY0FBYzs7QUFMbkg7SUFBUixLQUFLLEVBQUU7dURBQWE7QUFDWjtJQUFSLEtBQUssRUFBRTttREFBUztBQUhSLGtCQUFrQjtJQUw5QixTQUFTLENBQUM7UUFDUCxRQUFRLEVBQUUsZ0JBQWdCO1FBQzFCLFlBQTBDOztLQUU3QyxDQUFDO0lBUTRDLFdBQUEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0dBUGpELGtCQUFrQixDQXNNOUI7U0F0TVksa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIEluamVjdCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29yZS5jb25zdHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50SGVscGVyIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9jb21wb25lbnQtaGVscGVyJztcbmltcG9ydCB7IEZpbHRlcnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmlsdGVycy5zZXJ2aWNlJztcbmltcG9ydCB7IFByaWNlUmFuZ2VGaWx0ZXIgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2ZpbHRlcnMvUHJpY2VSYW5nZUZpbHRlcic7XG5cbi8qKiBAZHluYW1pYyAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtZmlsdGVycy1lYycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZpbHRlcnMtZWMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2ZpbHRlcnMtZWMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBGaWx0ZXJzRWNDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRIZWxwZXIgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG5cbiAgICBASW5wdXQoKSBzZXRTZWxlY3RlZDtcbiAgICBASW5wdXQoKSBmaWx0ZXJzO1xuICAgIHB1YmxpYyBleHBhbmQ6IGJvb2xlYW4gPSB0cnVlO1xuXG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgY29uc3RzOiBDb25zdGFudHMsIEBJbmplY3QoRE9DVU1FTlQpIHB1YmxpYyBkb2N1bWVudDogRG9jdW1lbnQsIHByaXZhdGUgZmlsdGVyc1NlcnZpY2U6IEZpbHRlcnNTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuZWNPbkNvbnN0cnVjdCgpXG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhjaGFuZ2VzWydmaWx0ZXJzJ10pXG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuZXhwYW5kID0gIXRoaXMuY29uc3RzLm1vYmlsZSgpXG4gICAgICAgIHRoaXMuZWNPbkluaXQoKVxuXG4gICAgfVxuXG4gICAgLy8gTcOpdG9kbyBwYXJhIGFjdHVhbGl6YXIgbG9zIHZhbG9yZXMgZGUgcHJlY2lvIHNlbGVjY2lvbmFkb3NcbiAgICB1cGRhdGVQcmljZVJhbmdlKGZpbHRlcjogYW55KSB7XG4gICAgICAgIGlmICghKGZpbHRlciBpbnN0YW5jZW9mIFByaWNlUmFuZ2VGaWx0ZXIpKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgbWluID0gZmlsdGVyLmN1cnJlbnRNaW5QcmljZTtcbiAgICAgICAgY29uc3QgbWF4ID0gZmlsdGVyLmN1cnJlbnRNYXhQcmljZTtcbiAgICAgICAgZmlsdGVyLnNldFNlbGVjdGVkKG1pbiwgbWF4KTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZChmaWx0ZXIpO1xuICAgIH1cblxuICAgIGdldFNsaWRlclN0eWxlKGZpbHRlcjogYW55KTogeyBba2xhc3M6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICAgICAgaWYgKCEoZmlsdGVyIGluc3RhbmNlb2YgUHJpY2VSYW5nZUZpbHRlcikpIHJldHVybiB7IGxlZnQ6ICcwJScsIHJpZ2h0OiAnMCUnIH07XG5cbiAgICAgICAgY29uc3QgbGVmdCA9IHRoaXMuY2FsY3VsYXRlTGVmdFBlcmNlbnRhZ2UoZmlsdGVyKTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSB0aGlzLmNhbGN1bGF0ZVJpZ2h0UGVyY2VudGFnZShmaWx0ZXIpO1xuICAgICAgICByZXR1cm4geyBsZWZ0OiBgJHtsZWZ0fSVgLCByaWdodDogYCR7cmlnaHR9JWAgfTtcbiAgICB9XG5cbiAgICAvLyBNw6l0b2RvcyBwYXJhIGFjdHVhbGl6YXIgbGEgYmFycmEgZGVsIGZpbHRybyBwb3IgcHJlY2lvXG4gICAgY2FsY3VsYXRlTGVmdFBlcmNlbnRhZ2UoZmlsdGVyOiBhbnkpOiBudW1iZXIge1xuICAgICAgICBpZiAoIShmaWx0ZXIgaW5zdGFuY2VvZiBQcmljZVJhbmdlRmlsdGVyKSkgcmV0dXJuIDA7XG5cbiAgICAgICAgY29uc3QgbWluID0gZmlsdGVyLm1pblByaWNlO1xuICAgICAgICBjb25zdCBtYXggPSBmaWx0ZXIubWF4UHJpY2U7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRNaW4gPSBmaWx0ZXIuY3VycmVudE1pblByaWNlID8/IG1pbjtcblxuICAgICAgICBjb25zdCBjbGFtcGVkTWluID0gTWF0aC5tYXgobWluLCBNYXRoLm1pbihjdXJyZW50TWluLCBtYXgpKTtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKCgoY2xhbXBlZE1pbiAtIG1pbikgLyAobWF4IC0gbWluKSkgKiAxMDAsIDEwMCkpO1xuICAgIH1cblxuICAgIGNhbGN1bGF0ZVJpZ2h0UGVyY2VudGFnZShmaWx0ZXI6IGFueSk6IG51bWJlciB7XG4gICAgICAgIGlmICghKGZpbHRlciBpbnN0YW5jZW9mIFByaWNlUmFuZ2VGaWx0ZXIpKSByZXR1cm4gMDtcblxuICAgICAgICBjb25zdCBtaW4gPSBmaWx0ZXIubWluUHJpY2U7XG4gICAgICAgIGNvbnN0IG1heCA9IGZpbHRlci5tYXhQcmljZTtcbiAgICAgICAgY29uc3QgY3VycmVudE1heCA9IGZpbHRlci5jdXJyZW50TWF4UHJpY2UgPz8gbWF4O1xuXG4gICAgICAgIGNvbnN0IGNsYW1wZWRNYXggPSBNYXRoLm1heChtaW4sIE1hdGgubWluKGN1cnJlbnRNYXgsIG1heCkpO1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwIC0gKChjbGFtcGVkTWF4IC0gbWluKSAvIChtYXggLSBtaW4pKSAqIDEwMCwgMTAwKSk7XG4gICAgfVxuXG4gICAgZ2V0TWluVmFsdWUoZmlsdGVyOiBhbnkpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gKGZpbHRlciBpbnN0YW5jZW9mIFByaWNlUmFuZ2VGaWx0ZXIgJiYgZmlsdGVyLmN1cnJlbnRNaW5QcmljZSAhPSBudWxsKVxuICAgICAgICAgICAgPyBmaWx0ZXIuY3VycmVudE1pblByaWNlXG4gICAgICAgICAgICA6IGZpbHRlci5taW5QcmljZTtcbiAgICB9XG5cbiAgICBnZXRNYXhWYWx1ZShmaWx0ZXI6IGFueSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAoZmlsdGVyIGluc3RhbmNlb2YgUHJpY2VSYW5nZUZpbHRlciAmJiBmaWx0ZXIuY3VycmVudE1heFByaWNlICE9IG51bGwpXG4gICAgICAgICAgICA/IGZpbHRlci5jdXJyZW50TWF4UHJpY2VcbiAgICAgICAgICAgIDogZmlsdGVyLm1heFByaWNlO1xuICAgIH1cblxuICAgIGdldEZvcm1hdHRlZE1pblByaWNlKGZpbHRlcjogYW55KTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSAoZmlsdGVyIGluc3RhbmNlb2YgUHJpY2VSYW5nZUZpbHRlciAmJiBmaWx0ZXIuY3VycmVudE1pblByaWNlICE9IG51bGwpXG4gICAgICAgICAgICA/IGZpbHRlci5jdXJyZW50TWluUHJpY2VcbiAgICAgICAgICAgIDogZmlsdGVyLm1pblByaWNlO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0Rm9ybWF0dGVkTWF4UHJpY2UoZmlsdGVyOiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IChmaWx0ZXIgaW5zdGFuY2VvZiBQcmljZVJhbmdlRmlsdGVyICYmIGZpbHRlci5jdXJyZW50TWF4UHJpY2UgIT0gbnVsbClcbiAgICAgICAgICAgID8gZmlsdGVyLmN1cnJlbnRNYXhQcmljZVxuICAgICAgICAgICAgOiBmaWx0ZXIubWF4UHJpY2U7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cblxuICAgIC8vICBjbG9zZSA9ICgpID0+IHtcbiAgICAvLyAgICAgICB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZmlsdHJvc1wiKS5jbGFzc0xpc3QucmVtb3ZlKCdpbicpO1xuICAgIC8vICAgICAgIHJldHVybiB0cnVlO1xuICAgIC8vICB9O1xuXG5cbiAgICBjbG9zZSA9IChhY2NvcmRpb25faWQpID0+IHtcbiAgICAgICAgLy8gdGhpcy5jb25zdHMubW9iaWxlKClcbiAgICAgICAgLy8gICAgICA/IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhY2NvcmRpb25FeGFtcGxlXCIpLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKVxuICAgICAgICAvLyAgICAgIDogdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChhY2NvcmRpb25faWQpLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIHVuaXF1ZVNlbGVjdGlvbihmaWx0ZXIsIGZpbHRlckNoaWxkKSB7XG4gICAgICAgIC8vIEJ1c2NhciBzaSBoYXkgdW4gZmlsdHJvIGRlIHRpcG8gUHJpY2VSYW5nZUZpbHRlciBlbiBsYSBsaXN0YSBkZSBmaWx0cm9zXG4gICAgICAgIGNvbnN0IHByaWNlUmFuZ2VGaWx0ZXIgPSB0aGlzLmZpbHRlcnMuZmluZChmID0+IGYgaW5zdGFuY2VvZiBQcmljZVJhbmdlRmlsdGVyKTtcblxuICAgICAgICBpZiAocHJpY2VSYW5nZUZpbHRlcikge1xuICAgICAgICAgICAgcHJpY2VSYW5nZUZpbHRlci5yZXNldCgpO1xuICAgICAgICB9XG4gICAgICAgIGZpbHRlci5kYXRhLmZvckVhY2goZmlsdGVyRWxlbWVudCA9PiB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyRWxlbWVudC5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIGZpbHRlckVsZW1lbnQuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbHRlckVsZW1lbnQuY2hpbGRyZW4uZm9yRWFjaChmaWx0ZXJDaGlsZHJlbiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlckNoaWxkcmVuICE9IGZpbHRlckNoaWxkICYmIGZpbHRlckNoaWxkcmVuLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckNoaWxkcmVuLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNjcm9sbFVwID0gKCkgPT4ge1xuICAgICAgICB3aW5kb3cuc2Nyb2xsKDAsIDApO1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlZG9uZGVhIGFsIG3Dumx0aXBsbyBkZSAnc3RlcCcgcmVzcGV0YW5kbyBlbCByZWRvbmRlbyBlbnRlcm86XG4gICAgICogLSBNw61uaW1vOiByZWRvbmRlYSBoYWNpYSBhYmFqby5cbiAgICAgKiAtIE3DoXhpbW86IHJlZG9uZGVhIGhhY2lhIGFycmliYS5cbiAgICAgKi9cbiAgICByb3VuZFRvTmVhcmVzdCh2YWx1ZTogbnVtYmVyLCBzdGVwOiBudW1iZXIsIHR5cGU6ICdtaW4nIHwgJ21heCcsIGZpbHRlcjogYW55KTogbnVtYmVyIHtcbiAgICAgICAgbGV0IHJvdW5kZWQgPSBNYXRoLnJvdW5kKHZhbHVlIC8gc3RlcCkgKiBzdGVwO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ21heCcgJiYgcm91bmRlZCA8IGZpbHRlci5tYXhQcmljZSkge1xuICAgICAgICAgICAgcm91bmRlZCA9IE1hdGguY2VpbCh2YWx1ZSAvIHN0ZXApICogc3RlcDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZSA9PT0gJ21pbicgJiYgcm91bmRlZCA+IGZpbHRlci5taW5QcmljZSkge1xuICAgICAgICAgICAgcm91bmRlZCA9IE1hdGguZmxvb3IodmFsdWUgLyBzdGVwKSAqIHN0ZXA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJvdW5kZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWN0dWFsaXphIGxvcyB2YWxvcmVzIGRlbCBmaWx0cm8gcGVybWl0aWVuZG8gcXVlIHVuIGlucHV0IGVtcHVqZSBhbCBvdHJvLlxuICAgICAqL1xuICAgIHVwZGF0ZUZpbHRlclByaWNlcyh0eXBlOiAnbWluJyB8ICdtYXgnLCB2YWx1ZTogbnVtYmVyLCBmaWx0ZXI6IGFueSwgcHJpY2VHYXA6IG51bWJlcikge1xuICAgICAgICBjb25zdCBnbG9iYWxNaW4gPSBmaWx0ZXIubWluUHJpY2UgPz8gMDtcbiAgICAgICAgY29uc3QgZ2xvYmFsTWF4ID0gZmlsdGVyLm1heFByaWNlO1xuXG4gICAgICAgIGxldCBjdXJyZW50TWluID0gZmlsdGVyLmN1cnJlbnRNaW5QcmljZSA/PyBnbG9iYWxNaW47XG4gICAgICAgIGxldCBjdXJyZW50TWF4ID0gZmlsdGVyLmN1cnJlbnRNYXhQcmljZSA/PyBnbG9iYWxNYXg7XG5cbiAgICAgICAgaWYgKHR5cGUgPT09ICdtaW4nKSB7XG4gICAgICAgICAgICBsZXQgbmV3TWluID0gTWF0aC5taW4oTWF0aC5tYXgodmFsdWUsIGdsb2JhbE1pbiksIGdsb2JhbE1heCk7XG4gICAgICAgICAgICBpZiAobmV3TWluICsgcHJpY2VHYXAgPiBjdXJyZW50TWF4KSB7XG4gICAgICAgICAgICAgICAgbGV0IG5ld01heENhbmRpZGF0ZSA9IG5ld01pbiArIHByaWNlR2FwO1xuICAgICAgICAgICAgICAgIGlmIChuZXdNYXhDYW5kaWRhdGUgPD0gZ2xvYmFsTWF4KSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRNYXggPSBuZXdNYXhDYW5kaWRhdGU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3TWluID0gZ2xvYmFsTWF4IC0gcHJpY2VHYXA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsdGVyLmN1cnJlbnRNaW5QcmljZSA9IG5ld01pbjtcbiAgICAgICAgICAgIGZpbHRlci5jdXJyZW50TWF4UHJpY2UgPSBjdXJyZW50TWF4O1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdtYXgnKSB7XG4gICAgICAgICAgICBsZXQgbmV3TWF4ID0gTWF0aC5tYXgoTWF0aC5taW4odmFsdWUsIGdsb2JhbE1heCksIGdsb2JhbE1pbik7XG4gICAgICAgICAgICBpZiAobmV3TWF4IC0gcHJpY2VHYXAgPCBjdXJyZW50TWluKSB7XG4gICAgICAgICAgICAgICAgbGV0IG5ld01pbkNhbmRpZGF0ZSA9IG5ld01heCAtIHByaWNlR2FwO1xuICAgICAgICAgICAgICAgIGlmIChuZXdNaW5DYW5kaWRhdGUgPj0gZ2xvYmFsTWluKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRNaW4gPSBuZXdNaW5DYW5kaWRhdGU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3TWF4ID0gZ2xvYmFsTWluICsgcHJpY2VHYXA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsdGVyLmN1cnJlbnRNYXhQcmljZSA9IG5ld01heDtcbiAgICAgICAgICAgIGZpbHRlci5jdXJyZW50TWluUHJpY2UgPSBjdXJyZW50TWluO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFzQXBwbGllZEZpbHRlcnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlcnM/LnNvbWUoKGZpbHRlcjogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyLnR5cGU/LigpID09PSAncHJpY2VfcmFuZ2UnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWluU2V0ID0gZmlsdGVyLmN1cnJlbnRNaW5QcmljZSAhPT0gbnVsbCAmJiBmaWx0ZXIuY3VycmVudE1pblByaWNlICE9PSAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1heFNldCA9IGZpbHRlci5jdXJyZW50TWF4UHJpY2UgIT09IG51bGwgJiYgZmlsdGVyLmN1cnJlbnRNYXhQcmljZSAhPT0gZmlsdGVyLm1heFByaWNlO1xuICAgICAgICAgICAgICAgIGlmIChtaW5TZXQgfHwgbWF4U2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlci5kYXRhPy5zb21lKChmaWx0ZXJFbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXJFbGVtZW50LmNoaWxkcmVuKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyRWxlbWVudC5jaGlsZHJlbi5zb21lKChjaGlsZDogYW55KSA9PiBjaGlsZC5zZWxlY3RlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmaWx0ZXJFbGVtZW50LnNlbGVjdGVkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pID8/IGZhbHNlO1xuICAgIH1cblxufVxuIl19