@maplander/components 0.21.51 → 0.21.53

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.
@@ -479,7 +479,7 @@ export class FiltersComponent {
479
479
  FiltersComponent.decorators = [
480
480
  { type: Component, args: [{
481
481
  selector: 'lib-filters',
482
- template: "<!-- Todo: [FiltersComponent] Refactor code -->\r\n<form class=\"filters\" [formGroup]=\"filtersForm\" [ngClass]=\"{'filters--opened': propertyTypeSelected.value !== 'NONE'}\">\r\n <ng-template [ngIf]=\"!isOPI\">\r\n <div class=\"float-button-close\">\r\n <button mat-icon-button type=\"button\" class=\"float-button-close__button\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </ng-template>\r\n <div class=\"body\">\r\n <div class=\"--padding\">\r\n <div class=\"header\">\r\n <mat-form-field class=\"currency\" appearance=\"outline\">\r\n <mat-label>Divisa</mat-label>\r\n <mat-select formControlName=\"currency\">\r\n <ng-container *ngFor=\"let currency of currencyList\">\r\n <mat-option [value]=\"currency.type\" (click)=\"changeCurrency(currency.type)\">\r\n {{currency.type}}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-button-toggle-group class=\"offering-type-list\" name=\"offering-type\" formControlName=\"offering\"\r\n aria-label=\"Offering type\">\r\n <mat-button-toggle (click)=\"changeOffering('SALE')\" [value]=\"'SALE'\"\r\n [disabled]=\"propertyTypeSelected.value === 'NONE' || propertyTypeSelected.value === 'ROOM'\">\r\n Venta\r\n </mat-button-toggle>\r\n <mat-button-toggle (click)=\"changeOffering('RENT')\" [value]=\"'RENT'\"\r\n [disabled]=\"propertyTypeSelected.value === 'NONE' || propertyTypeSelected.value === 'INVESTMENT'\">\r\n Renta\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n <div class=\"mat-elevation-z2\" [ngClass]=\"{'property-type-list': !newFilters, 'new-property-type-list': newFilters}\">\r\n <ng-container *ngFor=\"let type of propertyTypeList; let i = index\">\r\n <ng-template [ngIf]=\"type.value !== 'NONE' && (type.value !== 'ROOM' && newFilters)\">\r\n <div class=\"property-type-list__button\">\r\n <div\r\n class=\"property-type-list__border\"\r\n [ngClass]=\"{'property-type-list__border--active': (type.value === propertyTypeSelected.value) || (propertyTypeSelected.value === 'NONE') || ((type.value === 'HOUSE' || type.value === 'APARTMENT') && propertyTypeSelected.value === 'RESIDENTIAL')}\"\r\n [ngStyle]=\"{'border-color': 'var(--' + type.iconName + ')'}\">\r\n <button mat-mini-fab=\"\" type=\"button\" (click)=\"changePropertyType(i)\"\r\n [ngStyle]=\"{'background-color': 'var(--' + type.iconName + ')'}\">\r\n <span class=\"property-type-list__icon ic-property-{{type.iconName}}\"></span>\r\n </button>\r\n </div>\r\n <span class=\"property-type-list__label\">{{type.shortName}}</span>\r\n <ng-template [ngIf]=\"type.value === 'RESIDENTIAL' && propertyTypeSelected.value === 'RESIDENTIAL'\">\r\n <div class=\"property-type-list__divider property-type-list__divider--left\"></div>\r\n <div class=\"property-type-list__divider property-type-list__divider--right\"></div>\r\n </ng-template>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n <ng-template [ngIf]=\"isOPI\">\r\n <div class=\"all\">\r\n <button mat-raised-button=\"\" type=\"button\" class=\"all__button\"\r\n [ngClass]=\"{'all__button--active': propertyTypeSelected.value === 'NONE'}\"\r\n (click)=\"changePropertyType(9)\">Todo\r\n </button>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <ng-template [ngIf]=\"propertyTypeSelected.value !== 'NONE'\">\r\n <mat-divider></mat-divider>\r\n <div class=\"--padding\">\r\n <h4 class=\"--title\">\r\n <span class=\"ic-features-price\"></span>\r\n Presupuesto\r\n </h4>\r\n <div class=\"budget\">\r\n <!-- Min price [START] -->\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>M\u00EDnimo</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" type=\"number\" title=\"Min price\" formControlName=\"minPrice\" min=\"1\" (blur)=\"changePrice()\">\r\n <mat-error *ngIf=\"filtersForm.controls['minPrice'].hasError('pattern')\">\r\n Debe ingresar solo n\u00FAmeros\r\n </mat-error>\r\n <mat-error *ngIf=\"filtersForm.controls['minPrice'].hasError('required')\">\r\n Este campo es requerido\r\n </mat-error>\r\n </mat-form-field>\r\n <!-- Min price [END] -->\r\n <!-- Max price [START] -->\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>M\u00E1ximo</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" type=\"number\" title=\"max price\" formControlName=\"maxPrice\" (blur)=\"changePrice()\">\r\n <mat-error *ngIf=\"filtersForm.controls['maxPrice'].hasError('pattern')\">\r\n Debe ingresar solo n\u00FAmeros\r\n </mat-error>\r\n <mat-error *ngIf=\"filtersForm.controls['maxPrice'].hasError('required')\">\r\n Este campo es requerido\r\n </mat-error>\r\n <mat-error *ngIf=\"filtersForm.controls['maxPrice'].hasError('currency')\">\r\n Valor m\u00EDnimo excedido\r\n </mat-error>\r\n </mat-form-field>\r\n <!-- Max price [END] -->\r\n </div>\r\n <div class=\"features\">\r\n <ng-template\r\n [ngIf]=\"propertyTypeSelected.value === 'RESIDENTIAL' || propertyTypeSelected.value === 'HOUSE' || propertyTypeSelected.value === 'APARTMENT'\">\r\n <div class=\"features__bedrooms\">\r\n <h4 class=\"--title\">\r\n <span class=\"ic-features-bedroom\"></span>\r\n Habitaciones\r\n </h4>\r\n <mat-button-toggle-group name=\"bedrooms\" aria-label=\"Bedrooms\" formControlName=\"bedrooms\">\r\n <ng-container *ngFor=\"let bedroom of bedroomsList\">\r\n <ng-template [ngIf]=\"bedroom === 0\" [ngIfElse]=\"bedroomNumber\">\r\n <mat-button-toggle [value]=\"bedroom\" (click)=\"changeFilter()\" class=\"features__bedrooms--unlimited\">\r\n Sin <br> l\u00EDmite\r\n </mat-button-toggle>\r\n </ng-template>\r\n <ng-template #bedroomNumber>\r\n <mat-button-toggle [value]=\"bedroom\" (click)=\"changeFilter()\">{{bedroom}}+\r\n </mat-button-toggle>\r\n </ng-template>\r\n </ng-container>\r\n </mat-button-toggle-group>\r\n </div>\r\n <div class=\"features__bathrooms\">\r\n <h4 class=\"--title\">\r\n <span class=\"ic-features-bathroom\"></span>\r\n Ba\u00F1os\r\n </h4>\r\n <mat-button-toggle-group name=\"bathrooms\" aria-label=\"Bathrooms\" formControlName=\"bathrooms\">\r\n <ng-container *ngFor=\"let bathroom of bathroomsList\">\r\n <ng-template [ngIf]=\"bathroom === 0\" [ngIfElse]=\"bathroomNumber\">\r\n <mat-button-toggle [value]=\"bathroom\" (click)=\"changeFilter()\"\r\n class=\"features__bathrooms--unlimited\">\r\n Sin <br> l\u00EDmite\r\n </mat-button-toggle>\r\n </ng-template>\r\n <ng-template #bathroomNumber>\r\n <mat-button-toggle [value]=\"bathroom\" (click)=\"changeFilter()\">{{bathroom}}+\r\n </mat-button-toggle>\r\n </ng-template>\r\n </ng-container>\r\n </mat-button-toggle-group>\r\n </div>\r\n </ng-template>\r\n <ng-template [ngIf]=\"propertyTypeSelected.value !== 'LAND' && propertyTypeSelected.value !== 'INVESTMENT'\">\r\n <div class=\"features__parking-places\">\r\n <h4 class=\"--title\">\r\n <span class=\"ic-features-parking\"></span>\r\n Estacionamientos\r\n </h4>\r\n <mat-button-toggle-group name=\"parking_places\" aria-label=\"Parking Places\"\r\n formControlName=\"parkingPlaces\">\r\n <ng-container *ngFor=\"let parking of parkingPlacesList\">\r\n <ng-template [ngIf]=\"parking === 0\" [ngIfElse]=\"parkingNumber\">\r\n <mat-button-toggle [value]=\"parking\" (click)=\"changeFilter()\"\r\n class=\"features__parking-places--unlimited\">\r\n Sin <br> l\u00EDmite\r\n </mat-button-toggle>\r\n </ng-template>\r\n <ng-template #parkingNumber>\r\n <mat-button-toggle [value]=\"parking\" (click)=\"changeFilter()\">{{parking}}+\r\n </mat-button-toggle>\r\n </ng-template>\r\n </ng-container>\r\n </mat-button-toggle-group>\r\n </div>\r\n </ng-template>\r\n <ng-template [ngIf]=\"propertyTypeSelected.value !== 'INVESTMENT'\">\r\n <div class=\"features__surface\">\r\n <h4 class=\"--title\">\r\n <span class=\"ic-features-surface\"></span>\r\n Superficie\r\n </h4>\r\n <div class=\"--row\">\r\n <mat-form-field appearance=\"outline\" class=\"--col\">\r\n <mat-label>\u00C1rea</mat-label>\r\n <mat-select formControlName=\"surface\">\r\n <mat-option [value]=\"0\" (click)=\"changeFilter()\">\r\n Sin l\u00EDmite\r\n </mat-option>\r\n <ng-container *ngFor=\"let surface of surfaceList\">\r\n <mat-option [value]=\"surface\" (click)=\"changeFilter()\">\r\n {{surface}}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-button-toggle-group name=\"unit_surface\" aria-label=\"Unit surface\" formControlName=\"surfaceUnit\">\r\n <mat-button-toggle [value]=\"0\" (click)=\"changeFilter()\">m2</mat-button-toggle>\r\n <mat-button-toggle [value]=\"1\" (click)=\"changeFilter()\">sq ft</mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template [ngIf]=\"propertyTypeSelected.value === 'INVESTMENT'\">\r\n <div class=\"feature investment\">\r\n <h4 class=\"--title\">Retorno de inversi\u00F3n</h4>\r\n <mat-form-field appearance=\"outline\" class=\"--col\">\r\n <mat-label>Porcentaje</mat-label>\r\n <mat-select formControlName=\"roi\">\r\n <mat-option [value]=\"0\" (click)=\"changeFilter()\">\r\n Sin l\u00EDmite\r\n </mat-option>\r\n <ng-container *ngFor=\"let roi of roiList\">\r\n <mat-option [value]=\"roi\" (click)=\"changeFilter()\">\r\n {{roi}}%\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </ng-template>\r\n <div class=\"amenities-container\">\r\n <ng-template [ngIf]=\"propertyTypeSelected.amenities.length > 0\">\r\n <div class=\"amenities\">\r\n <h4 class=\"--title\">\r\n Amenidades\r\n </h4>\r\n <div class=\"amenities__list\">\r\n <ng-container *ngFor=\"let amenity of propertyTypeSelected.amenities\">\r\n <div class=\"amenities__amenity\" matRipple (click)=\"updateAmenity(amenity)\">\r\n <span class=\"amenity__icon ic-amenities-{{amenity.iconName}}\"\r\n [ngClass]=\"{'amenity--active': amenity.checked}\"></span>\r\n <span class=\"amenity__label\">{{amenity.name}}</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template [ngIf]=\"propertyTypeSelected.features.length > 0\">\r\n <div class=\"amenities\">\r\n <h4 class=\"--title\">\r\n Caracteristicas de la ubicaci\u00F3n\r\n </h4>\r\n <div class=\"amenities__list\">\r\n <ng-container *ngFor=\"let feature of propertyTypeSelected.features\">\r\n <div class=\"amenities__amenity\" matRipple (click)=\"updateAmenity(feature)\">\r\n <span class=\"amenity__icon ic-amenities-{{feature.iconName}}\"\r\n [ngClass]=\"{'amenity--active': feature.checked}\"></span>\r\n <span class=\"amenity__label\">{{feature.name}}</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <button mat-flat-button type=\"submit\" class=\"apply-button\" color=\"primary\" (click)=\"applyFilters()\" [disabled]=\"totalProperties === 0\">\r\n VER {{totalProperties}} {{totalProperties === 1 ? 'PROPIEDAD' : 'PROPIEDADES'}}\r\n </button>\r\n </div>\r\n <!--div class=\"actions\">\r\n <ng-template [ngIf]=\"!isOPI\" [ngIfElse]=\"closeButtonTemplate\">\r\n <button mat-flat-button=\"\" type=\"button\" class=\"action__button\" color=\"primary\" (click)=\"saveSearchByFilters()\">\r\n GUARDAR\r\n </button>\r\n </ng-template>\r\n <ng-template #closeButtonTemplate>\r\n <button mat-flat-button=\"\" type=\"button\" class=\"action__button\" color=\"primary\" (click)=\"close()\">CERRAR</button>\r\n </ng-template>\r\n <button mat-flat-button=\"\" type=\"button\" class=\"action__button\" color=\"primary\"\r\n (click)=\"resetFilters()\">LIMPIAR\r\n </button>\r\n </div-->\r\n</form>\r\n",
482
+ template: "<!-- Todo: [FiltersComponent] Refactor code -->\r\n<form class=\"filters\" [formGroup]=\"filtersForm\" [ngClass]=\"{'filters--opened': propertyTypeSelected.value !== 'NONE'}\">\r\n <ng-template [ngIf]=\"!isOPI\">\r\n <div class=\"float-button-close\">\r\n <button mat-icon-button type=\"button\" class=\"float-button-close__button\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </ng-template>\r\n <div class=\"body\">\r\n <div class=\"--padding\">\r\n <div class=\"header\">\r\n <mat-form-field class=\"currency\" appearance=\"outline\">\r\n <mat-label>Divisa</mat-label>\r\n <mat-select formControlName=\"currency\">\r\n <ng-container *ngFor=\"let currency of currencyList\">\r\n <mat-option [value]=\"currency.type\" (click)=\"changeCurrency(currency.type)\">\r\n {{currency.type}}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-button-toggle-group class=\"offering-type-list\" name=\"offering-type\" formControlName=\"offering\"\r\n aria-label=\"Offering type\">\r\n <mat-button-toggle (click)=\"changeOffering('SALE')\" [value]=\"'SALE'\"\r\n [disabled]=\"propertyTypeSelected.value === 'NONE' || propertyTypeSelected.value === 'ROOM'\">\r\n Venta\r\n </mat-button-toggle>\r\n <mat-button-toggle (click)=\"changeOffering('RENT')\" [value]=\"'RENT'\"\r\n [disabled]=\"propertyTypeSelected.value === 'NONE' || propertyTypeSelected.value === 'INVESTMENT'\">\r\n Renta\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n <div class=\"mat-elevation-z2\" [ngClass]=\"{'property-type-list': !newFilters, 'new-property-type-list': newFilters}\">\r\n <ng-container *ngFor=\"let type of propertyTypeList; let i = index\">\r\n <ng-template [ngIf]=\"type.value !== 'NONE' && (type.value !== 'ROOM' && newFilters)\">\r\n <div class=\"property-type-list__button\">\r\n <div\r\n class=\"property-type-list__border\"\r\n [ngClass]=\"{'property-type-list__border--active': (type.value === propertyTypeSelected.value) || (propertyTypeSelected.value === 'NONE') || ((type.value === 'HOUSE' || type.value === 'APARTMENT') && propertyTypeSelected.value === 'RESIDENTIAL')}\"\r\n [ngStyle]=\"{'border-color': 'var(--' + type.iconName + ')'}\">\r\n <button mat-mini-fab=\"\" type=\"button\" (click)=\"changePropertyType(i)\"\r\n [ngStyle]=\"{'background-color': 'var(--' + type.iconName + ')'}\">\r\n <span class=\"property-type-list__icon ic-property-{{type.iconName}}\"></span>\r\n </button>\r\n </div>\r\n <span class=\"property-type-list__label\">{{type.shortName}}</span>\r\n <ng-template [ngIf]=\"type.value === 'RESIDENTIAL' && propertyTypeSelected.value === 'RESIDENTIAL'\">\r\n <div class=\"property-type-list__divider property-type-list__divider--left\"></div>\r\n <div class=\"property-type-list__divider property-type-list__divider--right\"></div>\r\n </ng-template>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n <ng-template [ngIf]=\"isOPI\">\r\n <div class=\"all\">\r\n <button mat-raised-button=\"\" type=\"button\" class=\"all__button\"\r\n [ngClass]=\"{'all__button--active': propertyTypeSelected.value === 'NONE'}\"\r\n (click)=\"changePropertyType(9)\">Todo\r\n </button>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <ng-template [ngIf]=\"propertyTypeSelected.value !== 'NONE'\">\r\n <mat-divider></mat-divider>\r\n <div class=\"--padding\">\r\n <h4 class=\"--title\">\r\n <span class=\"ic-features-price\"></span>\r\n Presupuesto\r\n </h4>\r\n <div class=\"budget\">\r\n <!-- Min price [START] -->\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>M\u00EDnimo</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" type=\"number\" title=\"Min price\" formControlName=\"minPrice\" min=\"1\" (blur)=\"changePrice()\">\r\n <mat-error *ngIf=\"filtersForm.controls['minPrice'].hasError('pattern')\">\r\n Debe ingresar solo n\u00FAmeros\r\n </mat-error>\r\n <mat-error *ngIf=\"filtersForm.controls['minPrice'].hasError('required')\">\r\n Este campo es requerido\r\n </mat-error>\r\n </mat-form-field>\r\n <!-- Min price [END] -->\r\n <!-- Max price [START] -->\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>M\u00E1ximo</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" type=\"number\" title=\"max price\" formControlName=\"maxPrice\" (blur)=\"changePrice()\">\r\n <mat-error *ngIf=\"filtersForm.controls['maxPrice'].hasError('pattern')\">\r\n Debe ingresar solo n\u00FAmeros\r\n </mat-error>\r\n <mat-error *ngIf=\"filtersForm.controls['maxPrice'].hasError('required')\">\r\n Este campo es requerido\r\n </mat-error>\r\n <mat-error *ngIf=\"filtersForm.controls['maxPrice'].hasError('currency')\">\r\n Valor m\u00EDnimo excedido\r\n </mat-error>\r\n </mat-form-field>\r\n <!-- Max price [END] -->\r\n </div>\r\n <div class=\"features\">\r\n <ng-template\r\n [ngIf]=\"propertyTypeSelected.value === 'RESIDENTIAL' || propertyTypeSelected.value === 'HOUSE' || propertyTypeSelected.value === 'APARTMENT'\">\r\n <div class=\"features__bedrooms\">\r\n <h4 class=\"--title\">\r\n <span class=\"ic-features-bedroom\"></span>\r\n Habitaciones\r\n </h4>\r\n <mat-button-toggle-group name=\"bedrooms\" aria-label=\"Bedrooms\" formControlName=\"bedrooms\">\r\n <ng-container *ngFor=\"let bedroom of bedroomsList\">\r\n <ng-template [ngIf]=\"bedroom === 0\" [ngIfElse]=\"bedroomNumber\">\r\n <mat-button-toggle [value]=\"bedroom\" (click)=\"changeFilter()\" class=\"features__bedrooms--unlimited\">\r\n Sin <br> l\u00EDmite\r\n </mat-button-toggle>\r\n </ng-template>\r\n <ng-template #bedroomNumber>\r\n <mat-button-toggle [value]=\"bedroom\" (click)=\"changeFilter()\">{{bedroom}}+\r\n </mat-button-toggle>\r\n </ng-template>\r\n </ng-container>\r\n </mat-button-toggle-group>\r\n </div>\r\n <div class=\"features__bathrooms\">\r\n <h4 class=\"--title\">\r\n <span class=\"ic-features-bathroom\"></span>\r\n Ba\u00F1os\r\n </h4>\r\n <mat-button-toggle-group name=\"bathrooms\" aria-label=\"Bathrooms\" formControlName=\"bathrooms\">\r\n <ng-container *ngFor=\"let bathroom of bathroomsList\">\r\n <ng-template [ngIf]=\"bathroom === 0\" [ngIfElse]=\"bathroomNumber\">\r\n <mat-button-toggle [value]=\"bathroom\" (click)=\"changeFilter()\"\r\n class=\"features__bathrooms--unlimited\">\r\n Sin <br> l\u00EDmite\r\n </mat-button-toggle>\r\n </ng-template>\r\n <ng-template #bathroomNumber>\r\n <mat-button-toggle [value]=\"bathroom\" (click)=\"changeFilter()\">{{bathroom}}+\r\n </mat-button-toggle>\r\n </ng-template>\r\n </ng-container>\r\n </mat-button-toggle-group>\r\n </div>\r\n </ng-template>\r\n <ng-template [ngIf]=\"propertyTypeSelected.value !== 'LAND' && propertyTypeSelected.value !== 'INVESTMENT'\">\r\n <div class=\"features__parking-places\">\r\n <h4 class=\"--title\">\r\n <span class=\"ic-features-parking\"></span>\r\n Estacionamientos\r\n </h4>\r\n <mat-button-toggle-group name=\"parking_places\" aria-label=\"Parking Places\"\r\n formControlName=\"parkingPlaces\">\r\n <ng-container *ngFor=\"let parking of parkingPlacesList\">\r\n <ng-template [ngIf]=\"parking === 0\" [ngIfElse]=\"parkingNumber\">\r\n <mat-button-toggle [value]=\"parking\" (click)=\"changeFilter()\"\r\n class=\"features__parking-places--unlimited\">\r\n Sin <br> l\u00EDmite\r\n </mat-button-toggle>\r\n </ng-template>\r\n <ng-template #parkingNumber>\r\n <mat-button-toggle [value]=\"parking\" (click)=\"changeFilter()\">{{parking}}+\r\n </mat-button-toggle>\r\n </ng-template>\r\n </ng-container>\r\n </mat-button-toggle-group>\r\n </div>\r\n </ng-template>\r\n <ng-template [ngIf]=\"propertyTypeSelected.value !== 'INVESTMENT'\">\r\n <div class=\"features__surface\">\r\n <h4 class=\"--title\">\r\n <span class=\"ic-features-surface\"></span>\r\n Superficie\r\n </h4>\r\n <div class=\"--row\">\r\n <mat-form-field appearance=\"outline\" class=\"--col\">\r\n <mat-label>\u00C1rea</mat-label>\r\n <mat-select formControlName=\"surface\">\r\n <mat-option [value]=\"0\" (click)=\"changeFilter()\">\r\n Sin l\u00EDmite\r\n </mat-option>\r\n <ng-container *ngFor=\"let surface of surfaceList\">\r\n <mat-option [value]=\"surface\" (click)=\"changeFilter()\">\r\n {{surface}}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-button-toggle-group name=\"unit_surface\" aria-label=\"Unit surface\" formControlName=\"surfaceUnit\">\r\n <mat-button-toggle [value]=\"0\" (click)=\"changeFilter()\">m2</mat-button-toggle>\r\n <mat-button-toggle [value]=\"1\" (click)=\"changeFilter()\">sq ft</mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template [ngIf]=\"propertyTypeSelected.value === 'INVESTMENT'\">\r\n <div class=\"feature investment\">\r\n <h4 class=\"--title\">Retorno de inversi\u00F3n</h4>\r\n <mat-form-field appearance=\"outline\" class=\"--col\">\r\n <mat-label>Porcentaje</mat-label>\r\n <mat-select formControlName=\"roi\">\r\n <mat-option [value]=\"0\" (click)=\"changeFilter()\">\r\n Sin l\u00EDmite\r\n </mat-option>\r\n <ng-container *ngFor=\"let roi of roiList\">\r\n <mat-option [value]=\"roi\" (click)=\"changeFilter()\">\r\n {{roi}}%\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </ng-template>\r\n <div class=\"amenities-container\">\r\n <ng-template [ngIf]=\"propertyTypeSelected.amenities.length > 0\">\r\n <div class=\"amenities\">\r\n <h4 class=\"--title\">\r\n Amenidades\r\n </h4>\r\n <div class=\"amenities__list\">\r\n <ng-container *ngFor=\"let amenity of propertyTypeSelected.amenities\">\r\n <div class=\"amenities__amenity\" matRipple (click)=\"updateAmenity(amenity)\">\r\n <span class=\"amenity__icon ic-amenities-{{amenity.iconName}}\"\r\n [ngClass]=\"{'amenity--active': amenity.checked}\"></span>\r\n <span class=\"amenity__label\">{{amenity.name}}</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template [ngIf]=\"propertyTypeSelected.features.length > 0\">\r\n <div class=\"amenities\">\r\n <h4 class=\"--title\">\r\n Caracteristicas de la ubicaci\u00F3n\r\n </h4>\r\n <div class=\"amenities__list\">\r\n <ng-container *ngFor=\"let feature of propertyTypeSelected.features\">\r\n <div class=\"amenities__amenity\" matRipple (click)=\"updateAmenity(feature)\">\r\n <span class=\"amenity__icon ic-amenities-{{feature.iconName}}\"\r\n [ngClass]=\"{'amenity--active': feature.checked}\"></span>\r\n <span class=\"amenity__label\">{{feature.name}}</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <div class=\"actions\">\r\n <ng-template [ngIf]=\"!isOPI\">\r\n <button mat-flat-button=\"\" type=\"button\" class=\"action__button\" color=\"primary\" (click)=\"saveSearchByFilters()\">\r\n GUARDAR\r\n </button>\r\n </ng-template>\r\n <button mat-flat-button type=\"submit\" class=\"apply-button\" color=\"primary\" (click)=\"applyFilters()\" [disabled]=\"totalProperties === 0\">\r\n VER {{totalProperties}} {{totalProperties === 1 ? 'PROPIEDAD' : 'PROPIEDADES'}}\r\n </button>\r\n </div>\r\n </div>\r\n <!--div class=\"actions\">\r\n <ng-template [ngIf]=\"!isOPI\" [ngIfElse]=\"closeButtonTemplate\">\r\n <button mat-flat-button=\"\" type=\"button\" class=\"action__button\" color=\"primary\" (click)=\"saveSearchByFilters()\">\r\n GUARDAR\r\n </button>\r\n </ng-template>\r\n <ng-template #closeButtonTemplate>\r\n <button mat-flat-button=\"\" type=\"button\" class=\"action__button\" color=\"primary\" (click)=\"close()\">CERRAR</button>\r\n </ng-template>\r\n <button mat-flat-button=\"\" type=\"button\" class=\"action__button\" color=\"primary\"\r\n (click)=\"resetFilters()\">LIMPIAR\r\n </button>\r\n </div-->\r\n</form>\r\n",
483
483
  styles: [":host{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;display:flex;background:var(--overlay);transition:250ms}.filters--opened{height:90%!important}@media screen and (max-width:600px){.filters--opened{width:100%!important;height:100%!important;top:0!important}}.filters{width:700px;height:auto;margin:auto;border-radius:16px;position:relative;overflow:hidden;transition:150ms}.filters .--padding{padding:16px 48px;box-sizing:border-box}.filters .--row{display:flex;justify-content:space-between;align-items:flex-start}.filters .--col{width:45%}.filters .--title{margin:16px 0;color:#707070}.filters .float-button-close{position:absolute;top:16px;right:16px;height:16px;border-radius:50%}.filters .apply-button{width:100%;position:absolute;bottom:0}.filters .body{height:calc(100% - 36px);overflow-x:hidden;overflow-y:auto}.filters .header{display:flex;align-items:center;justify-content:space-around;margin-bottom:8px}.filters .listing-types{width:100%;border-radius:16px}.filters .listing-types mat-button-toggle{width:50%;height:36px}.filters ::ng-deep .listing-types mat-button-toggle button{height:36px}.filters ::ng-deep .listing-types mat-button-toggle button .mat-button-toggle-label-content{line-height:36px}.filters .currency ::ng-deep .mat-form-field-wrapper{padding:0}@media screen and (max-width:600px){.filters{width:100%;position:absolute;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;top:initial;bottom:0;left:0}.filters .--padding{padding:16px 24px}.filters .header{flex-direction:column}.filters .currency{width:70%;margin-bottom:8px}}.filters .offering-type-list{width:40%;border-radius:16px}.filters .offering-type-list mat-button-toggle{width:50%;height:36px}.filters ::ng-deep .offering-type-list mat-button-toggle button{height:36px}.filters ::ng-deep .offering-type-list mat-button-toggle button .mat-button-toggle-label-content{line-height:36px}.filters .property-type-list{display:-ms-grid;display:grid;-ms-grid-columns:(calc(100% / 9))[9];grid-template-columns:repeat(9,calc(100% / 9));-ms-grid-rows:(80px)[1];grid-template-rows:repeat(1,80px);border-radius:40px;padding:8px;box-sizing:border-box}@media screen and (max-width:600px){.filters .offering-type-list{width:70%}.filters .property-type-list{-ms-grid-columns:(calc(100% / 3))[3];grid-template-columns:repeat(3,calc(100% / 3));-ms-grid-rows:(80px)[3];grid-template-rows:repeat(3,80px)}}.filters .new-property-type-list{display:-ms-grid;display:grid;-ms-grid-columns:(calc(100% / 8))[8];grid-template-columns:repeat(8,calc(100% / 8));-ms-grid-rows:(80px)[1];grid-template-rows:repeat(1,80px);border-radius:40px;padding:8px;box-sizing:border-box}.filters .property-type-list .property-type-list__button{margin:auto;position:relative}.filters .property-type-list .property-type-list__button button{box-shadow:none}.filters .property-type-list .property-type-list__icon{width:24px;height:24px;font-size:24px}.filters .property-type-list .property-type-list__border{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;margin:auto;opacity:.7;border-radius:50%;box-sizing:border-box}.filters .property-type-list .property-type-list__border--active{padding:4px;border:2px solid;opacity:1!important}.filters .property-type-list .property-type-list__label{font-size:12px;display:block;margin:8px 0;text-align:center}.filters .property-type-list .property-type-list__divider{width:14%;height:2px;background:#707070;top:30%;position:absolute}.filters .property-type-list .property-type-list__divider--left{left:-9px}.filters .property-type-list .property-type-list__divider--right{right:-9px}@media screen and (max-width:600px){.filters .new-property-type-list{-ms-grid-columns:(calc(100% / 3))[3];grid-template-columns:repeat(3,calc(100% / 3));-ms-grid-rows:(80px)[3];grid-template-rows:repeat(3,80px)}.filters .property-type-list .property-type-list__divider{width:60%}.filters .property-type-list .property-type-list__divider--left{left:-38px}.filters .property-type-list .property-type-list__divider--right{right:-38px}}.filters .new-property-type-list .property-type-list__button{margin:auto;position:relative}.filters .new-property-type-list .property-type-list__button button{box-shadow:none}.filters .new-property-type-list .property-type-list__icon{width:24px;height:24px;font-size:24px}.filters .new-property-type-list .property-type-list__border{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;margin:auto;opacity:.7;border-radius:50%;box-sizing:border-box}.filters .new-property-type-list .property-type-list__border--active{padding:4px;border:2px solid;opacity:1!important}.filters .new-property-type-list .property-type-list__label{font-size:12px;display:block;margin:8px 0;text-align:center}.filters .new-property-type-list .property-type-list__divider{width:14%;height:2px;background:#707070;top:30%;position:absolute}.filters .new-property-type-list .property-type-list__divider--left{left:-9px}.filters .new-property-type-list .property-type-list__divider--right{right:-9px}@media screen and (max-width:600px){.filters .new-property-type-list .property-type-list__divider{width:60%}.filters .new-property-type-list .property-type-list__divider--left{left:-38px}.filters .new-property-type-list .property-type-list__divider--right{right:-38px}}.filters .all{width:100%;margin:8px 0}.filters .all .all__button{margin:0 40%;width:20%;border-radius:16px;background:0 0}.filters .budget{display:flex}.filters .budget mat-form-field{margin-right:8px;width:calc(100% / 2 - 8px)}.filters .features{display:-ms-grid;display:grid;-ms-grid-columns:(50%)[2];grid-template-columns:repeat(2,50%);-ms-grid-rows:(auto)[2];grid-template-rows:repeat(2,auto)}@media screen and (max-width:600px){.filters .all .all__button{width:50%;margin:0 25%}.filters .features{display:block}.filters .amenities-container{flex-direction:column}}.filters .features .features__bathrooms mat-button-toggle-group,.filters .features .features__bedrooms mat-button-toggle-group,.filters .features .features__parking-places mat-button-toggle-group{width:calc(100% - 16px)}.filters .features .features__bathrooms mat-button-toggle-group mat-button-toggle,.filters .features .features__bedrooms mat-button-toggle-group mat-button-toggle,.filters .features .features__parking-places mat-button-toggle-group mat-button-toggle{width:calc(100% / 5)}.filters .features .features__bedrooms--unlimited ::ng-deep .mat-button-toggle-label-content{line-height:16px;padding:8px;font-size:12px}.filters .features .features__bathrooms--unlimited ::ng-deep .mat-button-toggle-label-content{line-height:16px;padding:8px;font-size:12px}.filters .features .features__parking-places--unlimited ::ng-deep .mat-button-toggle-label-content{line-height:16px;padding:8px;font-size:12px}.filters .features .features__surface mat-button-toggle-group{margin-top:6px;margin-right:16px}.filters .amenities-container{width:100%;-ms-grid-column:1;grid-column-start:1;-ms-grid-column-span:2;grid-column-end:3;display:flex}.filters .amenities{width:50%}@media screen and (max-width:600px){.filters .amenities{width:100%}}.filters .amenities__amenity{width:calc(100% / 3 - 24px);height:120px;border-radius:8px;padding:8px;display:inline-flex;flex-direction:column;align-items:center;box-sizing:border-box;margin:0 8px 8px 0;cursor:pointer}.filters .amenity__icon{display:block;width:24px;height:24px;margin:8px auto;font-size:24px;padding:8px;border-radius:50%}.filters .amenity__label{width:100%;display:block;text-align:center;font-size:12px;margin:auto}.filters .actions{display:flex}.filters .actions .action__button{width:50%;border-radius:0}"]
484
484
  }] }
485
485
  ];
@@ -591,4 +591,4 @@ if (false) {
591
591
  */
592
592
  FiltersComponent.prototype._converter;
593
593
  }
594
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVycy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbWFwbGFuZGVyL2NvbXBvbmVudHMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9maWx0ZXJzL2ZpbHRlcnMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFVBQVUsRUFBRSxZQUFZLEVBQ3hCLE1BQU0sRUFDTixLQUFLLEVBSUwsUUFBUSxFQUFFLE1BQU0sRUFDaEIsU0FBUyxFQUVWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxXQUFXLEVBQWEsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQWUsUUFBUSxFQUFzQixnQkFBZ0IsRUFBaUIsZ0JBQWdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUMvSCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRWxDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUVuRSxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxnRUFBZ0UsQ0FBQztBQUV4RyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUN0QyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFFbEQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sa0RBQWtELENBQUM7QUFPekYsTUFBTSxPQUFPLGdCQUFnQjs7Ozs7Ozs7O0lBeUIzQixZQUM2QyxPQUFnQixFQUNuRCxPQUFrQixF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WSxDQUFDLE1BQU07Z0JBQ3RFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDeEU7UUFDSCxDQUFDLEVBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzs7O1lBbldGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsYUFBYTtnQkFDdkIsbThjQUF1Qzs7YUFFeEM7Ozs7MENBMkJJLFFBQVEsWUFBSSxNQUFNLFNBQUMsYUFBYTtZQW5EbkMsU0FBUztZQVBULFVBQVU7WUFvQkosY0FBYztZQVZkLFdBQVc7WUFRWCx3QkFBd0I7OztvQkFlN0IsS0FBSzt5QkFDTCxLQUFLOzhCQUNMLEtBQUs7MkJBQ0wsTUFBTTs7OztJQUhQLGlDQUF3Qjs7SUFDeEIsc0NBQTZCOztJQUM3QiwyQ0FBaUM7O0lBQ2pDLHdDQUE2Qzs7Ozs7SUFDN0Msd0NBQTRDOzs7OztJQUM1Qyw0Q0FBbUM7Ozs7O0lBQ25DLDRDQUFtQzs7Ozs7SUFDbkMseUNBQW9DOzs7OztJQUNwQywrQ0FBcUM7O0lBQ3JDLHVDQUE4Qjs7SUFDOUIsNENBQTRDOztJQUM1Qyx3Q0FBOEI7O0lBQzlCLHlDQUErQjs7SUFDL0IsNkNBQW1DOztJQUNuQyx3Q0FBMkI7O0lBQzNCLHdDQUE4Qjs7SUFDOUIsd0NBQThCOztJQUM5Qix1Q0FBNkI7O0lBQzdCLG1DQUF5Qjs7SUFDekIsZ0RBQThDOztJQUM5QyxrQ0FBc0I7O0lBQ3RCLGlDQUFzQjs7SUFDdEIsK0NBQW1DOzs7OztJQUdqQyxtQ0FBMkQ7Ozs7O0lBQzNELG1DQUEwQjs7Ozs7SUFDMUIsZ0NBQXdCOzs7OztJQUN4QixvQ0FBZ0M7Ozs7O0lBQ2hDLHdDQUFpQzs7Ozs7SUFDakMsc0NBQTRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsXHJcbiAgSW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE9wdGlvbmFsLCBPdXRwdXQsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFNpbXBsZUNoYW5nZXNcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtBcHBVdGlsLCBDRVIsIEN1cnJlbmN5LCBGaWx0ZXIsIExpbWl0UHJpY2UsIE9mZmVyaW5nVHlwZUVudW0sIFByb3BlcnR5UmFuZ2UsIFByb3BlcnR5VHlwZUVudW19IGZyb20gJ0BtYXBsYW5kZXIvdHlwZXMnO1xyXG5pbXBvcnQge0NvbnN0YW50c0NvbXBvbmVudHN9IGZyb20gJy4uLy4uL2NvbnN0YW50c0NvbXBvbmVudHMnO1xyXG5pbXBvcnQge1V0aWxzfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7RmlsdGVyc0NoYW5nZX0gZnJvbSAnLi8uLi8uLi91dGlscy9tb2RlbHMvZmlsdGVycy1jaGFuZ2UnO1xyXG5pbXBvcnQge0ZpbHRlcnNXcmFwcGVyfSBmcm9tICcuLi8uLi91dGlscy9jbGFzc2VzL2ZpbHRlcnMtd3JhcHBlcic7XHJcbmltcG9ydCB7UHJvcGVydHlUeXBlSXRlbX0gZnJvbSAnLi8uLi8uLi91dGlscy9tb2RlbHMvcHJvcGVydHktdHlwZS1pdGVtJztcclxuaW1wb3J0IHtDdXJyZW5jeUNvbnZlcnRlclNlcnZpY2V9IGZyb20gJy4vLi4vLi4vc2VydmljZXMvY3VycmVuY3ktY29udmVydGVyL2N1cnJlbmN5LWNvbnZlcnRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtGaWx0ZXJzfSBmcm9tICcuLi8uLi91dGlscy9pbnRlcmZhY2VzL2ZpbHRlcnMnO1xyXG5pbXBvcnQge0ZpbHRlcnNTZXJ2aWNlfSBmcm9tICcuL2ZpbHRlcnMuc2VydmljZSc7XHJcbmltcG9ydCB7RmlsdGVyc0NoYW5nZVR5cGV9IGZyb20gJy4uLy4uL3V0aWxzL2VudW1zJztcclxuaW1wb3J0IHtGSUxURVJTX1RPS0VOfSBmcm9tICcuL3Rva2VuJztcclxuaW1wb3J0IHtNVXRpbHN9IGZyb20gJy4uLy4uL3V0aWxzL2NsYXNzZXMvbVV0aWxzJztcclxuaW1wb3J0IHtBbWVuaXR5SXRlbX0gZnJvbSAnLi4vLi4vdXRpbHMvbW9kZWxzJztcclxuaW1wb3J0IHtDdXJyZW5jeUZpbHRlclZhbGlkYXRvcn0gZnJvbSAnLi4vcHJvcGVydHkvdmFsaWRhdG9ycy9jdXJyZW5jeS1maWx0ZXItdmFsaWRhdG9yJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWZpbHRlcnMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXJzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXJzLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEZpbHRlcnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBGaWx0ZXJzIHtcclxuICBASW5wdXQoKSB1dGlsczogQXBwVXRpbDtcclxuICBASW5wdXQoKSBuZXdGaWx0ZXJzOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHRvdGFsUHJvcGVydGllczogbnVtYmVyO1xyXG4gIEBPdXRwdXQoKSBmaWx0ZXJDaGFuZ2U6IEV2ZW50RW1pdHRlcjxGaWx0ZXI+O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgTUVURVJTX1RPX1NRID0gMTAuNzYzOTEwNDI7XHJcbiAgcHJpdmF0ZSBfdG1wTWluUHJpY2VMaXN0OiBudW1iZXJbXTtcclxuICBwcml2YXRlIF90bXBNYXhQcmljZUxpc3Q6IG51bWJlcltdO1xyXG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgX2lzU2hhcmVkUHJvcGVydGllczogYm9vbGVhbjtcclxuICBwdWJsaWMgZmlsdGVyc0Zvcm06IEZvcm1Hcm91cDtcclxuICBwdWJsaWMgcHJvcGVydHlUeXBlTGlzdDogUHJvcGVydHlUeXBlSXRlbVtdO1xyXG4gIHB1YmxpYyBiZWRyb29tc0xpc3Q6IG51bWJlcltdO1xyXG4gIHB1YmxpYyBiYXRocm9vbXNMaXN0OiBudW1iZXJbXTtcclxuICBwdWJsaWMgcGFya2luZ1BsYWNlc0xpc3Q6IG51bWJlcltdO1xyXG4gIHB1YmxpYyBjdXJyZW5jeUxpc3Q6IENFUltdO1xyXG4gIHB1YmxpYyBtaW5QcmljZUxpc3Q6IG51bWJlcltdO1xyXG4gIHB1YmxpYyBtYXhQcmljZUxpc3Q6IG51bWJlcltdO1xyXG4gIHB1YmxpYyBzdXJmYWNlTGlzdDogbnVtYmVyW107XHJcbiAgcHVibGljIHJvaUxpc3Q6IG51bWJlcltdO1xyXG4gIHB1YmxpYyBwcm9wZXJ0eVR5cGVTZWxlY3RlZDogUHJvcGVydHlUeXBlSXRlbTtcclxuICBwdWJsaWMgZmlsdGVyOiBGaWx0ZXI7XHJcbiAgcHVibGljIGlzT1BJOiBib29sZWFuO1xyXG4gIHB1YmxpYyBzdXJmYWNlVW5pdFNlbGVjdGVkOiBudW1iZXI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChGSUxURVJTX1RPS0VOKSBwcml2YXRlIF9jb25maWc6IGJvb2xlYW4sXHJcbiAgICBwcml2YXRlIF9yZW5kZXI6IFJlbmRlcmVyMixcclxuICAgIHByaXZhdGUgX3JlZjogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgX3NlcnZpY2U6IEZpbHRlcnNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBfY29udmVydGVyOiBDdXJyZW5jeUNvbnZlcnRlclNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuZmlsdGVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXI+KCk7XHJcbiAgICB0aGlzLmlzT1BJID0gdGhpcy5fY29uZmlnIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gICAgdGhpcy5wcm9wZXJ0eVR5cGVMaXN0ID0gQ29uc3RhbnRzQ29tcG9uZW50cy5Qcm9wZXJ0eVR5cGVMaXN0Lm1hcChpdGVtID0+ICh7Li4uaXRlbX0pKTtcclxuICAgIHRoaXMuYmVkcm9vbXNMaXN0ID0gT2JqZWN0LmFzc2lnbihbXSwgQ29uc3RhbnRzQ29tcG9uZW50cy5CZWRyb29tTGlzdCk7XHJcbiAgICB0aGlzLmJhdGhyb29tc0xpc3QgPSBPYmplY3QuYXNzaWduKFtdLCBDb25zdGFudHNDb21wb25lbnRzLkJhdGhyb29tTGlzdCk7XHJcbiAgICB0aGlzLnBhcmtpbmdQbGFjZXNMaXN0ID0gT2JqZWN0LmFzc2lnbihbXSwgQ29uc3RhbnRzQ29tcG9uZW50cy5QYXJraW5nU3BhY2VzTGlzdCk7XHJcbiAgICB0aGlzLnN1cmZhY2VMaXN0ID0gT2JqZWN0LmFzc2lnbihbXSwgQ29uc3RhbnRzQ29tcG9uZW50cy5TdXJmYWNlTGlzdCk7XHJcbiAgICB0aGlzLnJvaUxpc3QgPSBPYmplY3QuYXNzaWduKFtdLCBDb25zdGFudHNDb21wb25lbnRzLlJPSUxpc3QpO1xyXG4gICAgdGhpcy5zdXJmYWNlVW5pdFNlbGVjdGVkID0gMDtcclxuICAgIHRoaXMuYnVpbGRGb3JtKCk7XHJcbiAgICB0aGlzLmluaXRDb21wb25lbnRCeVByb3BlcnR5VHlwZSgpO1xyXG4gICAgdGhpcy5yZXN0b3JlTGFzdEZpbHRlcnNTYXZlZCh0cnVlKTtcclxuICAgIHRoaXMubGlzdGVuQ2hhbmdlc09uRm9ybSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLm9wZW5Db21wb25lbnQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnV0aWxzKSB7XHJcbiAgICAgIHJldHVybiBjb25zb2xlLndhcm4oJ1tGaWx0ZXJzQ29tcG9uZW50XSB1dGlscyBwYXJhbSBpcyByZXF1aXJlZCcpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbml0Q29tcG9uZW50KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1sndXRpbHMnXSAmJiBjaGFuZ2VzWyd1dGlscyddLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICBjb25zb2xlLmxvZygnW0ZpbHRlcnNDb21wb25lbnRdIHV0aWxzIHJlYWR5Jyk7XHJcbiAgICAgIHRoaXMuaW5pdENvbXBvbmVudCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIG9wZW4oKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlc3RvcmVMYXN0RmlsdGVyc1NhdmVkKCk7XHJcbiAgICB0aGlzLm9wZW5Db21wb25lbnQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpOiB2b2lkIHtcclxuICAgIHRoaXMub3BlbkNvbXBvbmVudChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VQcm9wZXJ0eVR5cGUoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5yZXNldEZpbHRlcnMoaW5kZXgpO1xyXG4gICAgdGhpcy5hcHBseUFtZW5pdGllcygpO1xyXG4gICAgdGhpcy5maWx0ZXIudHlwZSA9IHRoaXMucHJvcGVydHlUeXBlU2VsZWN0ZWQudmFsdWU7XHJcbiAgICBzd2l0Y2ggKHRoaXMucHJvcGVydHlUeXBlU2VsZWN0ZWQudmFsdWUpIHtcclxuICAgICAgY2FzZSBQcm9wZXJ0eVR5cGVFbnVtLlJPT006XHJcbiAgICAgICAgdGhpcy5maWx0ZXJzRm9ybS5jb250cm9sc1snb2ZmZXJpbmcnXS5zZXRWYWx1ZShPZmZlcmluZ1R5cGVFbnVtLlJFTlQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFByb3BlcnR5VHlwZUVudW0uSU5WRVNUTUVOVDpcclxuICAgICAgICB0aGlzLmZpbHRlcnNGb3JtLmNvbnRyb2xzWydvZmZlcmluZyddLnNldFZhbHVlKE9mZmVyaW5nVHlwZUVudW0uU0FMRSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNoYW5nZUZpbHRlcigpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlRmlsdGVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRGaWx0ZXJCeUZvcm0oKTtcclxuICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXIpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlT2ZmZXJpbmcoZXY6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5maWx0ZXIub2ZmZXJpbmcgPSBldiBhcyBPZmZlcmluZ1R5cGVFbnVtO1xyXG4gICAgdGhpcy5jaGFuZ2VGaWx0ZXIoKTtcclxuICB9XHJcblxyXG4gIGNoYW5nZUN1cnJlbmN5KGV2OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuZmlsdGVyLmN1cnJlbmN5ID0gZXY7XHJcbiAgICB0aGlzLmNoYW5nZUZpbHRlcigpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlUHJpY2UoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZmlsdGVyc0Zvcm0uZ2V0KCdtaW5QcmljZScpLnZhbHVlIHx8IHRoaXMuZmlsdGVyc0Zvcm0uZ2V0KCdtaW5QcmljZScpLnZhbHVlID09PSAnJykge1xyXG4gICAgICB0aGlzLmZpbHRlcnNGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgIG1pblByaWNlOiAwXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmZpbHRlcnNGb3JtLmdldCgnbWF4UHJpY2UnKS52YWx1ZSB8fCAgdGhpcy5maWx0ZXJzRm9ybS5nZXQoJ21heFByaWNlJykudmFsdWUgPT09ICcnKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyc0Zvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgbWF4UHJpY2U6IDBcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNoYW5nZUZpbHRlcigpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlQW1lbml0eShhbWVuaXR5OiBBbWVuaXR5SXRlbSk6IHZvaWQge1xyXG4gICAgaWYgKGFtZW5pdHkuY2hlY2tlZCkge1xyXG4gICAgICBjb25zdCBpID0gdGhpcy5maWx0ZXIuZXh0cmFzLmluZGV4T2YoYW1lbml0eS52YWx1ZSk7XHJcbiAgICAgIGlmIChpID4gLTEpIHtcclxuICAgICAgICB0aGlzLmZpbHRlci5leHRyYXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpbHRlci5leHRyYXMucHVzaChhbWVuaXR5LnZhbHVlKTtcclxuICAgIH1cclxuICAgIGFtZW5pdHkuY2hlY2tlZCA9ICFhbWVuaXR5LmNoZWNrZWQ7XHJcbiAgICB0aGlzLmNoYW5nZUZpbHRlcigpO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVNlYXJjaEJ5RmlsdGVycygpOiB2b2lkIHtcclxuICAgIHRoaXMuYXBwbHlGaWx0ZXJzKEZpbHRlcnNDaGFuZ2VUeXBlLlNBVkUpO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlGaWx0ZXJzKHR5cGU/OiBGaWx0ZXJzQ2hhbmdlVHlwZSk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRGaWx0ZXJCeUZvcm0oKTtcclxuICAgIGNvbnN0IGZpbHRlclRvU2VhcmNoID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5maWx0ZXIpO1xyXG4gICAgaWYgKHRoaXMuc3VyZmFjZVVuaXRTZWxlY3RlZCA9PT0gMSkge1xyXG4gICAgICBmaWx0ZXJUb1NlYXJjaC5tYWluQXJlYSA9IGZpbHRlclRvU2VhcmNoLm1haW5BcmVhICogdGhpcy5NRVRFUlNfVE9fU1E7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcnNTYXZlZChmaWx0ZXJUb1NlYXJjaCk7XHJcbiAgICB0aGlzLl9zZXJ2aWNlLnNldENoYW5nZSh7XHJcbiAgICAgIHR5cGU6IHR5cGUgfHwgRmlsdGVyc0NoYW5nZVR5cGUuQVBQTFksXHJcbiAgICAgIGZpbHRlcjogZmlsdGVyVG9TZWFyY2gsXHJcbiAgICAgIGZ0OiB0aGlzLnN1cmZhY2VVbml0U2VsZWN0ZWQgPT09IDEsXHJcbiAgICAgIGlzU2hhcmVkUHJvcGVydGllczogdGhpcy5faXNTaGFyZWRQcm9wZXJ0aWVzXHJcbiAgICB9KTtcclxuICAgIHRoaXMub3BlbkNvbXBvbmVudChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICByZXNldEZpbHRlcnMocHJvcGVydHlUeXBlSXRlbUluZGV4PzogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbHRlci5jdXJyZW5jeSA9ICFwcm9wZXJ0eVR5cGVJdGVtSW5kZXggPyAnTVhOJyA6IHRoaXMuZmlsdGVyLmN1cnJlbmN5O1xyXG4gICAgdGhpcy5pbml0Q29tcG9uZW50QnlQcm9wZXJ0eVR5cGUocHJvcGVydHlUeXBlSXRlbUluZGV4KTtcclxuICAgIHRoaXMuc3VyZmFjZVVuaXRTZWxlY3RlZCA9IDA7XHJcbiAgICB0aGlzLmZpbHRlciA9IHByb3BlcnR5VHlwZUl0ZW1JbmRleCA/IFV0aWxzLmdldEZpbHRlckJ5UHJvcGVydHlUeXBlKHRoaXMuZmlsdGVyKSA6IFV0aWxzLmdldEluaXRpYWxGaWx0ZXIodGhpcy5pc09QSSwgdGhpcy5maWx0ZXIpO1xyXG4gICAgdGhpcy51cGRhdGVGb3JtQnlGaWx0ZXJzKCk7XHJcbiAgICB0aGlzLnNldFByaWNlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZEZvcm0oKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbHRlcnNGb3JtID0gdGhpcy5fZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBvZmZlcmluZzogW10sXHJcbiAgICAgIGN1cnJlbmN5OiBbXSxcclxuICAgICAgbWluUHJpY2U6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMucGF0dGVybihuZXcgUmVnRXhwKCcoXlswLTldKyknKSldXSxcclxuICAgICAgbWF4UHJpY2U6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMucGF0dGVybihuZXcgUmVnRXhwKCcoXlswLTldKyknKSldXSxcclxuICAgICAgYmVkcm9vbXM6IFtdLFxyXG4gICAgICBiYXRocm9vbXM6IFtdLFxyXG4gICAgICBwYXJraW5nUGxhY2VzOiBbXSxcclxuICAgICAgc3VyZmFjZTogW10sXHJcbiAgICAgIHN1cmZhY2VVbml0OiBbXSxcclxuICAgICAgcm9pOiBbXVxyXG4gICAgfSwge1xyXG4gICAgICB2YWxpZGF0b3I6IEN1cnJlbmN5RmlsdGVyVmFsaWRhdG9yKCdtaW5QcmljZScsICdtYXhQcmljZScpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRm9ybUJ5RmlsdGVycygpOiB2b2lkIHtcclxuICAgIHRoaXMuZmlsdGVyc0Zvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgIG9mZmVyaW5nOiB0aGlzLmZpbHRlci5vZmZlcmluZyxcclxuICAgICAgY3VycmVuY3k6IHRoaXMuZmlsdGVyLmN1cnJlbmN5LFxyXG4gICAgICBtaW5QcmljZTogdGhpcy5maWx0ZXIuZG93bkxpbWl0UHJpY2UsXHJcbiAgICAgIG1heFByaWNlOiB0aGlzLmZpbHRlci51cExpbWl0UHJpY2UsXHJcbiAgICAgIGJlZHJvb21zOiB0aGlzLmZpbHRlci5iZWRyb29tcyxcclxuICAgICAgYmF0aHJvb21zOiB0aGlzLmZpbHRlci5iYXRocm9vbXMsXHJcbiAgICAgIHBhcmtpbmdQbGFjZXM6IHRoaXMuZmlsdGVyLnBhcmtpbmdQbGFjZXMsXHJcbiAgICAgIHN1cmZhY2U6IHRoaXMuZmlsdGVyLm1haW5BcmVhLFxyXG4gICAgICBzdXJmYWNlVW5pdDogdGhpcy5zdXJmYWNlVW5pdFNlbGVjdGVkLFxyXG4gICAgICByb2k6IHRoaXMuZmlsdGVyLnJvaVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZpbHRlckJ5Rm9ybSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmZpbHRlcnNGb3JtLnZhbHVlO1xyXG4gICAgdGhpcy5maWx0ZXIub2ZmZXJpbmcgPSBkYXRhLm9mZmVyaW5nO1xyXG4gICAgdGhpcy5maWx0ZXIuY3VycmVuY3kgPSBkYXRhLmN1cnJlbmN5O1xyXG4gICAgdGhpcy5maWx0ZXIuZG93bkxpbWl0UHJpY2UgPSBOdW1iZXIoZGF0YS5taW5QcmljZSk7XHJcbiAgICB0aGlzLmZpbHRlci51cExpbWl0UHJpY2UgPSBOdW1iZXIoZGF0YS5tYXhQcmljZSk7XHJcbiAgICB0aGlzLmZpbHRlci5iZWRyb29tcyA9IE51bWJlcihkYXRhLmJlZHJvb21zKTtcclxuICAgIHRoaXMuZmlsdGVyLmJhdGhyb29tcyA9IE51bWJlcihkYXRhLmJhdGhyb29tcyk7XHJcbiAgICB0aGlzLmZpbHRlci5wYXJraW5nUGxhY2VzID0gTnVtYmVyKGRhdGEucGFya2luZ1BsYWNlcyk7XHJcbiAgICB0aGlzLmZpbHRlci5tYWluQXJlYSA9IE51bWJlcihkYXRhLnN1cmZhY2UpO1xyXG4gICAgdGhpcy5zdXJmYWNlVW5pdFNlbGVjdGVkID0gTnVtYmVyKGRhdGEuc3VyZmFjZVVuaXQpO1xyXG4gICAgdGhpcy5maWx0ZXIucm9pID0gTnVtYmVyKGRhdGEucm9pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdENvbXBvbmVudCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5pdFV0aWxzKCk7XHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlLmdldENoYW5nZXMoKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBGaWx0ZXJzQ2hhbmdlKSA9PiB7XHJcbiAgICAgICAgc3dpdGNoIChyZXNwb25zZS50eXBlKSB7XHJcbiAgICAgICAgICBjYXNlIEZpbHRlcnNDaGFuZ2VUeXBlLkxJU1RfVFlQRTpcclxuICAgICAgICAgICAgdGhpcy5faXNTaGFyZWRQcm9wZXJ0aWVzID0gcmVzcG9uc2UuaXNTaGFyZWRQcm9wZXJ0aWVzO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZpbHRlcnNTYXZlZChyZXNwb25zZS5maWx0ZXIpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgRmlsdGVyc0NoYW5nZVR5cGUuQVJFQTpcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVGaWx0ZXJzU2F2ZWQocmVzcG9uc2UuZmlsdGVyKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIHRoaXMuX3NlcnZpY2Uuc3RhcnRDb21wb25lbnQobmV3IEZpbHRlcnNXcmFwcGVyKHRoaXMpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdFV0aWxzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jdXJyZW5jeUxpc3QgPSB0aGlzLnV0aWxzLmNlcnM7XHJcbiAgICB0aGlzLnNldFByaWNlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRQcmljZXModG8/OiBDdXJyZW5jeSk6IHZvaWQge1xyXG4gICAgdGhpcy5maWx0ZXJzRm9ybS5jb250cm9sc1snbWluUHJpY2UnXS5yZXNldCgwKTtcclxuICAgIHRoaXMuZmlsdGVyc0Zvcm0uY29udHJvbHNbJ21heFByaWNlJ10ucmVzZXQoMCk7XHJcbiAgICBjb25zdCBvZmZlcmluZyA9IHRoaXMuZmlsdGVyc0Zvcm0uY29udHJvbHNbJ29mZmVyaW5nJ10udmFsdWU7XHJcbiAgICB0aGlzLm1pblByaWNlTGlzdCA9IHRoaXMuY3JlYXRlUHJpY2VzKHRoaXMudXRpbHMubGltaXRQcmljZSwgdGhpcy5wcm9wZXJ0eVR5cGVTZWxlY3RlZC52YWx1ZSwgb2ZmZXJpbmcpO1xyXG4gICAgdGhpcy5taW5QcmljZUxpc3QgPSB0aGlzLl9jb252ZXJ0ZXIubGlzdCh0aGlzLm1pblByaWNlTGlzdCwgdGhpcy51dGlscy5jZXJzLCBDdXJyZW5jeS5VU0QsIHRvIHx8IHRoaXMuZmlsdGVyLmN1cnJlbmN5IGFzIEN1cnJlbmN5KTtcclxuICAgIHRoaXMubWF4UHJpY2VMaXN0ID0gT2JqZWN0LmFzc2lnbihbXSwgdGhpcy5taW5QcmljZUxpc3QpO1xyXG4gICAgdGhpcy5fdG1wTWluUHJpY2VMaXN0ID0gT2JqZWN0LmFzc2lnbihbXSwgdGhpcy5taW5QcmljZUxpc3QpO1xyXG4gICAgdGhpcy5fdG1wTWF4UHJpY2VMaXN0ID0gT2JqZWN0LmFzc2lnbihbXSwgdGhpcy5tYXhQcmljZUxpc3QpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUFtZW5pdGllcygpOiB2b2lkIHtcclxuICAgIHRoaXMucHJvcGVydHlUeXBlU2VsZWN0ZWQuYW1lbml0aWVzID0gdGhpcy5wcm9wZXJ0eVR5cGVTZWxlY3RlZC5hbWVuaXRpZXMubWFwKGFtZW5pdHkgPT4ge1xyXG4gICAgICBjb25zdCBpID0gdGhpcy5maWx0ZXIuZXh0cmFzLmluZGV4T2YoYW1lbml0eS52YWx1ZSk7XHJcbiAgICAgIGFtZW5pdHkuY2hlY2tlZCA9IChpID4gLTEpO1xyXG4gICAgICByZXR1cm4gYW1lbml0eTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5wcm9wZXJ0eVR5cGVTZWxlY3RlZC5mZWF0dXJlcyA9IHRoaXMucHJvcGVydHlUeXBlU2VsZWN0ZWQuZmVhdHVyZXMubWFwKGFtZW5pdHkgPT4ge1xyXG4gICAgICBjb25zdCBpID0gdGhpcy5maWx0ZXIuZXh0cmFzLmluZGV4T2YoYW1lbml0eS52YWx1ZSk7XHJcbiAgICAgIGFtZW5pdHkuY2hlY2tlZCA9IChpID4gLTEpO1xyXG4gICAgICByZXR1cm4gYW1lbml0eTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVQcmljZXMobGltaXRQcmljZTogTGltaXRQcmljZSwgcHJvcGVydHlUeXBlOiBQcm9wZXJ0eVR5cGVFbnVtLCBvZmZlcmluZzogT2ZmZXJpbmdUeXBlRW51bSk6IG51bWJlcltdIHtcclxuICAgIGxldCBsaXN0OiBudW1iZXJbXSA9IFtdO1xyXG4gICAgbGltaXRQcmljZS5wcm9wZXJ0eVJhbmdlcy5mb3JFYWNoKChyYW5nZTogUHJvcGVydHlSYW5nZSkgPT4ge1xyXG4gICAgICBpZiAocmFuZ2Uub2ZmZXJpbmcgPT09IG9mZmVyaW5nICYmIHJhbmdlLnR5cGUgPT09IHByb3BlcnR5VHlwZSkge1xyXG4gICAgICAgIGxpc3QgPSBNVXRpbHMubGluU3BhY2VFeHAocmFuZ2UubWluLCByYW5nZS5tYXgsIDIwKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbGlzdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdENvbXBvbmVudEJ5UHJvcGVydHlUeXBlKHByb3BlcnR5VHlwZUl0ZW1JbmRleDogbnVtYmVyID0gbnVsbCk6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9wZXJ0eVR5cGVTZWxlY3RlZCA9IEpTT04ucGFyc2UoXHJcbiAgICAgIEpTT04uc3RyaW5naWZ5KENvbnN0YW50c0NvbXBvbmVudHMuUHJvcGVydHlUeXBlTGlzdFtwcm9wZXJ0eVR5cGVJdGVtSW5kZXggIT09IG51bGwgPyBwcm9wZXJ0eVR5cGVJdGVtSW5kZXggOiA5XSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVGaWx0ZXJzU2F2ZWQoZmlsdGVyczogRmlsdGVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbHRlciA9IGZpbHRlcnM7XHJcbiAgICBGaWx0ZXJzU2VydmljZS5zYXZlRmlsdGVycyh7XHJcbiAgICAgIGZpbHRlcnM6IGZpbHRlcnMsXHJcbiAgICAgIGZ0OiB0aGlzLnN1cmZhY2VVbml0U2VsZWN0ZWQgPT09IDEsXHJcbiAgICAgIGlzU2hhcmVkUHJvcGVydGllczogdGhpcy5faXNTaGFyZWRQcm9wZXJ0aWVzIHx8IGZhbHNlXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzdG9yZUxhc3RGaWx0ZXJzU2F2ZWQoaW5pdD86IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpbHRlcnNTYXZlZCA9IEZpbHRlcnNTZXJ2aWNlLmdldEZpbHRlcnNTYXZlZCgpIHx8IG51bGw7XHJcbiAgICB0aGlzLmZpbHRlciA9IGZpbHRlcnNTYXZlZCA/IGZpbHRlcnNTYXZlZC5maWx0ZXJzIDogVXRpbHMuZ2V0SW5pdGlhbEZpbHRlcih0aGlzLmlzT1BJKTtcclxuICAgIGlmIChmaWx0ZXJzU2F2ZWQpIHtcclxuICAgICAgaWYgKGZpbHRlcnNTYXZlZC5mdCkge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyLm1haW5BcmVhID0gTnVtYmVyKCh0aGlzLmZpbHRlci5tYWluQXJlYSAvIHRoaXMuTUVURVJTX1RPX1NRKS50b0ZpeGVkKDApKTtcclxuICAgICAgICB0aGlzLnN1cmZhY2VVbml0U2VsZWN0ZWQgPSBmaWx0ZXJzU2F2ZWQuZnQgPyAxIDogMDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9pc1NoYXJlZFByb3BlcnRpZXMgPSBmaWx0ZXJzU2F2ZWQuaXNTaGFyZWRQcm9wZXJ0aWVzIHx8IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wcm9wZXJ0eVR5cGVTZWxlY3RlZCA9IENvbnN0YW50c0NvbXBvbmVudHMuUHJvcGVydHlUeXBlTGlzdC5maW5kKGl0ZW0gPT4gaXRlbS52YWx1ZSA9PT0gdGhpcy5maWx0ZXIudHlwZSk7XHJcbiAgICB0aGlzLmFwcGx5QW1lbml0aWVzKCk7XHJcbiAgICB0aGlzLnVwZGF0ZUZvcm1CeUZpbHRlcnMoKTtcclxuICAgIGlmIChpbml0KSB7XHJcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKEZpbHRlcnNDaGFuZ2VUeXBlLklOSVQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvcGVuQ29tcG9uZW50KG9wZW46IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmIChvcGVuKSB7XHJcbiAgICAgIHRoaXMuX3JlbmRlci5zZXRTdHlsZSh0aGlzLl9yZWYubmF0aXZlRWxlbWVudCwgJ3Zpc2liaWxpdHknLCAndmlzaWJsZScpO1xyXG4gICAgICB0aGlzLl9yZW5kZXIuc2V0U3R5bGUodGhpcy5fcmVmLm5hdGl2ZUVsZW1lbnQsICdvcGFjaXR5JywgJzEnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3JlbmRlci5zZXRTdHlsZSh0aGlzLl9yZWYubmF0aXZlRWxlbWVudCwgJ29wYWNpdHknLCAnMCcpO1xyXG4gICAgICB0aGlzLl9yZW5kZXIuc2V0U3R5bGUodGhpcy5fcmVmLm5hdGl2ZUVsZW1lbnQsICd2aXNpYmlsaXR5JywgJ2NvbGxhcHNlJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxpc3RlbkNoYW5nZXNPbkZvcm0oKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICB0aGlzLmZpbHRlcnNGb3JtLmNvbnRyb2xzWydvZmZlcmluZyddLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0UHJpY2VzKCk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgdGhpcy5maWx0ZXJzRm9ybS5jb250cm9sc1snY3VycmVuY3knXS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbHVlID0+IHtcclxuICAgICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0UHJpY2VzKHZhbHVlLnRvU3RyaW5nKCkgYXMgQ3VycmVuY3kpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgIHRoaXMuZmlsdGVyc0Zvcm0uY29udHJvbHNbJ21pblByaWNlJ10udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubWF4UHJpY2VMaXN0ID0gT2JqZWN0LmFzc2lnbihbXSwgdGhpcy5fdG1wTWF4UHJpY2VMaXN0KTtcclxuICAgICAgICBjb25zdCBpID0gdGhpcy5taW5QcmljZUxpc3QuaW5kZXhPZih2YWx1ZSk7XHJcbiAgICAgICAgaWYgKGkgPiAtMSkge1xyXG4gICAgICAgICAgdGhpcy5tYXhQcmljZUxpc3Quc3BsaWNlKDAsIGkgKyAxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgdGhpcy5maWx0ZXJzRm9ybS5jb250cm9sc1snbWF4UHJpY2UnXS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbHVlID0+IHtcclxuICAgICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubWluUHJpY2VMaXN0ID0gT2JqZWN0LmFzc2lnbihbXSwgdGhpcy5fdG1wTWluUHJpY2VMaXN0KTtcclxuICAgICAgICBjb25zdCBpID0gdGhpcy5tYXhQcmljZUxpc3QuaW5kZXhPZih2YWx1ZSk7XHJcbiAgICAgICAgaWYgKGkgPiAtMSkge1xyXG4gICAgICAgICAgY29uc3QgZGlmZmVyZW5jZSA9IHRoaXMubWluUHJpY2VMaXN0Lmxlbmd0aCAtIHRoaXMubWF4UHJpY2VMaXN0Lmxlbmd0aDtcclxuICAgICAgICAgIHRoaXMubWluUHJpY2VMaXN0LnNwbGljZShpICsgZGlmZmVyZW5jZSwgdGhpcy5taW5QcmljZUxpc3QubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
594
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVycy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbWFwbGFuZGVyL2NvbXBvbmVudHMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9maWx0ZXJzL2ZpbHRlcnMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFVBQVUsRUFBRSxZQUFZLEVBQ3hCLE1BQU0sRUFDTixLQUFLLEVBSUwsUUFBUSxFQUFFLE1BQU0sRUFDaEIsU0FBUyxFQUVWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxXQUFXLEVBQWEsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQWUsUUFBUSxFQUFzQixnQkFBZ0IsRUFBaUIsZ0JBQWdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUMvSCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRWxDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUVuRSxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxnRUFBZ0UsQ0FBQztBQUV4RyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUN0QyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFFbEQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sa0RBQWtELENBQUM7QUFPekYsTUFBTSxPQUFPLGdCQUFnQjs7Ozs7Ozs7O0lBeUIzQixZQUM2QyxPQUFnQixFQUNuRCxPQUFrQixF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WSxDQUFDLE1BQU07Z0JBQ3RFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDeEU7UUFDSCxDQUFDLEVBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzs7O1lBbldGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsYUFBYTtnQkFDdkIsdXVkQUF1Qzs7YUFFeEM7Ozs7MENBMkJJLFFBQVEsWUFBSSxNQUFNLFNBQUMsYUFBYTtZQW5EbkMsU0FBUztZQVBULFVBQVU7WUFvQkosY0FBYztZQVZkLFdBQVc7WUFRWCx3QkFBd0I7OztvQkFlN0IsS0FBSzt5QkFDTCxLQUFLOzhCQUNMLEtBQUs7MkJBQ0wsTUFBTTs7OztJQUhQLGlDQUF3Qjs7SUFDeEIsc0NBQTZCOztJQUM3QiwyQ0FBaUM7O0lBQ2pDLHdDQUE2Qzs7Ozs7SUFDN0Msd0NBQTRDOzs7OztJQUM1Qyw0Q0FBbUM7Ozs7O0lBQ25DLDRDQUFtQzs7Ozs7SUFDbkMseUNBQW9DOzs7OztJQUNwQywrQ0FBcUM7O0lBQ3JDLHVDQUE4Qjs7SUFDOUIsNENBQTRDOztJQUM1Qyx3Q0FBOEI7O0lBQzlCLHlDQUErQjs7SUFDL0IsNkNBQW1DOztJQUNuQyx3Q0FBMkI7O0lBQzNCLHdDQUE4Qjs7SUFDOUIsd0NBQThCOztJQUM5Qix1Q0FBNkI7O0lBQzdCLG1DQUF5Qjs7SUFDekIsZ0RBQThDOztJQUM5QyxrQ0FBc0I7O0lBQ3RCLGlDQUFzQjs7SUFDdEIsK0NBQW1DOzs7OztJQUdqQyxtQ0FBMkQ7Ozs7O0lBQzNELG1DQUEwQjs7Ozs7SUFDMUIsZ0NBQXdCOzs7OztJQUN4QixvQ0FBZ0M7Ozs7O0lBQ2hDLHdDQUFpQzs7Ozs7SUFDakMsc0NBQTRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsXHJcbiAgSW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE9wdGlvbmFsLCBPdXRwdXQsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFNpbXBsZUNoYW5nZXNcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtBcHBVdGlsLCBDRVIsIEN1cnJlbmN5LCBGaWx0ZXIsIExpbWl0UHJpY2UsIE9mZmVyaW5nVHlwZUVudW0sIFByb3BlcnR5UmFuZ2UsIFByb3BlcnR5VHlwZUVudW19IGZyb20gJ0BtYXBsYW5kZXIvdHlwZXMnO1xyXG5pbXBvcnQge0NvbnN0YW50c0NvbXBvbmVudHN9IGZyb20gJy4uLy4uL2NvbnN0YW50c0NvbXBvbmVudHMnO1xyXG5pbXBvcnQge1V0aWxzfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7RmlsdGVyc0NoYW5nZX0gZnJvbSAnLi8uLi8uLi91dGlscy9tb2RlbHMvZmlsdGVycy1jaGFuZ2UnO1xyXG5pbXBvcnQge0ZpbHRlcnNXcmFwcGVyfSBmcm9tICcuLi8uLi91dGlscy9jbGFzc2VzL2ZpbHRlcnMtd3JhcHBlcic7XHJcbmltcG9ydCB7UHJvcGVydHlUeXBlSXRlbX0gZnJvbSAnLi8uLi8uLi91dGlscy9tb2RlbHMvcHJvcGVydHktdHlwZS1pdGVtJztcclxuaW1wb3J0IHtDdXJyZW5jeUNvbnZlcnRlclNlcnZpY2V9IGZyb20gJy4vLi4vLi4vc2VydmljZXMvY3VycmVuY3ktY29udmVydGVyL2N1cnJlbmN5LWNvbnZlcnRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtGaWx0ZXJzfSBmcm9tICcuLi8uLi91dGlscy9pbnRlcmZhY2VzL2ZpbHRlcnMnO1xyXG5pbXBvcnQge0ZpbHRlcnNTZXJ2aWNlfSBmcm9tICcuL2ZpbHRlcnMuc2VydmljZSc7XHJcbmltcG9ydCB7RmlsdGVyc0NoYW5nZVR5cGV9IGZyb20gJy4uLy4uL3V0aWxzL2VudW1zJztcclxuaW1wb3J0IHtGSUxURVJTX1RPS0VOfSBmcm9tICcuL3Rva2VuJztcclxuaW1wb3J0IHtNVXRpbHN9IGZyb20gJy4uLy4uL3V0aWxzL2NsYXNzZXMvbVV0aWxzJztcclxuaW1wb3J0IHtBbWVuaXR5SXRlbX0gZnJvbSAnLi4vLi4vdXRpbHMvbW9kZWxzJztcclxuaW1wb3J0IHtDdXJyZW5jeUZpbHRlclZhbGlkYXRvcn0gZnJvbSAnLi4vcHJvcGVydHkvdmFsaWRhdG9ycy9jdXJyZW5jeS1maWx0ZXItdmFsaWRhdG9yJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWZpbHRlcnMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXJzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXJzLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEZpbHRlcnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBGaWx0ZXJzIHtcclxuICBASW5wdXQoKSB1dGlsczogQXBwVXRpbDtcclxuICBASW5wdXQoKSBuZXdGaWx0ZXJzOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHRvdGFsUHJvcGVydGllczogbnVtYmVyO1xyXG4gIEBPdXRwdXQoKSBmaWx0ZXJDaGFuZ2U6IEV2ZW50RW1pdHRlcjxGaWx0ZXI+O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgTUVURVJTX1RPX1NRID0gMTAuNzYzOTEwNDI7XHJcbiAgcHJpdmF0ZSBfdG1wTWluUHJpY2VMaXN0OiBudW1iZXJbXTtcclxuICBwcml2YXRlIF90bXBNYXhQcmljZUxpc3Q6IG51bWJlcltdO1xyXG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgX2lzU2hhcmVkUHJvcGVydGllczogYm9vbGVhbjtcclxuICBwdWJsaWMgZmlsdGVyc0Zvcm06IEZvcm1Hcm91cDtcclxuICBwdWJsaWMgcHJvcGVydHlUeXBlTGlzdDogUHJvcGVydHlUeXBlSXRlbVtdO1xyXG4gIHB1YmxpYyBiZWRyb29tc0xpc3Q6IG51bWJlcltdO1xyXG4gIHB1YmxpYyBiYXRocm9vbXNMaXN0OiBudW1iZXJbXTtcclxuICBwdWJsaWMgcGFya2luZ1BsYWNlc0xpc3Q6IG51bWJlcltdO1xyXG4gIHB1YmxpYyBjdXJyZW5jeUxpc3Q6IENFUltdO1xyXG4gIHB1YmxpYyBtaW5QcmljZUxpc3Q6IG51bWJlcltdO1xyXG4gIHB1YmxpYyBtYXhQcmljZUxpc3Q6IG51bWJlcltdO1xyXG4gIHB1YmxpYyBzdXJmYWNlTGlzdDogbnVtYmVyW107XHJcbiAgcHVibGljIHJvaUxpc3Q6IG51bWJlcltdO1xyXG4gIHB1YmxpYyBwcm9wZXJ0eVR5cGVTZWxlY3RlZDogUHJvcGVydHlUeXBlSXRlbTtcclxuICBwdWJsaWMgZmlsdGVyOiBGaWx0ZXI7XHJcbiAgcHVibGljIGlzT1BJOiBib29sZWFuO1xyXG4gIHB1YmxpYyBzdXJmYWNlVW5pdFNlbGVjdGVkOiBudW1iZXI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChGSUxURVJTX1RPS0VOKSBwcml2YXRlIF9jb25maWc6IGJvb2xlYW4sXHJcbiAgICBwcml2YXRlIF9yZW5kZXI6IFJlbmRlcmVyMixcclxuICAgIHByaXZhdGUgX3JlZjogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgX3NlcnZpY2U6IEZpbHRlcnNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBfY29udmVydGVyOiBDdXJyZW5jeUNvbnZlcnRlclNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuZmlsdGVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXI+KCk7XHJcbiAgICB0aGlzLmlzT1BJID0gdGhpcy5fY29uZmlnIHx8IGZhbHNlO1xyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gICAgdGhpcy5wcm9wZXJ0eVR5cGVMaXN0ID0gQ29uc3RhbnRzQ29tcG9uZW50cy5Qcm9wZXJ0eVR5cGVMaXN0Lm1hcChpdGVtID0+ICh7Li4uaXRlbX0pKTtcclxuICAgIHRoaXMuYmVkcm9vbXNMaXN0ID0gT2JqZWN0LmFzc2lnbihbXSwgQ29uc3RhbnRzQ29tcG9uZW50cy5CZWRyb29tTGlzdCk7XHJcbiAgICB0aGlzLmJhdGhyb29tc0xpc3QgPSBPYmplY3QuYXNzaWduKFtdLCBDb25zdGFudHNDb21wb25lbnRzLkJhdGhyb29tTGlzdCk7XHJcbiAgICB0aGlzLnBhcmtpbmdQbGFjZXNMaXN0ID0gT2JqZWN0LmFzc2lnbihbXSwgQ29uc3RhbnRzQ29tcG9uZW50cy5QYXJraW5nU3BhY2VzTGlzdCk7XHJcbiAgICB0aGlzLnN1cmZhY2VMaXN0ID0gT2JqZWN0LmFzc2lnbihbXSwgQ29uc3RhbnRzQ29tcG9uZW50cy5TdXJmYWNlTGlzdCk7XHJcbiAgICB0aGlzLnJvaUxpc3QgPSBPYmplY3QuYXNzaWduKFtdLCBDb25zdGFudHNDb21wb25lbnRzLlJPSUxpc3QpO1xyXG4gICAgdGhpcy5zdXJmYWNlVW5pdFNlbGVjdGVkID0gMDtcclxuICAgIHRoaXMuYnVpbGRGb3JtKCk7XHJcbiAgICB0aGlzLmluaXRDb21wb25lbnRCeVByb3BlcnR5VHlwZSgpO1xyXG4gICAgdGhpcy5yZXN0b3JlTGFzdEZpbHRlcnNTYXZlZCh0cnVlKTtcclxuICAgIHRoaXMubGlzdGVuQ2hhbmdlc09uRm9ybSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLm9wZW5Db21wb25lbnQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnV0aWxzKSB7XHJcbiAgICAgIHJldHVybiBjb25zb2xlLndhcm4oJ1tGaWx0ZXJzQ29tcG9uZW50XSB1dGlscyBwYXJhbSBpcyByZXF1aXJlZCcpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbml0Q29tcG9uZW50KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1sndXRpbHMnXSAmJiBjaGFuZ2VzWyd1dGlscyddLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICBjb25zb2xlLmxvZygnW0ZpbHRlcnNDb21wb25lbnRdIHV0aWxzIHJlYWR5Jyk7XHJcbiAgICAgIHRoaXMuaW5pdENvbXBvbmVudCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIG9wZW4oKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlc3RvcmVMYXN0RmlsdGVyc1NhdmVkKCk7XHJcbiAgICB0aGlzLm9wZW5Db21wb25lbnQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpOiB2b2lkIHtcclxuICAgIHRoaXMub3BlbkNvbXBvbmVudChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VQcm9wZXJ0eVR5cGUoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5yZXNldEZpbHRlcnMoaW5kZXgpO1xyXG4gICAgdGhpcy5hcHBseUFtZW5pdGllcygpO1xyXG4gICAgdGhpcy5maWx0ZXIudHlwZSA9IHRoaXMucHJvcGVydHlUeXBlU2VsZWN0ZWQudmFsdWU7XHJcbiAgICBzd2l0Y2ggKHRoaXMucHJvcGVydHlUeXBlU2VsZWN0ZWQudmFsdWUpIHtcclxuICAgICAgY2FzZSBQcm9wZXJ0eVR5cGVFbnVtLlJPT006XHJcbiAgICAgICAgdGhpcy5maWx0ZXJzRm9ybS5jb250cm9sc1snb2ZmZXJpbmcnXS5zZXRWYWx1ZShPZmZlcmluZ1R5cGVFbnVtLlJFTlQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFByb3BlcnR5VHlwZUVudW0uSU5WRVNUTUVOVDpcclxuICAgICAgICB0aGlzLmZpbHRlcnNGb3JtLmNvbnRyb2xzWydvZmZlcmluZyddLnNldFZhbHVlKE9mZmVyaW5nVHlwZUVudW0uU0FMRSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNoYW5nZUZpbHRlcigpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlRmlsdGVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRGaWx0ZXJCeUZvcm0oKTtcclxuICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXIpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlT2ZmZXJpbmcoZXY6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5maWx0ZXIub2ZmZXJpbmcgPSBldiBhcyBPZmZlcmluZ1R5cGVFbnVtO1xyXG4gICAgdGhpcy5jaGFuZ2VGaWx0ZXIoKTtcclxuICB9XHJcblxyXG4gIGNoYW5nZUN1cnJlbmN5KGV2OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuZmlsdGVyLmN1cnJlbmN5ID0gZXY7XHJcbiAgICB0aGlzLmNoYW5nZUZpbHRlcigpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlUHJpY2UoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZmlsdGVyc0Zvcm0uZ2V0KCdtaW5QcmljZScpLnZhbHVlIHx8IHRoaXMuZmlsdGVyc0Zvcm0uZ2V0KCdtaW5QcmljZScpLnZhbHVlID09PSAnJykge1xyXG4gICAgICB0aGlzLmZpbHRlcnNGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgIG1pblByaWNlOiAwXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmZpbHRlcnNGb3JtLmdldCgnbWF4UHJpY2UnKS52YWx1ZSB8fCAgdGhpcy5maWx0ZXJzRm9ybS5nZXQoJ21heFByaWNlJykudmFsdWUgPT09ICcnKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyc0Zvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgbWF4UHJpY2U6IDBcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNoYW5nZUZpbHRlcigpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlQW1lbml0eShhbWVuaXR5OiBBbWVuaXR5SXRlbSk6IHZvaWQge1xyXG4gICAgaWYgKGFtZW5pdHkuY2hlY2tlZCkge1xyXG4gICAgICBjb25zdCBpID0gdGhpcy5maWx0ZXIuZXh0cmFzLmluZGV4T2YoYW1lbml0eS52YWx1ZSk7XHJcbiAgICAgIGlmIChpID4gLTEpIHtcclxuICAgICAgICB0aGlzLmZpbHRlci5leHRyYXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpbHRlci5leHRyYXMucHVzaChhbWVuaXR5LnZhbHVlKTtcclxuICAgIH1cclxuICAgIGFtZW5pdHkuY2hlY2tlZCA9ICFhbWVuaXR5LmNoZWNrZWQ7XHJcbiAgICB0aGlzLmNoYW5nZUZpbHRlcigpO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVNlYXJjaEJ5RmlsdGVycygpOiB2b2lkIHtcclxuICAgIHRoaXMuYXBwbHlGaWx0ZXJzKEZpbHRlcnNDaGFuZ2VUeXBlLlNBVkUpO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlGaWx0ZXJzKHR5cGU/OiBGaWx0ZXJzQ2hhbmdlVHlwZSk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRGaWx0ZXJCeUZvcm0oKTtcclxuICAgIGNvbnN0IGZpbHRlclRvU2VhcmNoID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5maWx0ZXIpO1xyXG4gICAgaWYgKHRoaXMuc3VyZmFjZVVuaXRTZWxlY3RlZCA9PT0gMSkge1xyXG4gICAgICBmaWx0ZXJUb1NlYXJjaC5tYWluQXJlYSA9IGZpbHRlclRvU2VhcmNoLm1haW5BcmVhICogdGhpcy5NRVRFUlNfVE9fU1E7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcnNTYXZlZChmaWx0ZXJUb1NlYXJjaCk7XHJcbiAgICB0aGlzLl9zZXJ2aWNlLnNldENoYW5nZSh7XHJcbiAgICAgIHR5cGU6IHR5cGUgfHwgRmlsdGVyc0NoYW5nZVR5cGUuQVBQTFksXHJcbiAgICAgIGZpbHRlcjogZmlsdGVyVG9TZWFyY2gsXHJcbiAgICAgIGZ0OiB0aGlzLnN1cmZhY2VVbml0U2VsZWN0ZWQgPT09IDEsXHJcbiAgICAgIGlzU2hhcmVkUHJvcGVydGllczogdGhpcy5faXNTaGFyZWRQcm9wZXJ0aWVzXHJcbiAgICB9KTtcclxuICAgIHRoaXMub3BlbkNvbXBvbmVudChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICByZXNldEZpbHRlcnMocHJvcGVydHlUeXBlSXRlbUluZGV4PzogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbHRlci5jdXJyZW5jeSA9ICFwcm9wZXJ0eVR5cGVJdGVtSW5kZXggPyAnTVhOJyA6IHRoaXMuZmlsdGVyLmN1cnJlbmN5O1xyXG4gICAgdGhpcy5pbml0Q29tcG9uZW50QnlQcm9wZXJ0eVR5cGUocHJvcGVydHlUeXBlSXRlbUluZGV4KTtcclxuICAgIHRoaXMuc3VyZmFjZVVuaXRTZWxlY3RlZCA9IDA7XHJcbiAgICB0aGlzLmZpbHRlciA9IHByb3BlcnR5VHlwZUl0ZW1JbmRleCA/IFV0aWxzLmdldEZpbHRlckJ5UHJvcGVydHlUeXBlKHRoaXMuZmlsdGVyKSA6IFV0aWxzLmdldEluaXRpYWxGaWx0ZXIodGhpcy5pc09QSSwgdGhpcy5maWx0ZXIpO1xyXG4gICAgdGhpcy51cGRhdGVGb3JtQnlGaWx0ZXJzKCk7XHJcbiAgICB0aGlzLnNldFByaWNlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZEZvcm0oKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbHRlcnNGb3JtID0gdGhpcy5fZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBvZmZlcmluZzogW10sXHJcbiAgICAgIGN1cnJlbmN5OiBbXSxcclxuICAgICAgbWluUHJpY2U6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMucGF0dGVybihuZXcgUmVnRXhwKCcoXlswLTldKyknKSldXSxcclxuICAgICAgbWF4UHJpY2U6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMucGF0dGVybihuZXcgUmVnRXhwKCcoXlswLTldKyknKSldXSxcclxuICAgICAgYmVkcm9vbXM6IFtdLFxyXG4gICAgICBiYXRocm9vbXM6IFtdLFxyXG4gICAgICBwYXJraW5nUGxhY2VzOiBbXSxcclxuICAgICAgc3VyZmFjZTogW10sXHJcbiAgICAgIHN1cmZhY2VVbml0OiBbXSxcclxuICAgICAgcm9pOiBbXVxyXG4gICAgfSwge1xyXG4gICAgICB2YWxpZGF0b3I6IEN1cnJlbmN5RmlsdGVyVmFsaWRhdG9yKCdtaW5QcmljZScsICdtYXhQcmljZScpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRm9ybUJ5RmlsdGVycygpOiB2b2lkIHtcclxuICAgIHRoaXMuZmlsdGVyc0Zvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgIG9mZmVyaW5nOiB0aGlzLmZpbHRlci5vZmZlcmluZyxcclxuICAgICAgY3VycmVuY3k6IHRoaXMuZmlsdGVyLmN1cnJlbmN5LFxyXG4gICAgICBtaW5QcmljZTogdGhpcy5maWx0ZXIuZG93bkxpbWl0UHJpY2UsXHJcbiAgICAgIG1heFByaWNlOiB0aGlzLmZpbHRlci51cExpbWl0UHJpY2UsXHJcbiAgICAgIGJlZHJvb21zOiB0aGlzLmZpbHRlci5iZWRyb29tcyxcclxuICAgICAgYmF0aHJvb21zOiB0aGlzLmZpbHRlci5iYXRocm9vbXMsXHJcbiAgICAgIHBhcmtpbmdQbGFjZXM6IHRoaXMuZmlsdGVyLnBhcmtpbmdQbGFjZXMsXHJcbiAgICAgIHN1cmZhY2U6IHRoaXMuZmlsdGVyLm1haW5BcmVhLFxyXG4gICAgICBzdXJmYWNlVW5pdDogdGhpcy5zdXJmYWNlVW5pdFNlbGVjdGVkLFxyXG4gICAgICByb2k6IHRoaXMuZmlsdGVyLnJvaVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZpbHRlckJ5Rm9ybSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmZpbHRlcnNGb3JtLnZhbHVlO1xyXG4gICAgdGhpcy5maWx0ZXIub2ZmZXJpbmcgPSBkYXRhLm9mZmVyaW5nO1xyXG4gICAgdGhpcy5maWx0ZXIuY3VycmVuY3kgPSBkYXRhLmN1cnJlbmN5O1xyXG4gICAgdGhpcy5maWx0ZXIuZG93bkxpbWl0UHJpY2UgPSBOdW1iZXIoZGF0YS5taW5QcmljZSk7XHJcbiAgICB0aGlzLmZpbHRlci51cExpbWl0UHJpY2UgPSBOdW1iZXIoZGF0YS5tYXhQcmljZSk7XHJcbiAgICB0aGlzLmZpbHRlci5iZWRyb29tcyA9IE51bWJlcihkYXRhLmJlZHJvb21zKTtcclxuICAgIHRoaXMuZmlsdGVyLmJhdGhyb29tcyA9IE51bWJlcihkYXRhLmJhdGhyb29tcyk7XHJcbiAgICB0aGlzLmZpbHRlci5wYXJraW5nUGxhY2VzID0gTnVtYmVyKGRhdGEucGFya2luZ1BsYWNlcyk7XHJcbiAgICB0aGlzLmZpbHRlci5tYWluQXJlYSA9IE51bWJlcihkYXRhLnN1cmZhY2UpO1xyXG4gICAgdGhpcy5zdXJmYWNlVW5pdFNlbGVjdGVkID0gTnVtYmVyKGRhdGEuc3VyZmFjZVVuaXQpO1xyXG4gICAgdGhpcy5maWx0ZXIucm9pID0gTnVtYmVyKGRhdGEucm9pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdENvbXBvbmVudCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5pdFV0aWxzKCk7XHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlLmdldENoYW5nZXMoKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBGaWx0ZXJzQ2hhbmdlKSA9PiB7XHJcbiAgICAgICAgc3dpdGNoIChyZXNwb25zZS50eXBlKSB7XHJcbiAgICAgICAgICBjYXNlIEZpbHRlcnNDaGFuZ2VUeXBlLkxJU1RfVFlQRTpcclxuICAgICAgICAgICAgdGhpcy5faXNTaGFyZWRQcm9wZXJ0aWVzID0gcmVzcG9uc2UuaXNTaGFyZWRQcm9wZXJ0aWVzO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZpbHRlcnNTYXZlZChyZXNwb25zZS5maWx0ZXIpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgRmlsdGVyc0NoYW5nZVR5cGUuQVJFQTpcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVGaWx0ZXJzU2F2ZWQocmVzcG9uc2UuZmlsdGVyKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIHRoaXMuX3NlcnZpY2Uuc3RhcnRDb21wb25lbnQobmV3IEZpbHRlcnNXcmFwcGVyKHRoaXMpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdFV0aWxzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jdXJyZW5jeUxpc3QgPSB0aGlzLnV0aWxzLmNlcnM7XHJcbiAgICB0aGlzLnNldFByaWNlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRQcmljZXModG8/OiBDdXJyZW5jeSk6IHZvaWQge1xyXG4gICAgdGhpcy5maWx0ZXJzRm9ybS5jb250cm9sc1snbWluUHJpY2UnXS5yZXNldCgwKTtcclxuICAgIHRoaXMuZmlsdGVyc0Zvcm0uY29udHJvbHNbJ21heFByaWNlJ10ucmVzZXQoMCk7XHJcbiAgICBjb25zdCBvZmZlcmluZyA9IHRoaXMuZmlsdGVyc0Zvcm0uY29udHJvbHNbJ29mZmVyaW5nJ10udmFsdWU7XHJcbiAgICB0aGlzLm1pblByaWNlTGlzdCA9IHRoaXMuY3JlYXRlUHJpY2VzKHRoaXMudXRpbHMubGltaXRQcmljZSwgdGhpcy5wcm9wZXJ0eVR5cGVTZWxlY3RlZC52YWx1ZSwgb2ZmZXJpbmcpO1xyXG4gICAgdGhpcy5taW5QcmljZUxpc3QgPSB0aGlzLl9jb252ZXJ0ZXIubGlzdCh0aGlzLm1pblByaWNlTGlzdCwgdGhpcy51dGlscy5jZXJzLCBDdXJyZW5jeS5VU0QsIHRvIHx8IHRoaXMuZmlsdGVyLmN1cnJlbmN5IGFzIEN1cnJlbmN5KTtcclxuICAgIHRoaXMubWF4UHJpY2VMaXN0ID0gT2JqZWN0LmFzc2lnbihbXSwgdGhpcy5taW5QcmljZUxpc3QpO1xyXG4gICAgdGhpcy5fdG1wTWluUHJpY2VMaXN0ID0gT2JqZWN0LmFzc2lnbihbXSwgdGhpcy5taW5QcmljZUxpc3QpO1xyXG4gICAgdGhpcy5fdG1wTWF4UHJpY2VMaXN0ID0gT2JqZWN0LmFzc2lnbihbXSwgdGhpcy5tYXhQcmljZUxpc3QpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUFtZW5pdGllcygpOiB2b2lkIHtcclxuICAgIHRoaXMucHJvcGVydHlUeXBlU2VsZWN0ZWQuYW1lbml0aWVzID0gdGhpcy5wcm9wZXJ0eVR5cGVTZWxlY3RlZC5hbWVuaXRpZXMubWFwKGFtZW5pdHkgPT4ge1xyXG4gICAgICBjb25zdCBpID0gdGhpcy5maWx0ZXIuZXh0cmFzLmluZGV4T2YoYW1lbml0eS52YWx1ZSk7XHJcbiAgICAgIGFtZW5pdHkuY2hlY2tlZCA9IChpID4gLTEpO1xyXG4gICAgICByZXR1cm4gYW1lbml0eTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5wcm9wZXJ0eVR5cGVTZWxlY3RlZC5mZWF0dXJlcyA9IHRoaXMucHJvcGVydHlUeXBlU2VsZWN0ZWQuZmVhdHVyZXMubWFwKGFtZW5pdHkgPT4ge1xyXG4gICAgICBjb25zdCBpID0gdGhpcy5maWx0ZXIuZXh0cmFzLmluZGV4T2YoYW1lbml0eS52YWx1ZSk7XHJcbiAgICAgIGFtZW5pdHkuY2hlY2tlZCA9IChpID4gLTEpO1xyXG4gICAgICByZXR1cm4gYW1lbml0eTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVQcmljZXMobGltaXRQcmljZTogTGltaXRQcmljZSwgcHJvcGVydHlUeXBlOiBQcm9wZXJ0eVR5cGVFbnVtLCBvZmZlcmluZzogT2ZmZXJpbmdUeXBlRW51bSk6IG51bWJlcltdIHtcclxuICAgIGxldCBsaXN0OiBudW1iZXJbXSA9IFtdO1xyXG4gICAgbGltaXRQcmljZS5wcm9wZXJ0eVJhbmdlcy5mb3JFYWNoKChyYW5nZTogUHJvcGVydHlSYW5nZSkgPT4ge1xyXG4gICAgICBpZiAocmFuZ2Uub2ZmZXJpbmcgPT09IG9mZmVyaW5nICYmIHJhbmdlLnR5cGUgPT09IHByb3BlcnR5VHlwZSkge1xyXG4gICAgICAgIGxpc3QgPSBNVXRpbHMubGluU3BhY2VFeHAocmFuZ2UubWluLCByYW5nZS5tYXgsIDIwKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbGlzdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdENvbXBvbmVudEJ5UHJvcGVydHlUeXBlKHByb3BlcnR5VHlwZUl0ZW1JbmRleDogbnVtYmVyID0gbnVsbCk6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9wZXJ0eVR5cGVTZWxlY3RlZCA9IEpTT04ucGFyc2UoXHJcbiAgICAgIEpTT04uc3RyaW5naWZ5KENvbnN0YW50c0NvbXBvbmVudHMuUHJvcGVydHlUeXBlTGlzdFtwcm9wZXJ0eVR5cGVJdGVtSW5kZXggIT09IG51bGwgPyBwcm9wZXJ0eVR5cGVJdGVtSW5kZXggOiA5XSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVGaWx0ZXJzU2F2ZWQoZmlsdGVyczogRmlsdGVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbHRlciA9IGZpbHRlcnM7XHJcbiAgICBGaWx0ZXJzU2VydmljZS5zYXZlRmlsdGVycyh7XHJcbiAgICAgIGZpbHRlcnM6IGZpbHRlcnMsXHJcbiAgICAgIGZ0OiB0aGlzLnN1cmZhY2VVbml0U2VsZWN0ZWQgPT09IDEsXHJcbiAgICAgIGlzU2hhcmVkUHJvcGVydGllczogdGhpcy5faXNTaGFyZWRQcm9wZXJ0aWVzIHx8IGZhbHNlXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzdG9yZUxhc3RGaWx0ZXJzU2F2ZWQoaW5pdD86IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpbHRlcnNTYXZlZCA9IEZpbHRlcnNTZXJ2aWNlLmdldEZpbHRlcnNTYXZlZCgpIHx8IG51bGw7XHJcbiAgICB0aGlzLmZpbHRlciA9IGZpbHRlcnNTYXZlZCA/IGZpbHRlcnNTYXZlZC5maWx0ZXJzIDogVXRpbHMuZ2V0SW5pdGlhbEZpbHRlcih0aGlzLmlzT1BJKTtcclxuICAgIGlmIChmaWx0ZXJzU2F2ZWQpIHtcclxuICAgICAgaWYgKGZpbHRlcnNTYXZlZC5mdCkge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyLm1haW5BcmVhID0gTnVtYmVyKCh0aGlzLmZpbHRlci5tYWluQXJlYSAvIHRoaXMuTUVURVJTX1RPX1NRKS50b0ZpeGVkKDApKTtcclxuICAgICAgICB0aGlzLnN1cmZhY2VVbml0U2VsZWN0ZWQgPSBmaWx0ZXJzU2F2ZWQuZnQgPyAxIDogMDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9pc1NoYXJlZFByb3BlcnRpZXMgPSBmaWx0ZXJzU2F2ZWQuaXNTaGFyZWRQcm9wZXJ0aWVzIHx8IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wcm9wZXJ0eVR5cGVTZWxlY3RlZCA9IENvbnN0YW50c0NvbXBvbmVudHMuUHJvcGVydHlUeXBlTGlzdC5maW5kKGl0ZW0gPT4gaXRlbS52YWx1ZSA9PT0gdGhpcy5maWx0ZXIudHlwZSk7XHJcbiAgICB0aGlzLmFwcGx5QW1lbml0aWVzKCk7XHJcbiAgICB0aGlzLnVwZGF0ZUZvcm1CeUZpbHRlcnMoKTtcclxuICAgIGlmIChpbml0KSB7XHJcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKEZpbHRlcnNDaGFuZ2VUeXBlLklOSVQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvcGVuQ29tcG9uZW50KG9wZW46IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmIChvcGVuKSB7XHJcbiAgICAgIHRoaXMuX3JlbmRlci5zZXRTdHlsZSh0aGlzLl9yZWYubmF0aXZlRWxlbWVudCwgJ3Zpc2liaWxpdHknLCAndmlzaWJsZScpO1xyXG4gICAgICB0aGlzLl9yZW5kZXIuc2V0U3R5bGUodGhpcy5fcmVmLm5hdGl2ZUVsZW1lbnQsICdvcGFjaXR5JywgJzEnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3JlbmRlci5zZXRTdHlsZSh0aGlzLl9yZWYubmF0aXZlRWxlbWVudCwgJ29wYWNpdHknLCAnMCcpO1xyXG4gICAgICB0aGlzLl9yZW5kZXIuc2V0U3R5bGUodGhpcy5fcmVmLm5hdGl2ZUVsZW1lbnQsICd2aXNpYmlsaXR5JywgJ2NvbGxhcHNlJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxpc3RlbkNoYW5nZXNPbkZvcm0oKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICB0aGlzLmZpbHRlcnNGb3JtLmNvbnRyb2xzWydvZmZlcmluZyddLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0UHJpY2VzKCk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgdGhpcy5maWx0ZXJzRm9ybS5jb250cm9sc1snY3VycmVuY3knXS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbHVlID0+IHtcclxuICAgICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0UHJpY2VzKHZhbHVlLnRvU3RyaW5nKCkgYXMgQ3VycmVuY3kpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgIHRoaXMuZmlsdGVyc0Zvcm0uY29udHJvbHNbJ21pblByaWNlJ10udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubWF4UHJpY2VMaXN0ID0gT2JqZWN0LmFzc2lnbihbXSwgdGhpcy5fdG1wTWF4UHJpY2VMaXN0KTtcclxuICAgICAgICBjb25zdCBpID0gdGhpcy5taW5QcmljZUxpc3QuaW5kZXhPZih2YWx1ZSk7XHJcbiAgICAgICAgaWYgKGkgPiAtMSkge1xyXG4gICAgICAgICAgdGhpcy5tYXhQcmljZUxpc3Quc3BsaWNlKDAsIGkgKyAxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgdGhpcy5maWx0ZXJzRm9ybS5jb250cm9sc1snbWF4UHJpY2UnXS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbHVlID0+IHtcclxuICAgICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubWluUHJpY2VMaXN0ID0gT2JqZWN0LmFzc2lnbihbXSwgdGhpcy5fdG1wTWluUHJpY2VMaXN0KTtcclxuICAgICAgICBjb25zdCBpID0gdGhpcy5tYXhQcmljZUxpc3QuaW5kZXhPZih2YWx1ZSk7XHJcbiAgICAgICAgaWYgKGkgPiAtMSkge1xyXG4gICAgICAgICAgY29uc3QgZGlmZmVyZW5jZSA9IHRoaXMubWluUHJpY2VMaXN0Lmxlbmd0aCAtIHRoaXMubWF4UHJpY2VMaXN0Lmxlbmd0aDtcclxuICAgICAgICAgIHRoaXMubWluUHJpY2VMaXN0LnNwbGljZShpICsgZGlmZmVyZW5jZSwgdGhpcy5taW5QcmljZUxpc3QubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
@@ -89,15 +89,15 @@ export class MarkersService {
89
89
  */
90
90
  buildURL(config) {
91
91
  /** @type {?} */
92
- const colony = config.address.colony.replace(/[\])}[{(]/g, '');
92
+ const colony = config.address.colony ? config.address.colony.replace(/[\])}[{(]/g, '') : '';
93
93
  /** @type {?} */
94
- const city = config.address.city.replace(/[\])}[{(]/g, '');
94
+ const city = config.address.city ? config.address.city.replace(/[\])}[{(]/g, '') : '';
95
95
  /** @type {?} */
96
96
  let url = 'property/';
97
97
  url += `${this._propertyTypePipe.transform(config.propertyType, true)}-`;
98
98
  url += `${this._offeringTypePipe.transform(config.offering, ' ').replace(/ /g, '')}-`;
99
- url += config.address.colony ? `${config.address.colony.replace(/\//g, '-')}-` : '';
100
- url += config.address.city ? `${config.address.city.replace(/\//g, '-')}-` : '';
99
+ url += colony ? `${colony.replace(/\//g, '-')}-` : '';
100
+ url += city ? `${city.replace(/\//g, '-')}-` : '';
101
101
  url += config.propertyId;
102
102
  url = Utils.removeDiacritics(url).replace(/ /g, '-').toLowerCase();
103
103
  return url;
@@ -302,4 +302,4 @@ if (false) {
302
302
  */
303
303
  MarkersService.prototype._converter;
304
304
  }
305
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Vycy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG1hcGxhbmRlci9jb21wb25lbnRzLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL21hcmtlcnMvbWFya2Vycy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFDTCxPQUFPLEVBRVAsUUFBUSxFQUVSLGVBQWUsRUFJaEIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUk5RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSw4Q0FBOEMsQ0FBQztBQUM5RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSw4Q0FBOEMsQ0FBQztBQUM5RSxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLGtEQUFrRCxDQUFDO0FBSzFGLE1BQU0sT0FBTyxjQUFjOzs7Ozs7SUFFekIsWUFDVSxpQkFBbUMsRUFDbkMsaUJBQW1DLEVBQ25DLFVBQW9DO1FBRnBDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUFDbkMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQUNuQyxlQUFVLEdBQVYsVUFBVSxDQUEwQjtJQUU5QyxDQUFDOzs7Ozs7SUFFTyxNQUFNLENBQUMseUJBQXlCLENBQUMsSUFBc0I7O1lBQ3pELElBQUksR0FBcUIsSUFBSTtRQUNqQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPOzs7O1FBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUN2RCxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFO2dCQUMxQixJQUFJLEdBQUcsT0FBTyxDQUFDO2FBQ2hCO1FBQ0gsQ0FBQyxFQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztJ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QyxDQUFDLE1BQU0sQ0FBQyxVQUFVO2FBQ2hGLENBQUM7WUFDRixNQUFNLEVBQUUsQ0FBQyxNQUFNLFlBQVksZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDbEUsUUFBUSxFQUFFLENBQUMsTUFBTSxZQUFZLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJO1NBQ3ZFLENBQUM7SUFDSixDQUFDOzs7WUFoTEYsVUFBVTs7OztZQU5ILGdCQUFnQjtZQURoQixnQkFBZ0I7WUFHaEIsd0JBQXdCOzs7Ozs7O0lBUTVCLDJDQUEyQzs7Ozs7SUFDM0MsMkNBQTJDOzs7OztJQUMzQyxvQ0FBNEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEFkZHJlc3MsXHJcbiAgQ0VSLFxyXG4gIEN1cnJlbmN5LFxyXG4gIEdlb1B0LFxyXG4gIE5ld1Byb3BlcnR5TGl0ZSxcclxuICBOZXdQcm9wZXJ0eUxpdGVTdWdnZXN0LFxyXG4gIE9mZmVyaW5nVHlwZUVudW0sXHJcbiAgUHJvcGVydHlUeXBlRW51bVxyXG59IGZyb20gJ0BtYXBsYW5kZXIvdHlwZXMnO1xyXG5pbXBvcnQge0NvbnN0YW50c0NvbXBvbmVudHN9IGZyb20gJy4uLy4uL2NvbnN0YW50c0NvbXBvbmVudHMnO1xyXG5pbXBvcnQge01hcmtlcn0gZnJvbSAnLi4vLi4vdXRpbHMvbW9kZWxzL21hcmtlcic7XHJcbmltcG9ydCB7UHJvcGVydHlDYXJkSW5mb30gZnJvbSAnLi4vLi4vdXRpbHMvbW9kZWxzL3Byb3BlcnR5LWNhcmQtaW5mbyc7XHJcbmltcG9ydCB7UHJvcGVydHlUeXBlSXRlbX0gZnJvbSAnLi4vLi4vdXRpbHMvbW9kZWxzL3Byb3BlcnR5LXR5cGUtaXRlbSc7XHJcbmltcG9ydCB7T2ZmZXJpbmdUeXBlUGlwZX0gZnJvbSAnLi4vLi4vcGlwZXMvb2ZmZXJpbmctdHlwZS9vZmZlcmluZy10eXBlLnBpcGUnO1xyXG5pbXBvcnQge1Byb3BlcnR5VHlwZVBpcGV9IGZyb20gJy4uLy4uL3BpcGVzL3Byb3BlcnR5LXR5cGUvcHJvcGVydHktdHlwZS5waXBlJztcclxuaW1wb3J0IHtVdGlsc30gZnJvbSAnLi4vLi4vdXRpbHMnO1xyXG5pbXBvcnQge0N1cnJlbmN5Q29udmVydGVyU2VydmljZX0gZnJvbSAnLi4vY3VycmVuY3ktY29udmVydGVyL2N1cnJlbmN5LWNvbnZlcnRlci5zZXJ2aWNlJztcclxuXHJcbmRlY2xhcmUgdmFyIGdvb2dsZTogYW55O1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTWFya2Vyc1NlcnZpY2Uge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX3Byb3BlcnR5VHlwZVBpcGU6IFByb3BlcnR5VHlwZVBpcGUsXHJcbiAgICBwcml2YXRlIF9vZmZlcmluZ1R5cGVQaXBlOiBPZmZlcmluZ1R5cGVQaXBlLFxyXG4gICAgcHJpdmF0ZSBfY29udmVydGVyOiBDdXJyZW5jeUNvbnZlcnRlclNlcnZpY2VcclxuICApIHtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGdldFByb3BlcnR5VHlwZUl0ZW1CeVR5cGUodHlwZTogUHJvcGVydHlUeXBlRW51bSk6IFByb3BlcnR5VHlwZUl0ZW0ge1xyXG4gICAgbGV0IGl0ZW06IFByb3BlcnR5VHlwZUl0ZW0gPSBudWxsO1xyXG4gICAgQ29uc3RhbnRzQ29tcG9uZW50cy5Qcm9wZXJ0eVR5cGVMaXN0LmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgaWYgKGVsZW1lbnQudmFsdWUgPT09IHR5cGUpIHtcclxuICAgICAgICBpdGVtID0gZWxlbWVudDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gaXRlbTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlUHJvcGVydHlJbkZhdm9yaXRlcyhwcm9wZXJ0eUlkOiBzdHJpbmcsIGZhdm9yaXRlczogTmV3UHJvcGVydHlMaXRlW10pOiBib29sZWFuIHtcclxuICAgIGxldCByZXN1bHQgPSBmYWxzZTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmF2b3JpdGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChwcm9wZXJ0eUlkID09PSBmYXZvcml0ZXNbaV0uaWQpIHtcclxuICAgICAgICByZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgY2FsY3VsYXRlTG9jYXRpb25Gcm9tKGxvY2F0aW9uOiBHZW9QdCwgYmVhcmluZ0luUmFkaWFuczogbnVtYmVyLCBkaXN0YW5jZUluTWV0cmVzOiBudW1iZXIpOiBHZW9QdCB7XHJcbiAgICBjb25zdCBjb29yZGluYXRlTGF0aXR1ZGVJblJhZGlhbnMgPSBsb2NhdGlvbi5sYXRpdHVkZSAqIE1hdGguUEkgLyAxODA7XHJcbiAgICBjb25zdCBjb29yZGluYXRlTG9uZ2l0dWRlSW5SYWRpYW5zID0gbG9jYXRpb24ubG9uZ2l0dWRlICogTWF0aC5QSSAvIDE4MDtcclxuICAgIGNvbnN0IGRpc3RhbmNlQ29tcGFyZWRUb0VhcnRoID0gZGlzdGFuY2VJbk1ldHJlcyAvIDYzNzgxMDAuMDtcclxuICAgIGNvbnN0IHJlc3VsdExhdGl0dWRlSW5SYWRpYW5zID0gTWF0aC5hc2luKE1hdGguc2luKGNvb3JkaW5hdGVMYXRpdHVkZUluUmFkaWFucykgKiBNYXRoLmNvcyhkaXN0YW5jZUNvbXBhcmVkVG9FYXJ0aCkgK1xyXG4gICAgICBNYXRoLmNvcyhjb29yZGluYXRlTGF0aXR1ZGVJblJhZGlhbnMpICogTWF0aC5zaW4oZGlzdGFuY2VDb21wYXJlZFRvRWFydGgpICogTWF0aC5jb3MoYmVhcmluZ0luUmFkaWFucykpO1xyXG4gICAgY29uc3QgcmVzdWx0TG9uZ2l0dWRlSW5SYWRpYW5zID0gY29vcmRpbmF0ZUxvbmdpdHVkZUluUmFkaWFucyArIE1hdGguYXRhbjIoTWF0aC5zaW4oYmVhcmluZ0luUmFkaWFucykgKlxyXG4gICAgICBNYXRoLnNpbihkaXN0YW5jZUNvbXBhcmVkVG9FYXJ0aCkgKiBNYXRoLmNvcyhjb29yZGluYXRlTGF0aXR1ZGVJblJhZGlhbnMpLCBNYXRoLmNvcyhkaXN0YW5jZUNvbXBhcmVkVG9FYXJ0aCkgLVxyXG4gICAgICBNYXRoLnNpbihjb29yZGluYXRlTGF0aXR1ZGVJblJhZGlhbnMpICogTWF0aC5zaW4ocmVzdWx0TGF0aXR1ZGVJblJhZGlhbnMpKTtcclxuICAgIGNvbnN0IG5ld0Nvb3JkaW5hdGVzOiBhbnkgPSB7fTtcclxuICAgIG5ld0Nvb3JkaW5hdGVzLmxhdGl0dWRlID0gcmVzdWx0TGF0aXR1ZGVJblJhZGlhbnMgKiAxODAgLyBNYXRoLlBJO1xyXG4gICAgbmV3Q29vcmRpbmF0ZXMubG9uZ2l0dWRlID0gcmVzdWx0TG9uZ2l0dWRlSW5SYWRpYW5zICogMTgwIC8gTWF0aC5QSTtcclxuICAgIHJldHVybiBuZXdDb29yZGluYXRlcztcclxuICB9XHJcblxyXG4gIGJ1aWxkVVJMKGNvbmZpZzoge1xyXG4gICAgcHJvcGVydHlJZDogc3RyaW5nLFxyXG4gICAgb2ZmZXJpbmc6IE9mZmVyaW5nVHlwZUVudW0sXHJcbiAgICBwcm9wZXJ0eVR5cGU6IFByb3BlcnR5VHlwZUVudW0sXHJcbiAgICBhZGRyZXNzOiBBZGRyZXNzXHJcbiAgfSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBjb2xvbnkgPSBjb25maWcuYWRkcmVzcy5jb2xvbnkucmVwbGFjZSgvW1xcXSl9W3soXS9nLCAnJyk7XHJcbiAgICBjb25zdCBjaXR5ID0gY29uZmlnLmFkZHJlc3MuY2l0eS5yZXBsYWNlKC9bXFxdKX1beyhdL2csICcnKTtcclxuICAgIGxldCB1cmwgPSAncHJvcGVydHkvJztcclxuICAgIHVybCArPSBgJHt0aGlzLl9wcm9wZXJ0eVR5cGVQaXBlLnRyYW5zZm9ybShjb25maWcucHJvcGVydHlUeXBlLCB0cnVlKX0tYDtcclxuICAgIHVybCArPSBgJHt0aGlzLl9vZmZlcmluZ1R5cGVQaXBlLnRyYW5zZm9ybShjb25maWcub2ZmZXJpbmcsICcgJykucmVwbGFjZSgvIC9nLCAnJyl9LWA7XHJcbiAgICB1cmwgKz0gY29uZmlnLmFkZHJlc3MuY29sb255ID8gYCR7Y29uZmlnLmFkZHJlc3MuY29sb255LnJlcGxhY2UoL1xcLy9nLCAnLScpfS1gIDogJyc7XHJcbiAgICB1cmwgKz0gY29uZmlnLmFkZHJlc3MuY2l0eSA/IGAke2NvbmZpZy5hZGRyZXNzLmNpdHkucmVwbGFjZSgvXFwvL2csICctJyl9LWAgOiAnJztcclxuICAgIHVybCArPSBjb25maWcucHJvcGVydHlJZDtcclxuICAgIHVybCA9IFV0aWxzLnJlbW92ZURpYWNyaXRpY3ModXJsKS5yZXBsYWNlKC8gL2csICctJykudG9Mb3dlckNhc2UoKTtcclxuICAgIHJldHVybiB1cmw7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZVByb3BlcnRpZXNJblBvbHkocHJvcGVydGllczogTWFya2VyW10sIHBhdGhzOiBhbnlbXSk6IE1hcmtlcltdIHtcclxuICAgIGNvbnN0IHBvbHlnb24gPSBuZXcgZ29vZ2xlLm1hcHMuUG9seWdvbih7cGF0aHM6IHBhdGhzfSk7XHJcbiAgICBpZiAocHJvcGVydGllcyAmJiBwcm9wZXJ0aWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgcHJvcGVydGllcy5tYXAoKGVsOiBNYXJrZXIpID0+IHtcclxuICAgICAgICBlbC5leHRyYXNbJ3Nob3dJblBvbHlnb24nXSA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGN1c3RvbUxhdExuZyA9IG5ldyBnb29nbGUubWFwcy5MYXRMbmcoZWwubG9jYXRpb24ubGF0aXR1ZGUsIGVsLmxvY2F0aW9uLmxvbmdpdHVkZSk7XHJcbiAgICAgICAgaWYgKGdvb2dsZS5tYXBzLmdlb21ldHJ5LnBvbHkuY29udGFpbnNMb2NhdGlvbihjdXN0b21MYXRMbmcsIHBvbHlnb24pKSB7XHJcbiAgICAgICAgICBlbC5leHRyYXNbJ3Nob3dJblBvbHlnb24nXSA9IHRydWU7XHJcbiAgICAgICAgICByZXR1cm4gZWw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGVsLmV4dHJhc1snc2hvd0luUG9seWdvbiddID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm4gZWw7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXMuZmlsdGVyKChlKSA9PiB7XHJcbiAgICAgICAgaWYgKGUuZXh0cmFzWydzaG93SW5Qb2x5Z29uJ10pIHtcclxuICAgICAgICAgIHJldHVybiBlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbWFya2Vyc1RvQ3VycmVuY3kobWFya2VyczogTWFya2VyW10sIHRvQ3VycmVuY3k6IEN1cnJlbmN5LCBjdXJyZW5jaWVzOiBDRVJbXSk6IE1hcmtlcltdIHtcclxuICAgIG1hcmtlcnMgPSBtYXJrZXJzLm1hcDxNYXJrZXI+KGl0ZW0gPT4ge1xyXG4gICAgICBpZiAoQ3VycmVuY3lbaXRlbS5pbmZvLmN1cnJlbmN5XSAhPT0gdG9DdXJyZW5jeSkge1xyXG4gICAgICAgIGl0ZW0uaW5mby5wcmljZSA9IHRoaXMuX2NvbnZlcnRlci5udW1iZXIoaXRlbS5pbmZvLnByaWNlLCBjdXJyZW5jaWVzLCBDdXJyZW5jeVtpdGVtLmluZm8uY3VycmVuY3ldLCB0b0N1cnJlbmN5KTtcclxuICAgICAgICBpdGVtLmluZm8uY3VycmVuY3kgPSB0b0N1cnJlbmN5LnRvU3RyaW5nKCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBtYXJrZXJzO1xyXG4gIH1cclxuXHJcbiAgYnVpbGRNYXJrZXJzKGVudGl0aWVzOiBOZXdQcm9wZXJ0eUxpdGVbXSB8IE5ld1Byb3BlcnR5TGl0ZVN1Z2dlc3RbXSwgZmF2b3JpdGVzPzogTmV3UHJvcGVydHlMaXRlW10pOiBNYXJrZXJbXSB7XHJcbiAgICBjb25zdCBtYXJrZXJzOiBNYXJrZXJbXSA9IFtdO1xyXG4gICAgZW50aXRpZXMuZm9yRWFjaCgoZW50aXR5KSA9PiB7XHJcbiAgICAgIGNvbnN0IG06IE1hcmtlciA9IHtcclxuICAgICAgICBsb2NhdGlvbjogZW50aXR5LmFkZHJlc3MubG9jYXRpb24sXHJcbiAgICAgICAgaG92ZXI6IGZhbHNlLFxyXG4gICAgICAgIHZpc2l0ZWQ6IGZhbHNlLFxyXG4gICAgICAgIHR5cGU6IE1hcmtlcnNTZXJ2aWNlLmdldFByb3BlcnR5VHlwZUl0ZW1CeVR5cGUoZW50aXR5LnR5cGUpLFxyXG4gICAgICAgIGluZm86IHRoaXMuY3JlYXRlUHJvcGVydHlJbmZvQ2FyZChlbnRpdHkpLFxyXG4gICAgICAgIGlzRmF2b3JpdGU6IGZhbHNlLFxyXG4gICAgICAgIGV4dHJhczoge31cclxuICAgICAgfTtcclxuICAgICAgaWYgKGVudGl0eSBpbnN0YW5jZW9mIE5ld1Byb3BlcnR5TGl0ZSkge1xyXG4gICAgICAgIG0uaXNGYXZvcml0ZSA9IGZhdm9yaXRlcyAmJiBmYXZvcml0ZXMubGVuZ3RoID4gMCA/IE1hcmtlcnNTZXJ2aWNlLnZhbGlkYXRlUHJvcGVydHlJbkZhdm9yaXRlcyhlbnRpdHkuaWQsIGZhdm9yaXRlcykgOiBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBtLmlzRmF2b3JpdGUgPSBmYXZvcml0ZXMgJiYgZmF2b3JpdGVzLmxlbmd0aCA+IDAgPyBNYXJrZXJzU2VydmljZS52YWxpZGF0ZVByb3BlcnR5SW5GYXZvcml0ZXMoZW50aXR5LnByb3BlcnR5SWQsIGZhdm9yaXRlcykgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBtYXJrZXJzLnB1c2gobSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBtYXJrZXJzO1xyXG4gIH1cclxuXHJcbiAgYnVpbGRTcGlkZXIobGlzdDogTWFya2VyW10pOiB7IG1hcmtlcnM6IE1hcmtlcltdLCBwb2x5TGluZXM6IGFueVtdIH0ge1xyXG4gICAgY29uc3QgcmVzcG9uc2UgPSB7bWFya2VyczogW10sIHBvbHlMaW5lczogW119O1xyXG4gICAgbGlzdC5tYXAoKGVsKSA9PiB7XHJcbiAgICAgIGVsLmV4dHJhc1sncmVwZWF0J10gPSBmYWxzZTtcclxuICAgICAgY29uc3Qgc2l6ZSA9IGxpc3QuZmlsdGVyKGl0ZW0gPT4ge1xyXG4gICAgICAgIHJldHVybiBlbC5sb2NhdGlvbi5sYXRpdHVkZSA9PT0gaXRlbS5sb2NhdGlvbi5sYXRpdHVkZSAmJiBlbC5sb2NhdGlvbi5sb25naXR1ZGUgPT09IGl0ZW0ubG9jYXRpb24ubG9uZ2l0dWRlO1xyXG4gICAgICB9KTtcclxuICAgICAgY29uc3QgZGlzdGFuY2UgPSAxMiAqIHNpemUubGVuZ3RoIC8gMi4wO1xyXG4gICAgICBjb25zdCByYWRpYW5zQmV0d2VlbkFubm90YXRpb25zID0gKE1hdGguUEkgKiAyKSAvIHNpemUubGVuZ3RoO1xyXG4gICAgICBpZiAoIWVsLmV4dHJhc1sncmVwZWF0J10gJiYgc2l6ZS5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgY29uc3QgbG9jYXRpb25TaGFyZTogYW55ID0gT2JqZWN0LmFzc2lnbih7fSwgZWwubG9jYXRpb24pO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaGVhZGluZyA9IHJhZGlhbnNCZXR3ZWVuQW5ub3RhdGlvbnMgKiBpO1xyXG4gICAgICAgICAgc2l6ZVtpXVsncmVwZWF0J10gPSB0cnVlO1xyXG4gICAgICAgICAgY29uc3QgbmV3TG9jYXRpb24gPSBNYXJrZXJzU2VydmljZS5jYWxjdWxhdGVMb2NhdGlvbkZyb20obG9jYXRpb25TaGFyZSwgaGVhZGluZywgZGlzdGFuY2UpO1xyXG4gICAgICAgICAgcmVzcG9uc2UucG9seUxpbmVzLnB1c2goe1xyXG4gICAgICAgICAgICBwYXRoOiBbXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbGF0aXR1ZGU6IE51bWJlcihsb2NhdGlvblNoYXJlLmxhdGl0dWRlKSxcclxuICAgICAgICAgICAgICAgIGxvbmdpdHVkZTogTnVtYmVyKGxvY2F0aW9uU2hhcmUubG9uZ2l0dWRlKVxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbGF0aXR1ZGU6IE51bWJlcihuZXdMb2NhdGlvbi5sYXRpdHVkZSksXHJcbiAgICAgICAgICAgICAgICBsb25naXR1ZGU6IE51bWJlcihuZXdMb2NhdGlvbi5sb25naXR1ZGUpXHJcbiAgICAgICAgICAgICAgfV1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgc2l6ZVtpXS5sb2NhdGlvbiA9IG5ld0xvY2F0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZWw7XHJcbiAgICB9KTtcclxuICAgIHJlc3BvbnNlLm1hcmtlcnMgPSBsaXN0O1xyXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVQcm9wZXJ0eUluZm9DYXJkKGVudGl0eTogTmV3UHJvcGVydHlMaXRlIHwgTmV3UHJvcGVydHlMaXRlU3VnZ2VzdCk6IFByb3BlcnR5Q2FyZEluZm8ge1xyXG4gICAgcmV0dXJuICB7XHJcbiAgICAgIGFkZHJlc3M6IG5ldyBBZGRyZXNzKGVudGl0eS5hZGRyZXNzIHx8IG51bGwpLFxyXG4gICAgICBhdXRoVXNlcnM6IChlbnRpdHkgaW5zdGFuY2VvZiBOZXdQcm9wZXJ0eUxpdGUpID8gZW50aXR5LmF1dGhVc2VycyA6ICcnLFxyXG4gICAgICBjdXJyZW5jeTogZW50aXR5LmN1cnJlbmN5LFxyXG4gICAgICBwcm9wZXJ0eUlkOiAoZW50aXR5IGluc3RhbmNlb2YgTmV3UHJvcGVydHlMaXRlKSA/IGVudGl0eS5pZCA6IGVudGl0eS5wcm9wZXJ0eUlkLFxyXG4gICAgICBpbWFnZTogZW50aXR5LmltYWdlLFxyXG4gICAgICBvZmZlcmluZzogZW50aXR5Lm9mZmVyaW5nLFxyXG4gICAgICBwcmljZTogZW50aXR5LnByaWNlLFxyXG4gICAgICB0eXBlOiBlbnRpdHkudHlwZSxcclxuICAgICAgdXJsOiB0aGlzLmJ1aWxkVVJMKHtcclxuICAgICAgICBhZGRyZXNzOiBlbnRpdHkuYWRkcmVzcyxcclxuICAgICAgICBvZmZlcmluZzogZW50aXR5Lm9mZmVyaW5nLFxyXG4gICAgICAgIHByb3BlcnR5VHlwZTogZW50aXR5LnR5cGUsXHJcbiAgICAgICAgcHJvcGVydHlJZDogKGVudGl0eSBpbnN0YW5jZW9mIE5ld1Byb3BlcnR5TGl0ZSkgPyBlbnRpdHkuaWQgOiBlbnRpdHkucHJvcGVydHlJZFxyXG4gICAgICB9KSxcclxuICAgICAgc3RhdHVzOiAoZW50aXR5IGluc3RhbmNlb2YgTmV3UHJvcGVydHlMaXRlKSA/IGVudGl0eS5zdGF0dXMgOiBudWxsLFxyXG4gICAgICBmZWF0dXJlczogKGVudGl0eSBpbnN0YW5jZW9mIE5ld1Byb3BlcnR5TGl0ZSkgPyBlbnRpdHkuZmVhdHVyZXMgOiBudWxsLFxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuIl19
305
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Vycy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG1hcGxhbmRlci9jb21wb25lbnRzLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL21hcmtlcnMvbWFya2Vycy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFDTCxPQUFPLEVBRVAsUUFBUSxFQUVSLGVBQWUsRUFJaEIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUk5RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSw4Q0FBOEMsQ0FBQztBQUM5RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSw4Q0FBOEMsQ0FBQztBQUM5RSxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLGtEQUFrRCxDQUFDO0FBSzFGLE1BQU0sT0FBTyxjQUFjOzs7Ozs7SUFFekIsWUFDVSxpQkFBbUMsRUFDbkMsaUJBQW1DLEVBQ25DLFVBQW9DO1FBRnBDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUFDbkMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQUNuQyxlQUFVLEdBQVYsVUFBVSxDQUEwQjtJQUU5QyxDQUFDOzs7Ozs7SUFFTyxNQUFNLENBQUMseUJBQXlCLENBQUMsSUFBc0I7O1lBQ3pELElBQUksR0FBcUIsSUFBSTtRQUNqQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPOzs7O1FBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUN2RCxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFO2dCQUMxQixJQUFJLEdBQUcsT0FBTyxDQUFDO2FBQ2hCO1FBQ0gsQ0FBQyxFQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztJ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QyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVTthQUNoRixDQUFDO1lBQ0YsTUFBTSxFQUFFLENBQUMsTUFBTSxZQUFZLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQ2xFLFFBQVEsRUFBRSxDQUFDLE1BQU0sWUFBWSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSTtTQUN2RSxDQUFDO0lBQ0osQ0FBQzs7O1lBaExGLFVBQVU7Ozs7WUFOSCxnQkFBZ0I7WUFEaEIsZ0JBQWdCO1lBR2hCLHdCQUF3Qjs7Ozs7OztJQVE1QiwyQ0FBMkM7Ozs7O0lBQzNDLDJDQUEyQzs7Ozs7SUFDM0Msb0NBQTRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBBZGRyZXNzLFxyXG4gIENFUixcclxuICBDdXJyZW5jeSxcclxuICBHZW9QdCxcclxuICBOZXdQcm9wZXJ0eUxpdGUsXHJcbiAgTmV3UHJvcGVydHlMaXRlU3VnZ2VzdCxcclxuICBPZmZlcmluZ1R5cGVFbnVtLFxyXG4gIFByb3BlcnR5VHlwZUVudW1cclxufSBmcm9tICdAbWFwbGFuZGVyL3R5cGVzJztcclxuaW1wb3J0IHtDb25zdGFudHNDb21wb25lbnRzfSBmcm9tICcuLi8uLi9jb25zdGFudHNDb21wb25lbnRzJztcclxuaW1wb3J0IHtNYXJrZXJ9IGZyb20gJy4uLy4uL3V0aWxzL21vZGVscy9tYXJrZXInO1xyXG5pbXBvcnQge1Byb3BlcnR5Q2FyZEluZm99IGZyb20gJy4uLy4uL3V0aWxzL21vZGVscy9wcm9wZXJ0eS1jYXJkLWluZm8nO1xyXG5pbXBvcnQge1Byb3BlcnR5VHlwZUl0ZW19IGZyb20gJy4uLy4uL3V0aWxzL21vZGVscy9wcm9wZXJ0eS10eXBlLWl0ZW0nO1xyXG5pbXBvcnQge09mZmVyaW5nVHlwZVBpcGV9IGZyb20gJy4uLy4uL3BpcGVzL29mZmVyaW5nLXR5cGUvb2ZmZXJpbmctdHlwZS5waXBlJztcclxuaW1wb3J0IHtQcm9wZXJ0eVR5cGVQaXBlfSBmcm9tICcuLi8uLi9waXBlcy9wcm9wZXJ0eS10eXBlL3Byb3BlcnR5LXR5cGUucGlwZSc7XHJcbmltcG9ydCB7VXRpbHN9IGZyb20gJy4uLy4uL3V0aWxzJztcclxuaW1wb3J0IHtDdXJyZW5jeUNvbnZlcnRlclNlcnZpY2V9IGZyb20gJy4uL2N1cnJlbmN5LWNvbnZlcnRlci9jdXJyZW5jeS1jb252ZXJ0ZXIuc2VydmljZSc7XHJcblxyXG5kZWNsYXJlIHZhciBnb29nbGU6IGFueTtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIE1hcmtlcnNTZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9wcm9wZXJ0eVR5cGVQaXBlOiBQcm9wZXJ0eVR5cGVQaXBlLFxyXG4gICAgcHJpdmF0ZSBfb2ZmZXJpbmdUeXBlUGlwZTogT2ZmZXJpbmdUeXBlUGlwZSxcclxuICAgIHByaXZhdGUgX2NvbnZlcnRlcjogQ3VycmVuY3lDb252ZXJ0ZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBnZXRQcm9wZXJ0eVR5cGVJdGVtQnlUeXBlKHR5cGU6IFByb3BlcnR5VHlwZUVudW0pOiBQcm9wZXJ0eVR5cGVJdGVtIHtcclxuICAgIGxldCBpdGVtOiBQcm9wZXJ0eVR5cGVJdGVtID0gbnVsbDtcclxuICAgIENvbnN0YW50c0NvbXBvbmVudHMuUHJvcGVydHlUeXBlTGlzdC5mb3JFYWNoKChlbGVtZW50KSA9PiB7XHJcbiAgICAgIGlmIChlbGVtZW50LnZhbHVlID09PSB0eXBlKSB7XHJcbiAgICAgICAgaXRlbSA9IGVsZW1lbnQ7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGl0ZW07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyB2YWxpZGF0ZVByb3BlcnR5SW5GYXZvcml0ZXMocHJvcGVydHlJZDogc3RyaW5nLCBmYXZvcml0ZXM6IE5ld1Byb3BlcnR5TGl0ZVtdKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZhdm9yaXRlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAocHJvcGVydHlJZCA9PT0gZmF2b3JpdGVzW2ldLmlkKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGNhbGN1bGF0ZUxvY2F0aW9uRnJvbShsb2NhdGlvbjogR2VvUHQsIGJlYXJpbmdJblJhZGlhbnM6IG51bWJlciwgZGlzdGFuY2VJbk1ldHJlczogbnVtYmVyKTogR2VvUHQge1xyXG4gICAgY29uc3QgY29vcmRpbmF0ZUxhdGl0dWRlSW5SYWRpYW5zID0gbG9jYXRpb24ubGF0aXR1ZGUgKiBNYXRoLlBJIC8gMTgwO1xyXG4gICAgY29uc3QgY29vcmRpbmF0ZUxvbmdpdHVkZUluUmFkaWFucyA9IGxvY2F0aW9uLmxvbmdpdHVkZSAqIE1hdGguUEkgLyAxODA7XHJcbiAgICBjb25zdCBkaXN0YW5jZUNvbXBhcmVkVG9FYXJ0aCA9IGRpc3RhbmNlSW5NZXRyZXMgLyA2Mzc4MTAwLjA7XHJcbiAgICBjb25zdCByZXN1bHRMYXRpdHVkZUluUmFkaWFucyA9IE1hdGguYXNpbihNYXRoLnNpbihjb29yZGluYXRlTGF0aXR1ZGVJblJhZGlhbnMpICogTWF0aC5jb3MoZGlzdGFuY2VDb21wYXJlZFRvRWFydGgpICtcclxuICAgICAgTWF0aC5jb3MoY29vcmRpbmF0ZUxhdGl0dWRlSW5SYWRpYW5zKSAqIE1hdGguc2luKGRpc3RhbmNlQ29tcGFyZWRUb0VhcnRoKSAqIE1hdGguY29zKGJlYXJpbmdJblJhZGlhbnMpKTtcclxuICAgIGNvbnN0IHJlc3VsdExvbmdpdHVkZUluUmFkaWFucyA9IGNvb3JkaW5hdGVMb25naXR1ZGVJblJhZGlhbnMgKyBNYXRoLmF0YW4yKE1hdGguc2luKGJlYXJpbmdJblJhZGlhbnMpICpcclxuICAgICAgTWF0aC5zaW4oZGlzdGFuY2VDb21wYXJlZFRvRWFydGgpICogTWF0aC5jb3MoY29vcmRpbmF0ZUxhdGl0dWRlSW5SYWRpYW5zKSwgTWF0aC5jb3MoZGlzdGFuY2VDb21wYXJlZFRvRWFydGgpIC1cclxuICAgICAgTWF0aC5zaW4oY29vcmRpbmF0ZUxhdGl0dWRlSW5SYWRpYW5zKSAqIE1hdGguc2luKHJlc3VsdExhdGl0dWRlSW5SYWRpYW5zKSk7XHJcbiAgICBjb25zdCBuZXdDb29yZGluYXRlczogYW55ID0ge307XHJcbiAgICBuZXdDb29yZGluYXRlcy5sYXRpdHVkZSA9IHJlc3VsdExhdGl0dWRlSW5SYWRpYW5zICogMTgwIC8gTWF0aC5QSTtcclxuICAgIG5ld0Nvb3JkaW5hdGVzLmxvbmdpdHVkZSA9IHJlc3VsdExvbmdpdHVkZUluUmFkaWFucyAqIDE4MCAvIE1hdGguUEk7XHJcbiAgICByZXR1cm4gbmV3Q29vcmRpbmF0ZXM7XHJcbiAgfVxyXG5cclxuICBidWlsZFVSTChjb25maWc6IHtcclxuICAgIHByb3BlcnR5SWQ6IHN0cmluZyxcclxuICAgIG9mZmVyaW5nOiBPZmZlcmluZ1R5cGVFbnVtLFxyXG4gICAgcHJvcGVydHlUeXBlOiBQcm9wZXJ0eVR5cGVFbnVtLFxyXG4gICAgYWRkcmVzczogQWRkcmVzc1xyXG4gIH0pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgY29sb255ID0gIGNvbmZpZy5hZGRyZXNzLmNvbG9ueSA/IGNvbmZpZy5hZGRyZXNzLmNvbG9ueS5yZXBsYWNlKC9bXFxdKX1beyhdL2csICcnKSA6ICcnO1xyXG4gICAgY29uc3QgY2l0eSA9IGNvbmZpZy5hZGRyZXNzLmNpdHkgPyBjb25maWcuYWRkcmVzcy5jaXR5LnJlcGxhY2UoL1tcXF0pfVt7KF0vZywgJycpIDogJyc7XHJcbiAgICBsZXQgdXJsID0gJ3Byb3BlcnR5Lyc7XHJcbiAgICB1cmwgKz0gYCR7dGhpcy5fcHJvcGVydHlUeXBlUGlwZS50cmFuc2Zvcm0oY29uZmlnLnByb3BlcnR5VHlwZSwgdHJ1ZSl9LWA7XHJcbiAgICB1cmwgKz0gYCR7dGhpcy5fb2ZmZXJpbmdUeXBlUGlwZS50cmFuc2Zvcm0oY29uZmlnLm9mZmVyaW5nLCAnICcpLnJlcGxhY2UoLyAvZywgJycpfS1gO1xyXG4gICAgdXJsICs9IGNvbG9ueSA/IGAke2NvbG9ueS5yZXBsYWNlKC9cXC8vZywgJy0nKX0tYCA6ICcnO1xyXG4gICAgdXJsICs9IGNpdHkgPyBgJHtjaXR5LnJlcGxhY2UoL1xcLy9nLCAnLScpfS1gIDogJyc7XHJcbiAgICB1cmwgKz0gY29uZmlnLnByb3BlcnR5SWQ7XHJcbiAgICB1cmwgPSBVdGlscy5yZW1vdmVEaWFjcml0aWNzKHVybCkucmVwbGFjZSgvIC9nLCAnLScpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICByZXR1cm4gdXJsO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVQcm9wZXJ0aWVzSW5Qb2x5KHByb3BlcnRpZXM6IE1hcmtlcltdLCBwYXRoczogYW55W10pOiBNYXJrZXJbXSB7XHJcbiAgICBjb25zdCBwb2x5Z29uID0gbmV3IGdvb2dsZS5tYXBzLlBvbHlnb24oe3BhdGhzOiBwYXRoc30pO1xyXG4gICAgaWYgKHByb3BlcnRpZXMgJiYgcHJvcGVydGllcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHByb3BlcnRpZXMubWFwKChlbDogTWFya2VyKSA9PiB7XHJcbiAgICAgICAgZWwuZXh0cmFzWydzaG93SW5Qb2x5Z29uJ10gPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBjdXN0b21MYXRMbmcgPSBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKGVsLmxvY2F0aW9uLmxhdGl0dWRlLCBlbC5sb2NhdGlvbi5sb25naXR1ZGUpO1xyXG4gICAgICAgIGlmIChnb29nbGUubWFwcy5nZW9tZXRyeS5wb2x5LmNvbnRhaW5zTG9jYXRpb24oY3VzdG9tTGF0TG5nLCBwb2x5Z29uKSkge1xyXG4gICAgICAgICAgZWwuZXh0cmFzWydzaG93SW5Qb2x5Z29uJ10gPSB0cnVlO1xyXG4gICAgICAgICAgcmV0dXJuIGVsO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBlbC5leHRyYXNbJ3Nob3dJblBvbHlnb24nXSA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuIGVsO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmZpbHRlcigoZSkgPT4ge1xyXG4gICAgICAgIGlmIChlLmV4dHJhc1snc2hvd0luUG9seWdvbiddKSB7XHJcbiAgICAgICAgICByZXR1cm4gZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gcHJvcGVydGllcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1hcmtlcnNUb0N1cnJlbmN5KG1hcmtlcnM6IE1hcmtlcltdLCB0b0N1cnJlbmN5OiBDdXJyZW5jeSwgY3VycmVuY2llczogQ0VSW10pOiBNYXJrZXJbXSB7XHJcbiAgICBtYXJrZXJzID0gbWFya2Vycy5tYXA8TWFya2VyPihpdGVtID0+IHtcclxuICAgICAgaWYgKEN1cnJlbmN5W2l0ZW0uaW5mby5jdXJyZW5jeV0gIT09IHRvQ3VycmVuY3kpIHtcclxuICAgICAgICBpdGVtLmluZm8ucHJpY2UgPSB0aGlzLl9jb252ZXJ0ZXIubnVtYmVyKGl0ZW0uaW5mby5wcmljZSwgY3VycmVuY2llcywgQ3VycmVuY3lbaXRlbS5pbmZvLmN1cnJlbmN5XSwgdG9DdXJyZW5jeSk7XHJcbiAgICAgICAgaXRlbS5pbmZvLmN1cnJlbmN5ID0gdG9DdXJyZW5jeS50b1N0cmluZygpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbWFya2VycztcclxuICB9XHJcblxyXG4gIGJ1aWxkTWFya2VycyhlbnRpdGllczogTmV3UHJvcGVydHlMaXRlW10gfCBOZXdQcm9wZXJ0eUxpdGVTdWdnZXN0W10sIGZhdm9yaXRlcz86IE5ld1Byb3BlcnR5TGl0ZVtdKTogTWFya2VyW10ge1xyXG4gICAgY29uc3QgbWFya2VyczogTWFya2VyW10gPSBbXTtcclxuICAgIGVudGl0aWVzLmZvckVhY2goKGVudGl0eSkgPT4ge1xyXG4gICAgICBjb25zdCBtOiBNYXJrZXIgPSB7XHJcbiAgICAgICAgbG9jYXRpb246IGVudGl0eS5hZGRyZXNzLmxvY2F0aW9uLFxyXG4gICAgICAgIGhvdmVyOiBmYWxzZSxcclxuICAgICAgICB2aXNpdGVkOiBmYWxzZSxcclxuICAgICAgICB0eXBlOiBNYXJrZXJzU2VydmljZS5nZXRQcm9wZXJ0eVR5cGVJdGVtQnlUeXBlKGVudGl0eS50eXBlKSxcclxuICAgICAgICBpbmZvOiB0aGlzLmNyZWF0ZVByb3BlcnR5SW5mb0NhcmQoZW50aXR5KSxcclxuICAgICAgICBpc0Zhdm9yaXRlOiBmYWxzZSxcclxuICAgICAgICBleHRyYXM6IHt9XHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChlbnRpdHkgaW5zdGFuY2VvZiBOZXdQcm9wZXJ0eUxpdGUpIHtcclxuICAgICAgICBtLmlzRmF2b3JpdGUgPSBmYXZvcml0ZXMgJiYgZmF2b3JpdGVzLmxlbmd0aCA+IDAgPyBNYXJrZXJzU2VydmljZS52YWxpZGF0ZVByb3BlcnR5SW5GYXZvcml0ZXMoZW50aXR5LmlkLCBmYXZvcml0ZXMpIDogZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbS5pc0Zhdm9yaXRlID0gZmF2b3JpdGVzICYmIGZhdm9yaXRlcy5sZW5ndGggPiAwID8gTWFya2Vyc1NlcnZpY2UudmFsaWRhdGVQcm9wZXJ0eUluRmF2b3JpdGVzKGVudGl0eS5wcm9wZXJ0eUlkLCBmYXZvcml0ZXMpIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgbWFya2Vycy5wdXNoKG0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbWFya2VycztcclxuICB9XHJcblxyXG4gIGJ1aWxkU3BpZGVyKGxpc3Q6IE1hcmtlcltdKTogeyBtYXJrZXJzOiBNYXJrZXJbXSwgcG9seUxpbmVzOiBhbnlbXSB9IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlID0ge21hcmtlcnM6IFtdLCBwb2x5TGluZXM6IFtdfTtcclxuICAgIGxpc3QubWFwKChlbCkgPT4ge1xyXG4gICAgICBlbC5leHRyYXNbJ3JlcGVhdCddID0gZmFsc2U7XHJcbiAgICAgIGNvbnN0IHNpemUgPSBsaXN0LmZpbHRlcihpdGVtID0+IHtcclxuICAgICAgICByZXR1cm4gZWwubG9jYXRpb24ubGF0aXR1ZGUgPT09IGl0ZW0ubG9jYXRpb24ubGF0aXR1ZGUgJiYgZWwubG9jYXRpb24ubG9uZ2l0dWRlID09PSBpdGVtLmxvY2F0aW9uLmxvbmdpdHVkZTtcclxuICAgICAgfSk7XHJcbiAgICAgIGNvbnN0IGRpc3RhbmNlID0gMTIgKiBzaXplLmxlbmd0aCAvIDIuMDtcclxuICAgICAgY29uc3QgcmFkaWFuc0JldHdlZW5Bbm5vdGF0aW9ucyA9IChNYXRoLlBJICogMikgLyBzaXplLmxlbmd0aDtcclxuICAgICAgaWYgKCFlbC5leHRyYXNbJ3JlcGVhdCddICYmIHNpemUubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIGNvbnN0IGxvY2F0aW9uU2hhcmU6IGFueSA9IE9iamVjdC5hc3NpZ24oe30sIGVsLmxvY2F0aW9uKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGhlYWRpbmcgPSByYWRpYW5zQmV0d2VlbkFubm90YXRpb25zICogaTtcclxuICAgICAgICAgIHNpemVbaV1bJ3JlcGVhdCddID0gdHJ1ZTtcclxuICAgICAgICAgIGNvbnN0IG5ld0xvY2F0aW9uID0gTWFya2Vyc1NlcnZpY2UuY2FsY3VsYXRlTG9jYXRpb25Gcm9tKGxvY2F0aW9uU2hhcmUsIGhlYWRpbmcsIGRpc3RhbmNlKTtcclxuICAgICAgICAgIHJlc3BvbnNlLnBvbHlMaW5lcy5wdXNoKHtcclxuICAgICAgICAgICAgcGF0aDogW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxhdGl0dWRlOiBOdW1iZXIobG9jYXRpb25TaGFyZS5sYXRpdHVkZSksXHJcbiAgICAgICAgICAgICAgICBsb25naXR1ZGU6IE51bWJlcihsb2NhdGlvblNoYXJlLmxvbmdpdHVkZSlcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxhdGl0dWRlOiBOdW1iZXIobmV3TG9jYXRpb24ubGF0aXR1ZGUpLFxyXG4gICAgICAgICAgICAgICAgbG9uZ2l0dWRlOiBOdW1iZXIobmV3TG9jYXRpb24ubG9uZ2l0dWRlKVxyXG4gICAgICAgICAgICAgIH1dXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHNpemVbaV0ubG9jYXRpb24gPSBuZXdMb2NhdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGVsO1xyXG4gICAgfSk7XHJcbiAgICByZXNwb25zZS5tYXJrZXJzID0gbGlzdDtcclxuICAgIHJldHVybiByZXNwb25zZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlUHJvcGVydHlJbmZvQ2FyZChlbnRpdHk6IE5ld1Byb3BlcnR5TGl0ZSB8IE5ld1Byb3BlcnR5TGl0ZVN1Z2dlc3QpOiBQcm9wZXJ0eUNhcmRJbmZvIHtcclxuICAgIHJldHVybiAge1xyXG4gICAgICBhZGRyZXNzOiBuZXcgQWRkcmVzcyhlbnRpdHkuYWRkcmVzcyB8fCBudWxsKSxcclxuICAgICAgYXV0aFVzZXJzOiAoZW50aXR5IGluc3RhbmNlb2YgTmV3UHJvcGVydHlMaXRlKSA/IGVudGl0eS5hdXRoVXNlcnMgOiAnJyxcclxuICAgICAgY3VycmVuY3k6IGVudGl0eS5jdXJyZW5jeSxcclxuICAgICAgcHJvcGVydHlJZDogKGVudGl0eSBpbnN0YW5jZW9mIE5ld1Byb3BlcnR5TGl0ZSkgPyBlbnRpdHkuaWQgOiBlbnRpdHkucHJvcGVydHlJZCxcclxuICAgICAgaW1hZ2U6IGVudGl0eS5pbWFnZSxcclxuICAgICAgb2ZmZXJpbmc6IGVudGl0eS5vZmZlcmluZyxcclxuICAgICAgcHJpY2U6IGVudGl0eS5wcmljZSxcclxuICAgICAgdHlwZTogZW50aXR5LnR5cGUsXHJcbiAgICAgIHVybDogdGhpcy5idWlsZFVSTCh7XHJcbiAgICAgICAgYWRkcmVzczogZW50aXR5LmFkZHJlc3MsXHJcbiAgICAgICAgb2ZmZXJpbmc6IGVudGl0eS5vZmZlcmluZyxcclxuICAgICAgICBwcm9wZXJ0eVR5cGU6IGVudGl0eS50eXBlLFxyXG4gICAgICAgIHByb3BlcnR5SWQ6IChlbnRpdHkgaW5zdGFuY2VvZiBOZXdQcm9wZXJ0eUxpdGUpID8gZW50aXR5LmlkIDogZW50aXR5LnByb3BlcnR5SWRcclxuICAgICAgfSksXHJcbiAgICAgIHN0YXR1czogKGVudGl0eSBpbnN0YW5jZW9mIE5ld1Byb3BlcnR5TGl0ZSkgPyBlbnRpdHkuc3RhdHVzIDogbnVsbCxcclxuICAgICAgZmVhdHVyZXM6IChlbnRpdHkgaW5zdGFuY2VvZiBOZXdQcm9wZXJ0eUxpdGUpID8gZW50aXR5LmZlYXR1cmVzIDogbnVsbCxcclxuICAgIH07XHJcbiAgfVxyXG59XHJcbiJdfQ==