@gipisistemas/ng-core 1.1.1 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/gipisistemas-ng-core.umd.js +115 -54
 - package/bundles/gipisistemas-ng-core.umd.js.map +1 -1
 - package/bundles/gipisistemas-ng-core.umd.min.js +3 -3
 - package/bundles/gipisistemas-ng-core.umd.min.js.map +1 -1
 - package/esm2015/shared/components/table/table.component.js +102 -40
 - package/esm2015/shared/gipi-components/input-monthpicker/input-monthpicker.component.js +1 -1
 - package/esm2015/shared/gipi-components/month-year-picker/month-year-picker.component.js +1 -1
 - package/esm5/shared/components/table/table.component.js +115 -54
 - package/esm5/shared/gipi-components/input-monthpicker/input-monthpicker.component.js +1 -1
 - package/esm5/shared/gipi-components/month-year-picker/month-year-picker.component.js +1 -1
 - package/fesm2015/gipisistemas-ng-core.js +102 -40
 - package/fesm2015/gipisistemas-ng-core.js.map +1 -1
 - package/fesm5/gipisistemas-ng-core.js +115 -54
 - package/fesm5/gipisistemas-ng-core.js.map +1 -1
 - package/gipisistemas-ng-core.metadata.json +1 -1
 - package/package.json +1 -1
 - package/shared/components/table/table.component.d.ts +60 -9
 
| 
         @@ -1,14 +1,15 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            import { __decorate, __metadata } from "tslib";
         
     | 
| 
       2 
2 
     | 
    
         
             
            import { animate, state, style, transition, trigger } from '@angular/animations';
         
     | 
| 
       3 
     | 
    
         
            -
            import { Component, ContentChild, EventEmitter, Input, Output, TemplateRef, ViewChild } from '@angular/core';
         
     | 
| 
      
 3 
     | 
    
         
            +
            import { AfterViewInit, Component, ContentChild, EventEmitter, Input, NgZone, OnChanges, OnInit, Output, SimpleChanges, TemplateRef, ViewChild } from '@angular/core';
         
     | 
| 
       4 
4 
     | 
    
         
             
            import { MatPaginator, MatSort, MatTableDataSource } from '@angular/material';
         
     | 
| 
       5 
5 
     | 
    
         
             
            import { of } from 'rxjs';
         
     | 
| 
       6 
6 
     | 
    
         
             
            import { delay } from 'rxjs/operators';
         
     | 
| 
       7 
7 
     | 
    
         
             
            import { ArrayUtil, ObjectUtil, StringUtil } from '../../../core';
         
     | 
| 
       8 
8 
     | 
    
         
             
            import { TableGroupHeaderDTO } from '../../../core/models/dto/table-group-header.dto';
         
     | 
| 
       9 
9 
     | 
    
         
             
            let TableComponent = class TableComponent {
         
     | 
| 
       10 
     | 
    
         
            -
                constructor() {
         
     | 
| 
       11 
     | 
    
         
            -
                    this. 
     | 
| 
      
 10 
     | 
    
         
            +
                constructor(_ngZone) {
         
     | 
| 
      
 11 
     | 
    
         
            +
                    this._ngZone = _ngZone;
         
     | 
| 
      
 12 
     | 
    
         
            +
                    this._expandedRows = [];
         
     | 
| 
       12 
13 
     | 
    
         
             
                    this._scrollHeightCalc = 410;
         
     | 
| 
       13 
14 
     | 
    
         
             
                    this._isPopoverHover = null;
         
     | 
| 
       14 
15 
     | 
    
         
             
                    this._displayedColumns = [];
         
     | 
| 
         @@ -34,10 +35,11 @@ let TableComponent = class TableComponent { 
     | 
|
| 
       34 
35 
     | 
    
         
             
                    this.showColumnExpandableFixed = false;
         
     | 
| 
       35 
36 
     | 
    
         
             
                    this.expandableOneRow = false;
         
     | 
| 
       36 
37 
     | 
    
         
             
                    this.ignoreChildrenExpandRow = false;
         
     | 
| 
      
 38 
     | 
    
         
            +
                    this.sort = true;
         
     | 
| 
       37 
39 
     | 
    
         
             
                    this.clearSort = false;
         
     | 
| 
       38 
40 
     | 
    
         
             
                    this.sortActive = '';
         
     | 
| 
       39 
41 
     | 
    
         
             
                    this.sortDirection = 'asc';
         
     | 
| 
       40 
     | 
    
         
            -
                    this. 
     | 
| 
      
 42 
     | 
    
         
            +
                    this.rowExpanded = new EventEmitter();
         
     | 
| 
       41 
43 
     | 
    
         
             
                    this.dataChange = new EventEmitter(true);
         
     | 
| 
       42 
44 
     | 
    
         
             
                    this.page = new EventEmitter();
         
     | 
| 
       43 
45 
     | 
    
         
             
                    this.rowHover = new EventEmitter();
         
     | 
| 
         @@ -147,9 +149,9 @@ let TableComponent = class TableComponent { 
     | 
|
| 
       147 
149 
     | 
    
         
             
                    if (this.paginator && !this.backendPagination) {
         
     | 
| 
       148 
150 
     | 
    
         
             
                        this._dataSource.paginator = this.matFrontendPaginator;
         
     | 
| 
       149 
151 
     | 
    
         
             
                    }
         
     | 
| 
       150 
     | 
    
         
            -
                    if (!this.groupStartExpanded && (this.groupHeaderRef || (this.expandable && this.expandedRef)) && !ArrayUtil.isEmpty(this._dataSource.data)) {
         
     | 
| 
       151 
     | 
    
         
            -
             
     | 
| 
       152 
     | 
    
         
            -
                    }
         
     | 
| 
      
 152 
     | 
    
         
            +
                    // if (!this.groupStartExpanded && (this.groupHeaderRef || (this.expandable && this.expandedRef)) && !ArrayUtil.isEmpty(this._dataSource.data)) {
         
     | 
| 
      
 153 
     | 
    
         
            +
                    // this._dataSource.data.forEach(row => this.addCollapse(row));
         
     | 
| 
      
 154 
     | 
    
         
            +
                    // }
         
     | 
| 
       153 
155 
     | 
    
         
             
                }
         
     | 
| 
       154 
156 
     | 
    
         
             
                calcScrollHeight() {
         
     | 
| 
       155 
157 
     | 
    
         
             
                    if ((this._dataSource && (this._dataSource.data.length > 0)) && (Math.floor(this._scrollHeightCalc) <= 700)) {
         
     | 
| 
         @@ -161,25 +163,24 @@ let TableComponent = class TableComponent { 
     | 
|
| 
       161 
163 
     | 
    
         
             
                    pageEvent.paginatorPageSizeOptions = ArrayUtil.isEmpty(pageEvent.paginatorPageSizeOptions) ? this.paginatorPageSizeOptions : pageEvent.paginatorPageSizeOptions;
         
     | 
| 
       162 
164 
     | 
    
         
             
                    this.page.emit(pageEvent);
         
     | 
| 
       163 
165 
     | 
    
         
             
                }
         
     | 
| 
       164 
     | 
    
         
            -
                 
     | 
| 
       165 
     | 
    
         
            -
                     
     | 
| 
       166 
     | 
    
         
            -
             
     | 
| 
       167 
     | 
    
         
            -
                removeCollapse(element) {
         
     | 
| 
       168 
     | 
    
         
            -
                    if (this.expandableOneRow) {
         
     | 
| 
       169 
     | 
    
         
            -
                        this._dataSource.data.forEach(row => this.addCollapse(row));
         
     | 
| 
      
 166 
     | 
    
         
            +
                isExpandedRow(row) {
         
     | 
| 
      
 167 
     | 
    
         
            +
                    if (ArrayUtil.isEmpty(this._expandedRows)) {
         
     | 
| 
      
 168 
     | 
    
         
            +
                        return of(false);
         
     | 
| 
       170 
169 
     | 
    
         
             
                    }
         
     | 
| 
       171 
     | 
    
         
            -
                    const  
     | 
| 
       172 
     | 
    
         
            -
                     
     | 
| 
       173 
     | 
    
         
            -
                    this._expandedElements = ArrayUtil.clone(expandedElementsAux);
         
     | 
| 
      
 170 
     | 
    
         
            +
                    const index = this._expandedRows.findIndex(r => r === row);
         
     | 
| 
      
 171 
     | 
    
         
            +
                    return of(index >= 0);
         
     | 
| 
       174 
172 
     | 
    
         
             
                }
         
     | 
| 
       175 
     | 
    
         
            -
                 
     | 
| 
       176 
     | 
    
         
            -
                    const  
     | 
| 
       177 
     | 
    
         
            -
                    if ( 
     | 
| 
       178 
     | 
    
         
            -
                        this. 
     | 
| 
      
 173 
     | 
    
         
            +
                toggleExpandRow(row) {
         
     | 
| 
      
 174 
     | 
    
         
            +
                    const index = this._expandedRows.findIndex(r => r === row);
         
     | 
| 
      
 175 
     | 
    
         
            +
                    if (ArrayUtil.isEmpty(this._expandedRows) || (index < 0)) {
         
     | 
| 
      
 176 
     | 
    
         
            +
                        this._expandedRows = [row];
         
     | 
| 
      
 177 
     | 
    
         
            +
                        this.rowExpanded.emit(row);
         
     | 
| 
      
 178 
     | 
    
         
            +
                        return;
         
     | 
| 
       179 
179 
     | 
    
         
             
                    }
         
     | 
| 
       180 
     | 
    
         
            -
             
     | 
| 
       181 
     | 
    
         
            -
             
     | 
| 
       182 
     | 
    
         
            -
                    this. 
     | 
| 
      
 180 
     | 
    
         
            +
                    const _expandedRowsAux = ArrayUtil.clone(this._expandedRows);
         
     | 
| 
      
 181 
     | 
    
         
            +
                    _expandedRowsAux.splice(index, 1);
         
     | 
| 
      
 182 
     | 
    
         
            +
                    this._expandedRows = ArrayUtil.clone(_expandedRowsAux);
         
     | 
| 
      
 183 
     | 
    
         
            +
                    this.rowExpanded.emit(null);
         
     | 
| 
       183 
184 
     | 
    
         
             
                }
         
     | 
| 
       184 
185 
     | 
    
         
             
                sortData(sort) {
         
     | 
| 
       185 
186 
     | 
    
         
             
                    if (this.infiniteScroll) {
         
     | 
| 
         @@ -201,41 +202,94 @@ let TableComponent = class TableComponent { 
     | 
|
| 
       201 
202 
     | 
    
         
             
                    const popover = document.getElementById('table-popover');
         
     | 
| 
       202 
203 
     | 
    
         
             
                    if (!ObjectUtil.isNull(popover)) {
         
     | 
| 
       203 
204 
     | 
    
         
             
                        popover.style.visibility = 'hidden';
         
     | 
| 
      
 205 
     | 
    
         
            +
                        if (!this.loading) {
         
     | 
| 
      
 206 
     | 
    
         
            +
                            this._ngZone.runOutsideAngular(() => {
         
     | 
| 
      
 207 
     | 
    
         
            +
                                const domRectPopover = popover.getBoundingClientRect();
         
     | 
| 
      
 208 
     | 
    
         
            +
                                const domRectRow = event.currentTarget.getBoundingClientRect();
         
     | 
| 
      
 209 
     | 
    
         
            +
                                const cells = event.currentTarget.children;
         
     | 
| 
      
 210 
     | 
    
         
            +
                                if (domRectPopover && domRectRow) {
         
     | 
| 
      
 211 
     | 
    
         
            +
                                    popover.style.visibility = 'visible';
         
     | 
| 
      
 212 
     | 
    
         
            +
                                    popover.style.top = `${(domRectRow.top + domRectRow.height) - 1}px`;
         
     | 
| 
      
 213 
     | 
    
         
            +
                                    let startPosition = 0;
         
     | 
| 
      
 214 
     | 
    
         
            +
                                    let endPosition = 0;
         
     | 
| 
      
 215 
     | 
    
         
            +
                                    if (this.columnInitial && (this.columnInitial >= 0)) {
         
     | 
| 
      
 216 
     | 
    
         
            +
                                        if (!cells[this.columnInitial]) {
         
     | 
| 
      
 217 
     | 
    
         
            +
                                            throw new Error('Initial column undefined or null');
         
     | 
| 
      
 218 
     | 
    
         
            +
                                        }
         
     | 
| 
      
 219 
     | 
    
         
            +
                                        startPosition = cells[this.columnInitial].getBoundingClientRect().left;
         
     | 
| 
      
 220 
     | 
    
         
            +
                                    }
         
     | 
| 
      
 221 
     | 
    
         
            +
                                    else {
         
     | 
| 
      
 222 
     | 
    
         
            +
                                        startPosition = domRectRow.left;
         
     | 
| 
      
 223 
     | 
    
         
            +
                                    }
         
     | 
| 
      
 224 
     | 
    
         
            +
                                    if (this.columnFinal && (this.columnFinal >= 0)) {
         
     | 
| 
      
 225 
     | 
    
         
            +
                                        if (!cells[this.columnFinal]) {
         
     | 
| 
      
 226 
     | 
    
         
            +
                                            throw new Error('Final column undefined or null');
         
     | 
| 
      
 227 
     | 
    
         
            +
                                        }
         
     | 
| 
      
 228 
     | 
    
         
            +
                                        endPosition = cells[this.columnFinal].getBoundingClientRect().left - domRectPopover.width;
         
     | 
| 
      
 229 
     | 
    
         
            +
                                    }
         
     | 
| 
      
 230 
     | 
    
         
            +
                                    else {
         
     | 
| 
      
 231 
     | 
    
         
            +
                                        endPosition = domRectRow.right - domRectPopover.width;
         
     | 
| 
      
 232 
     | 
    
         
            +
                                    }
         
     | 
| 
      
 233 
     | 
    
         
            +
                                    this._ngZone.run(() => {
         
     | 
| 
      
 234 
     | 
    
         
            +
                                        if (event.clientX > startPosition + 15 && event.clientX < endPosition) {
         
     | 
| 
      
 235 
     | 
    
         
            +
                                            popover.style.left = `${event.clientX - 15}px`;
         
     | 
| 
      
 236 
     | 
    
         
            +
                                        }
         
     | 
| 
      
 237 
     | 
    
         
            +
                                        else if (event.clientX <= startPosition) {
         
     | 
| 
      
 238 
     | 
    
         
            +
                                            popover.style.left = `${startPosition}px`;
         
     | 
| 
      
 239 
     | 
    
         
            +
                                        }
         
     | 
| 
      
 240 
     | 
    
         
            +
                                        else if (event.clientX >= endPosition) {
         
     | 
| 
      
 241 
     | 
    
         
            +
                                            popover.style.left = `${endPosition}px`;
         
     | 
| 
      
 242 
     | 
    
         
            +
                                        }
         
     | 
| 
      
 243 
     | 
    
         
            +
                                    });
         
     | 
| 
      
 244 
     | 
    
         
            +
                                }
         
     | 
| 
      
 245 
     | 
    
         
            +
                            });
         
     | 
| 
      
 246 
     | 
    
         
            +
                        }
         
     | 
| 
      
 247 
     | 
    
         
            +
                    }
         
     | 
| 
      
 248 
     | 
    
         
            +
                    this.rowHover.emit(data);
         
     | 
| 
      
 249 
     | 
    
         
            +
                    this._contextPopover = data;
         
     | 
| 
      
 250 
     | 
    
         
            +
                }
         
     | 
| 
      
 251 
     | 
    
         
            +
                /**
         
     | 
| 
      
 252 
     | 
    
         
            +
                showPopover(event: MouseEvent, data: any): void {
         
     | 
| 
      
 253 
     | 
    
         
            +
                    const popover: HTMLElement = document.getElementById('table-popover');
         
     | 
| 
      
 254 
     | 
    
         
            +
                    if (!ObjectUtil.isNull(popover)) {
         
     | 
| 
      
 255 
     | 
    
         
            +
                        popover.style.visibility = 'hidden';
         
     | 
| 
      
 256 
     | 
    
         
            +
             
     | 
| 
       204 
257 
     | 
    
         
             
                        if (!this.loading) {
         
     | 
| 
       205 
258 
     | 
    
         
             
                            const domRectPopover = popover.getBoundingClientRect();
         
     | 
| 
       206 
     | 
    
         
            -
                            const domRectRow = event.currentTarget.getBoundingClientRect();
         
     | 
| 
       207 
     | 
    
         
            -
                            const cells = event.currentTarget.children;
         
     | 
| 
      
 259 
     | 
    
         
            +
                            const domRectRow = (event.currentTarget as HTMLElement).getBoundingClientRect();
         
     | 
| 
      
 260 
     | 
    
         
            +
                            const cells = (event.currentTarget as HTMLTableRowElement).children;
         
     | 
| 
      
 261 
     | 
    
         
            +
             
     | 
| 
       208 
262 
     | 
    
         
             
                            if (domRectPopover && domRectRow) {
         
     | 
| 
       209 
263 
     | 
    
         
             
                                popover.style.visibility = 'visible';
         
     | 
| 
       210 
264 
     | 
    
         
             
                                popover.style.top = `${(domRectRow.top + domRectRow.height) - 1}px`;
         
     | 
| 
       211 
     | 
    
         
            -
             
     | 
| 
       212 
     | 
    
         
            -
                                let  
     | 
| 
      
 265 
     | 
    
         
            +
             
     | 
| 
      
 266 
     | 
    
         
            +
                                let startPosition: number = 0;
         
     | 
| 
      
 267 
     | 
    
         
            +
                                let endPosition: number = 0;
         
     | 
| 
      
 268 
     | 
    
         
            +
             
     | 
| 
       213 
269 
     | 
    
         
             
                                if (this.columnInitial && (this.columnInitial >= 0)) {
         
     | 
| 
       214 
270 
     | 
    
         
             
                                    if (!cells[this.columnInitial]) {
         
     | 
| 
       215 
271 
     | 
    
         
             
                                        throw new Error('Initial column undefined or null');
         
     | 
| 
       216 
272 
     | 
    
         
             
                                    }
         
     | 
| 
       217 
273 
     | 
    
         
             
                                    startPosition = cells[this.columnInitial].getBoundingClientRect().left;
         
     | 
| 
       218 
     | 
    
         
            -
                                }
         
     | 
| 
       219 
     | 
    
         
            -
                                else {
         
     | 
| 
      
 274 
     | 
    
         
            +
                                } else {
         
     | 
| 
       220 
275 
     | 
    
         
             
                                    startPosition = domRectRow.left;
         
     | 
| 
       221 
276 
     | 
    
         
             
                                }
         
     | 
| 
      
 277 
     | 
    
         
            +
             
     | 
| 
       222 
278 
     | 
    
         
             
                                if (this.columnFinal && (this.columnFinal >= 0)) {
         
     | 
| 
       223 
279 
     | 
    
         
             
                                    if (!cells[this.columnFinal]) {
         
     | 
| 
       224 
280 
     | 
    
         
             
                                        throw new Error('Final column undefined or null');
         
     | 
| 
       225 
281 
     | 
    
         
             
                                    }
         
     | 
| 
       226 
282 
     | 
    
         
             
                                    endPosition = cells[this.columnFinal].getBoundingClientRect().left - domRectPopover.width;
         
     | 
| 
       227 
     | 
    
         
            -
                                }
         
     | 
| 
       228 
     | 
    
         
            -
                                else {
         
     | 
| 
      
 283 
     | 
    
         
            +
                                } else {
         
     | 
| 
       229 
284 
     | 
    
         
             
                                    endPosition = domRectRow.right - domRectPopover.width;
         
     | 
| 
       230 
285 
     | 
    
         
             
                                }
         
     | 
| 
      
 286 
     | 
    
         
            +
             
     | 
| 
       231 
287 
     | 
    
         
             
                                setTimeout(() => {
         
     | 
| 
       232 
288 
     | 
    
         
             
                                    if (event.clientX > startPosition + 15 && event.clientX < endPosition) {
         
     | 
| 
       233 
289 
     | 
    
         
             
                                        popover.style.left = `${event.clientX - 15}px`;
         
     | 
| 
       234 
     | 
    
         
            -
                                    }
         
     | 
| 
       235 
     | 
    
         
            -
                                    else if (event.clientX <= startPosition) {
         
     | 
| 
      
 290 
     | 
    
         
            +
                                    } else if (event.clientX <= startPosition) {
         
     | 
| 
       236 
291 
     | 
    
         
             
                                        popover.style.left = `${startPosition}px`;
         
     | 
| 
       237 
     | 
    
         
            -
                                    }
         
     | 
| 
       238 
     | 
    
         
            -
                                    else if (event.clientX >= endPosition) {
         
     | 
| 
      
 292 
     | 
    
         
            +
                                    } else if (event.clientX >= endPosition) {
         
     | 
| 
       239 
293 
     | 
    
         
             
                                        popover.style.left = `${endPosition}px`;
         
     | 
| 
       240 
294 
     | 
    
         
             
                                    }
         
     | 
| 
       241 
295 
     | 
    
         
             
                                });
         
     | 
| 
         @@ -245,6 +299,7 @@ let TableComponent = class TableComponent { 
     | 
|
| 
       245 
299 
     | 
    
         
             
                    this.rowHover.emit(data);
         
     | 
| 
       246 
300 
     | 
    
         
             
                    this._contextPopover = data;
         
     | 
| 
       247 
301 
     | 
    
         
             
                }
         
     | 
| 
      
 302 
     | 
    
         
            +
                */
         
     | 
| 
       248 
303 
     | 
    
         
             
                closePopover(time) {
         
     | 
| 
       249 
304 
     | 
    
         
             
                    of(null).pipe(delay(time)).subscribe(() => {
         
     | 
| 
       250 
305 
     | 
    
         
             
                        if (!ObjectUtil.isNull(this._isPopoverHover) && !this._isPopoverHover) {
         
     | 
| 
         @@ -311,6 +366,9 @@ let TableComponent = class TableComponent { 
     | 
|
| 
       311 
366 
     | 
    
         
             
                    }
         
     | 
| 
       312 
367 
     | 
    
         
             
                }
         
     | 
| 
       313 
368 
     | 
    
         
             
            };
         
     | 
| 
      
 369 
     | 
    
         
            +
            TableComponent.ctorParameters = () => [
         
     | 
| 
      
 370 
     | 
    
         
            +
                { type: NgZone }
         
     | 
| 
      
 371 
     | 
    
         
            +
            ];
         
     | 
| 
       314 
372 
     | 
    
         
             
            __decorate([
         
     | 
| 
       315 
373 
     | 
    
         
             
                ViewChild(MatSort, { static: true }),
         
     | 
| 
       316 
374 
     | 
    
         
             
                __metadata("design:type", MatSort)
         
     | 
| 
         @@ -476,6 +534,10 @@ __decorate([ 
     | 
|
| 
       476 
534 
     | 
    
         
             
                Input(),
         
     | 
| 
       477 
535 
     | 
    
         
             
                __metadata("design:type", Boolean)
         
     | 
| 
       478 
536 
     | 
    
         
             
            ], TableComponent.prototype, "ignoreChildrenExpandRow", void 0);
         
     | 
| 
      
 537 
     | 
    
         
            +
            __decorate([
         
     | 
| 
      
 538 
     | 
    
         
            +
                Input(),
         
     | 
| 
      
 539 
     | 
    
         
            +
                __metadata("design:type", Boolean)
         
     | 
| 
      
 540 
     | 
    
         
            +
            ], TableComponent.prototype, "sort", void 0);
         
     | 
| 
       479 
541 
     | 
    
         
             
            __decorate([
         
     | 
| 
       480 
542 
     | 
    
         
             
                Input(),
         
     | 
| 
       481 
543 
     | 
    
         
             
                __metadata("design:type", Boolean)
         
     | 
| 
         @@ -491,7 +553,7 @@ __decorate([ 
     | 
|
| 
       491 
553 
     | 
    
         
             
            __decorate([
         
     | 
| 
       492 
554 
     | 
    
         
             
                Output(),
         
     | 
| 
       493 
555 
     | 
    
         
             
                __metadata("design:type", EventEmitter)
         
     | 
| 
       494 
     | 
    
         
            -
            ], TableComponent.prototype, " 
     | 
| 
      
 556 
     | 
    
         
            +
            ], TableComponent.prototype, "rowExpanded", void 0);
         
     | 
| 
       495 
557 
     | 
    
         
             
            __decorate([
         
     | 
| 
       496 
558 
     | 
    
         
             
                Output(),
         
     | 
| 
       497 
559 
     | 
    
         
             
                __metadata("design:type", EventEmitter)
         
     | 
| 
         @@ -507,7 +569,7 @@ __decorate([ 
     | 
|
| 
       507 
569 
     | 
    
         
             
            TableComponent = __decorate([
         
     | 
| 
       508 
570 
     | 
    
         
             
                Component({
         
     | 
| 
       509 
571 
     | 
    
         
             
                    selector: 'itss-table',
         
     | 
| 
       510 
     | 
    
         
            -
                    template: "<div [class.box-shadow]=\"shadow\"\n     [style.height]=\"(matTableHeigth | async)\"\n     style=\"background: transparent !important;\"\n     fxLayout=\"column\"\n     fxFlex>\n\n    <itss-table-scrolled [more]=\"hasMore()\"\n                         [scrollOffset]=\"scrollOffset\"\n                         [scrollDelay]=\"scrollDelay\"\n                         (scrolled)=\"handleScroll($event)\"\n                         [ngStyle]=\"{'flex-basis': scrollHeigth ? scrollHeigth + 'px' : _scrollHeightCalc + 'px' }\"\n                         *ngIf=\"infiniteScroll; else table\">\n        <ng-template *ngTemplateOutlet=\"table\"> </ng-template>\n    </itss-table-scrolled>\n\n    <ng-template #table>\n        <mat-table matSort\n                   multiTemplateDataRows\n                   [dataSource]=\"_dataSource\"\n                   [matSortDisabled]=\"!clearSort\"\n                   [matSortDisableClear]=\"!clearSort\"\n                   [matSortActive]=\"sortActive\"\n                   [matSortDirection]=\"sortDirection?.toLocaleLowerCase()\"\n                   (matSortChange)=\"sortData($event)\"\n                   (mouseleave)=\"_isPopoverHover = false; closePopover(0)\">\n\n            <ng-container *ngIf=\"expandedRef\"\n                          cdkColumnDef=\"expandedColumn\">\n                <mat-header-cell fxFlex=\"5\"\n                                 fxLayoutAlign=\"end center\"\n                                 *cdkHeaderCellDef>\n                </mat-header-cell>\n                <mat-cell fxFlex=\"5\"\n                          fxLayoutAlign=\"end center\"\n                          *cdkCellDef=\"let row\">\n                    <itss-button [icon]=\"isExpansed(row) ? 'chevron_right' : 'expand_more'\"\n                                 *ngIf=\"((row?.children) && (row.children.length > 0)) || (row?.expandable) || showColumnExpandableFixed\"\n                                 color=\"primary\"\n                                 type=\"icon\"\n                                 tooltip=\"Expandir | Retrair\"\n                                 (click)=\"(isExpansed(row) ? removeCollapse(row) : addCollapse(row)); rowExpandedChangeEmit(row)\">\n                    </itss-button>\n                </mat-cell>\n            </ng-container>\n\n            <ng-container *ngFor=\"let column of columns\"\n                          [cdkColumnDef]=\"column.property\">\n                <div *ngIf=\"column.sortable\">\n                    <mat-header-cell [fxFlex]=\"column.width | async\"\n                                     [fxLayoutAlign]=\"column.align\"\n                                     [ngStyle]=\"{'padding-left': column.sortable && column.align !== '' && (column.align.toLowerCase() === 'center' || column.align.toLowerCase() === 'center center') ? '15px' : '' }\"\n                                     [style.padding-left.px]=\"column.marginLeft | async\"\n                                     [style.padding-right.px]=\"column.marginRight | async\"\n                                     *cdkHeaderCellDef\n                                     mat-sort-header>\n                        {{ column.name }}\n                    </mat-header-cell>\n                </div>\n                <div *ngIf=\"!column.sortable\">\n                    <mat-header-cell [fxFlex]=\"column.width | async\"\n                                     [fxHide.lt-md]=\"column.hiddenSm\"\n                                     [fxLayoutAlign]=\"column.align\"\n                                     [style.padding-left.px]=\"column.marginLeft | async\"\n                                     [style.padding-right.px]=\"column.marginRight | async\"\n                                     *cdkHeaderCellDef>\n                        <ng-container *ngIf=\"column.name; else templateHeader\">\n                            {{ column.name }}\n                        </ng-container>\n\n                        <ng-template #templateHeader>\n                            <ng-container *ngIf=\"column.templateHeader\">\n                                <ng-container [ngTemplateOutlet]=\"column.templateHeader\"\n                                              [ngTemplateOutletContext]=\"{$implicit: data}\">\n                                </ng-container>\n                            </ng-container>\n                        </ng-template>\n                    </mat-header-cell>\n                </div>\n                <mat-cell [fxFlex]=\"column.width | async\"\n                          [fxHide.lt-md]=\"column.hiddenSm\"\n                          [fxHide]=\"!column.visible\"\n                          [fxLayoutAlign]=\"column.align\"\n                          [class.mat-cell-pointer]=\"column.action\"\n                          [style.padding-left.px]=\"column.marginLeft | async\"\n                          [style.padding-right.px]=\"column.marginRight | async\"\n                          (click)=\"column.action ? column.action(row) : null\"\n                          *cdkCellDef=\"let row\">\n                    <ng-container *ngIf=\"column.value; else template\">\n                        {{ (column.value(row) && (column.value(row).length > (column.sliceLength ? column.sliceLength :\n                        50)))\n                        ? (column.value(row) | slice:0:(column.sliceLength ? column.sliceLength : 50)) + '...'\n                        : column.value(row) }}\n                    </ng-container>\n\n                    <ng-template #template>\n                        <ng-container *ngIf=\"column.template\">\n                            <ng-container [ngTemplateOutlet]=\"column.template\"\n                                          [ngTemplateOutletContext]=\"{$implicit: row}\">\n                            </ng-container>\n                        </ng-container>\n                    </ng-template>\n                </mat-cell>\n            </ng-container>\n\n            <ng-container *ngIf=\"actionsRef\"\n                          cdkColumnDef=\"actionsColumn\">\n                <mat-header-cell fxFlex.gt-md=\"15\"\n                                 fxLayoutAlign=\"center center\"\n                                 *cdkHeaderCellDef>\n                    A\u00E7\u00F5es\n                </mat-header-cell>\n                <mat-cell fxFlex=\"15\"\n                          fxLayoutAlign=\"center center\"\n                          *cdkCellDef=\"let row\">\n                    <ng-template [ngTemplateOutlet]=\"actionsRef\"\n                                 [ngTemplateOutletContext]=\"{$implicit: row}\">\n                    </ng-template>\n                </mat-cell>\n            </ng-container>\n\n            <ng-container *ngIf=\"expandedRef\"\n                          matColumnDef=\"expandedDetail\">\n                <mat-cell *matCellDef=\"let row\"\n                          fxFlexFill\n                          class=\"cell-element-detail\">\n                    <div class=\"element-detail\"\n                         *ngIf=\"!ignoreChildrenExpandRow ? (row.children.length > 0) : ignoreChildrenExpandRow\"\n                         [ngClass]=\"{'collapsed': isExpansed(row), 'expanded': !isExpansed(row)}\">\n                        <ng-template [ngTemplateOutlet]=\"expandedRef\"\n                                     [ngTemplateOutletContext]=\"{$implicit: row}\">\n                        </ng-template>\n                    </div>\n                </mat-cell>\n            </ng-container>\n\n            <ng-container *ngIf=\"groupByColumn && groupHeaderRef\"\n                          matColumnDef=\"groupHeader\">\n                <mat-cell fxFlex\n                          [attr.colspan]=\"columns.length\"\n                          *matCellDef=\"let rowGroup\"\n                          style=\"cursor: pointer;\"\n                          [class.group-header-cell-expanded]=\"!isExpansed(rowGroup)\"\n                          [class.group-header-cell-collapsed]=\"isExpansed(rowGroup)\"\n                          (click)=\"isExpansed(rowGroup) ? removeCollapse(rowGroup) : addCollapse(rowGroup)\">\n                    <div class=\"group-header-cell\">\n                        <itss-button *ngIf=\"rowGroup.childrenGroup.length > 0\"\n                                     [icon]=\"isExpansed(rowGroup) ? 'chevron_right' : 'expand_more'\"\n                                     style.margin-right=\"1.25rem\"\n                                     color=\"primary\"\n                                     type=\"icon\"\n                                     tooltip=\"Expandir | Retrair\"\n                                     (click)=\"isExpansed(rowGroup) ? removeCollapse(rowGroup) : addCollapse(rowGroup)\">\n                        </itss-button>\n\n                        <ng-template [ngTemplateOutlet]=\"groupHeaderRef\"\n                                     [ngTemplateOutletContext]=\"{$implicit: rowGroup}\">\n                        </ng-template>\n                    </div>\n                </mat-cell>\n            </ng-container>\n\n            <ng-container *ngIf=\"groupByColumn && groupHeaderRef\"\n                          matColumnDef=\"expandedGroupHeader\">\n                <mat-cell *matCellDef=\"let rowGroup\"\n                          fxFlexFill>\n                    <div class=\"element-detail\"\n                         *ngIf=\"rowGroup.childrenGroup.length > 0\"\n                         [ngClass]=\"{'collapsed': isExpansed(rowGroup), 'expanded': !isExpansed(rowGroup)}\">\n\n                        <itss-table *ngIf=\"rowGroup.childrenGroup.length > 0; else noChildrenGroup\"\n                                    [paginator]=\"false\"\n                                    [shadow]=\"false\"\n                                    [showHeader]=\"false\"\n                                    [columns]=\"columns\"\n                                    [data]=\"rowGroup.childrenGroup\"\n                                    class=\"table-level-1\"\n                                    fxFlexFill>\n                            <ng-template #footer\n                                         *ngIf=\"groupByColumn && groupHeaderRef && groupFooterRef\">\n                                <ng-template [ngTemplateOutlet]=\"groupFooterRef\"\n                                             [ngTemplateOutletContext]=\"{$implicit: rowGroup}\">\n                                </ng-template>\n                            </ng-template>\n                        </itss-table>\n\n                        <ng-template #noChildrenGroup>\n                            <div *ngIf=\"!loading\"\n                                 class=\"no-records\">\n                                <mat-icon>sentiment_very_dissatisfied</mat-icon>\n                                <span>Nenhum registro foi encontrado</span>\n                            </div>\n                        </ng-template>\n                    </div>\n                </mat-cell>\n            </ng-container>\n\n            <mat-header-row #matHeaderRow\n                            (mouseenter)=\"_isPopoverHover = false; closePopover(0)\"\n                            *matHeaderRowDef=\"_displayedColumns; sticky: headerSticky || groupHeaderSticky\"\n                            [ngClass]=\"{ 'hidden-header': !showHeader }\">\n            </mat-header-row>\n\n            <div *ngIf=\"!loading && !expandable && !actionsPopoverRef && !groupByColumn && !groupHeaderRef\">\n                <mat-row (mouseover)=\"rowHover.emit(row)\"\n                         *matRowDef=\"let row; columns: _displayedColumns;\"\n                         [ngClass]=\"{ 'hoversimulator': row.isMouseHover === true }\"\n                         [class.highlight]=\"getHighlightRow(row)\"\n                         [attr.id]=\"'row_'+ getIndexRow(row)\">\n                </mat-row>\n            </div>\n\n            <div *ngIf=\"!loading && !expandable && actionsPopoverRef && !groupByColumn && !groupHeaderRef\">\n                <mat-row #rowTemplate\n                         *matRowDef=\"let row; columns: _displayedColumns;\"\n                         class=\"element-row\"\n                         (mousemove)=\"showPopover($event, row)\"\n                         [class.hoversimulator]=\"_contextPopover === row\"\n                         [class.highlight]=\"getHighlightRow(row)\"\n                         [attr.id]=\"'row_'+ getIndexRow(row)\">\n                </mat-row>\n            </div>\n\n            <div *ngIf=\"!loading && expandable && !actionsPopoverRef && !groupByColumn && !groupHeaderRef\">\n                <mat-row *matRowDef=\"let row; columns: _displayedColumns;\"\n                         class=\"element-row\"\n                         (mouseover)=\"rowHover.emit(row)\"\n                         [class.expanded-row]=\"_expandedElement === row\"\n                         [ngClass]=\"{ 'hoversimulator': row.isMouseHover === true }\"\n                         [class.highlight]=\"getHighlightRow(row)\"\n                         [attr.id]=\"'row_'+ getIndexRow(row)\">\n                </mat-row>\n\n                <mat-row *matRowDef=\"let row; columns: ['expandedDetail'];\"\n                         class=\"detail-row\"\n                         [attr.id]=\"'row_expand'+ getIndexRow(row)\">\n                </mat-row>\n            </div>\n\n            <div *ngIf=\"!loading && expandable && actionsPopoverRef && !groupByColumn && !groupHeaderRef\">\n                <mat-row #rowTemplate\n                         *matRowDef=\"let row; columns: _displayedColumns;\"\n                         class=\"element-row\"\n                         (mousemove)=\"showPopover($event, row)\"\n                         [class.hoversimulator]=\"_contextPopover === row\"\n                         [class.expanded-row]=\"_expandedElement === row\"\n                         [class.highlight]=\"getHighlightRow(row)\"\n                         [attr.id]=\"'row_'+ getIndexRow(row)\">\n                </mat-row>\n\n                <mat-row *matRowDef=\"let row; columns: ['expandedDetail'];\"\n                         class=\"detail-row\"\n                         [attr.id]=\"'row_expand'+ getIndexRow(row)\">\n                </mat-row>\n            </div>\n\n            <div *ngIf=\"!loading && !expandable && !actionsPopoverRef && groupByColumn && groupHeaderRef\">\n                <mat-row *matRowDef=\"let row; columns: ['groupHeader'];\"\n                         class=\"element-row\"\n                         (mouseover)=\"rowHover.emit(row)\"\n                         [class.expanded-row]=\"_expandedElement === row\"\n                         [class.group-header-sticky]=\"groupHeaderSticky\"\n                         [ngClass]=\"{ 'hoversimulator': row.isMouseHover === true }\"\n                         [class.highlight]=\"getHighlightRow(row)\"\n                         [attr.id]=\"'row_'+ getIndexRow(row)\">\n                </mat-row>\n\n                <mat-row *matRowDef=\"let row; columns: ['expandedGroupHeader'];\"\n                         class=\"detail-row\"\n                         [attr.id]=\"'row_group'+ getIndexRow(row)\">\n                </mat-row>\n            </div>\n        </mat-table>\n\n        <mat-progress-bar mode=\"indeterminate\"\n                          color=\"accent\"\n                          *ngIf=\"loading\">\n        </mat-progress-bar>\n\n        <div *ngIf=\"!loading && (data && (data.length > 0)) && footerRef\"\n             class=\"footer-row\"\n             fxLayout=\"column\"\n             fxLayoutGap=\"10px\">\n            <ng-template [ngTemplateOutlet]=\"footerRef\"\n                         [ngTemplateOutletContext]=\"{$implicit: data}\">\n            </ng-template>\n        </div>\n\n        <div *ngIf=\"!loading && (data && (data.length <= 0))\"\n             class=\"no-records\">\n            <mat-icon>sentiment_very_dissatisfied</mat-icon>\n            <span>Nenhum registro foi encontrado</span>\n        </div>\n\n        <ng-container *ngIf=\"!loading && paginator && (data && (data.length > 0))\">\n            <ng-container #backendPaginatorTemplate\n                          *ngIf=\"backendPagination && !infiniteScroll\">\n                <mat-paginator #backendPaginator\n                               [hidePageSize]=\"!showPageSizeOptions || (paginatorPageSizeOptions && (paginatorPageSizeOptions.length <= 0))\"\n                               [length]=\"paginatorLength\"\n                               [pageIndex]=\"paginatorPageIndex\"\n                               [pageSize]=\"paginatorPageSize\"\n                               [pageSizeOptions]=\"paginatorPageSizeOptions\"\n                               (page)=\"onPage($event)\"\n                               (mouseenter)=\"closePopover(0)\"\n                               showFirstLastButtons>\n                </mat-paginator>\n            </ng-container>\n\n            <ng-container #frontendPaginatorTemplate\n                          *ngIf=\"!backendPagination && !infiniteScroll\">\n                <mat-paginator #frontendPaginator\n                               [hidePageSize]=\"!showPageSizeOptions || (paginatorPageSizeOptions && (paginatorPageSizeOptions.length <= 0))\"\n                               [length]=\"paginatorLength\"\n                               [pageIndex]=\"paginatorPageIndex\"\n                               [pageSize]=\"paginatorPageSize\"\n                               [pageSizeOptions]=\"paginatorPageSizeOptions\"\n                               (page)=\"onPage($event)\"\n                               showFirstLastButtons>\n                </mat-paginator>\n            </ng-container>\n        </ng-container>\n\n        <ng-container #infiniteScrollPaginatorTemplate\n                      *ngIf=\"infiniteScroll && (data && (data.length > 0))\">\n            <span class=\"infinite-scroll-paginator\">\n                1 - {{ data.length }} de {{ paginatorLength }}\n            </span>\n        </ng-container>\n    </ng-template>\n</div>\n\n<div id=\"table-popover\"\n     class=\"table-popover\"\n     (mouseover)=\"_isPopoverHover = true\"\n     (mouseout)=\"_isPopoverHover = false; closePopover(0)\"\n     *ngIf=\"!loading && actionsPopoverRef\">\n    <ng-container [ngTemplateOutlet]=\"actionsPopoverRef\"\n                  [ngTemplateOutletContext]=\"{ $implicit: _contextPopover }\">\n    </ng-container>\n</div>",
         
     | 
| 
      
 572 
     | 
    
         
            +
                    template: "<div [class.box-shadow]=\"shadow\"\n     [style.height]=\"(matTableHeigth | async)\"\n     style=\"background: transparent !important;\"\n     fxLayout=\"column\"\n     fxFlex>\n\n    <itss-table-scrolled [more]=\"hasMore()\"\n                         [scrollOffset]=\"scrollOffset\"\n                         [scrollDelay]=\"scrollDelay\"\n                         (scrolled)=\"handleScroll($event)\"\n                         [ngStyle]=\"{'flex-basis': scrollHeigth ? scrollHeigth + 'px' : _scrollHeightCalc + 'px' }\"\n                         *ngIf=\"infiniteScroll; else table\">\n        <ng-template *ngTemplateOutlet=\"table\"> </ng-template>\n    </itss-table-scrolled>\n\n    <ng-template #table>\n        <mat-table matSort\n                   multiTemplateDataRows\n                   [dataSource]=\"_dataSource\"\n                   [matSortDisabled]=\"!sort\"\n                   [matSortDisableClear]=\"!clearSort\"\n                   [matSortActive]=\"sortActive\"\n                   [matSortDirection]=\"sortDirection?.toLocaleLowerCase()\"\n                   (matSortChange)=\"sortData($event)\"\n                   (mouseleave)=\"_isPopoverHover = false; closePopover(0)\">\n\n            <ng-container *ngIf=\"expandedRef\"\n                          cdkColumnDef=\"expandedColumn\">\n                <mat-header-cell fxFlex=\"5\"\n                                 fxLayoutAlign=\"end center\"\n                                 *cdkHeaderCellDef>\n                </mat-header-cell>\n                <mat-cell fxFlex=\"5\"\n                          fxLayoutAlign=\"end center\"\n                          *cdkCellDef=\"let row\">\n                    <itss-button tooltip=\"Expandir | Retrair\"\n                                 color=\"primary\"\n                                 type=\"icon\"\n                                 *ngIf=\"((row?.children) && (row.children.length > 0)) || (row?.expandable) || showColumnExpandableFixed\"\n                                 [icon]=\"(isExpandedRow(row) | async) ? 'expand_more' : 'chevron_right'\"\n                                 (click)=\"toggleExpandRow(row)\">\n                    </itss-button>\n                </mat-cell>\n            </ng-container>\n\n            <ng-container *ngFor=\"let column of columns\"\n                          [cdkColumnDef]=\"column.property\">\n                <div *ngIf=\"column.sortable\">\n                    <mat-header-cell [fxFlex]=\"column.width | async\"\n                                     [fxLayoutAlign]=\"column.align\"\n                                     [ngStyle]=\"{'padding-left': column.sortable && column.align !== '' && (column.align.toLowerCase() === 'center' || column.align.toLowerCase() === 'center center') ? '15px' : '' }\"\n                                     [style.padding-left.px]=\"column.marginLeft | async\"\n                                     [style.padding-right.px]=\"column.marginRight | async\"\n                                     *cdkHeaderCellDef\n                                     mat-sort-header>\n                        {{ column.name }}\n                    </mat-header-cell>\n                </div>\n                <div *ngIf=\"!column.sortable\">\n                    <mat-header-cell [fxFlex]=\"column.width | async\"\n                                     [fxHide.lt-md]=\"column.hiddenSm\"\n                                     [fxLayoutAlign]=\"column.align\"\n                                     [style.padding-left.px]=\"column.marginLeft | async\"\n                                     [style.padding-right.px]=\"column.marginRight | async\"\n                                     *cdkHeaderCellDef>\n                        <ng-container *ngIf=\"column.name; else templateHeader\">\n                            {{ column.name }}\n                        </ng-container>\n\n                        <ng-template #templateHeader>\n                            <ng-container *ngIf=\"column.templateHeader\">\n                                <ng-container [ngTemplateOutlet]=\"column.templateHeader\"\n                                              [ngTemplateOutletContext]=\"{$implicit: data}\">\n                                </ng-container>\n                            </ng-container>\n                        </ng-template>\n                    </mat-header-cell>\n                </div>\n                <mat-cell [fxFlex]=\"column.width | async\"\n                          [fxHide.lt-md]=\"column.hiddenSm\"\n                          [fxHide]=\"!column.visible\"\n                          [fxLayoutAlign]=\"column.align\"\n                          [class.mat-cell-pointer]=\"column.action\"\n                          [style.padding-left.px]=\"column.marginLeft | async\"\n                          [style.padding-right.px]=\"column.marginRight | async\"\n                          (click)=\"column.action ? column.action(row) : null\"\n                          *cdkCellDef=\"let row\">\n                    <ng-container *ngIf=\"column.value; else template\">\n                        {{ (column.value(row) && (column.value(row).length > (column.sliceLength ? column.sliceLength :\n                        50)))\n                        ? (column.value(row) | slice:0:(column.sliceLength ? column.sliceLength : 50)) + '...'\n                        : column.value(row) }}\n                    </ng-container>\n\n                    <ng-template #template>\n                        <ng-container *ngIf=\"column.template\">\n                            <ng-container [ngTemplateOutlet]=\"column.template\"\n                                          [ngTemplateOutletContext]=\"{$implicit: row}\">\n                            </ng-container>\n                        </ng-container>\n                    </ng-template>\n                </mat-cell>\n            </ng-container>\n\n            <ng-container *ngIf=\"actionsRef\"\n                          cdkColumnDef=\"actionsColumn\">\n                <mat-header-cell fxFlex.gt-md=\"15\"\n                                 fxLayoutAlign=\"center center\"\n                                 *cdkHeaderCellDef>\n                    A\u00E7\u00F5es\n                </mat-header-cell>\n                <mat-cell fxFlex=\"15\"\n                          fxLayoutAlign=\"center center\"\n                          *cdkCellDef=\"let row\">\n                    <ng-template [ngTemplateOutlet]=\"actionsRef\"\n                                 [ngTemplateOutletContext]=\"{$implicit: row}\">\n                    </ng-template>\n                </mat-cell>\n            </ng-container>\n\n            <ng-container *ngIf=\"expandedRef\"\n                          matColumnDef=\"expandedDetail\">\n                <mat-cell *matCellDef=\"let row\"\n                          fxFlexFill\n                          class=\"cell-element-detail\">\n                    <div class=\"element-detail\"\n                         *ngIf=\"!ignoreChildrenExpandRow ? (row.children.length > 0) : ignoreChildrenExpandRow\"\n                         [class.collapsed]=\"!(isExpandedRow(row) | async)\"\n                         [class.expanded]=\"(isExpandedRow(row) | async)\">\n                        <ng-template [ngTemplateOutlet]=\"expandedRef\"\n                                     [ngTemplateOutletContext]=\"{$implicit: row}\">\n                        </ng-template>\n                    </div>\n                </mat-cell>\n            </ng-container>\n\n            <ng-container *ngIf=\"groupByColumn && groupHeaderRef\"\n                          matColumnDef=\"groupHeader\">\n                <mat-cell fxFlex\n                          [attr.colspan]=\"columns.length\"\n                          *matCellDef=\"let rowGroup\"\n                          style=\"cursor: pointer;\"\n                          [class.group-header-cell-collapsed]=\"!(isExpandedRow(rowGroup) | async)\"\n                          [class.group-header-cell-expanded]=\"(isExpandedRow(rowGroup) | async)\"\n                          (click)=\"toggleExpandRow(rowGroup)\">\n                    <div class=\"group-header-cell\">\n                        <itss-button *ngIf=\"rowGroup.childrenGroup.length > 0\"\n                                     [icon]=\"(isExpandedRow(rowGroup) | async) ? 'expand_more' : 'chevron_right'\"\n                                     style.margin-right=\"1.25rem\"\n                                     color=\"primary\"\n                                     type=\"icon\"\n                                     tooltip=\"Expandir | Retrair\">\n                        </itss-button>\n\n                        <ng-template [ngTemplateOutlet]=\"groupHeaderRef\"\n                                     [ngTemplateOutletContext]=\"{$implicit: rowGroup}\">\n                        </ng-template>\n                    </div>\n                </mat-cell>\n            </ng-container>\n\n            <ng-container *ngIf=\"groupByColumn && groupHeaderRef\"\n                          matColumnDef=\"expandedGroupHeader\">\n                <mat-cell *matCellDef=\"let rowGroup\"\n                          fxFlexFill>\n                    <div class=\"element-detail\"\n                         *ngIf=\"rowGroup.childrenGroup.length > 0\"\n                         [class.collapsed]=\"!(isExpandedRow(rowGroup) | async)\"\n                         [class.expanded]=\"(isExpandedRow(rowGroup) | async)\">\n\n                        <itss-table *ngIf=\"rowGroup.childrenGroup.length > 0; else noChildrenGroup\"\n                                    [paginator]=\"false\"\n                                    [shadow]=\"false\"\n                                    [showHeader]=\"false\"\n                                    [columns]=\"columns\"\n                                    [data]=\"rowGroup.childrenGroup\"\n                                    class=\"table-level-1\"\n                                    fxFlexFill>\n                            <ng-template #footer\n                                         *ngIf=\"groupByColumn && groupHeaderRef && groupFooterRef\">\n                                <ng-template [ngTemplateOutlet]=\"groupFooterRef\"\n                                             [ngTemplateOutletContext]=\"{$implicit: rowGroup}\">\n                                </ng-template>\n                            </ng-template>\n                        </itss-table>\n\n                        <ng-template #noChildrenGroup>\n                            <div *ngIf=\"!loading\"\n                                 class=\"no-records\">\n                                <mat-icon>sentiment_very_dissatisfied</mat-icon>\n                                <span>Nenhum registro foi encontrado</span>\n                            </div>\n                        </ng-template>\n                    </div>\n                </mat-cell>\n            </ng-container>\n\n            <mat-header-row #matHeaderRow\n                            (mouseenter)=\"_isPopoverHover = false; closePopover(0)\"\n                            *matHeaderRowDef=\"_displayedColumns; sticky: headerSticky || groupHeaderSticky\"\n                            [ngClass]=\"{ 'hidden-header': !showHeader }\">\n            </mat-header-row>\n\n            <div *ngIf=\"!loading && !expandable && !actionsPopoverRef && !groupByColumn && !groupHeaderRef\">\n                <mat-row (mouseover)=\"rowHover.emit(row)\"\n                         *matRowDef=\"let row; columns: _displayedColumns;\"\n                         [ngClass]=\"{ 'hoversimulator': row.isMouseHover === true }\"\n                         [class.highlight]=\"getHighlightRow(row)\"\n                         [attr.id]=\"'row_'+ getIndexRow(row)\">\n                </mat-row>\n            </div>\n\n            <div *ngIf=\"!loading && !expandable && actionsPopoverRef && !groupByColumn && !groupHeaderRef\">\n                <mat-row #rowTemplate\n                         *matRowDef=\"let row; columns: _displayedColumns;\"\n                         class=\"element-row\"\n                         (mousemove)=\"showPopover($event, row)\"\n                         [class.hoversimulator]=\"_contextPopover === row\"\n                         [class.highlight]=\"getHighlightRow(row)\"\n                         [attr.id]=\"'row_'+ getIndexRow(row)\">\n                </mat-row>\n            </div>\n\n            <div *ngIf=\"!loading && expandable && !actionsPopoverRef && !groupByColumn && !groupHeaderRef\">\n                <mat-row *matRowDef=\"let row; columns: _displayedColumns;\"\n                         class=\"element-row\"\n                         [class.expanded-row]=\"(isExpandedRow(row) | async)\"\n                         [ngClass]=\"{ 'hoversimulator': row.isMouseHover === true }\"\n                         [class.highlight]=\"getHighlightRow(row)\"\n                         [attr.id]=\"'row_'+ getIndexRow(row)\"\n                         (mouseover)=\"rowHover.emit(row)\"\n                         (click)=\"toggleExpandRow(row)\">\n                </mat-row>\n\n                <mat-row *matRowDef=\"let row; columns: ['expandedDetail'];\"\n                         class=\"detail-row\"\n                         [attr.id]=\"'row_expand'+ getIndexRow(row)\">\n                </mat-row>\n            </div>\n\n            <div *ngIf=\"!loading && expandable && actionsPopoverRef && !groupByColumn && !groupHeaderRef\">\n                <mat-row #rowTemplate\n                         *matRowDef=\"let row; columns: _displayedColumns;\"\n                         class=\"element-row\"\n                         [class.hoversimulator]=\"_contextPopover === row\"\n                         [class.expanded-row]=\"(isExpandedRow(row) | async)\"\n                         [class.highlight]=\"getHighlightRow(row)\"\n                         [attr.id]=\"'row_'+ getIndexRow(row)\"\n                         (mousemove)=\"showPopover($event, row)\"\n                         (click)=\"toggleExpandRow(row)\">\n                </mat-row>\n\n                <mat-row *matRowDef=\"let row; columns: ['expandedDetail'];\"\n                         class=\"detail-row\"\n                         [attr.id]=\"'row_expand'+ getIndexRow(row)\">\n                </mat-row>\n            </div>\n\n            <div *ngIf=\"!loading && !expandable && !actionsPopoverRef && groupByColumn && groupHeaderRef\">\n                <mat-row *matRowDef=\"let row; columns: ['groupHeader'];\"\n                         class=\"element-row\"\n                         [class.expanded-row]=\"(isExpandedRow(row) | async)\"\n                         [class.group-header-sticky]=\"groupHeaderSticky\"\n                         [ngClass]=\"{ 'hoversimulator': row.isMouseHover === true }\"\n                         [class.highlight]=\"getHighlightRow(row)\"\n                         [attr.id]=\"'row_'+ getIndexRow(row)\"\n                         (mouseover)=\"rowHover.emit(row)\"\n                         (click)=\"toggleExpandRow(row)\">\n                </mat-row>\n\n                <mat-row *matRowDef=\"let row; columns: ['expandedGroupHeader'];\"\n                         class=\"detail-row\"\n                         [attr.id]=\"'row_group'+ getIndexRow(row)\">\n                </mat-row>\n            </div>\n        </mat-table>\n\n        <mat-progress-bar mode=\"indeterminate\"\n                          color=\"accent\"\n                          *ngIf=\"loading\">\n        </mat-progress-bar>\n\n        <div *ngIf=\"!loading && (data && (data.length > 0)) && footerRef\"\n             class=\"footer-row\"\n             fxLayout=\"column\"\n             fxLayoutGap=\"10px\">\n            <ng-template [ngTemplateOutlet]=\"footerRef\"\n                         [ngTemplateOutletContext]=\"{$implicit: data}\">\n            </ng-template>\n        </div>\n\n        <div *ngIf=\"!loading && (data && (data.length <= 0))\"\n             class=\"no-records\">\n            <mat-icon>sentiment_very_dissatisfied</mat-icon>\n            <span>Nenhum registro foi encontrado</span>\n        </div>\n\n        <ng-container *ngIf=\"!loading && paginator && (data && (data.length > 0))\">\n            <ng-container #backendPaginatorTemplate\n                          *ngIf=\"backendPagination && !infiniteScroll\">\n                <mat-paginator #backendPaginator\n                               [hidePageSize]=\"!showPageSizeOptions || (paginatorPageSizeOptions && (paginatorPageSizeOptions.length <= 0))\"\n                               [length]=\"paginatorLength\"\n                               [pageIndex]=\"paginatorPageIndex\"\n                               [pageSize]=\"paginatorPageSize\"\n                               [pageSizeOptions]=\"paginatorPageSizeOptions\"\n                               (page)=\"onPage($event)\"\n                               (mouseenter)=\"closePopover(0)\"\n                               showFirstLastButtons>\n                </mat-paginator>\n            </ng-container>\n\n            <ng-container #frontendPaginatorTemplate\n                          *ngIf=\"!backendPagination && !infiniteScroll\">\n                <mat-paginator #frontendPaginator\n                               [hidePageSize]=\"!showPageSizeOptions || (paginatorPageSizeOptions && (paginatorPageSizeOptions.length <= 0))\"\n                               [length]=\"paginatorLength\"\n                               [pageIndex]=\"paginatorPageIndex\"\n                               [pageSize]=\"paginatorPageSize\"\n                               [pageSizeOptions]=\"paginatorPageSizeOptions\"\n                               (page)=\"onPage($event)\"\n                               showFirstLastButtons>\n                </mat-paginator>\n            </ng-container>\n        </ng-container>\n\n        <ng-container #infiniteScrollPaginatorTemplate\n                      *ngIf=\"infiniteScroll && (data && (data.length > 0))\">\n            <span class=\"infinite-scroll-paginator\">\n                1 - {{ data.length }} de {{ paginatorLength }}\n            </span>\n        </ng-container>\n    </ng-template>\n</div>\n\n<div id=\"table-popover\"\n     class=\"table-popover\"\n     (mouseover)=\"_isPopoverHover = true\"\n     (mouseout)=\"_isPopoverHover = false; closePopover(0)\"\n     *ngIf=\"!loading && actionsPopoverRef\">\n    <ng-container [ngTemplateOutlet]=\"actionsPopoverRef\"\n                  [ngTemplateOutletContext]=\"{ $implicit: _contextPopover }\">\n    </ng-container>\n</div>",
         
     | 
| 
       511 
573 
     | 
    
         
             
                    animations: [
         
     | 
| 
       512 
574 
     | 
    
         
             
                        trigger('detailExpand', [
         
     | 
| 
       513 
575 
     | 
    
         
             
                            state('collapsed', style({ height: '0px', minHeight: '0', display: 'none' })),
         
     | 
| 
         @@ -515,9 +577,9 @@ TableComponent = __decorate([ 
     | 
|
| 
       515 
577 
     | 
    
         
             
                            transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),
         
     | 
| 
       516 
578 
     | 
    
         
             
                        ]),
         
     | 
| 
       517 
579 
     | 
    
         
             
                    ],
         
     | 
| 
       518 
     | 
    
         
            -
                    styles: [".box-shadow{border-radius:2px;box-shadow:0 3px 1px -2px rgba(0,0,0,.14),0 2px 2px 0 rgba(0,0,0,.098),0 1px 5px 0 rgba(0,0,0,.084)}table{width:100%}itss-loading{margin:25px;opacity:.7}.no-records{height:48px;display:flex;align-items:center;justify-content:center;flex-direction:column;margin:30px;font-size:14px!important;font-weight:600!important;color:#b3afb3!important}.no-records mat-icon{font-size:32px;height:32px;width:32px;margin-bottom:5px}.footer-row{min-height:57px;font-weight:700;padding:15px 24px;display:flex;align-items:flex-end;justify-content:center;flex-direction:column;color:rgba(0,0,0,.67);border-bottom:1px solid rgba(0,0,0,.12)}.mat-cell-pointer{cursor:pointer}.detail-row{min-height:0!important;border-bottom-width:0}element-row:not(.expanded-row):hover{background:#f5f5f5}element-row:not(.expanded-row):active{background:#efefef}.hoversimulator:not(.highlight){background:#f5f5f5}.hoversimulator:has(.highlight){background-color:rgba(255,217,0,.212)!important}.highlight{background-color:rgba(255,217,0,.102)!important}::ng-deep mat-cell.cell-element-detail{font-weight:400!important}.element-detail{width:100%;overflow:hidden;display:flex;min-height:45px!important}.element-detail.collapsed{height:0!important;min-height:0!important;display:none!important}.element-detail.expanded{height:auto!important}.hidden-header,.hidden-header .mat-header-cell{height:0!important;min-height:0!important}.actions-popover.mat-card{min-width:auto!important;padding:5px!important;background:#f5f5f5;border-radius:5px!important}.actions-popover.mat-card .mat-card-content itss-button .mat-icon-button mat-icon{height:18px!important;width:18px!important}.table-level-1 .mat-table .mat-header-row{border-bottom:unset!important}.mat-column-expandedGroupHeader{padding:0!important}.group-header-cell{display:flex;flex-direction:row;align-items:center;width:100%}.group-header-sticky{position:-webkit-sticky;position:sticky;top:54px}.infinite-scroll-paginator{color:#696969;font-size:14px;display:flex;align-items:center;justify-content:center;height:56px;position:-webkit-sticky;position:sticky;bottom:0;background:#fff;border-top:1px solid #f3465c}.table-popover{position:fixed;display:inline-flex;background-color:#f5f5f5;width:auto;border-radius:0 0 10px 10px;border:1px solid #ddd;border-top-width:0;padding:2px 5px;z-index:1;visibility:hidden}"]
         
     | 
| 
      
 580 
     | 
    
         
            +
                    styles: [".box-shadow{border-radius:2px;box-shadow:0 3px 1px -2px rgba(0,0,0,.14),0 2px 2px 0 rgba(0,0,0,.098),0 1px 5px 0 rgba(0,0,0,.084)}table{width:100%}itss-loading{margin:25px;opacity:.7}.no-records{height:48px;display:flex;align-items:center;justify-content:center;flex-direction:column;margin:30px;font-size:14px!important;font-weight:600!important;color:#b3afb3!important;text-transform:initial!important}.no-records mat-icon{font-size:32px;height:32px;width:32px;margin-bottom:5px}.footer-row{min-height:57px;font-weight:700;padding:15px 24px;display:flex;align-items:flex-end;justify-content:center;flex-direction:column;color:rgba(0,0,0,.67);border-bottom:1px solid rgba(0,0,0,.12)}.mat-cell-pointer{cursor:pointer}.detail-row{min-height:0!important;border-bottom-width:0}element-row:not(.expanded-row):hover{background:#f5f5f5}element-row:not(.expanded-row):active{background:#efefef}.hoversimulator:not(.highlight){background:#f5f5f5}.hoversimulator:has(.highlight){background-color:rgba(255,217,0,.212)!important}.highlight{background-color:rgba(255,217,0,.102)!important}::ng-deep mat-cell.cell-element-detail{font-weight:400!important}.element-detail{width:100%;overflow:hidden;display:flex;min-height:45px!important}.element-detail.collapsed{height:0!important;min-height:0!important;display:none!important}.element-detail.expanded{height:auto!important}.hidden-header,.hidden-header .mat-header-cell{height:0!important;min-height:0!important}.actions-popover.mat-card{min-width:auto!important;padding:5px!important;background:#f5f5f5;border-radius:5px!important}.actions-popover.mat-card .mat-card-content itss-button .mat-icon-button mat-icon{height:18px!important;width:18px!important}.table-level-1 .mat-table .mat-header-row{border-bottom:unset!important}.mat-column-expandedGroupHeader{padding:0!important}.group-header-cell{display:flex;flex-direction:row;align-items:center;width:100%}.group-header-sticky{position:-webkit-sticky;position:sticky;top:54px}.infinite-scroll-paginator{color:#696969;font-size:14px;display:flex;align-items:center;justify-content:center;height:56px;position:-webkit-sticky;position:sticky;bottom:0;background:#fff;border-top:1px solid #f3465c}.table-popover{position:fixed;display:inline-flex;background-color:#f5f5f5;width:auto;border-radius:0 0 10px 10px;border:1px solid #ddd;border-top-width:0;padding:2px 5px;z-index:1;visibility:hidden}"]
         
     | 
| 
       519 
581 
     | 
    
         
             
                }),
         
     | 
| 
       520 
     | 
    
         
            -
                __metadata("design:paramtypes", [])
         
     | 
| 
      
 582 
     | 
    
         
            +
                __metadata("design:paramtypes", [NgZone])
         
     | 
| 
       521 
583 
     | 
    
         
             
            ], TableComponent);
         
     | 
| 
       522 
584 
     | 
    
         
             
            export { TableComponent };
         
     | 
| 
       523 
     | 
    
         
            -
            //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGdpcGlzaXN0ZW1hcy9uZy1jb3JlLyIsInNvdXJjZXMiOlsic2hhcmVkL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUosT0FBTyxFQUFtQixZQUFZLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUF1QixNQUFNLG1CQUFtQixDQUFDO0FBQ3BILE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXZDLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQWdCdEYsSUFBYSxjQUFjLEdBQTNCLE1BQWEsY0FBYztJQXdIdkI7UUF0SFEsc0JBQWlCLEdBQVUsRUFBRSxDQUFDO1FBRS9CLHNCQUFpQixHQUFXLEdBQUcsQ0FBQztRQUNoQyxvQkFBZSxHQUFRLElBQUksQ0FBQztRQUc1QixzQkFBaUIsR0FBVSxFQUFFLENBQUM7UUFtQjVCLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFFeEIsWUFBTyxHQUFxQixFQUFFLENBQUM7UUFXL0IsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUUzQixzQkFBaUIsR0FBWSxJQUFJLENBQUM7UUFFbEMsdUJBQWtCLEdBQVcsQ0FBQyxDQUFDO1FBRS9C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QUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQzdFLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQ3pDLFVBQVUsQ0FBQyx3QkFBd0IsRUFBRSxPQUFPLENBQUMsc0NBQXNDLENBQUMsQ0FBQzthQUN4RixDQUFDO1NBQ0w7O0tBQ0osQ0FBQzs7R0FDVyxjQUFjLENBaVoxQjtTQWpaWSxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0SGVhZGVyUm93RGVmLCBNYXRQYWdpbmF0b3IsIE1hdFNvcnQsIE1hdFRhYmxlRGF0YVNvdXJjZSwgU29ydCwgU29ydERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQXJyYXlVdGlsLCBPYmplY3RVdGlsLCBTdHJpbmdVdGlsIH0gZnJvbSAnLi4vLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBUYWJsZUNvbHVtbkRUTyB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL2R0by90YWJsZS1jb2x1bW4uZHRvJztcbmltcG9ydCB7IFRhYmxlR3JvdXBIZWFkZXJEVE8gfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9kdG8vdGFibGUtZ3JvdXAtaGVhZGVyLmR0byc7XG5pbXBvcnQgeyBUYWJsZVBhZ2VFdmVudERUTyB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL2R0by90YWJsZS1wYWdlLWV2ZW50LmR0byc7XG5cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpdHNzLXRhYmxlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICB0cmlnZ2VyKCdkZXRhaWxFeHBhbmQnLCBbXG4gICAgICAgICAgICBzdGF0ZSgnY29sbGFwc2VkJywgc3R5bGUoeyBoZWlnaHQ6ICcwcHgnLCBtaW5IZWlnaHQ6ICcwJywgZGlzcGxheTogJ25vbmUnIH0pKSxcbiAgICAgICAgICAgIHN0YXRlKCdleHBhbmRlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnKicgfSkpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignZXhwYW5kZWQgPD0+IGNvbGxhcHNlZCcsIGFuaW1hdGUoJzIyNW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKScpKSxcbiAgICAgICAgXSksXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uSW5pdCB7XG5cbiAgICBwcml2YXRlIF9leHBhbmRlZEVsZW1lbnRzOiBhbnlbXSA9IFtdO1xuXG4gICAgcHVibGljIF9zY3JvbGxIZWlnaHRDYWxjOiBudW1iZXIgPSA0MTA7XG4gICAgcHVibGljIF9pc1BvcG92ZXJIb3ZlcjogYW55ID0gbnVsbDtcbiAgICBwdWJsaWMgX2NvbnRleHRQb3BvdmVyOiBUO1xuICAgIHB1YmxpYyBfZXhwYW5kZWRFbGVtZW50OiBhbnk7XG4gICAgcHVibGljIF9kaXNwbGF5ZWRDb2x1bW5zOiBhbnlbXSA9IFtdO1xuICAgIHB1YmxpYyBfZGF0YVNvdXJjZTogTWF0VGFibGVEYXRhU291cmNlPFQgfCBUYWJsZUdyb3VwSGVhZGVyRFRPPjtcblxuICAgIEBWaWV3Q2hpbGQoTWF0U29ydCwgeyBzdGF0aWM6IHRydWUgfSkgbWF0U29ydDogTWF0U29ydDtcbiAgICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvciwgeyBzdGF0aWM6IHRydWUgfSkgbWF0UGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XG4gICAgQFZpZXdDaGlsZCgnZnJvbnRlbmRQYWdpbmF0b3InLCB7IHN0YXRpYzogZmFsc2UgfSkgbWF0RnJvbnRlbmRQYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcbiAgICBAVmlld0NoaWxkKCdiYWNrZW5kUGFnaW5hdG9yJywgeyBzdGF0aWM6IGZhbHNlIH0pIG1hdEJhY2tlbmRQYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcblxuICAgIEBWaWV3Q2hpbGQoJ21hdEhlYWRlclJvdycsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgX21hdEhlYWRlclJvd1JlZjogVGVtcGxhdGVSZWY8TWF0SGVhZGVyUm93RGVmPjtcbiAgICBAVmlld0NoaWxkKCdmcm9udGVuZFBhZ2luYXRvcicsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgX21hdEZyb250ZW5kUGFnaW5hdG9yUm93UmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBWaWV3Q2hpbGQoJ2JhY2tlbmRQYWdpbmF0b3InLCB7IHN0YXRpYzogdHJ1ZSB9KSBwcml2YXRlIF9tYXRCYWNrZW5kUGFnaW5hdG9yUm93UmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQENvbnRlbnRDaGlsZCgnYWN0aW9ucycsIHsgc3RhdGljOiBmYWxzZSB9KSBhY3Rpb25zUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGQoJ2FjdGlvbnNQb3BvdmVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIGFjdGlvbnNQb3BvdmVyUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGQoJ2Zvb3RlcicsIHsgc3RhdGljOiBmYWxzZSB9KSBmb290ZXJSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZCgnZXhwYW5kZWQnLCB7IHN0YXRpYzogZmFsc2UgfSkgZXhwYW5kZWRSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZCgnZ3JvdXBIZWFkZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgZ3JvdXBIZWFkZXJSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZCgnZ3JvdXBGb290ZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgZ3JvdXBGb290ZXJSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBASW5wdXQoKSBzaGFkb3c6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGNvbHVtbnM6IFRhYmxlQ29sdW1uRFRPW10gPSBbXTtcblxuICAgIHByaXZhdGUgX2RhdGFWYWx1ZTogVFtdO1xuICAgIEBJbnB1dCgpIGdldCBkYXRhKCk6IFRbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhVmFsdWU7XG4gICAgfVxuICAgIHNldCBkYXRhKGRhdGE6IFRbXSkge1xuICAgICAgICB0aGlzLl9kYXRhVmFsdWUgPSBkYXRhO1xuICAgICAgICB0aGlzLmRhdGFDaGFuZ2UuZW1pdCh0aGlzLl9kYXRhVmFsdWUpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHBhZ2luYXRvcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgYmFja2VuZFBhZ2luYXRpb246IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KCkgcGFnaW5hdG9yUGFnZUluZGV4OiBudW1iZXIgPSAwO1xuXG4gICAgQElucHV0KCkgcGFnaW5hdG9yTGVuZ3RoOiBudW1iZXIgPSAwO1xuXG4gICAgQElucHV0KCkgcGFnaW5hdG9yUGFnZVNpemU6IG51bWJlciA9IDEwO1xuXG4gICAgQElucHV0KCkgcGFnaW5hdG9yUGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IFsxMCwgMjAsIDMwXTtcblxuICAgIEBJbnB1dCgpIHNob3dQYWdlU2l6ZU9wdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGV4cGFuZGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHNob3dIZWFkZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KCkgY29sdW1uSW5pdGlhbDogbnVtYmVyO1xuXG4gICAgQElucHV0KCkgY29sdW1uRmluYWw6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpIGhlYWRlclN0aWNreTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgZ3JvdXBCeUNvbHVtbjogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgZ3JvdXBIZWFkZXJTdGlja3k6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGdyb3VwU3RhcnRFeHBhbmRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgaGlnaGxpZ2h0Um93Rm46IChyb3c6IFQgfCBUYWJsZUdyb3VwSGVhZGVyRFRPKSA9PiBib29sZWFuO1xuXG4gICAgQElucHV0KCkgaW5maW5pdGVTY3JvbGw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHNjcm9sbERlbGF5OiBudW1iZXIgPSAxMDAwO1xuXG4gICAgQElucHV0KCkgc2Nyb2xsT2Zmc2V0OiBudW1iZXIgPSAxMDAwO1xuXG4gICAgQElucHV0KCkgc2Nyb2xsSGVpZ3RoOiBudW1iZXI7XG5cbiAgICBASW5wdXQoKSBpc0ZpbHRlcmluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCdjb2x1bW5FeHBhbmRhYmxlRml4ZWQnKSBzaG93Q29sdW1uRXhwYW5kYWJsZUZpeGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBleHBhbmRhYmxlT25lUm93OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBpZ25vcmVDaGlsZHJlbkV4cGFuZFJvdzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgY2xlYXJTb3J0OiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgc29ydEFjdGl2ZTogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgc29ydERpcmVjdGlvbjogU29ydERpcmVjdGlvbiA9ICdhc2MnO1xuXG4gICAgQE91dHB1dCgpIHJvd0V4cGFuZGVkQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VD4gPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KHRydWUpO1xuICAgIEBPdXRwdXQoKSBkYXRhQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VFtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8VFtdPih0cnVlKTtcbiAgICBAT3V0cHV0KCkgcGFnZTogRXZlbnRFbWl0dGVyPFRhYmxlUGFnZUV2ZW50RFRPPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgcm93SG92ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgcHVibGljIGdldCBtYXRUYWJsZUhlaWd0aCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICBsZXQgaGVhZGVyUm93SGVpZ2h0OiBudW1iZXI7XG4gICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5fbWF0SGVhZGVyUm93UmVmKSkge1xuICAgICAgICAgICAgaGVhZGVyUm93SGVpZ2h0ID0gKHRoaXMuX21hdEhlYWRlclJvd1JlZi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmNsaWVudEhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwYWdpbmF0b3JSb3dIZWlnaHQ6IG51bWJlcjtcbiAgICAgICAgY29uc3QgcGFnaW5hdG9yUmVmID0gdGhpcy5iYWNrZW5kUGFnaW5hdGlvbiA/IHRoaXMuX21hdEJhY2tlbmRQYWdpbmF0b3JSb3dSZWYgOiB0aGlzLl9tYXRGcm9udGVuZFBhZ2luYXRvclJvd1JlZjtcbiAgICAgICAgaWYgKCFPYmplY3RVdGlsLmlzTnVsbChwYWdpbmF0b3JSZWYpKSB7XG4gICAgICAgICAgICBwYWdpbmF0b3JSb3dIZWlnaHQgPSAocGFnaW5hdG9yUmVmLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuY2xpZW50SGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWF0SGVhZGVyd0hlaWdodDogbnVtYmVyID0gaGVhZGVyUm93SGVpZ2h0IHx8IDYwO1xuICAgICAgICBjb25zdCBtYXRQYWdpbmF0b3JIZWlnaHQ6IG51bWJlciA9IHBhZ2luYXRvclJvd0hlaWdodCB8fCA1NztcblxuICAgICAgICBjb25zdCBwYWdlU2l6ZTogbnVtYmVyID0gdGhpcy5wYWdpbmF0b3JQYWdlU2l6ZSAmJiAodGhpcy5wYWdpbmF0b3JQYWdlU2l6ZSA8PSAxMCkgPyB0aGlzLnBhZ2luYXRvclBhZ2VTaXplIDogMTA7XG4gICAgICAgIGNvbnN0IHNldEhlaWd0aDogYm9vbGVhbiA9IHRoaXMuaGVhZGVyU3RpY2t5ICYmICh0aGlzLmRhdGEubGVuZ3RoID4gcGFnZVNpemUpO1xuXG4gICAgICAgIHJldHVybiBvZihzZXRIZWlndGggPyBgJHsoKDU3ICogcGFnZVNpemUpICsgbWF0SGVhZGVyd0hlaWdodCArIG1hdFBhZ2luYXRvckhlaWdodCl9cHhgIDogJ2F1dG8nKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7IH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuX2RhdGFTb3VyY2UpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5tYXRTb3J0O1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGFnaW5hdG9yICYmICF0aGlzLmJhY2tlbmRQYWdpbmF0aW9uICYmICF0aGlzLmluZmluaXRlU2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5tYXRGcm9udGVuZFBhZ2luYXRvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnBhZ2luYXRvciAmJiAodGhpcy5iYWNrZW5kUGFnaW5hdGlvbiB8fCB0aGlzLmluZmluaXRlU2Nyb2xsKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub25QYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgcGFnZVNpemU6IHRoaXMucGFnaW5hdG9yUGFnZVNpemUsXG4gICAgICAgICAgICAgICAgICAgIHBhZ2luYXRvclBhZ2VTaXplT3B0aW9uczogdGhpcy5wYWdpbmF0b3JQYWdlU2l6ZU9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOiAwLFxuICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1BhZ2VJbmRleDogMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuYWN0aW9uc1BvcG92ZXJSZWYpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dFBvcG92ZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzUG9wb3ZlckhvdmVyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZVBvcG92ZXIoMCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwb3BvdmVyOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWJsZS1wb3BvdmVyJyk7XG4gICAgICAgICAgICAgICAgaWYgKCFPYmplY3RVdGlsLmlzTnVsbChwb3BvdmVyKSkge1xuICAgICAgICAgICAgICAgICAgICBwb3BvdmVyLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2hhbmdlcy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlRGF0YVNvdXJjZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVEYXRhU291cmNlKCk6IHZvaWQge1xuICAgICAgICBsZXQgY29sdW1uczogc3RyaW5nW10gPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGMgPT4gYy52aXNpYmxlKS5tYXAoYyA9PiBjLnByb3BlcnR5KTtcbiAgICAgICAgaWYgKCFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLmV4cGFuZGVkUmVmKSkge1xuICAgICAgICAgICAgY29sdW1ucyA9IFsnZXhwYW5kZWRDb2x1bW4nLCAuLi5jb2x1bW5zXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuYWN0aW9uc1JlZikpIHtcbiAgICAgICAgICAgIGNvbHVtbnMgPSBbLi4uY29sdW1ucywgJ2FjdGlvbnNDb2x1bW4nXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kaXNwbGF5ZWRDb2x1bW5zID0gY29sdW1ucztcblxuICAgICAgICBpZiAodGhpcy5pbmZpbml0ZVNjcm9sbCkge1xuICAgICAgICAgICAgbGV0IGRhdGFBbGw6IFRbXSA9IFtdO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNGaWx0ZXJpbmcpIHtcbiAgICAgICAgICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuX2RhdGFTb3VyY2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFBbGwgPSBBcnJheVV0aWwuY2xvbmUodGhpcy5fZGF0YVNvdXJjZS5kYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghQXJyYXlVdGlsLmlzRW1wdHkodGhpcy5kYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGFBbGwucHVzaCguLi50aGlzLmRhdGEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZShbXSk7XG4gICAgICAgICAgICBpZiAoIVN0cmluZ1V0aWwuaXNFbXB0eSh0aGlzLmdyb3VwQnlDb2x1bW4pICYmICFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLmdyb3VwSGVhZGVyUmVmKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZ2VuZXJldGVHcm91cHNCeUNvbHVtbihkYXRhQWxsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZS5kYXRhID0gZGF0YUFsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5kYXRhID0gZGF0YUFsbDtcbiAgICAgICAgICAgIHRoaXMuZGF0YUNoYW5nZS5lbWl0KHRoaXMuZGF0YSk7XG4gICAgICAgICAgICB0aGlzLmNhbGNTY3JvbGxIZWlnaHQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKFtdKTtcbiAgICAgICAgICAgIGlmICghU3RyaW5nVXRpbC5pc0VtcHR5KHRoaXMuZ3JvdXBCeUNvbHVtbikgJiYgIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuZ3JvdXBIZWFkZXJSZWYpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5nZW5lcmV0ZUdyb3Vwc0J5Q29sdW1uKHRoaXMuZGF0YSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghQXJyYXlVdGlsLmlzRW1wdHkodGhpcy5fZGF0YVNvdXJjZS5kYXRhKSkge1xuICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5tYXRTb3J0O1xuICAgICAgICAgICAgdGhpcy5zZXRTb3J0aW5nRGF0YUFjY2Vzc29yKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wYWdpbmF0b3IgJiYgIXRoaXMuYmFja2VuZFBhZ2luYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5tYXRGcm9udGVuZFBhZ2luYXRvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5ncm91cFN0YXJ0RXhwYW5kZWQgJiYgKHRoaXMuZ3JvdXBIZWFkZXJSZWYgfHwgKHRoaXMuZXhwYW5kYWJsZSAmJiB0aGlzLmV4cGFuZGVkUmVmKSkgJiYgIUFycmF5VXRpbC5pc0VtcHR5KHRoaXMuX2RhdGFTb3VyY2UuZGF0YSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2UuZGF0YS5mb3JFYWNoKHJvdyA9PiB0aGlzLmFkZENvbGxhcHNlKHJvdykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2FsY1Njcm9sbEhlaWdodCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCh0aGlzLl9kYXRhU291cmNlICYmICh0aGlzLl9kYXRhU291cmNlLmRhdGEubGVuZ3RoID4gMCkpICYmIChNYXRoLmZsb29yKHRoaXMuX3Njcm9sbEhlaWdodENhbGMpIDw9IDcwMCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Njcm9sbEhlaWdodENhbGMgPSAxMzAgKyAodGhpcy5fZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCAqIDQ4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUGFnZShwYWdlRXZlbnQ6IFRhYmxlUGFnZUV2ZW50RFRPKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGFnaW5hdG9yUGFnZVNpemUgPSBwYWdlRXZlbnQucGFnZVNpemU7XG4gICAgICAgIHBhZ2VFdmVudC5wYWdpbmF0b3JQYWdlU2l6ZU9wdGlvbnMgPSBBcnJheVV0aWwuaXNFbXB0eShwYWdlRXZlbnQucGFnaW5hdG9yUGFnZVNpemVPcHRpb25zKSA/IHRoaXMucGFnaW5hdG9yUGFnZVNpemVPcHRpb25zIDogcGFnZUV2ZW50LnBhZ2luYXRvclBhZ2VTaXplT3B0aW9ucztcbiAgICAgICAgdGhpcy5wYWdlLmVtaXQocGFnZUV2ZW50KTtcbiAgICB9XG5cbiAgICBpc0V4cGFuc2VkKGVsZW1lbnQ6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXhwYW5kZWRFbGVtZW50cy5maWx0ZXIoZSA9PiBPYmplY3RVdGlsLmVxdWFscyhlLCBlbGVtZW50KSkubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICByZW1vdmVDb2xsYXBzZShlbGVtZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZXhwYW5kYWJsZU9uZVJvdykge1xuICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZS5kYXRhLmZvckVhY2gocm93ID0+IHRoaXMuYWRkQ29sbGFwc2Uocm93KSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBleHBhbmRlZEVsZW1lbnRzQXV4OiBhbnlbXSA9IEFycmF5VXRpbC5jbG9uZSh0aGlzLl9leHBhbmRlZEVsZW1lbnRzKTtcbiAgICAgICAgZXhwYW5kZWRFbGVtZW50c0F1eC5zcGxpY2UodGhpcy5fZXhwYW5kZWRFbGVtZW50cy5pbmRleE9mKGVsZW1lbnQpLCAxKTtcbiAgICAgICAgdGhpcy5fZXhwYW5kZWRFbGVtZW50cyA9IEFycmF5VXRpbC5jbG9uZShleHBhbmRlZEVsZW1lbnRzQXV4KTtcbiAgICB9XG5cbiAgICBhZGRDb2xsYXBzZShlbGVtZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29sbGFwc2VkRWxlbWVudDogYm9vbGVhbiA9IHRoaXMuX2V4cGFuZGVkRWxlbWVudHMuZmlsdGVyKGUgPT4gT2JqZWN0VXRpbC5lcXVhbHMoZSwgZWxlbWVudCkpLmxlbmd0aCA+IDA7XG4gICAgICAgIGlmICghY29sbGFwc2VkRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5fZXhwYW5kZWRFbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcm93RXhwYW5kZWRDaGFuZ2VFbWl0KGVsZW1lbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnJvd0V4cGFuZGVkQ2hhbmdlLmVtaXQoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgc29ydERhdGEoc29ydDogU29ydCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pbmZpbml0ZVNjcm9sbCkge1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gW107XG4gICAgICAgICAgICB0aGlzLmRhdGFDaGFuZ2UuZW1pdChbXSk7XG4gICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZShbXSk7XG4gICAgICAgICAgICB0aGlzLmNhbGNTY3JvbGxIZWlnaHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25QYWdlKHtcbiAgICAgICAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2luYXRvclBhZ2VTaXplLFxuICAgICAgICAgICAgcGFnZUluZGV4OiAwLFxuICAgICAgICAgICAgbGVuZ3RoOiAwLFxuICAgICAgICAgICAgcHJldmlvdXNQYWdlSW5kZXg6IDAsXG4gICAgICAgICAgICBwYWdpbmF0b3JQYWdlU2l6ZU9wdGlvbnM6IHRoaXMucGFnaW5hdG9yUGFnZVNpemVPcHRpb25zLFxuICAgICAgICAgICAgc29ydDogc29ydFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzaG93UG9wb3ZlcihldmVudDogTW91c2VFdmVudCwgZGF0YTogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBvcG92ZXI6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhYmxlLXBvcG92ZXInKTtcbiAgICAgICAgaWYgKCFPYmplY3RVdGlsLmlzTnVsbChwb3BvdmVyKSkge1xuICAgICAgICAgICAgcG9wb3Zlci5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5sb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZG9tUmVjdFBvcG92ZXIgPSBwb3BvdmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvbVJlY3RSb3cgPSAoZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbHMgPSAoZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MVGFibGVSb3dFbGVtZW50KS5jaGlsZHJlbjtcblxuICAgICAgICAgICAgICAgIGlmIChkb21SZWN0UG9wb3ZlciAmJiBkb21SZWN0Um93KSB7XG4gICAgICAgICAgICAgICAgICAgIHBvcG92ZXIuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcbiAgICAgICAgICAgICAgICAgICAgcG9wb3Zlci5zdHlsZS50b3AgPSBgJHsoZG9tUmVjdFJvdy50b3AgKyBkb21SZWN0Um93LmhlaWdodCkgLSAxfXB4YDtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgc3RhcnRQb3NpdGlvbjogbnVtYmVyID0gMDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGVuZFBvc2l0aW9uOiBudW1iZXIgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbHVtbkluaXRpYWwgJiYgKHRoaXMuY29sdW1uSW5pdGlhbCA+PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjZWxsc1t0aGlzLmNvbHVtbkluaXRpYWxdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbml0aWFsIGNvbHVtbiB1bmRlZmluZWQgb3IgbnVsbCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IGNlbGxzW3RoaXMuY29sdW1uSW5pdGlhbF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBkb21SZWN0Um93LmxlZnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb2x1bW5GaW5hbCAmJiAodGhpcy5jb2x1bW5GaW5hbCA+PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjZWxsc1t0aGlzLmNvbHVtbkZpbmFsXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmluYWwgY29sdW1uIHVuZGVmaW5lZCBvciBudWxsJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRQb3NpdGlvbiA9IGNlbGxzW3RoaXMuY29sdW1uRmluYWxdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSBkb21SZWN0UG9wb3Zlci53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFBvc2l0aW9uID0gZG9tUmVjdFJvdy5yaWdodCAtIGRvbVJlY3RQb3BvdmVyLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuY2xpZW50WCA+IHN0YXJ0UG9zaXRpb24gKyAxNSAmJiBldmVudC5jbGllbnRYIDwgZW5kUG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3BvdmVyLnN0eWxlLmxlZnQgPSBgJHtldmVudC5jbGllbnRYIC0gMTV9cHhgO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5jbGllbnRYIDw9IHN0YXJ0UG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3BvdmVyLnN0eWxlLmxlZnQgPSBgJHtzdGFydFBvc2l0aW9ufXB4YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuY2xpZW50WCA+PSBlbmRQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcG92ZXIuc3R5bGUubGVmdCA9IGAke2VuZFBvc2l0aW9ufXB4YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucm93SG92ZXIuZW1pdChkYXRhKTtcbiAgICAgICAgdGhpcy5fY29udGV4dFBvcG92ZXIgPSBkYXRhO1xuICAgIH1cblxuICAgIGNsb3NlUG9wb3Zlcih0aW1lOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgb2YobnVsbCkucGlwZShkZWxheSh0aW1lKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5faXNQb3BvdmVySG92ZXIpICYmICF0aGlzLl9pc1BvcG92ZXJIb3Zlcikge1xuICAgICAgICAgICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5faXNQb3BvdmVySG92ZXIpICYmICFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLmFjdGlvbnNQb3BvdmVyUmVmKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3BvdmVyOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWJsZS1wb3BvdmVyJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwocG9wb3ZlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcG92ZXIuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRleHRQb3BvdmVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc1BvcG92ZXJIb3ZlciA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldFNvcnRpbmdEYXRhQWNjZXNzb3IoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2Uuc29ydGluZ0RhdGFBY2Nlc3NvciA9IChkYXRhOiBhbnksIHNvcnRIZWFkZXJJZDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtzb3J0SGVhZGVySWRdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhW3NvcnRIZWFkZXJJZF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkYXRhW3NvcnRIZWFkZXJJZF07XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gZ3JvdXAgaGVhZGVyXG4gICAgZ2VuZXJldGVHcm91cHNCeUNvbHVtbihkYXRhOiBhbnlbXSk6IFRhYmxlR3JvdXBIZWFkZXJEVE9bXSB7XG4gICAgICAgIGNvbnN0IGdyb3Vwczoge30gPSBkYXRhLnJlZHVjZSgoZ3JvdXAsIHJvdykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YUNvbHVtbjogc3RyaW5nID0gcm93W3RoaXMuZ3JvdXBCeUNvbHVtbl0udG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGlmICghZ3JvdXBbZGF0YUNvbHVtbl0pIHtcbiAgICAgICAgICAgICAgICBncm91cFtkYXRhQ29sdW1uXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ3JvdXBbZGF0YUNvbHVtbl0ucHVzaChyb3cpO1xuICAgICAgICAgICAgcmV0dXJuIGdyb3VwO1xuICAgICAgICB9LCB7fSk7XG5cbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGdyb3VwcykubWFwKGdyb3VwVmFsdWUgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBUYWJsZUdyb3VwSGVhZGVyRFRPKGdyb3VwVmFsdWUsIGdyb3Vwc1tncm91cFZhbHVlXSwgZ3JvdXBzW2dyb3VwVmFsdWVdLmxlbmd0aCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEhpZ2hsaWdodFJvdyhyb3c6IFQgfCBUYWJsZUdyb3VwSGVhZGVyRFRPKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwocm93KSkge1xuICAgICAgICAgICAgaWYgKCFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLmhpZ2hsaWdodFJvd0ZuKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodFJvd0ZuKHJvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGdldEluZGV4Um93KHJvdzogVCB8IFRhYmxlR3JvdXBIZWFkZXJEVE8pOiBudW1iZXIge1xuICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuX2RhdGFTb3VyY2UpICYmICFBcnJheVV0aWwuaXNFbXB0eSh0aGlzLl9kYXRhU291cmNlLmRhdGEpICYmICFPYmplY3RVdGlsLmlzTnVsbChyb3cpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleChyID0+IHIgPT09IHJvdyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpbmZpbml0ZSBzY3JvbGxcbiAgICBoYXNNb3JlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuX2RhdGFTb3VyY2UgfHwgKHRoaXMuX2RhdGFTb3VyY2UuZGF0YS5sZW5ndGggPCB0aGlzLnBhZ2luYXRvckxlbmd0aCk7XG4gICAgfVxuXG4gICAgaGFuZGxlU2Nyb2xsKHNjcm9sbGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChzY3JvbGxlZCAmJiB0aGlzLmhhc01vcmUoKSkge1xuICAgICAgICAgICAgdGhpcy5vblBhZ2Uoe1xuICAgICAgICAgICAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2luYXRvclBhZ2VTaXplLFxuICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogdGhpcy5wYWdpbmF0b3JQYWdlSW5kZXgsXG4gICAgICAgICAgICAgICAgbGVuZ3RoOiB0aGlzLnBhZ2luYXRvckxlbmd0aCxcbiAgICAgICAgICAgICAgICBwcmV2aW91c1BhZ2VJbmRleDogdGhpcy5wYWdpbmF0b3JQYWdlSW5kZXgsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5wYWdpbmF0b3JQYWdlSW5kZXggKz0gMTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuIl19
         
     | 
| 
      
 585 
     | 
    
         
            +
            //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGdpcGlzaXN0ZW1hcy9uZy1jb3JlLyIsInNvdXJjZXMiOlsic2hhcmVkL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0SyxPQUFPLEVBQW1CLFlBQVksRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQXVCLE1BQU0sbUJBQW1CLENBQUM7QUFDcEgsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWxFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBZ0J0RixJQUFhLGNBQWMsR0FBM0IsTUFBYSxjQUFjO0lBd0h2QixZQUFvQixPQUFlO1FBQWYsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQXRINUIsa0JBQWEsR0FBUSxFQUFFLENBQUM7UUFFeEIsc0JBQWlCLEdBQVcsR0FBRyxDQUFDO1FBQ2hDLG9CQUFlLEdBQVEsSUFBSSxDQUFDO1FBRTVCLHNCQUFpQixHQUFVLEVBQUUsQ0FBQztRQW1CNUIsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUV4QixZQUFPLEdBQXFCLEVBQUUsQ0FBQztRQVcv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LEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztnQkFDN0UsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDekMsVUFBVSxDQUFDLHdCQUF3QixFQUFFLE9BQU8sQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO2FBQ3hGLENBQUM7U0FDTDs7S0FDSixDQUFDO3FDQXlIK0IsTUFBTTtHQXhIMUIsY0FBYyxDQXNjMUI7U0F0Y1ksY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE5nWm9uZSwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0SGVhZGVyUm93RGVmLCBNYXRQYWdpbmF0b3IsIE1hdFNvcnQsIE1hdFRhYmxlRGF0YVNvdXJjZSwgU29ydCwgU29ydERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQXJyYXlVdGlsLCBPYmplY3RVdGlsLCBTdHJpbmdVdGlsIH0gZnJvbSAnLi4vLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBUYWJsZUNvbHVtbkRUTyB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL2R0by90YWJsZS1jb2x1bW4uZHRvJztcbmltcG9ydCB7IFRhYmxlR3JvdXBIZWFkZXJEVE8gfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9kdG8vdGFibGUtZ3JvdXAtaGVhZGVyLmR0byc7XG5pbXBvcnQgeyBUYWJsZVBhZ2VFdmVudERUTyB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL2R0by90YWJsZS1wYWdlLWV2ZW50LmR0byc7XG5cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpdHNzLXRhYmxlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICB0cmlnZ2VyKCdkZXRhaWxFeHBhbmQnLCBbXG4gICAgICAgICAgICBzdGF0ZSgnY29sbGFwc2VkJywgc3R5bGUoeyBoZWlnaHQ6ICcwcHgnLCBtaW5IZWlnaHQ6ICcwJywgZGlzcGxheTogJ25vbmUnIH0pKSxcbiAgICAgICAgICAgIHN0YXRlKCdleHBhbmRlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnKicgfSkpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignZXhwYW5kZWQgPD0+IGNvbGxhcHNlZCcsIGFuaW1hdGUoJzIyNW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKScpKSxcbiAgICAgICAgXSksXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uSW5pdCB7XG5cbiAgICBwdWJsaWMgX2V4cGFuZGVkUm93czogVFtdID0gW107XG5cbiAgICBwdWJsaWMgX3Njcm9sbEhlaWdodENhbGM6IG51bWJlciA9IDQxMDtcbiAgICBwdWJsaWMgX2lzUG9wb3ZlckhvdmVyOiBhbnkgPSBudWxsO1xuICAgIHB1YmxpYyBfY29udGV4dFBvcG92ZXI6IFQ7XG4gICAgcHVibGljIF9kaXNwbGF5ZWRDb2x1bW5zOiBhbnlbXSA9IFtdO1xuICAgIHB1YmxpYyBfZGF0YVNvdXJjZTogTWF0VGFibGVEYXRhU291cmNlPFQgfCBUYWJsZUdyb3VwSGVhZGVyRFRPPjtcblxuICAgIEBWaWV3Q2hpbGQoTWF0U29ydCwgeyBzdGF0aWM6IHRydWUgfSkgbWF0U29ydDogTWF0U29ydDtcbiAgICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvciwgeyBzdGF0aWM6IHRydWUgfSkgbWF0UGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XG4gICAgQFZpZXdDaGlsZCgnZnJvbnRlbmRQYWdpbmF0b3InLCB7IHN0YXRpYzogZmFsc2UgfSkgbWF0RnJvbnRlbmRQYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcbiAgICBAVmlld0NoaWxkKCdiYWNrZW5kUGFnaW5hdG9yJywgeyBzdGF0aWM6IGZhbHNlIH0pIG1hdEJhY2tlbmRQYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcblxuICAgIEBWaWV3Q2hpbGQoJ21hdEhlYWRlclJvdycsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgX21hdEhlYWRlclJvd1JlZjogVGVtcGxhdGVSZWY8TWF0SGVhZGVyUm93RGVmPjtcbiAgICBAVmlld0NoaWxkKCdmcm9udGVuZFBhZ2luYXRvcicsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgX21hdEZyb250ZW5kUGFnaW5hdG9yUm93UmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBWaWV3Q2hpbGQoJ2JhY2tlbmRQYWdpbmF0b3InLCB7IHN0YXRpYzogdHJ1ZSB9KSBwcml2YXRlIF9tYXRCYWNrZW5kUGFnaW5hdG9yUm93UmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQENvbnRlbnRDaGlsZCgnYWN0aW9ucycsIHsgc3RhdGljOiBmYWxzZSB9KSBhY3Rpb25zUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGQoJ2FjdGlvbnNQb3BvdmVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIGFjdGlvbnNQb3BvdmVyUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGQoJ2Zvb3RlcicsIHsgc3RhdGljOiBmYWxzZSB9KSBmb290ZXJSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZCgnZXhwYW5kZWQnLCB7IHN0YXRpYzogZmFsc2UgfSkgZXhwYW5kZWRSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZCgnZ3JvdXBIZWFkZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgZ3JvdXBIZWFkZXJSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZCgnZ3JvdXBGb290ZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgZ3JvdXBGb290ZXJSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBASW5wdXQoKSBzaGFkb3c6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGNvbHVtbnM6IFRhYmxlQ29sdW1uRFRPW10gPSBbXTtcblxuICAgIHByaXZhdGUgX2RhdGFWYWx1ZTogVFtdO1xuICAgIEBJbnB1dCgpIGdldCBkYXRhKCk6IFRbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhVmFsdWU7XG4gICAgfVxuICAgIHNldCBkYXRhKGRhdGE6IFRbXSkge1xuICAgICAgICB0aGlzLl9kYXRhVmFsdWUgPSBkYXRhO1xuICAgICAgICB0aGlzLmRhdGFDaGFuZ2UuZW1pdCh0aGlzLl9kYXRhVmFsdWUpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHBhZ2luYXRvcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgYmFja2VuZFBhZ2luYXRpb246IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KCkgcGFnaW5hdG9yUGFnZUluZGV4OiBudW1iZXIgPSAwO1xuXG4gICAgQElucHV0KCkgcGFnaW5hdG9yTGVuZ3RoOiBudW1iZXIgPSAwO1xuXG4gICAgQElucHV0KCkgcGFnaW5hdG9yUGFnZVNpemU6IG51bWJlciA9IDEwO1xuXG4gICAgQElucHV0KCkgcGFnaW5hdG9yUGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IFsxMCwgMjAsIDMwXTtcblxuICAgIEBJbnB1dCgpIHNob3dQYWdlU2l6ZU9wdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGV4cGFuZGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHNob3dIZWFkZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KCkgY29sdW1uSW5pdGlhbDogbnVtYmVyO1xuXG4gICAgQElucHV0KCkgY29sdW1uRmluYWw6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpIGhlYWRlclN0aWNreTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgZ3JvdXBCeUNvbHVtbjogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgZ3JvdXBIZWFkZXJTdGlja3k6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGdyb3VwU3RhcnRFeHBhbmRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgaGlnaGxpZ2h0Um93Rm46IChyb3c6IFQgfCBUYWJsZUdyb3VwSGVhZGVyRFRPKSA9PiBib29sZWFuO1xuXG4gICAgQElucHV0KCkgaW5maW5pdGVTY3JvbGw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHNjcm9sbERlbGF5OiBudW1iZXIgPSAxMDAwO1xuXG4gICAgQElucHV0KCkgc2Nyb2xsT2Zmc2V0OiBudW1iZXIgPSAxMDAwO1xuXG4gICAgQElucHV0KCkgc2Nyb2xsSGVpZ3RoOiBudW1iZXI7XG5cbiAgICBASW5wdXQoKSBpc0ZpbHRlcmluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCdjb2x1bW5FeHBhbmRhYmxlRml4ZWQnKSBzaG93Q29sdW1uRXhwYW5kYWJsZUZpeGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBleHBhbmRhYmxlT25lUm93OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBpZ25vcmVDaGlsZHJlbkV4cGFuZFJvdzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgc29ydDogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgY2xlYXJTb3J0OiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgc29ydEFjdGl2ZTogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgc29ydERpcmVjdGlvbjogU29ydERpcmVjdGlvbiA9ICdhc2MnO1xuXG4gICAgQE91dHB1dCgpIHJvd0V4cGFuZGVkOiBFdmVudEVtaXR0ZXI8VD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIGRhdGFDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUW10+ID0gbmV3IEV2ZW50RW1pdHRlcih0cnVlKTtcbiAgICBAT3V0cHV0KCkgcGFnZTogRXZlbnRFbWl0dGVyPFRhYmxlUGFnZUV2ZW50RFRPPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgcm93SG92ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgcHVibGljIGdldCBtYXRUYWJsZUhlaWd0aCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICBsZXQgaGVhZGVyUm93SGVpZ2h0OiBudW1iZXI7XG4gICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5fbWF0SGVhZGVyUm93UmVmKSkge1xuICAgICAgICAgICAgaGVhZGVyUm93SGVpZ2h0ID0gKHRoaXMuX21hdEhlYWRlclJvd1JlZi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmNsaWVudEhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwYWdpbmF0b3JSb3dIZWlnaHQ6IG51bWJlcjtcbiAgICAgICAgY29uc3QgcGFnaW5hdG9yUmVmID0gdGhpcy5iYWNrZW5kUGFnaW5hdGlvbiA/IHRoaXMuX21hdEJhY2tlbmRQYWdpbmF0b3JSb3dSZWYgOiB0aGlzLl9tYXRGcm9udGVuZFBhZ2luYXRvclJvd1JlZjtcbiAgICAgICAgaWYgKCFPYmplY3RVdGlsLmlzTnVsbChwYWdpbmF0b3JSZWYpKSB7XG4gICAgICAgICAgICBwYWdpbmF0b3JSb3dIZWlnaHQgPSAocGFnaW5hdG9yUmVmLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuY2xpZW50SGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWF0SGVhZGVyd0hlaWdodDogbnVtYmVyID0gaGVhZGVyUm93SGVpZ2h0IHx8IDYwO1xuICAgICAgICBjb25zdCBtYXRQYWdpbmF0b3JIZWlnaHQ6IG51bWJlciA9IHBhZ2luYXRvclJvd0hlaWdodCB8fCA1NztcblxuICAgICAgICBjb25zdCBwYWdlU2l6ZTogbnVtYmVyID0gdGhpcy5wYWdpbmF0b3JQYWdlU2l6ZSAmJiAodGhpcy5wYWdpbmF0b3JQYWdlU2l6ZSA8PSAxMCkgPyB0aGlzLnBhZ2luYXRvclBhZ2VTaXplIDogMTA7XG4gICAgICAgIGNvbnN0IHNldEhlaWd0aDogYm9vbGVhbiA9IHRoaXMuaGVhZGVyU3RpY2t5ICYmICh0aGlzLmRhdGEubGVuZ3RoID4gcGFnZVNpemUpO1xuXG4gICAgICAgIHJldHVybiBvZihzZXRIZWlndGggPyBgJHsoKDU3ICogcGFnZVNpemUpICsgbWF0SGVhZGVyd0hlaWdodCArIG1hdFBhZ2luYXRvckhlaWdodCl9cHhgIDogJ2F1dG8nKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZSkgeyB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHsgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5fZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlLnNvcnQgPSB0aGlzLm1hdFNvcnQ7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wYWdpbmF0b3IgJiYgIXRoaXMuYmFja2VuZFBhZ2luYXRpb24gJiYgIXRoaXMuaW5maW5pdGVTY3JvbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLm1hdEZyb250ZW5kUGFnaW5hdG9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMucGFnaW5hdG9yICYmICh0aGlzLmJhY2tlbmRQYWdpbmF0aW9uIHx8IHRoaXMuaW5maW5pdGVTY3JvbGwpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblBhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICBwYWdlU2l6ZTogdGhpcy5wYWdpbmF0b3JQYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFnaW5hdG9yUGFnZVNpemVPcHRpb25zOiB0aGlzLnBhZ2luYXRvclBhZ2VTaXplT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgcGFnZUluZGV4OiAwLFxuICAgICAgICAgICAgICAgICAgICBsZW5ndGg6IDAsXG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzUGFnZUluZGV4OiAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5hY3Rpb25zUG9wb3ZlclJlZikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0UG9wb3ZlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNQb3BvdmVySG92ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlUG9wb3ZlcigwKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHBvcG92ZXI6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhYmxlLXBvcG92ZXInKTtcbiAgICAgICAgICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHBvcG92ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBvcG92ZXIuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VzLmRhdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVEYXRhU291cmNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZURhdGFTb3VyY2UoKTogdm9pZCB7XG4gICAgICAgIGxldCBjb2x1bW5zOiBzdHJpbmdbXSA9IHRoaXMuY29sdW1ucy5maWx0ZXIoYyA9PiBjLnZpc2libGUpLm1hcChjID0+IGMucHJvcGVydHkpO1xuICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuZXhwYW5kZWRSZWYpKSB7XG4gICAgICAgICAgICBjb2x1bW5zID0gWydleHBhbmRlZENvbHVtbicsIC4uLmNvbHVtbnNdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5hY3Rpb25zUmVmKSkge1xuICAgICAgICAgICAgY29sdW1ucyA9IFsuLi5jb2x1bW5zLCAnYWN0aW9uc0NvbHVtbiddO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2Rpc3BsYXllZENvbHVtbnMgPSBjb2x1bW5zO1xuXG4gICAgICAgIGlmICh0aGlzLmluZmluaXRlU2Nyb2xsKSB7XG4gICAgICAgICAgICBsZXQgZGF0YUFsbDogVFtdID0gW107XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5pc0ZpbHRlcmluZykge1xuICAgICAgICAgICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5fZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YUFsbCA9IEFycmF5VXRpbC5jbG9uZSh0aGlzLl9kYXRhU291cmNlLmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFBcnJheVV0aWwuaXNFbXB0eSh0aGlzLmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgZGF0YUFsbC5wdXNoKC4uLnRoaXMuZGF0YSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKFtdKTtcbiAgICAgICAgICAgIGlmICghU3RyaW5nVXRpbC5pc0VtcHR5KHRoaXMuZ3JvdXBCeUNvbHVtbikgJiYgIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuZ3JvdXBIZWFkZXJSZWYpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5nZW5lcmV0ZUdyb3Vwc0J5Q29sdW1uKGRhdGFBbGwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlLmRhdGEgPSBkYXRhQWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBkYXRhQWxsO1xuICAgICAgICAgICAgdGhpcy5kYXRhQ2hhbmdlLmVtaXQodGhpcy5kYXRhKTtcbiAgICAgICAgICAgIHRoaXMuY2FsY1Njcm9sbEhlaWdodCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UoW10pO1xuICAgICAgICAgICAgaWYgKCFTdHJpbmdVdGlsLmlzRW1wdHkodGhpcy5ncm91cEJ5Q29sdW1uKSAmJiAhT2JqZWN0VXRpbC5pc051bGwodGhpcy5ncm91cEhlYWRlclJlZikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlLmRhdGEgPSB0aGlzLmdlbmVyZXRlR3JvdXBzQnlDb2x1bW4odGhpcy5kYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFBcnJheVV0aWwuaXNFbXB0eSh0aGlzLl9kYXRhU291cmNlLmRhdGEpKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlLnNvcnQgPSB0aGlzLm1hdFNvcnQ7XG4gICAgICAgICAgICB0aGlzLnNldFNvcnRpbmdEYXRhQWNjZXNzb3IoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBhZ2luYXRvciAmJiAhdGhpcy5iYWNrZW5kUGFnaW5hdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLm1hdEZyb250ZW5kUGFnaW5hdG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgKCF0aGlzLmdyb3VwU3RhcnRFeHBhbmRlZCAmJiAodGhpcy5ncm91cEhlYWRlclJlZiB8fCAodGhpcy5leHBhbmRhYmxlICYmIHRoaXMuZXhwYW5kZWRSZWYpKSAmJiAhQXJyYXlVdGlsLmlzRW1wdHkodGhpcy5fZGF0YVNvdXJjZS5kYXRhKSkge1xuICAgICAgICAvLyB0aGlzLl9kYXRhU291cmNlLmRhdGEuZm9yRWFjaChyb3cgPT4gdGhpcy5hZGRDb2xsYXBzZShyb3cpKTtcbiAgICAgICAgLy8gfVxuICAgIH1cblxuICAgIGNhbGNTY3JvbGxIZWlnaHQoKTogdm9pZCB7XG4gICAgICAgIGlmICgodGhpcy5fZGF0YVNvdXJjZSAmJiAodGhpcy5fZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCA+IDApKSAmJiAoTWF0aC5mbG9vcih0aGlzLl9zY3JvbGxIZWlnaHRDYWxjKSA8PSA3MDApKSB7XG4gICAgICAgICAgICB0aGlzLl9zY3JvbGxIZWlnaHRDYWxjID0gMTMwICsgKHRoaXMuX2RhdGFTb3VyY2UuZGF0YS5sZW5ndGggKiA0OCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblBhZ2UocGFnZUV2ZW50OiBUYWJsZVBhZ2VFdmVudERUTyk6IHZvaWQge1xuICAgICAgICB0aGlzLnBhZ2luYXRvclBhZ2VTaXplID0gcGFnZUV2ZW50LnBhZ2VTaXplO1xuICAgICAgICBwYWdlRXZlbnQucGFnaW5hdG9yUGFnZVNpemVPcHRpb25zID0gQXJyYXlVdGlsLmlzRW1wdHkocGFnZUV2ZW50LnBhZ2luYXRvclBhZ2VTaXplT3B0aW9ucykgPyB0aGlzLnBhZ2luYXRvclBhZ2VTaXplT3B0aW9ucyA6IHBhZ2VFdmVudC5wYWdpbmF0b3JQYWdlU2l6ZU9wdGlvbnM7XG4gICAgICAgIHRoaXMucGFnZS5lbWl0KHBhZ2VFdmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzRXhwYW5kZWRSb3cocm93OiBUKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIGlmIChBcnJheVV0aWwuaXNFbXB0eSh0aGlzLl9leHBhbmRlZFJvd3MpKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5kZXg6IG51bWJlciA9IHRoaXMuX2V4cGFuZGVkUm93cy5maW5kSW5kZXgociA9PiByID09PSByb3cpO1xuICAgICAgICByZXR1cm4gb2YoaW5kZXggPj0gMCk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvZ2dsZUV4cGFuZFJvdyhyb3c6IFQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXg6IG51bWJlciA9IHRoaXMuX2V4cGFuZGVkUm93cy5maW5kSW5kZXgociA9PiByID09PSByb3cpO1xuICAgICAgICBpZiAoQXJyYXlVdGlsLmlzRW1wdHkodGhpcy5fZXhwYW5kZWRSb3dzKSB8fCAoaW5kZXggPCAwKSkge1xuICAgICAgICAgICAgdGhpcy5fZXhwYW5kZWRSb3dzID0gW3Jvd107XG4gICAgICAgICAgICB0aGlzLnJvd0V4cGFuZGVkLmVtaXQocm93KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IF9leHBhbmRlZFJvd3NBdXg6IFRbXSA9IEFycmF5VXRpbC5jbG9uZSh0aGlzLl9leHBhbmRlZFJvd3MpO1xuICAgICAgICBfZXhwYW5kZWRSb3dzQXV4LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHRoaXMuX2V4cGFuZGVkUm93cyA9IEFycmF5VXRpbC5jbG9uZShfZXhwYW5kZWRSb3dzQXV4KTtcbiAgICAgICAgdGhpcy5yb3dFeHBhbmRlZC5lbWl0KG51bGwpO1xuICAgIH1cblxuICAgIHNvcnREYXRhKHNvcnQ6IFNvcnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaW5maW5pdGVTY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5kYXRhQ2hhbmdlLmVtaXQoW10pO1xuICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UoW10pO1xuICAgICAgICAgICAgdGhpcy5jYWxjU2Nyb2xsSGVpZ2h0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uUGFnZSh7XG4gICAgICAgICAgICBwYWdlU2l6ZTogdGhpcy5wYWdpbmF0b3JQYWdlU2l6ZSxcbiAgICAgICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgICAgIGxlbmd0aDogMCxcbiAgICAgICAgICAgIHByZXZpb3VzUGFnZUluZGV4OiAwLFxuICAgICAgICAgICAgcGFnaW5hdG9yUGFnZVNpemVPcHRpb25zOiB0aGlzLnBhZ2luYXRvclBhZ2VTaXplT3B0aW9ucyxcbiAgICAgICAgICAgIHNvcnQ6IHNvcnRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3dQb3BvdmVyKGV2ZW50OiBNb3VzZUV2ZW50LCBkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcG9wb3ZlcjogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFibGUtcG9wb3ZlcicpO1xuICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHBvcG92ZXIpKSB7XG4gICAgICAgICAgICBwb3BvdmVyLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkb21SZWN0UG9wb3ZlciA9IHBvcG92ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvbVJlY3RSb3cgPSAoZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxzID0gKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTFRhYmxlUm93RWxlbWVudCkuY2hpbGRyZW47XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGRvbVJlY3RQb3BvdmVyICYmIGRvbVJlY3RSb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcG92ZXIuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcG92ZXIuc3R5bGUudG9wID0gYCR7KGRvbVJlY3RSb3cudG9wICsgZG9tUmVjdFJvdy5oZWlnaHQpIC0gMX1weGA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdGFydFBvc2l0aW9uOiBudW1iZXIgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVuZFBvc2l0aW9uOiBudW1iZXIgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb2x1bW5Jbml0aWFsICYmICh0aGlzLmNvbHVtbkluaXRpYWwgPj0gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNlbGxzW3RoaXMuY29sdW1uSW5pdGlhbF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbml0aWFsIGNvbHVtbiB1bmRlZmluZWQgb3IgbnVsbCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gY2VsbHNbdGhpcy5jb2x1bW5Jbml0aWFsXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gZG9tUmVjdFJvdy5sZWZ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb2x1bW5GaW5hbCAmJiAodGhpcy5jb2x1bW5GaW5hbCA+PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2VsbHNbdGhpcy5jb2x1bW5GaW5hbF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGaW5hbCBjb2x1bW4gdW5kZWZpbmVkIG9yIG51bGwnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBjZWxsc1t0aGlzLmNvbHVtbkZpbmFsXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gZG9tUmVjdFBvcG92ZXIud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZFBvc2l0aW9uID0gZG9tUmVjdFJvdy5yaWdodCAtIGRvbVJlY3RQb3BvdmVyLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuY2xpZW50WCA+IHN0YXJ0UG9zaXRpb24gKyAxNSAmJiBldmVudC5jbGllbnRYIDwgZW5kUG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wb3Zlci5zdHlsZS5sZWZ0ID0gYCR7ZXZlbnQuY2xpZW50WCAtIDE1fXB4YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmNsaWVudFggPD0gc3RhcnRQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3BvdmVyLnN0eWxlLmxlZnQgPSBgJHtzdGFydFBvc2l0aW9ufXB4YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmNsaWVudFggPj0gZW5kUG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wb3Zlci5zdHlsZS5sZWZ0ID0gYCR7ZW5kUG9zaXRpb259cHhgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yb3dIb3Zlci5lbWl0KGRhdGEpO1xuICAgICAgICB0aGlzLl9jb250ZXh0UG9wb3ZlciA9IGRhdGE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgc2hvd1BvcG92ZXIoZXZlbnQ6IE1vdXNlRXZlbnQsIGRhdGE6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBwb3BvdmVyOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWJsZS1wb3BvdmVyJyk7XG4gICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwocG9wb3ZlcikpIHtcbiAgICAgICAgICAgIHBvcG92ZXIuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMubG9hZGluZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvbVJlY3RQb3BvdmVyID0gcG9wb3Zlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkb21SZWN0Um93ID0gKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxzID0gKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTFRhYmxlUm93RWxlbWVudCkuY2hpbGRyZW47XG5cbiAgICAgICAgICAgICAgICBpZiAoZG9tUmVjdFBvcG92ZXIgJiYgZG9tUmVjdFJvdykge1xuICAgICAgICAgICAgICAgICAgICBwb3BvdmVyLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgICAgICAgICAgICAgICAgIHBvcG92ZXIuc3R5bGUudG9wID0gYCR7KGRvbVJlY3RSb3cudG9wICsgZG9tUmVjdFJvdy5oZWlnaHQpIC0gMX1weGA7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHN0YXJ0UG9zaXRpb246IG51bWJlciA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGxldCBlbmRQb3NpdGlvbjogbnVtYmVyID0gMDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb2x1bW5Jbml0aWFsICYmICh0aGlzLmNvbHVtbkluaXRpYWwgPj0gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2VsbHNbdGhpcy5jb2x1bW5Jbml0aWFsXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5pdGlhbCBjb2x1bW4gdW5kZWZpbmVkIG9yIG51bGwnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBjZWxsc1t0aGlzLmNvbHVtbkluaXRpYWxdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gZG9tUmVjdFJvdy5sZWZ0O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29sdW1uRmluYWwgJiYgKHRoaXMuY29sdW1uRmluYWwgPj0gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2VsbHNbdGhpcy5jb2x1bW5GaW5hbF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpbmFsIGNvbHVtbiB1bmRlZmluZWQgb3IgbnVsbCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBjZWxsc1t0aGlzLmNvbHVtbkZpbmFsXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gZG9tUmVjdFBvcG92ZXIud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRQb3NpdGlvbiA9IGRvbVJlY3RSb3cucmlnaHQgLSBkb21SZWN0UG9wb3Zlci53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmNsaWVudFggPiBzdGFydFBvc2l0aW9uICsgMTUgJiYgZXZlbnQuY2xpZW50WCA8IGVuZFBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wb3Zlci5zdHlsZS5sZWZ0ID0gYCR7ZXZlbnQuY2xpZW50WCAtIDE1fXB4YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuY2xpZW50WCA8PSBzdGFydFBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wb3Zlci5zdHlsZS5sZWZ0ID0gYCR7c3RhcnRQb3NpdGlvbn1weGA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmNsaWVudFggPj0gZW5kUG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3BvdmVyLnN0eWxlLmxlZnQgPSBgJHtlbmRQb3NpdGlvbn1weGA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJvd0hvdmVyLmVtaXQoZGF0YSk7XG4gICAgICAgIHRoaXMuX2NvbnRleHRQb3BvdmVyID0gZGF0YTtcbiAgICB9XG4gICAgKi9cblxuICAgIGNsb3NlUG9wb3Zlcih0aW1lOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgb2YobnVsbCkucGlwZShkZWxheSh0aW1lKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5faXNQb3BvdmVySG92ZXIpICYmICF0aGlzLl9pc1BvcG92ZXJIb3Zlcikge1xuICAgICAgICAgICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5faXNQb3BvdmVySG92ZXIpICYmICFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLmFjdGlvbnNQb3BvdmVyUmVmKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3BvdmVyOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWJsZS1wb3BvdmVyJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwocG9wb3ZlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcG92ZXIuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRleHRQb3BvdmVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc1BvcG92ZXJIb3ZlciA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldFNvcnRpbmdEYXRhQWNjZXNzb3IoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2Uuc29ydGluZ0RhdGFBY2Nlc3NvciA9IChkYXRhOiBhbnksIHNvcnRIZWFkZXJJZDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtzb3J0SGVhZGVySWRdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhW3NvcnRIZWFkZXJJZF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkYXRhW3NvcnRIZWFkZXJJZF07XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gZ3JvdXAgaGVhZGVyXG4gICAgZ2VuZXJldGVHcm91cHNCeUNvbHVtbihkYXRhOiBhbnlbXSk6IFRhYmxlR3JvdXBIZWFkZXJEVE9bXSB7XG4gICAgICAgIGNvbnN0IGdyb3Vwczoge30gPSBkYXRhLnJlZHVjZSgoZ3JvdXAsIHJvdykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YUNvbHVtbjogc3RyaW5nID0gcm93W3RoaXMuZ3JvdXBCeUNvbHVtbl0udG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGlmICghZ3JvdXBbZGF0YUNvbHVtbl0pIHtcbiAgICAgICAgICAgICAgICBncm91cFtkYXRhQ29sdW1uXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ3JvdXBbZGF0YUNvbHVtbl0ucHVzaChyb3cpO1xuICAgICAgICAgICAgcmV0dXJuIGdyb3VwO1xuICAgICAgICB9LCB7fSk7XG5cbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGdyb3VwcykubWFwKGdyb3VwVmFsdWUgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBUYWJsZUdyb3VwSGVhZGVyRFRPKGdyb3VwVmFsdWUsIGdyb3Vwc1tncm91cFZhbHVlXSwgZ3JvdXBzW2dyb3VwVmFsdWVdLmxlbmd0aCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEhpZ2hsaWdodFJvdyhyb3c6IFQgfCBUYWJsZUdyb3VwSGVhZGVyRFRPKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwocm93KSkge1xuICAgICAgICAgICAgaWYgKCFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLmhpZ2hsaWdodFJvd0ZuKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodFJvd0ZuKHJvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGdldEluZGV4Um93KHJvdzogVCB8IFRhYmxlR3JvdXBIZWFkZXJEVE8pOiBudW1iZXIge1xuICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuX2RhdGFTb3VyY2UpICYmICFBcnJheVV0aWwuaXNFbXB0eSh0aGlzLl9kYXRhU291cmNlLmRhdGEpICYmICFPYmplY3RVdGlsLmlzTnVsbChyb3cpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleChyID0+IHIgPT09IHJvdyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpbmZpbml0ZSBzY3JvbGxcbiAgICBoYXNNb3JlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuX2RhdGFTb3VyY2UgfHwgKHRoaXMuX2RhdGFTb3VyY2UuZGF0YS5sZW5ndGggPCB0aGlzLnBhZ2luYXRvckxlbmd0aCk7XG4gICAgfVxuXG4gICAgaGFuZGxlU2Nyb2xsKHNjcm9sbGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChzY3JvbGxlZCAmJiB0aGlzLmhhc01vcmUoKSkge1xuICAgICAgICAgICAgdGhpcy5vblBhZ2Uoe1xuICAgICAgICAgICAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2luYXRvclBhZ2VTaXplLFxuICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogdGhpcy5wYWdpbmF0b3JQYWdlSW5kZXgsXG4gICAgICAgICAgICAgICAgbGVuZ3RoOiB0aGlzLnBhZ2luYXRvckxlbmd0aCxcbiAgICAgICAgICAgICAgICBwcmV2aW91c1BhZ2VJbmRleDogdGhpcy5wYWdpbmF0b3JQYWdlSW5kZXgsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5wYWdpbmF0b3JQYWdlSW5kZXggKz0gMTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuIl19
         
     | 
| 
         @@ -399,7 +399,7 @@ GIPIInputMonthPickerComponent = GIPIInputMonthPickerComponent_1 = __decorate([ 
     | 
|
| 
       399 
399 
     | 
    
         
             
                        'class': 'gipi-input-monthpicker',
         
     | 
| 
       400 
400 
     | 
    
         
             
                    },
         
     | 
| 
       401 
401 
     | 
    
         
             
                    changeDetection: ChangeDetectionStrategy.OnPush,
         
     | 
| 
       402 
     | 
    
         
            -
                    styles: [".input-monthpicker-container{display:flex;flex-direction:column;gap:12px;width:100%}.input-monthpicker-container .input-monthpicker-label{color:#131313;font-size:1.4rem;line-height:100%}.input-monthpicker-container .input-monthpicker-label>span{color:#d14014;font-size:inherit;line-height:inherit}.input-monthpicker-container .input-monthpicker-content{display:flex;flex-direction:row;align-items:center;justify-content:space-between;padding:12px;width:100%;max-height:4rem;border-radius:5px;cursor:text;background-color:#fff;border:1px solid rgba(0,0,0,.12);color:#696969;caret-color:#9a9da2;transition:.2s;position:relative}.input-monthpicker-container .input-monthpicker-content:focus-within,.input-monthpicker-container .input-monthpicker-content:has(.input-monthpicker-input:active),.input-monthpicker-container .input-monthpicker-content:has(.input-monthpicker-input:focus){box-shadow:0 0 0 .2rem #f0f0f0}.input-monthpicker-container .input-monthpicker-content:focus-within,.input-monthpicker-container .input-monthpicker-content:hover{border-color:#bfbfbf!important}.input-monthpicker-container .input-monthpicker-content:has(.input-monthpicker-input: 
     | 
| 
      
 402 
     | 
    
         
            +
                    styles: [".input-monthpicker-container{display:flex;flex-direction:column;gap:12px;width:100%}.input-monthpicker-container .input-monthpicker-label{color:#131313;font-size:1.4rem;line-height:100%}.input-monthpicker-container .input-monthpicker-label>span{color:#d14014;font-size:inherit;line-height:inherit}.input-monthpicker-container .input-monthpicker-content{display:flex;flex-direction:row;align-items:center;justify-content:space-between;padding:12px;width:100%;max-height:4rem;border-radius:5px;cursor:text;background-color:#fff;border:1px solid rgba(0,0,0,.12);color:#696969;caret-color:#9a9da2;transition:.2s;position:relative}.input-monthpicker-container .input-monthpicker-content:focus-within,.input-monthpicker-container .input-monthpicker-content:has(.input-monthpicker-input:active),.input-monthpicker-container .input-monthpicker-content:has(.input-monthpicker-input:focus){box-shadow:0 0 0 .2rem #f0f0f0}.input-monthpicker-container .input-monthpicker-content:focus-within,.input-monthpicker-container .input-monthpicker-content:hover{border-color:#bfbfbf!important}.input-monthpicker-container .input-monthpicker-content:has(.input-monthpicker-input:disabled){border-color:#e0e1e2!important;color:#d1d2d4!important;box-shadow:none!important;cursor:not-allowed!important;caret-color:#d1d2d4!important;pointer-events:none!important}.input-monthpicker-container .input-monthpicker-content:has(.input-monthpicker-input:disabled) .input-monthpicker-input,.input-monthpicker-container .input-monthpicker-content:has(.input-monthpicker-input:disabled) .input-monthpicker-suffix .input-monthpicker-button{cursor:not-allowed!important;pointer-events:none!important}.input-monthpicker-container .input-monthpicker-content:has(.input-monthpicker-input:disabled) .input-monthpicker-suffix .input-monthpicker-trigger{border-color:#e0e1e2!important;pointer-events:none!important}.input-monthpicker-container .input-monthpicker-content:has(.input-monthpicker-input:disabled) mat-icon{color:#d1d2d4!important;fill:#d1d2d4!important;cursor:not-allowed!important;pointer-events:none!important}.input-monthpicker-container .input-monthpicker-content .input-monthpicker-input{height:16px;max-width:84%;outline:0;border:none;background-color:transparent;color:inherit;flex:1}.input-monthpicker-container .input-monthpicker-content .input-monthpicker-suffix{display:flex;flex-direction:row;align-items:center;gap:16px}.input-monthpicker-container .input-monthpicker-content .input-monthpicker-suffix .input-monthpicker-button{display:flex;align-items:center;justify-content:center;outline:0;border:none;cursor:pointer;background-color:transparent}.input-monthpicker-container .input-monthpicker-content .input-monthpicker-suffix .input-monthpicker-button:hover:not(:disabled)>mat-icon{transform:scale(1.08)}.input-monthpicker-icon{width:1.6rem;height:1.6rem;font-size:1.6rem;color:#131313;fill:#131313}::ng-deep .calendar{width:100%;display:flex;flex-direction:column}::ng-deep .calendar .calendar-header{display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:10px;padding-bottom:10px;border-bottom:1px solid #aeb1b5;margin-bottom:8px}::ng-deep .calendar .calendar-header .calendar-title{display:flex;flex-direction:row;align-items:center;gap:8px;font-size:1.6rem;line-height:1.8rem;font-weight:600;cursor:default;border-radius:8px;padding:8px;white-space:nowrap}::ng-deep .calendar .calendar-header .calendar-title>mat-icon{font-size:2rem;width:20px;height:20px}::ng-deep .calendar .calendar-header .calendar-title.month:hover{cursor:pointer;background-color:#f0f0f0}::ng-deep .calendar .calendar-header .calendar-controls{display:flex;flex-direction:row;align-items:center;gap:8px}::ng-deep .calendar .calendar-header .calendar-controls>button{display:flex;align-items:center;justify-content:center;padding:8px;border-radius:8px;background-color:#e0313e;cursor:pointer;transition:.3s;border:0;outline:0;color:#fff}::ng-deep .calendar .calendar-header .calendar-controls>button:hover{background-color:#cc2d38}::ng-deep .calendar .calendar-header .calendar-controls>button>mat-icon{font-size:1.8rem;width:18px;height:18px}::ng-deep .calendar .table-months{display:-ms-grid;display:grid;-ms-grid-columns:(1fr)[3];grid-template-columns:repeat(3,1fr);gap:4px}::ng-deep .calendar .table-months .month{display:flex;align-items:center;justify-content:center;padding:8px;border-radius:8px;font-size:1.4rem;line-height:1.7rem;color:#555659;background-color:#f0f0f0;transition:background-color .1s;cursor:pointer}::ng-deep .calendar .table-months .month.disabled{color:#bbbdc1;background-color:#e0e1e2}::ng-deep .calendar .table-months .month:not(.disabled).selected,::ng-deep .calendar .table-months .month:not(.disabled):hover{color:#fff;background-color:#e0313e}::ng-deep .calendar .table-months .month:not(.disabled).selected:hover{background-color:#cc2d38}::ng-deep .calendar .table-years{display:-ms-grid;display:grid;-ms-grid-columns:(1fr)[4];grid-template-columns:repeat(4,1fr);gap:4px}::ng-deep .calendar .table-years .year{display:flex;align-items:center;justify-content:center;padding:8px;border-radius:8px;font-size:1.4rem;line-height:1.7rem;color:#555659;background-color:#f0f0f0;transition:background-color .1s;cursor:pointer}::ng-deep .calendar .table-years .year.disabled{color:#bbbdc1;background-color:#e0e1e2}::ng-deep .calendar .table-years .year:not(.disabled).selected,::ng-deep .calendar .table-years .year:not(.disabled):hover{color:#fff;background-color:#e0313e}::ng-deep .calendar .table-years .year:not(.disabled).selected:hover{background-color:#cc2d38}"]
         
     | 
| 
       403 
403 
     | 
    
         
             
                }),
         
     | 
| 
       404 
404 
     | 
    
         
             
                __metadata("design:paramtypes", [ChangeDetectorRef,
         
     | 
| 
       405 
405 
     | 
    
         
             
                    GIPINgConfig])
         
     | 
| 
         @@ -445,7 +445,7 @@ MonthYearPickerComponent = MonthYearPickerComponent_1 = __decorate([ 
     | 
|
| 
       445 
445 
     | 
    
         
             
                        'class': 'gipi-month-year-picker',
         
     | 
| 
       446 
446 
     | 
    
         
             
                    },
         
     | 
| 
       447 
447 
     | 
    
         
             
                    changeDetection: ChangeDetectionStrategy.OnPush,
         
     | 
| 
       448 
     | 
    
         
            -
                    styles: [":host{display:block;width:100%}.input-wrapper{display:flex;flex-direction:column;gap:.8rem;font-size:1.4rem;color:#696969}.input-wrapper .input-label{display:flex;align-items:center;gap:.4rem;color:#131313;line-height:1.6rem}.input-wrapper .input-label>span{font-size:1.6rem;line-height:1.6rem;color:#d14014}.input-wrapper .input-content{display:flex;font-family:inherit;font-size:inherit;color:inherit;height:4rem;background:#fff;border:1px solid rgba(0,0,0,.12);transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.6rem}.input-wrapper .input-content .input-element{padding:.75rem .8rem;border:none;outline:0;background-color:transparent;flex:1;color:inherit;caret-color:#696969;min-width:0}.input-wrapper .input-content:not(.input-element:disabled):has(.input-element:enabled:hover),.input-wrapper .input-content:not(.input-element:disabled):has(.prefix:hover),.input-wrapper .input-content:not(.input-element:disabled):has(.suffix:hover){border-color:#6d6f73}.input-wrapper .input-content:not(.input-element:disabled):has(.input-element 
     | 
| 
      
 448 
     | 
    
         
            +
                    styles: [":host{display:block;width:100%}.input-wrapper{display:flex;flex-direction:column;gap:.8rem;font-size:1.4rem;color:#696969}.input-wrapper .input-label{display:flex;align-items:center;gap:.4rem;color:#131313;line-height:1.6rem}.input-wrapper .input-label>span{font-size:1.6rem;line-height:1.6rem;color:#d14014}.input-wrapper .input-content{display:flex;font-family:inherit;font-size:inherit;color:inherit;height:4rem;background:#fff;border:1px solid rgba(0,0,0,.12);transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.6rem}.input-wrapper .input-content .input-element{padding:.75rem .8rem;border:none;outline:0;background-color:transparent;flex:1;color:inherit;caret-color:#696969;min-width:0}.input-wrapper .input-content:not(.input-element:disabled):has(.input-element:enabled:hover),.input-wrapper .input-content:not(.input-element:disabled):has(.prefix:hover),.input-wrapper .input-content:not(.input-element:disabled):has(.suffix:hover){border-color:#6d6f73}.input-wrapper .input-content:not(.input-element:disabled):has(.input-element:enabled:focus){outline:0;outline-offset:0;box-shadow:0 0 0 .2rem #e0e1e2;border-color:#6d6f73}.input-wrapper .input-content:has(.input-element:disabled){color:#bbbdc1!important;border-color:#e0e1e2!important;background-color:#f5f5f6!important;cursor:not-allowed}.input-wrapper .input-content:has(.input-element:disabled) .suffix>mat-icon{color:#bbbdc1!important}.input-wrapper .input-content .input-element:disabled{cursor:not-allowed}.input-wrapper .input-content .suffix{display:flex;align-items:center;justify-content:center;padding-block:.75rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding-right:.8rem}.input-wrapper .input-content .suffix>mat-icon{width:2rem;height:2rem;font-size:2rem;color:#696969}.input-wrapper .input-help{flex:1;font-size:1rem;font-weight:500;margin-top:-.4rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.month-year-toggle-default-icon{display:block;width:1.5em;height:1.5em}.mat-icon-button .month-year-toggle-default-icon{margin:auto}.btn-month-year-toggle{width:2rem!important;height:2rem!important;line-height:2rem!important}"]
         
     | 
| 
       449 
449 
     | 
    
         
             
                }),
         
     | 
| 
       450 
450 
     | 
    
         
             
                __param(5, Inject(GIPI_MONTH_YEAR_SCROLL_STRATEGY)),
         
     | 
| 
       451 
451 
     | 
    
         
             
                __param(6, Optional()),
         
     |