@wizishop/img-manager 18.2.0 → 18.2.2-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/canva-btn/canva-btn.component.mjs +73 -0
- package/esm2022/lib/components/images-view/images-actions-handler.mjs +168 -0
- package/esm2022/lib/components/images-view/images-view.component.mjs +391 -0
- package/esm2022/lib/components/images-view/mosaic-view/img-card/img-card.component.mjs +70 -0
- package/esm2022/lib/components/images-view/mosaic-view/mosaic-view.component.mjs +73 -0
- package/esm2022/lib/components/images-view/table-view/table-view.component.mjs +48 -0
- package/esm2022/lib/components/img-editor/cropper/cropper.component.mjs +313 -0
- package/esm2022/lib/components/img-editor/img-editor.component.mjs +129 -0
- package/esm2022/lib/components/img-editor/info-section/info-section.component.mjs +58 -0
- package/esm2022/lib/components/img-selection/img-selection.component.mjs +58 -0
- package/esm2022/lib/components/img-tabs/img-tabs.component.mjs +128 -0
- package/esm2022/lib/components/img-upload/img-upload.component.mjs +133 -0
- package/esm2022/lib/components/loader/loader.component.mjs +21 -0
- package/esm2022/lib/components/pexels-lib/pexels-lib.component.mjs +211 -0
- package/esm2022/lib/components/shared/alert/alert.component.mjs +26 -0
- package/esm2022/lib/components/shared/checkbox/checkbox.component.mjs +56 -0
- package/esm2022/lib/components/shared/dropdown/dropdown.component.mjs +21 -0
- package/esm2022/lib/components/shared/input-search/input-search.component.mjs +53 -0
- package/esm2022/lib/components/shared/pagination/page-selector/page-selector.component.mjs +50 -0
- package/esm2022/lib/components/shared/pagination/pagination.component.mjs +49 -0
- package/esm2022/lib/components/shared/select/select.component.mjs +117 -0
- package/esm2022/lib/components/shared/table/table.component.mjs +124 -0
- package/esm2022/lib/components/upload-list/upload-list.component.mjs +85 -0
- package/esm2022/lib/directives/abstract-debounce/abstract-debounce.directive.mjs +41 -0
- package/{esm2020 → esm2022}/lib/directives/abstract-debounce/debounce-keyup.directive.mjs +5 -5
- package/esm2022/lib/directives/auto-hide.directive.mjs +51 -0
- package/esm2022/lib/directives/copy-to-clipboard.directive.mjs +36 -0
- package/esm2022/lib/directives/drag-drop.directive.mjs +55 -0
- package/esm2022/lib/directives/loading.directive.mjs +43 -0
- package/esm2022/lib/directives/table/checkBoxRow.directive.mjs +130 -0
- package/esm2022/lib/directives/table/column.directive.mjs +50 -0
- package/esm2022/lib/directives/table/columnHeader.directive.mjs +215 -0
- package/esm2022/lib/directives/table/raw.directive.mjs +34 -0
- package/esm2022/lib/directives/zindex-toggle.directive.mjs +45 -0
- package/esm2022/lib/dto/canva-create-design.dto.mjs +9 -0
- package/esm2022/lib/dto/canva.dto.mjs +6 -0
- package/esm2022/lib/dto/config/apis/api.dto.mjs +11 -0
- package/esm2022/lib/dto/config/external/external-config.dto.mjs +5 -0
- package/esm2022/lib/dto/wizi-block-media.dto.mjs +7 -0
- package/esm2022/lib/pipes/images/img-src.pipe.mjs +29 -0
- package/{esm2020 → esm2022}/lib/pipes/number-to-array.pipe.mjs +4 -4
- package/esm2022/lib/pipes/pagination/array-total-pages/array-pages.pipe.mjs +28 -0
- package/esm2022/lib/pipes/pagination/large-number-of-page/large-number-of-page.pipe.mjs +53 -0
- package/esm2022/lib/pipes/pagination/text/custom-text.pipe.mjs +36 -0
- package/esm2022/lib/pipes/pagination/total-pages/is-last-page.pipe.mjs +25 -0
- package/{esm2020 → esm2022}/lib/pipes/select/select-filters.pipe.mjs +4 -4
- package/esm2022/lib/services/alert.service.mjs +53 -0
- package/{esm2020 → esm2022}/lib/services/api.service.mjs +4 -4
- package/esm2022/lib/services/canva.service.mjs +165 -0
- package/esm2022/lib/services/config/img-cdn.service.mjs +21 -0
- package/esm2022/lib/services/dom.service.mjs +31 -0
- package/{esm2020 → esm2022}/lib/services/icon.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/services/image-not-found.service.mjs +4 -4
- package/esm2022/lib/services/img-event.service.mjs +33 -0
- package/esm2022/lib/services/img-manager.service.mjs +134 -0
- package/esm2022/lib/services/img-selection.service.mjs +75 -0
- package/esm2022/lib/services/pexels.service.mjs +66 -0
- package/esm2022/lib/services/rename-picture.service.mjs +66 -0
- package/esm2022/lib/services/snackbar.service.mjs +67 -0
- package/esm2022/lib/services/table/filters-table.service.mjs +61 -0
- package/esm2022/lib/services/upload.service.mjs +20 -0
- package/esm2022/lib/services/user-settings.service.mjs +23 -0
- package/esm2022/lib/wz-img-manager.component.mjs +209 -0
- package/{esm2020 → esm2022}/lib/wz-img-manager.module.mjs +61 -61
- package/{fesm2020 → fesm2022}/wizishop-img-manager.mjs +1018 -830
- package/fesm2022/wizishop-img-manager.mjs.map +1 -0
- package/lib/components/canva-btn/canva-btn.component.d.ts +1 -1
- package/lib/components/images-view/images-actions-handler.d.ts +2 -1
- package/lib/components/images-view/images-view.component.d.ts +4 -9
- package/lib/components/images-view/mosaic-view/img-card/img-card.component.d.ts +1 -1
- package/lib/components/images-view/mosaic-view/mosaic-view.component.d.ts +1 -1
- package/lib/components/img-editor/cropper/cropper.component.d.ts +1 -1
- package/lib/components/img-editor/img-editor.component.d.ts +1 -1
- package/lib/components/img-editor/info-section/info-section.component.d.ts +1 -1
- package/lib/components/img-selection/img-selection.component.d.ts +4 -5
- package/lib/components/img-tabs/img-tabs.component.d.ts +1 -1
- package/lib/components/img-upload/img-upload.component.d.ts +1 -1
- package/lib/components/loader/loader.component.d.ts +1 -1
- package/lib/components/pexels-lib/pexels-lib.component.d.ts +1 -1
- package/lib/components/shared/alert/alert.component.d.ts +1 -1
- package/lib/components/shared/checkbox/checkbox.component.d.ts +1 -1
- package/lib/components/shared/dropdown/dropdown.component.d.ts +1 -1
- package/lib/components/shared/input-search/input-search.component.d.ts +1 -1
- package/lib/components/shared/pagination/page-selector/page-selector.component.d.ts +1 -1
- package/lib/components/shared/pagination/pagination.component.d.ts +1 -1
- package/lib/components/shared/select/select.component.d.ts +1 -1
- package/lib/components/shared/table/table.component.d.ts +1 -1
- package/lib/components/upload-list/upload-list.component.d.ts +1 -1
- package/lib/directives/abstract-debounce/abstract-debounce.directive.d.ts +1 -1
- package/lib/directives/auto-hide.directive.d.ts +1 -1
- package/lib/directives/copy-to-clipboard.directive.d.ts +1 -1
- package/lib/directives/table/checkBoxRow.directive.d.ts +1 -1
- package/lib/directives/table/column.directive.d.ts +1 -1
- package/lib/directives/table/columnHeader.directive.d.ts +1 -1
- package/lib/directives/zindex-toggle.directive.d.ts +1 -1
- package/lib/wz-img-manager.component.d.ts +3 -3
- package/package.json +6 -12
- package/wizishop-img-manager-18.2.2-beta.tgz +0 -0
- package/wz-img-manager.scss +77 -60
- package/esm2020/lib/components/canva-btn/canva-btn.component.mjs +0 -67
- package/esm2020/lib/components/images-view/images-actions-handler.mjs +0 -154
- package/esm2020/lib/components/images-view/images-view.component.mjs +0 -369
- package/esm2020/lib/components/images-view/mosaic-view/img-card/img-card.component.mjs +0 -66
- package/esm2020/lib/components/images-view/mosaic-view/mosaic-view.component.mjs +0 -71
- package/esm2020/lib/components/images-view/table-view/table-view.component.mjs +0 -48
- package/esm2020/lib/components/img-editor/cropper/cropper.component.mjs +0 -307
- package/esm2020/lib/components/img-editor/img-editor.component.mjs +0 -124
- package/esm2020/lib/components/img-editor/info-section/info-section.component.mjs +0 -54
- package/esm2020/lib/components/img-selection/img-selection.component.mjs +0 -53
- package/esm2020/lib/components/img-tabs/img-tabs.component.mjs +0 -122
- package/esm2020/lib/components/img-upload/img-upload.component.mjs +0 -126
- package/esm2020/lib/components/loader/loader.component.mjs +0 -21
- package/esm2020/lib/components/pexels-lib/pexels-lib.component.mjs +0 -203
- package/esm2020/lib/components/shared/alert/alert.component.mjs +0 -27
- package/esm2020/lib/components/shared/checkbox/checkbox.component.mjs +0 -52
- package/esm2020/lib/components/shared/dropdown/dropdown.component.mjs +0 -21
- package/esm2020/lib/components/shared/input-search/input-search.component.mjs +0 -54
- package/esm2020/lib/components/shared/pagination/page-selector/page-selector.component.mjs +0 -49
- package/esm2020/lib/components/shared/pagination/pagination.component.mjs +0 -49
- package/esm2020/lib/components/shared/select/select.component.mjs +0 -110
- package/esm2020/lib/components/shared/table/table.component.mjs +0 -116
- package/esm2020/lib/components/upload-list/upload-list.component.mjs +0 -79
- package/esm2020/lib/directives/abstract-debounce/abstract-debounce.directive.mjs +0 -37
- package/esm2020/lib/directives/auto-hide.directive.mjs +0 -48
- package/esm2020/lib/directives/copy-to-clipboard.directive.mjs +0 -37
- package/esm2020/lib/directives/drag-drop.directive.mjs +0 -57
- package/esm2020/lib/directives/loading.directive.mjs +0 -42
- package/esm2020/lib/directives/table/checkBoxRow.directive.mjs +0 -114
- package/esm2020/lib/directives/table/column.directive.mjs +0 -45
- package/esm2020/lib/directives/table/columnHeader.directive.mjs +0 -204
- package/esm2020/lib/directives/table/raw.directive.mjs +0 -31
- package/esm2020/lib/directives/zindex-toggle.directive.mjs +0 -42
- package/esm2020/lib/dto/canva-create-design.dto.mjs +0 -4
- package/esm2020/lib/dto/canva.dto.mjs +0 -4
- package/esm2020/lib/dto/config/apis/api.dto.mjs +0 -9
- package/esm2020/lib/dto/config/external/external-config.dto.mjs +0 -3
- package/esm2020/lib/dto/wizi-block-media.dto.mjs +0 -3
- package/esm2020/lib/pipes/images/img-src.pipe.mjs +0 -28
- package/esm2020/lib/pipes/pagination/array-total-pages/array-pages.pipe.mjs +0 -28
- package/esm2020/lib/pipes/pagination/large-number-of-page/large-number-of-page.pipe.mjs +0 -53
- package/esm2020/lib/pipes/pagination/text/custom-text.pipe.mjs +0 -35
- package/esm2020/lib/pipes/pagination/total-pages/is-last-page.pipe.mjs +0 -25
- package/esm2020/lib/services/alert.service.mjs +0 -50
- package/esm2020/lib/services/canva.service.mjs +0 -159
- package/esm2020/lib/services/config/img-cdn.service.mjs +0 -23
- package/esm2020/lib/services/dom.service.mjs +0 -33
- package/esm2020/lib/services/img-event.service.mjs +0 -35
- package/esm2020/lib/services/img-manager.service.mjs +0 -136
- package/esm2020/lib/services/img-selection.service.mjs +0 -76
- package/esm2020/lib/services/pexels.service.mjs +0 -62
- package/esm2020/lib/services/rename-picture.service.mjs +0 -63
- package/esm2020/lib/services/snackbar.service.mjs +0 -64
- package/esm2020/lib/services/table/filters-table.service.mjs +0 -60
- package/esm2020/lib/services/upload.service.mjs +0 -22
- package/esm2020/lib/services/user-settings.service.mjs +0 -25
- package/esm2020/lib/wz-img-manager.component.mjs +0 -192
- package/fesm2015/wizishop-img-manager.mjs +0 -4035
- package/fesm2015/wizishop-img-manager.mjs.map +0 -1
- package/fesm2020/wizishop-img-manager.mjs.map +0 -1
- package/wizishop-img-manager-18.2.0.tgz +0 -0
- /package/{esm2020 → esm2022}/lib/animations/easeInOut/ease-in-out.animation.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/animations/insertRemove/insert-remove.animation.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/animations/listAnnimation/list.animation.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/shared/select/call-to-action.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/shared/select/select-items.dto.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/dto/ImgManagerDisplayConfig.dto.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/dto/config/image-cdn/image-cdn-config.dto.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/dto/config/img-manager.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/dto/export-dtos.api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/dto/img-editor-config.dto.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/dto/img-manager.dto.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/dto/pexels-img.dto.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/dto/picture-name-update.dto.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/dto/stateDisplayed.dto.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/dto/tabDisplayed.dto.mjs +0 -0
- /package/{esm2020 → esm2022}/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/wizishop-img-manager.mjs +0 -0
|
@@ -1,369 +0,0 @@
|
|
|
1
|
-
import { Component, Input, ViewChild, ElementRef, Output, EventEmitter, ChangeDetectorRef } from '@angular/core';
|
|
2
|
-
import { ImgManagerService } from '../../services/img-manager.service';
|
|
3
|
-
import { Subject, combineLatest } from 'rxjs';
|
|
4
|
-
import { filter, map, take } from 'rxjs/operators';
|
|
5
|
-
import { ImgEventService } from '../../services/img-event.service';
|
|
6
|
-
import { ImgSelectionService } from '../../services/img-selection.service';
|
|
7
|
-
import { UserSettingsService } from '../../services/user-settings.service';
|
|
8
|
-
import { easeInOut } from '../../animations/easeInOut/ease-in-out.animation';
|
|
9
|
-
import { insertRemove } from '../../animations/insertRemove/insert-remove.animation';
|
|
10
|
-
import { RenamePictureService } from '../../services/rename-picture.service';
|
|
11
|
-
import { AlertService } from '../../services/alert.service';
|
|
12
|
-
import * as i0 from "@angular/core";
|
|
13
|
-
import * as i1 from "../../services/img-manager.service";
|
|
14
|
-
import * as i2 from "../../services/img-event.service";
|
|
15
|
-
import * as i3 from "../../services/img-selection.service";
|
|
16
|
-
import * as i4 from "../../services/alert.service";
|
|
17
|
-
import * as i5 from "../../services/user-settings.service";
|
|
18
|
-
import * as i6 from "../../services/rename-picture.service";
|
|
19
|
-
import * as i7 from "@angular/common";
|
|
20
|
-
import * as i8 from "ngx-scrollbar";
|
|
21
|
-
import * as i9 from "../pexels-lib/pexels-lib.component";
|
|
22
|
-
import * as i10 from "./mosaic-view/mosaic-view.component";
|
|
23
|
-
import * as i11 from "./table-view/table-view.component";
|
|
24
|
-
import * as i12 from "../../directives/loading.directive";
|
|
25
|
-
import * as i13 from "@ngx-translate/core";
|
|
26
|
-
export class ImagesViewComponent {
|
|
27
|
-
get searchImagesParameters$() {
|
|
28
|
-
return this.imgManager.searchImagesParameters$;
|
|
29
|
-
}
|
|
30
|
-
constructor(imgManager, imgEventService, imgSelectionService, alertService, userSettingsService, renamePictureService, changeDetectorRef) {
|
|
31
|
-
this.imgManager = imgManager;
|
|
32
|
-
this.imgEventService = imgEventService;
|
|
33
|
-
this.imgSelectionService = imgSelectionService;
|
|
34
|
-
this.alertService = alertService;
|
|
35
|
-
this.userSettingsService = userSettingsService;
|
|
36
|
-
this.renamePictureService = renamePictureService;
|
|
37
|
-
this.changeDetectorRef = changeDetectorRef;
|
|
38
|
-
this.listDisplayed = false; // Display format list or mosaic
|
|
39
|
-
this.multipleImgMode = false;
|
|
40
|
-
this.switchDisplayWindow = new EventEmitter();
|
|
41
|
-
this.widthLargeCard = 219; // Default value of a card width 199 + margin 20
|
|
42
|
-
this.widthSmallCard = 160; // Default value of a card width 140 + margin 20
|
|
43
|
-
this.nbFakeImg = 0;
|
|
44
|
-
this.imgFullWidthConfig = [
|
|
45
|
-
{
|
|
46
|
-
max: 419,
|
|
47
|
-
largeImgWidthFactor: 1,
|
|
48
|
-
smallImgWidthFactor: 0.5
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
max: 499,
|
|
52
|
-
largeImgWidthFactor: 1,
|
|
53
|
-
smallImgWidthFactor: 0.5
|
|
54
|
-
},
|
|
55
|
-
{
|
|
56
|
-
max: 719,
|
|
57
|
-
largeImgWidthFactor: 0.5,
|
|
58
|
-
smallImgWidthFactor: 0.3333
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
max: 1023,
|
|
62
|
-
largeImgWidthFactor: 0.3333,
|
|
63
|
-
smallImgWidthFactor: 0.2
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
max: 1399,
|
|
67
|
-
largeImgWidthFactor: 0.25,
|
|
68
|
-
smallImgWidthFactor: 0.125
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
max: 1599,
|
|
72
|
-
largeImgWidthFactor: 0.2,
|
|
73
|
-
smallImgWidthFactor: 0.1111
|
|
74
|
-
},
|
|
75
|
-
{
|
|
76
|
-
largeImgWidthFactor: 0.1666,
|
|
77
|
-
smallImgWidthFactor: 0.1
|
|
78
|
-
}
|
|
79
|
-
];
|
|
80
|
-
this.imgWidthConfig = [
|
|
81
|
-
{
|
|
82
|
-
max: 1024,
|
|
83
|
-
largeImgWidthFactor: 0.25,
|
|
84
|
-
smallImgWidthFactor: 0.125
|
|
85
|
-
},
|
|
86
|
-
{
|
|
87
|
-
max: 1199,
|
|
88
|
-
largeImgWidthFactor: 0.3333,
|
|
89
|
-
smallImgWidthFactor: 0.2
|
|
90
|
-
},
|
|
91
|
-
{
|
|
92
|
-
max: 1299,
|
|
93
|
-
largeImgWidthFactor: 0.3333,
|
|
94
|
-
smallImgWidthFactor: 0.1666
|
|
95
|
-
},
|
|
96
|
-
{
|
|
97
|
-
max: 1399,
|
|
98
|
-
largeImgWidthFactor: 0.25,
|
|
99
|
-
smallImgWidthFactor: 0.1666
|
|
100
|
-
},
|
|
101
|
-
{
|
|
102
|
-
max: 1599,
|
|
103
|
-
largeImgWidthFactor: 0.25,
|
|
104
|
-
smallImgWidthFactor: 0.14
|
|
105
|
-
},
|
|
106
|
-
{
|
|
107
|
-
largeImgWidthFactor: 0.25,
|
|
108
|
-
smallImgWidthFactor: 0.125
|
|
109
|
-
}
|
|
110
|
-
];
|
|
111
|
-
this.nbImgToDelSelected = 0;
|
|
112
|
-
this.disable = false; // Use to disable action during server request
|
|
113
|
-
this.delListImgLoader = false;
|
|
114
|
-
this.initComponent = true;
|
|
115
|
-
this.failLoaded = false;
|
|
116
|
-
this.confirmImgSup = false;
|
|
117
|
-
this.errorGetAllImg = 'ImgManager.ImgLib.errorGetAllImg';
|
|
118
|
-
this.errorGetTotalImg = 'ImgManager.ImgLib.errorGetTotalImg';
|
|
119
|
-
this.errorGetImg = 'ImgManager.ImgLib.errorGetCanvaImg';
|
|
120
|
-
this.errorRemoveImg = 'ImgManager.ImgList.errorRemoveImg';
|
|
121
|
-
this.destroy$ = new Subject();
|
|
122
|
-
this.vm$ = combineLatest({
|
|
123
|
-
imageSelection: this.imgSelectionService.imgSelection$,
|
|
124
|
-
imageListData: this.imgManager.imageList$,
|
|
125
|
-
isLoading: this.imgManager.isLoading$,
|
|
126
|
-
searchImagesParameters: this.imgManager.searchImagesParameters$,
|
|
127
|
-
}).pipe(map(({ imageSelection, imageListData: { imageList, imageTotal }, isLoading, searchImagesParameters }) => {
|
|
128
|
-
this.initVariables(true);
|
|
129
|
-
this.calculateNbImgFake(imageList.data.length);
|
|
130
|
-
const picturesList = this.setSelectedProperty(imageSelection, imageList.data);
|
|
131
|
-
this.renamePictureService.setPicturesList(picturesList);
|
|
132
|
-
const tableFilters = this.getTableFilters(searchImagesParameters, imageTotal);
|
|
133
|
-
const keepImagesDisplayed = (this.tabDisplayed === 'img-upload' && searchImagesParameters.page === '1') || (this.tabDisplayed === 'images-view' && imageList.data.length && searchImagesParameters.page === '1');
|
|
134
|
-
const skipSetImagesToDisplay = !!picturesList?.length && this.tabDisplayed === 'img-upload' && searchImagesParameters.page === '1';
|
|
135
|
-
const hideUntilFetchedFirstPageImagesForTabUpload = this.tabDisplayed === 'img-upload' && (searchImagesParameters.page !== '1' || imageList?.page !== 1);
|
|
136
|
-
return {
|
|
137
|
-
isLoading: hideUntilFetchedFirstPageImagesForTabUpload || !keepImagesDisplayed && isLoading,
|
|
138
|
-
displayPexelsResults: !isLoading && imageTotal === 0,
|
|
139
|
-
picturesList,
|
|
140
|
-
imageTotal,
|
|
141
|
-
tableFilters,
|
|
142
|
-
skipSetImagesToDisplay
|
|
143
|
-
};
|
|
144
|
-
}));
|
|
145
|
-
}
|
|
146
|
-
getTableFilters(searchImagesParameters, imageTotal) {
|
|
147
|
-
return {
|
|
148
|
-
sort: undefined,
|
|
149
|
-
order: undefined,
|
|
150
|
-
searchValue: searchImagesParameters.search,
|
|
151
|
-
totalItems: imageTotal,
|
|
152
|
-
itemsPerPage: parseInt(searchImagesParameters.limit),
|
|
153
|
-
currentPage: parseInt(searchImagesParameters.page)
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
ngAfterViewInit() {
|
|
157
|
-
this.vm$.pipe(take(1), filter(({ skipSetImagesToDisplay }) => !skipSetImagesToDisplay)).subscribe(({ tableFilters }) => {
|
|
158
|
-
this.setNbImgToDisplay(tableFilters);
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* true : go to list display
|
|
163
|
-
* false : go to mosaic display
|
|
164
|
-
* @param activate
|
|
165
|
-
*/
|
|
166
|
-
onSwitchFormatDisplayed(activate) {
|
|
167
|
-
this.listDisplayed = activate;
|
|
168
|
-
this.userSettingsService.setUserDisplayPreference(activate);
|
|
169
|
-
this.imgEventService.emitlistDisplayedChange(activate);
|
|
170
|
-
}
|
|
171
|
-
/**
|
|
172
|
-
* Calcul the number of img selected for masse deletion
|
|
173
|
-
*/
|
|
174
|
-
onImgSelected(picturesList) {
|
|
175
|
-
this.setNbImgToDelSelected(picturesList);
|
|
176
|
-
}
|
|
177
|
-
onRenamePicture(pictureRenamed) {
|
|
178
|
-
this.renamePictureService.renamePicture(pictureRenamed);
|
|
179
|
-
}
|
|
180
|
-
removeListImg(picturesList) {
|
|
181
|
-
if (this.disable) {
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
|
-
this.disable = true;
|
|
185
|
-
this.delListImgLoader = true;
|
|
186
|
-
this.confirmImgSup = false;
|
|
187
|
-
// Get the id of the img to remove
|
|
188
|
-
// And add deleted property
|
|
189
|
-
const idImgToRemove = [];
|
|
190
|
-
picturesList.forEach(img => {
|
|
191
|
-
if (img.delSelected) {
|
|
192
|
-
img.deleted = true;
|
|
193
|
-
idImgToRemove.push(img.id_file);
|
|
194
|
-
}
|
|
195
|
-
});
|
|
196
|
-
this.imgManager.removeMultipleImg(idImgToRemove).subscribe({
|
|
197
|
-
next: () => {
|
|
198
|
-
this.imgSelectionService.removeImgSelectionByIds(idImgToRemove);
|
|
199
|
-
},
|
|
200
|
-
error: error => {
|
|
201
|
-
this.imgManager.refreshImageList$.next();
|
|
202
|
-
this.alertService.openAlert(this.errorRemoveImg);
|
|
203
|
-
}
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
selectImgChosen(picturesList) {
|
|
207
|
-
if (this.disable) {
|
|
208
|
-
return;
|
|
209
|
-
}
|
|
210
|
-
const picturesListSelected = [];
|
|
211
|
-
picturesList.map(img => {
|
|
212
|
-
if (img.delSelected) {
|
|
213
|
-
img.delSelected = false;
|
|
214
|
-
img.selected = true;
|
|
215
|
-
}
|
|
216
|
-
if (img.selected) {
|
|
217
|
-
picturesListSelected.push(img);
|
|
218
|
-
}
|
|
219
|
-
});
|
|
220
|
-
this.setNbImgToDelSelected(picturesList);
|
|
221
|
-
this.imgSelectionService.setImgSelection(picturesListSelected);
|
|
222
|
-
}
|
|
223
|
-
displayConfirmImgSup() {
|
|
224
|
-
if (this.disable) {
|
|
225
|
-
return;
|
|
226
|
-
}
|
|
227
|
-
this.confirmImgSup = true;
|
|
228
|
-
}
|
|
229
|
-
cancelSup() {
|
|
230
|
-
this.confirmImgSup = false;
|
|
231
|
-
}
|
|
232
|
-
/**
|
|
233
|
-
* Event emit when a img selected in order to delete
|
|
234
|
-
*/
|
|
235
|
-
onPicturesListChange(picturesList) {
|
|
236
|
-
this.setNbImgToDelSelected(picturesList);
|
|
237
|
-
}
|
|
238
|
-
/**
|
|
239
|
-
* Set default number of img per page to display at the initialisation
|
|
240
|
-
* This number is between 30 and 50
|
|
241
|
-
*/
|
|
242
|
-
setNbImgToDisplay(tableFilters) {
|
|
243
|
-
const containerWidth = this.imgLibContainer.nativeElement.offsetWidth + 30; // + 30px -> left + right margin
|
|
244
|
-
const scrollWidth = window.innerWidth - document.body.offsetWidth;
|
|
245
|
-
const [maxImgWidthFactor, minImgWidthFactor] = this.getImgWidthFactors();
|
|
246
|
-
const minImgWidth = Math.floor(containerWidth * minImgWidthFactor);
|
|
247
|
-
const maxImgWidth = Math.ceil((containerWidth + scrollWidth) * maxImgWidthFactor);
|
|
248
|
-
this.nbMaxImgPerLine = Math.floor(containerWidth / minImgWidth);
|
|
249
|
-
this.nbMinImgPerLine = Math.floor((containerWidth + scrollWidth) / maxImgWidth);
|
|
250
|
-
this.searchImagesParameters$.next(this.getParams({
|
|
251
|
-
...tableFilters,
|
|
252
|
-
itemsPerPage: this.getTotalImgPerPage(),
|
|
253
|
-
currentPage: 1
|
|
254
|
-
}));
|
|
255
|
-
}
|
|
256
|
-
getImgWidthFactors() {
|
|
257
|
-
const screenWidth = window.innerWidth;
|
|
258
|
-
let minWidth = 0;
|
|
259
|
-
let imgSizesConfig = [];
|
|
260
|
-
const currentImgWidthConfig = this.fullSize ? this.imgFullWidthConfig : this.imgWidthConfig;
|
|
261
|
-
for (const widthConfig of currentImgWidthConfig) {
|
|
262
|
-
if (!widthConfig.max) {
|
|
263
|
-
imgSizesConfig = [widthConfig.largeImgWidthFactor, widthConfig.smallImgWidthFactor];
|
|
264
|
-
break;
|
|
265
|
-
}
|
|
266
|
-
if (minWidth < screenWidth && screenWidth <= widthConfig.max) {
|
|
267
|
-
imgSizesConfig = [widthConfig.largeImgWidthFactor, widthConfig.smallImgWidthFactor];
|
|
268
|
-
break;
|
|
269
|
-
}
|
|
270
|
-
minWidth = widthConfig.max;
|
|
271
|
-
}
|
|
272
|
-
return imgSizesConfig;
|
|
273
|
-
}
|
|
274
|
-
getTotalImgPerPage() {
|
|
275
|
-
if (this.nbRowToShow) {
|
|
276
|
-
const nbImgPerLine = this.stateDisplayed === 'full' ? this.nbMinImgPerLine : this.nbMaxImgPerLine;
|
|
277
|
-
return nbImgPerLine * this.nbRowToShow;
|
|
278
|
-
}
|
|
279
|
-
let total = this.nbMinImgPerLine;
|
|
280
|
-
while (total < 30 || total % this.nbMaxImgPerLine !== 0 || total % this.nbMinImgPerLine !== 0) {
|
|
281
|
-
total += this.nbMinImgPerLine;
|
|
282
|
-
}
|
|
283
|
-
return total;
|
|
284
|
-
}
|
|
285
|
-
getParams(tableFilters) {
|
|
286
|
-
return {
|
|
287
|
-
limit: tableFilters.itemsPerPage.toString(),
|
|
288
|
-
page: tableFilters.currentPage.toString(),
|
|
289
|
-
...(tableFilters.searchValue && { search: tableFilters.searchValue.toString() }),
|
|
290
|
-
};
|
|
291
|
-
}
|
|
292
|
-
initVariables(loadingSuccess) {
|
|
293
|
-
this.nbImgToDelSelected = 0;
|
|
294
|
-
this.disable = false;
|
|
295
|
-
this.delListImgLoader = false;
|
|
296
|
-
this.initComponent = false;
|
|
297
|
-
this.failLoaded = !loadingSuccess;
|
|
298
|
-
this.nbFakeImg = 0;
|
|
299
|
-
}
|
|
300
|
-
setSelectedProperty(imgSelectedList, picturesList) {
|
|
301
|
-
const picturesListSelected = JSON.parse(JSON.stringify(picturesList));
|
|
302
|
-
imgSelectedList.forEach(img => {
|
|
303
|
-
const selectedImg = picturesListSelected.find(picture => picture.id_file === img.id_file);
|
|
304
|
-
if (selectedImg) {
|
|
305
|
-
selectedImg.selected = true;
|
|
306
|
-
}
|
|
307
|
-
});
|
|
308
|
-
return picturesListSelected;
|
|
309
|
-
}
|
|
310
|
-
/**
|
|
311
|
-
* Set a img list in order to fill properly all the line of images displayed in mosaic.
|
|
312
|
-
* Otherwise, the space-between css will do a bad display
|
|
313
|
-
*/
|
|
314
|
-
calculateNbImgFake(nbImgDisplayed) {
|
|
315
|
-
const nbImgPerLine = this.stateDisplayed === 'small' || this.tabDisplayed === 'img-upload' ? this.nbMaxImgPerLine : this.nbMinImgPerLine;
|
|
316
|
-
if (isNaN(nbImgDisplayed % nbImgPerLine)) {
|
|
317
|
-
this.nbFakeImg = 0;
|
|
318
|
-
return;
|
|
319
|
-
}
|
|
320
|
-
if (nbImgDisplayed % nbImgPerLine !== 0) {
|
|
321
|
-
setTimeout(() => {
|
|
322
|
-
this.nbFakeImg = nbImgPerLine - nbImgDisplayed % nbImgPerLine;
|
|
323
|
-
}, 0);
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
setNbImgToDelSelected(picturesList) {
|
|
327
|
-
this.nbImgToDelSelected = picturesList.filter(img => img.delSelected).length;
|
|
328
|
-
if (!this.nbImgToDelSelected) {
|
|
329
|
-
this.confirmImgSup = false;
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
switchDisplayWindowMosaic() {
|
|
333
|
-
this.switchDisplayWindow.emit(true);
|
|
334
|
-
}
|
|
335
|
-
ngOnDestroy() {
|
|
336
|
-
this.destroy$.next();
|
|
337
|
-
this.destroy$.complete();
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
ImagesViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ImagesViewComponent, deps: [{ token: i1.ImgManagerService }, { token: i2.ImgEventService }, { token: i3.ImgSelectionService }, { token: i4.AlertService }, { token: i5.UserSettingsService }, { token: i6.RenamePictureService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
341
|
-
ImagesViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ImagesViewComponent, selector: "images-view", inputs: { stateDisplayed: "stateDisplayed", tabDisplayed: "tabDisplayed", fullSize: "fullSize", nbRowToShow: "nbRowToShow", listDisplayed: "listDisplayed", multipleImgMode: "multipleImgMode" }, outputs: { switchDisplayWindow: "switchDisplayWindow" }, viewQueries: [{ propertyName: "imgLibContainer", first: true, predicate: ["imgLibContainer"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"vm$ | async as vm\">\r\n\r\n <div class=\"images-view\" [ngClass]=\"{'fullSize': fullSize, 'small': stateDisplayed === 'small'}\" [@easeInOut]=\"'in'\">\r\n <!-- Subheader : Img number and actions btn (sup img list, switch forma display) -->\r\n <div\r\n *ngIf=\"(stateDisplayed !== 'small' || tabDisplayed === 'img-upload')\"\r\n class=\"images-view__container\"\r\n [ngClass]=\"{'images-view__container--uploadTab': tabDisplayed === 'img-upload', 'images-view__container--window': stateDisplayed === 'window'}\"\r\n >\r\n\r\n <div *ngIf=\"tabDisplayed !== 'img-upload'\">\r\n <p class=\"mainColor\" [ngClass]=\"{'images-view__container__total--hide': vm.displayPexelsResults}\">{{ 'ImgManager.ImgLib.nbImg' | translate }} : {{vm.imageTotal}}</p>\r\n </div>\r\n <div *ngIf=\"tabDisplayed === 'img-upload'\">\r\n <p class=\"mainColor\">{{ 'ImgManager.ImgLib.lastImgs' | translate }}</p>\r\n </div>\r\n\r\n <div class=\"field has-addons subHeaderActions\" *ngIf=\"tabDisplayed !== 'img-upload'\">\r\n\r\n <!-- For listforma : Display btn del multiple img & Confirm action -->\r\n <div class=\"images-view__container__boxAction\">\r\n\r\n\r\n <!-- Select -->\r\n <button\r\n class=\"button success images-view__container__boxAction__import\"\r\n @insertRemoveAnnim\r\n *ngIf=\"listDisplayed && nbImgToDelSelected && !confirmImgSup && !delListImgLoader && multipleImgMode\"\r\n (click)=\"selectImgChosen(vm.picturesList)\"\r\n type=\"button\"\r\n >\r\n <i class=\"fal fa-check\"></i>\r\n {{ 'ImgManager.ImgLib.select' | translate }} ({{nbImgToDelSelected}})\r\n </button>\r\n\r\n <!-- Display btn del multiple img -->\r\n <button\r\n *ngIf=\"listDisplayed && nbImgToDelSelected && !confirmImgSup\"\r\n (click)=\"displayConfirmImgSup()\"\r\n class=\"button images-view__container__boxAction__delBtn danger\"\r\n @insertRemoveAnnim\r\n type=\"button\"\r\n >\r\n <i class=\"fal fa-times\"></i>{{ 'ImgManager.ImgLib.delMlt' | translate }} ({{nbImgToDelSelected}})\r\n <span btnLoadingAnim *ngIf=\"delListImgLoader\" class=\"btnLoadingAnnimation\"></span>\r\n </button>\r\n\r\n <!-- Confirm action -->\r\n <div\r\n class=\"images-view__container__boxAction__confirmSup\"\r\n [ngClass]=\"{'images-view__container__boxAction__confirmSup--visible': confirmImgSup}\">\r\n <p *ngIf=\"nbImgToDelSelected > 1\" class=\"images-view__container__boxAction__confirmSup__text\">{{ 'ImgManager.ImgLib.confirmSupQuestions' | translate:{nbImage: nbImgToDelSelected} }}</p>\r\n <p *ngIf=\"nbImgToDelSelected === 1\" class=\"images-view__container__boxAction__confirmSup__text\">{{ 'ImgManager.ImgLib.confirmSupQuestion' | translate:{nbImage: nbImgToDelSelected} }}</p>\r\n <div>\r\n <button\r\n class=\"button images-view__container__boxAction__confirmSup__cancel\"\r\n (click)=\"cancelSup()\"\r\n type=\"button\"\r\n >\r\n {{ 'ImgManager.ImgLib.cancel' | translate }}\r\n </button>\r\n <button\r\n (click)=\"removeListImg(vm.picturesList)\"\r\n class=\"button images-view__container__delBtn danger\"\r\n type=\"button\"\r\n >\r\n {{ 'ImgManager.ImgLib.confirm' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <!-- Swith mosaic/list forma -->\r\n <div class=\"field has-addons images-view__container__buttonBox\">\r\n <div class=\"control\">\r\n <div\r\n class=\"button is-lighted images-view__container__buttonBox__btn\"\r\n [ngClass]=\"{'actifDisplayed': !listDisplayed}\"\r\n (click)=\"onSwitchFormatDisplayed(false)\"\r\n >\r\n <span class=\"icon is-small\">\r\n <i class=\"fa-solid fa-th\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"control\">\r\n <div class=\"button is-lighted images-view__container__buttonBox__btn\"\r\n [ngClass]=\"{'actifDisplayed': listDisplayed}\"\r\n (click)=\"onSwitchFormatDisplayed(true)\"\r\n >\r\n <span class=\"icon is-small\">\r\n <i class=\"fa-solid fa-bars\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- Images section -->\r\n <ng-scrollbar\r\n class=\"images-view__scroll\"\r\n [ngClass]=\"{\r\n 'images-view__scroll--hide--mosaic': vm.displayPexelsResults && !listDisplayed,\r\n 'images-view__scroll--hide--table': vm.displayPexelsResults && listDisplayed,\r\n 'images-view__scroll--full': stateDisplayed === 'full',\r\n 'images-view__scroll--smallDisplay' : stateDisplayed === 'small' && tabDisplayed !== 'img-upload',\r\n 'images-view__scroll--smallUploadDisplay' : stateDisplayed === 'small' && tabDisplayed === 'img-upload',\r\n 'images-view__scroll--window': stateDisplayed === 'window'\r\n }\"\r\n >\r\n <div #imgLibContainer class=\"images-view__wrapper\">\r\n\r\n <div *ngIf=\"!listDisplayed || stateDisplayed === 'small'\" [@easeInOut]=\"'in'\">\r\n <mosaic-view\r\n [picturesList]=\"vm.picturesList\"\r\n (picturesListChange)=\"onPicturesListChange(vm.picturesList)\"\r\n [tableFilters]=\"vm.tableFilters\"\r\n (filtersChange)=\"searchImagesParameters$.next(getParams(vm.tableFilters));\"\r\n [(disable)]=\"disable\"\r\n (pictureNameChange)=\"onRenamePicture($event)\"\r\n (switchDisplayWindow)=\"switchDisplayWindowMosaic()\"\r\n [nbFakeImg]=\"nbFakeImg\"\r\n [stateDisplayed]=\"stateDisplayed\"\r\n [tabDisplayed]=\"tabDisplayed\"\r\n [displayPexelsResults]=\"vm.displayPexelsResults\"\r\n [isLoading]=\"vm.isLoading\"\r\n [fullSize]=\"fullSize\"\r\n >\r\n </mosaic-view>\r\n </div>\r\n\r\n <div *ngIf=\"listDisplayed && stateDisplayed !== 'small'\" [@easeInOut]=\"'in'\">\r\n <table-view\r\n [picturesList]=\"vm.picturesList\"\r\n (picturesListChange)=\"onPicturesListChange(vm.picturesList)\"\r\n [tableFilters]=\"vm.tableFilters\"\r\n (filtersChange)=\"searchImagesParameters$.next(getParams(vm.tableFilters));\"\r\n [(disable)]=\"disable\"\r\n (pictureNameChange)=\"onRenamePicture($event)\"\r\n [displayPexelsResults]=\"vm.displayPexelsResults\"\r\n [stateDisplayed]=\"stateDisplayed\"\r\n [isLoading]=\"vm.isLoading\"\r\n >\r\n </table-view>\r\n </div>\r\n </div>\r\n </ng-scrollbar>\r\n\r\n <!-- Pexels Section - When no img found -->\r\n <div\r\n *ngIf=\"vm.displayPexelsResults\"\r\n class=\"images-view--pexels\"\r\n [@easeInOut]=\"'in'\">\r\n <pexels-lib\r\n [searchValue]=\"vm.tableFilters.searchValue\"\r\n [disableSearch]=\"true\"\r\n >\r\n </pexels-lib>\r\n </div>\r\n</ng-container>\r\n", dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.NgScrollbar, selector: "ng-scrollbar", inputs: ["disabled", "sensorDisabled", "pointerEventsDisabled", "viewportPropagateMouseMove", "autoHeightDisabled", "autoWidthDisabled", "viewClass", "trackClass", "thumbClass", "minThumbSize", "trackClickScrollDuration", "pointerEventsMethod", "track", "visibility", "appearance", "position", "sensorDebounce", "scrollAuditTime"], outputs: ["updated"], exportAs: ["ngScrollbar"] }, { kind: "component", type: i9.PexelLibComponent, selector: "pexels-lib", inputs: ["stateDisplayed", "searchValue", "disableSearch"] }, { kind: "component", type: i10.MosaicViewComponent, selector: "mosaic-view", inputs: ["tabDisplayed", "fullSize", "nbFakeImg"], outputs: ["switchDisplayWindow"] }, { kind: "component", type: i11.TableViewComponent, selector: "table-view" }, { kind: "directive", type: i12.LoadingDirective, selector: "[btnLoadingAnim]" }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i13.TranslatePipe, name: "translate" }], animations: [
|
|
342
|
-
easeInOut,
|
|
343
|
-
insertRemove
|
|
344
|
-
] });
|
|
345
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ImagesViewComponent, decorators: [{
|
|
346
|
-
type: Component,
|
|
347
|
-
args: [{ selector: 'images-view', animations: [
|
|
348
|
-
easeInOut,
|
|
349
|
-
insertRemove
|
|
350
|
-
], template: "<ng-container *ngIf=\"vm$ | async as vm\">\r\n\r\n <div class=\"images-view\" [ngClass]=\"{'fullSize': fullSize, 'small': stateDisplayed === 'small'}\" [@easeInOut]=\"'in'\">\r\n <!-- Subheader : Img number and actions btn (sup img list, switch forma display) -->\r\n <div\r\n *ngIf=\"(stateDisplayed !== 'small' || tabDisplayed === 'img-upload')\"\r\n class=\"images-view__container\"\r\n [ngClass]=\"{'images-view__container--uploadTab': tabDisplayed === 'img-upload', 'images-view__container--window': stateDisplayed === 'window'}\"\r\n >\r\n\r\n <div *ngIf=\"tabDisplayed !== 'img-upload'\">\r\n <p class=\"mainColor\" [ngClass]=\"{'images-view__container__total--hide': vm.displayPexelsResults}\">{{ 'ImgManager.ImgLib.nbImg' | translate }} : {{vm.imageTotal}}</p>\r\n </div>\r\n <div *ngIf=\"tabDisplayed === 'img-upload'\">\r\n <p class=\"mainColor\">{{ 'ImgManager.ImgLib.lastImgs' | translate }}</p>\r\n </div>\r\n\r\n <div class=\"field has-addons subHeaderActions\" *ngIf=\"tabDisplayed !== 'img-upload'\">\r\n\r\n <!-- For listforma : Display btn del multiple img & Confirm action -->\r\n <div class=\"images-view__container__boxAction\">\r\n\r\n\r\n <!-- Select -->\r\n <button\r\n class=\"button success images-view__container__boxAction__import\"\r\n @insertRemoveAnnim\r\n *ngIf=\"listDisplayed && nbImgToDelSelected && !confirmImgSup && !delListImgLoader && multipleImgMode\"\r\n (click)=\"selectImgChosen(vm.picturesList)\"\r\n type=\"button\"\r\n >\r\n <i class=\"fal fa-check\"></i>\r\n {{ 'ImgManager.ImgLib.select' | translate }} ({{nbImgToDelSelected}})\r\n </button>\r\n\r\n <!-- Display btn del multiple img -->\r\n <button\r\n *ngIf=\"listDisplayed && nbImgToDelSelected && !confirmImgSup\"\r\n (click)=\"displayConfirmImgSup()\"\r\n class=\"button images-view__container__boxAction__delBtn danger\"\r\n @insertRemoveAnnim\r\n type=\"button\"\r\n >\r\n <i class=\"fal fa-times\"></i>{{ 'ImgManager.ImgLib.delMlt' | translate }} ({{nbImgToDelSelected}})\r\n <span btnLoadingAnim *ngIf=\"delListImgLoader\" class=\"btnLoadingAnnimation\"></span>\r\n </button>\r\n\r\n <!-- Confirm action -->\r\n <div\r\n class=\"images-view__container__boxAction__confirmSup\"\r\n [ngClass]=\"{'images-view__container__boxAction__confirmSup--visible': confirmImgSup}\">\r\n <p *ngIf=\"nbImgToDelSelected > 1\" class=\"images-view__container__boxAction__confirmSup__text\">{{ 'ImgManager.ImgLib.confirmSupQuestions' | translate:{nbImage: nbImgToDelSelected} }}</p>\r\n <p *ngIf=\"nbImgToDelSelected === 1\" class=\"images-view__container__boxAction__confirmSup__text\">{{ 'ImgManager.ImgLib.confirmSupQuestion' | translate:{nbImage: nbImgToDelSelected} }}</p>\r\n <div>\r\n <button\r\n class=\"button images-view__container__boxAction__confirmSup__cancel\"\r\n (click)=\"cancelSup()\"\r\n type=\"button\"\r\n >\r\n {{ 'ImgManager.ImgLib.cancel' | translate }}\r\n </button>\r\n <button\r\n (click)=\"removeListImg(vm.picturesList)\"\r\n class=\"button images-view__container__delBtn danger\"\r\n type=\"button\"\r\n >\r\n {{ 'ImgManager.ImgLib.confirm' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <!-- Swith mosaic/list forma -->\r\n <div class=\"field has-addons images-view__container__buttonBox\">\r\n <div class=\"control\">\r\n <div\r\n class=\"button is-lighted images-view__container__buttonBox__btn\"\r\n [ngClass]=\"{'actifDisplayed': !listDisplayed}\"\r\n (click)=\"onSwitchFormatDisplayed(false)\"\r\n >\r\n <span class=\"icon is-small\">\r\n <i class=\"fa-solid fa-th\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"control\">\r\n <div class=\"button is-lighted images-view__container__buttonBox__btn\"\r\n [ngClass]=\"{'actifDisplayed': listDisplayed}\"\r\n (click)=\"onSwitchFormatDisplayed(true)\"\r\n >\r\n <span class=\"icon is-small\">\r\n <i class=\"fa-solid fa-bars\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- Images section -->\r\n <ng-scrollbar\r\n class=\"images-view__scroll\"\r\n [ngClass]=\"{\r\n 'images-view__scroll--hide--mosaic': vm.displayPexelsResults && !listDisplayed,\r\n 'images-view__scroll--hide--table': vm.displayPexelsResults && listDisplayed,\r\n 'images-view__scroll--full': stateDisplayed === 'full',\r\n 'images-view__scroll--smallDisplay' : stateDisplayed === 'small' && tabDisplayed !== 'img-upload',\r\n 'images-view__scroll--smallUploadDisplay' : stateDisplayed === 'small' && tabDisplayed === 'img-upload',\r\n 'images-view__scroll--window': stateDisplayed === 'window'\r\n }\"\r\n >\r\n <div #imgLibContainer class=\"images-view__wrapper\">\r\n\r\n <div *ngIf=\"!listDisplayed || stateDisplayed === 'small'\" [@easeInOut]=\"'in'\">\r\n <mosaic-view\r\n [picturesList]=\"vm.picturesList\"\r\n (picturesListChange)=\"onPicturesListChange(vm.picturesList)\"\r\n [tableFilters]=\"vm.tableFilters\"\r\n (filtersChange)=\"searchImagesParameters$.next(getParams(vm.tableFilters));\"\r\n [(disable)]=\"disable\"\r\n (pictureNameChange)=\"onRenamePicture($event)\"\r\n (switchDisplayWindow)=\"switchDisplayWindowMosaic()\"\r\n [nbFakeImg]=\"nbFakeImg\"\r\n [stateDisplayed]=\"stateDisplayed\"\r\n [tabDisplayed]=\"tabDisplayed\"\r\n [displayPexelsResults]=\"vm.displayPexelsResults\"\r\n [isLoading]=\"vm.isLoading\"\r\n [fullSize]=\"fullSize\"\r\n >\r\n </mosaic-view>\r\n </div>\r\n\r\n <div *ngIf=\"listDisplayed && stateDisplayed !== 'small'\" [@easeInOut]=\"'in'\">\r\n <table-view\r\n [picturesList]=\"vm.picturesList\"\r\n (picturesListChange)=\"onPicturesListChange(vm.picturesList)\"\r\n [tableFilters]=\"vm.tableFilters\"\r\n (filtersChange)=\"searchImagesParameters$.next(getParams(vm.tableFilters));\"\r\n [(disable)]=\"disable\"\r\n (pictureNameChange)=\"onRenamePicture($event)\"\r\n [displayPexelsResults]=\"vm.displayPexelsResults\"\r\n [stateDisplayed]=\"stateDisplayed\"\r\n [isLoading]=\"vm.isLoading\"\r\n >\r\n </table-view>\r\n </div>\r\n </div>\r\n </ng-scrollbar>\r\n\r\n <!-- Pexels Section - When no img found -->\r\n <div\r\n *ngIf=\"vm.displayPexelsResults\"\r\n class=\"images-view--pexels\"\r\n [@easeInOut]=\"'in'\">\r\n <pexels-lib\r\n [searchValue]=\"vm.tableFilters.searchValue\"\r\n [disableSearch]=\"true\"\r\n >\r\n </pexels-lib>\r\n </div>\r\n</ng-container>\r\n" }]
|
|
351
|
-
}], ctorParameters: function () { return [{ type: i1.ImgManagerService }, { type: i2.ImgEventService }, { type: i3.ImgSelectionService }, { type: i4.AlertService }, { type: i5.UserSettingsService }, { type: i6.RenamePictureService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { stateDisplayed: [{
|
|
352
|
-
type: Input
|
|
353
|
-
}], tabDisplayed: [{
|
|
354
|
-
type: Input
|
|
355
|
-
}], fullSize: [{
|
|
356
|
-
type: Input
|
|
357
|
-
}], nbRowToShow: [{
|
|
358
|
-
type: Input
|
|
359
|
-
}], listDisplayed: [{
|
|
360
|
-
type: Input
|
|
361
|
-
}], multipleImgMode: [{
|
|
362
|
-
type: Input
|
|
363
|
-
}], switchDisplayWindow: [{
|
|
364
|
-
type: Output
|
|
365
|
-
}], imgLibContainer: [{
|
|
366
|
-
type: ViewChild,
|
|
367
|
-
args: ['imgLibContainer']
|
|
368
|
-
}] } });
|
|
369
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2VzLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd3otaW1nLW1hbmFnZXIvc3JjL2xpYi9jb21wb25lbnRzL2ltYWdlcy12aWV3L2ltYWdlcy12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3d6LWltZy1tYW5hZ2VyL3NyYy9saWIvY29tcG9uZW50cy9pbWFnZXMtdmlldy9pbWFnZXMtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFpQixNQUFNLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTlILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBTyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUczRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDN0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBRXJGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBVTVELE1BQU0sT0FBTyxtQkFBbUI7SUErRjlCLElBQUksdUJBQXVCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQztJQUNqRCxDQUFDO0lBeUNELFlBQ1UsVUFBNkIsRUFDN0IsZUFBZ0MsRUFDaEMsbUJBQXdDLEVBQ3hDLFlBQTBCLEVBQzFCLG1CQUF3QyxFQUN4QyxvQkFBMEMsRUFDMUMsaUJBQW9DO1FBTnBDLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBQzdCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBM0lyQyxrQkFBYSxHQUFHLEtBQUssQ0FBQyxDQUFDLGdDQUFnQztRQUN2RCxvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUVqQyx3QkFBbUIsR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUdoRSxtQkFBYyxHQUFXLEdBQUcsQ0FBQyxDQUFDLGdEQUFnRDtRQUM5RSxtQkFBYyxHQUFXLEdBQUcsQ0FBQyxDQUFDLGdEQUFnRDtRQUc5RSxjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBRXRCLHVCQUFrQixHQUFPO1lBQ3ZCO2dCQUNFLEdBQUcsRUFBRSxHQUFHO2dCQUNSLG1CQUFtQixFQUFHLENBQUM7Z0JBQ3ZCLG1CQUFtQixFQUFHLEdBQUc7YUFDMUI7WUFDRDtnQkFDRSxHQUFHLEVBQUUsR0FBRztnQkFDUixtQkFBbUIsRUFBRyxDQUFDO2dCQUN2QixtQkFBbUIsRUFBRyxHQUFHO2FBQzFCO1lBQ0Q7Z0JBQ0UsR0FBRyxFQUFFLEdBQUc7Z0JBQ1IsbUJBQW1CLEVBQUcsR0FBRztnQkFDekIsbUJBQW1CLEVBQUcsTUFBTTthQUM3QjtZQUNEO2dCQUNFLEdBQUcsRUFBRSxJQUFJO2dCQUNULG1CQUFtQixFQUFHLE1BQU07Z0JBQzVCLG1CQUFtQixFQUFHLEdBQUc7YUFDMUI7WUFDRDtnQkFDRSxHQUFHLEVBQUUsSUFBSTtnQkFDVCxtQkFBbUIsRUFBRyxJQUFJO2dCQUMxQixtQkFBbUIsRUFBRyxLQUFLO2FBQzVCO1lBQ0Q7Z0JBQ0UsR0FBRyxFQUFFLElBQUk7Z0JBQ1QsbUJBQW1CLEVBQUcsR0FBRztnQkFDekIsbUJBQW1CLEVBQUcsTUFBTTthQUM3QjtZQUNEO2dCQUNFLG1CQUFtQixFQUFHLE1BQU07Z0JBQzVCLG1CQUFtQixFQUFHLEdBQUc7YUFDMUI7U0FDRixDQUFDO1FBRUYsbUJBQWMsR0FBTztZQUNuQjtnQkFDRSxHQUFHLEVBQUUsSUFBSTtnQkFDVCxtQkFBbUIsRUFBRyxJQUFJO2dCQUMxQixtQkFBbUIsRUFBRyxLQUFLO2FBQzVCO1lBQ0Q7Z0JBQ0UsR0FBRyxFQUFFLElBQUk7Z0JBQ1QsbUJBQW1CLEVBQUcsTUFBTTtnQkFDNUIsbUJBQW1CLEVBQUcsR0FBRzthQUMxQjtZQUNEO2dCQUNFLEdBQUcsRUFBRSxJQUFJO2dCQUNULG1CQUFtQixFQUFHLE1BQU07Z0JBQzVCLG1CQUFtQixFQUFHLE1BQU07YUFDN0I7WUFDRDtnQkFDRSxHQUFHLEVBQUUsSUFBSTtnQkFDVCxtQkFBbUIsRUFBRyxJQUFJO2dCQUMxQixtQkFBbUIsRUFBRyxNQUFNO2FBQzdCO1lBQ0Q7Z0JBQ0UsR0FBRyxFQUFFLElBQUk7Z0JBQ1QsbUJBQW1CLEVBQUcsSUFBSTtnQkFDMUIsbUJBQW1CLEVBQUcsSUFBSTthQUMzQjtZQUNEO2dCQUNFLG1CQUFtQixFQUFHLElBQUk7Z0JBQzFCLG1CQUFtQixFQUFHLEtBQUs7YUFDNUI7U0FDRixDQUFDO1FBRUYsdUJBQWtCLEdBQVcsQ0FBQyxDQUFDO1FBQy9CLFlBQU8sR0FBWSxLQUFLLENBQUMsQ0FBQyw4Q0FBOEM7UUFDeEUscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBQzlCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIsa0JBQWEsR0FBVyxLQUFLLENBQUM7UUFVdEIsbUJBQWMsR0FBRyxrQ0FBa0MsQ0FBQztRQUNwRCxxQkFBZ0IsR0FBRyxvQ0FBb0MsQ0FBQztRQUN4RCxnQkFBVyxHQUFHLG9DQUFvQyxDQUFDO1FBQ25ELG1CQUFjLEdBQUcsbUNBQW1DLENBQUM7UUFFckQsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFdkMsUUFBRyxHQUFHLGFBQWEsQ0FBQztZQUNsQixjQUFjLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWE7WUFDdEQsYUFBYSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVTtZQUN6QyxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVO1lBQ3JDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCO1NBQ2hFLENBQUMsQ0FBQyxJQUFJLENBQ0wsR0FBRyxDQUFDLENBQUMsRUFBQyxjQUFjLEVBQUUsYUFBYSxFQUFFLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBQyxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBQyxFQUFFLEVBQUU7WUFDbEcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5RSxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRXhELE1BQU0sWUFBWSxHQUFrQixJQUFJLENBQUMsZUFBZSxDQUFDLHNCQUFzQixFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzdGLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxLQUFLLFlBQVksSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxLQUFLLGFBQWEsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7WUFFak4sTUFBTSxzQkFBc0IsR0FBRyxDQUFDLENBQUMsWUFBWSxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFlBQVksSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDO1lBQ25JLE1BQU0sMkNBQTJDLEdBQUcsSUFBSSxDQUFDLFlBQVksS0FBSyxZQUFZLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEtBQUssR0FBRyxJQUFJLFNBQVMsRUFBRSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFFekosT0FBTztnQkFDTCxTQUFTLEVBQUUsMkNBQTJDLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxTQUFTO2dCQUMzRixvQkFBb0IsRUFBRSxDQUFDLFNBQVMsSUFBSSxVQUFVLEtBQUssQ0FBQztnQkFDcEQsWUFBWTtnQkFDWixVQUFVO2dCQUNWLFlBQVk7Z0JBQ1osc0JBQXNCO2FBQ3ZCLENBQUE7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBU2dELENBQUM7SUFFM0MsZUFBZSxDQUFDLHNCQUEyQixFQUFFLFVBQWU7UUFDbEUsT0FBTztZQUNMLElBQUksRUFBRSxTQUFTO1lBQ2YsS0FBSyxFQUFFLFNBQVM7WUFDaEIsV0FBVyxFQUFFLHNCQUFzQixDQUFDLE1BQU07WUFDMUMsVUFBVSxFQUFFLFVBQVU7WUFDdEIsWUFBWSxFQUFFLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUM7WUFDcEQsV0FBVyxFQUFFLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUM7U0FDbkQsQ0FBQztJQUNKLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQ1gsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLE1BQU0sQ0FBQyxDQUFDLEVBQUMsc0JBQXNCLEVBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUM1RCxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUMsWUFBWSxFQUFDLEVBQUUsRUFBRTtZQUM1QixJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDckMsQ0FBQyxDQUFDLENBQUM7SUFDVCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHVCQUF1QixDQUFDLFFBQWlCO1FBQ3ZDLElBQUksQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDO1FBQzlCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsZUFBZSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWEsQ0FBQyxZQUE2QjtRQUN6QyxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELGVBQWUsQ0FBQyxjQUFpQztRQUMvQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxhQUFhLENBQUMsWUFBNkI7UUFDekMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFFM0Isa0NBQWtDO1FBQ2xDLDJCQUEyQjtRQUMzQixNQUFNLGFBQWEsR0FBYSxFQUFFLENBQUM7UUFDbkMsWUFBWSxDQUFDLE9BQU8sQ0FBRSxHQUFHLENBQUMsRUFBRTtZQUMxQixJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUU7Z0JBQ25CLEdBQUcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUNqQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDekQsSUFBSSxFQUFFLEdBQUcsRUFBRTtnQkFDVCxJQUFJLENBQUMsbUJBQW1CLENBQUMsdUJBQXVCLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDbEUsQ0FBQztZQUNELEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRTtnQkFDYixJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN6QyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDbkQsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlLENBQUMsWUFBNkI7UUFDM0MsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLE9BQU87U0FDUjtRQUNELE1BQU0sb0JBQW9CLEdBQW9CLEVBQUUsQ0FBQztRQUNqRCxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3JCLElBQUcsR0FBRyxDQUFDLFdBQVcsRUFBRTtnQkFDbEIsR0FBRyxDQUFDLFdBQVcsR0FBRSxLQUFLLENBQUM7Z0JBQ3ZCLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2FBQ3JCO1lBQ0QsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFO2dCQUNoQixvQkFBb0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDaEM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDNUIsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxvQkFBb0IsQ0FBQyxZQUE2QjtRQUNoRCxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGlCQUFpQixDQUFDLFlBQTBCO1FBQ2xELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsQ0FBQyxnQ0FBZ0M7UUFDNUcsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUVsRSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUV6RSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFFLEdBQUcsaUJBQWlCLENBQUMsQ0FBQztRQUVuRixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLFdBQVcsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBRSxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUUsR0FBRyxXQUFXLENBQUMsQ0FBQztRQUVsRixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDL0MsR0FBRyxZQUFZO1lBQ2YsWUFBWSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUN2QyxXQUFXLEVBQUUsQ0FBQztTQUNmLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO1FBQ3RDLElBQUksUUFBUSxHQUFVLENBQUMsQ0FBQztRQUN4QixJQUFJLGNBQWMsR0FBYSxFQUFFLENBQUM7UUFFbEMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7UUFFNUYsS0FBSyxNQUFNLFdBQVcsSUFBSSxxQkFBcUIsRUFBRTtZQUM3QyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRTtnQkFDcEIsY0FBYyxHQUFHLENBQUMsV0FBVyxDQUFDLG1CQUFtQixFQUFFLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUNwRixNQUFNO2FBQ1A7WUFDRCxJQUFJLFFBQVEsR0FBRyxXQUFXLElBQUksV0FBVyxJQUFJLFdBQVcsQ0FBQyxHQUFHLEVBQUU7Z0JBQzVELGNBQWMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxXQUFXLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFDcEYsTUFBTTthQUNQO1lBQ0QsUUFBUSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUM7U0FDOUI7UUFDRCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQztZQUNsRyxPQUFPLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1NBQ3hDO1FBRUQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUVqQyxPQUFPLEtBQUssR0FBRyxFQUFFLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLEtBQUssQ0FBQyxJQUFLLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxLQUFLLENBQUMsRUFBRTtZQUM5RixLQUFLLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQztTQUMvQjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELFNBQVMsQ0FBQyxZQUEwQjtRQUNsQyxPQUFPO1lBQ0wsS0FBSyxFQUFFLFlBQVksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFO1lBQzNDLElBQUksRUFBRSxZQUFZLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRTtZQUN4QyxHQUFHLENBQUMsWUFBWSxDQUFDLFdBQVcsSUFBSSxFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7U0FDbEYsQ0FBQztJQUNKLENBQUM7SUFFTyxhQUFhLENBQUMsY0FBdUI7UUFDM0MsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxjQUFjLENBQUM7UUFDbEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVPLG1CQUFtQixDQUFDLGVBQWdDLEVBQUUsWUFBNkI7UUFDekYsTUFBTSxvQkFBb0IsR0FBb0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDdkYsZUFBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM1QixNQUFNLFdBQVcsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxLQUFLLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxRixJQUFJLFdBQVcsRUFBRTtnQkFDZixXQUFXLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQzthQUM3QjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxvQkFBb0IsQ0FBQztJQUM5QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssa0JBQWtCLENBQUMsY0FBc0I7UUFDL0MsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsS0FBSyxPQUFPLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7UUFFekksSUFBSSxLQUFLLENBQUMsY0FBYyxHQUFHLFlBQVksQ0FBQyxFQUFFO1lBQ3hDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLE9BQU87U0FDUjtRQUVELElBQUksY0FBYyxHQUFHLFlBQVksS0FBSyxDQUFDLEVBQUU7WUFDdkMsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsU0FBUyxHQUFHLFlBQVksR0FBRyxjQUFjLEdBQUcsWUFBWSxDQUFDO1lBQ2hFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNQO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQixDQUFFLFlBQTZCO1FBQzFELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUU3RSxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzVCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1NBQzVCO0lBQ0gsQ0FBQztJQUVELHlCQUF5QjtRQUN2QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7O2lIQXZYVSxtQkFBbUI7cUdBQW5CLG1CQUFtQixrYUN4QmhDLHN3UEFzS0EsZ3VDRG5KYztRQUNWLFNBQVM7UUFDVCxZQUFZO0tBQ2I7NEZBRVUsbUJBQW1CO2tCQVIvQixTQUFTOytCQUNFLGFBQWEsY0FFWDt3QkFDVixTQUFTO3dCQUNULFlBQVk7cUJBQ2I7d1NBSVEsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRU4sbUJBQW1CO3NCQURsQixNQUFNO2dCQUd1QixlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dCwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBBZnRlclZpZXdJbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgQ2hhbmdlRGV0ZWN0b3JSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBJbWdQaWN0dXJlRFRPLCBQYXJhbXNJbWdNYW5hZ2VyRFRPIH0gZnJvbSAnLi4vLi4vZHRvL2ltZy1tYW5hZ2VyLmR0byc7XHJcbmltcG9ydCB7IEltZ01hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaW1nLW1hbmFnZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIGNvbWJpbmVMYXRlc3R9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBJbWdFdmVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9pbWctZXZlbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEltZ1NlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9pbWctc2VsZWN0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdXNlci1zZXR0aW5ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGFibGVGaWx0ZXJzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGFibGUvZmlsdGVycy10YWJsZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGljdHVyZU5hbWVVcGRhdGUgfSBmcm9tICcuLi8uLi9kdG8vcGljdHVyZS1uYW1lLXVwZGF0ZS5kdG8nO1xyXG5pbXBvcnQgeyBlYXNlSW5PdXQgfSBmcm9tICcuLi8uLi9hbmltYXRpb25zL2Vhc2VJbk91dC9lYXNlLWluLW91dC5hbmltYXRpb24nO1xyXG5pbXBvcnQgeyBpbnNlcnRSZW1vdmUgfSBmcm9tICcuLi8uLi9hbmltYXRpb25zL2luc2VydFJlbW92ZS9pbnNlcnQtcmVtb3ZlLmFuaW1hdGlvbic7XHJcbmltcG9ydCB7IHN0YXRlRGlzcGxheWVkLCB0YWJEaXNwbGF5ZWQgfSBmcm9tICcuLi8uLi9kdG8vZXhwb3J0LWR0b3MuYXBpJztcclxuaW1wb3J0IHsgUmVuYW1lUGljdHVyZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZW5hbWUtcGljdHVyZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWxlcnQuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2ltYWdlcy12aWV3JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaW1hZ2VzLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIGVhc2VJbk91dCxcclxuICAgIGluc2VydFJlbW92ZVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEltYWdlc1ZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcclxuXHJcbiAgQElucHV0KCkgc3RhdGVEaXNwbGF5ZWQ6IHN0YXRlRGlzcGxheWVkO1xyXG4gIEBJbnB1dCgpIHRhYkRpc3BsYXllZDogdGFiRGlzcGxheWVkO1xyXG4gIEBJbnB1dCgpIGZ1bGxTaXplOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIG5iUm93VG9TaG93OiBudW1iZXI7XHJcbiAgQElucHV0KCkgbGlzdERpc3BsYXllZCA9IGZhbHNlOyAvLyBEaXNwbGF5IGZvcm1hdCBsaXN0IG9yIG1vc2FpY1xyXG4gIEBJbnB1dCgpIG11bHRpcGxlSW1nTW9kZSA9IGZhbHNlO1xyXG4gIEBPdXRwdXQoKVxyXG4gIHN3aXRjaERpc3BsYXlXaW5kb3c6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnaW1nTGliQ29udGFpbmVyJykgaW1nTGliQ29udGFpbmVyOiBFbGVtZW50UmVmO1xyXG4gIHdpZHRoTGFyZ2VDYXJkOiBudW1iZXIgPSAyMTk7IC8vIERlZmF1bHQgdmFsdWUgb2YgYSBjYXJkIHdpZHRoIDE5OSArIG1hcmdpbiAyMFxyXG4gIHdpZHRoU21hbGxDYXJkOiBudW1iZXIgPSAxNjA7IC8vIERlZmF1bHQgdmFsdWUgb2YgYSBjYXJkIHdpZHRoIDE0MCArIG1hcmdpbiAyMFxyXG4gIG5iTWluSW1nUGVyTGluZTogbnVtYmVyO1xyXG4gIG5iTWF4SW1nUGVyTGluZTogbnVtYmVyO1xyXG4gIG5iRmFrZUltZzogbnVtYmVyID0gMDtcclxuXHJcbiAgaW1nRnVsbFdpZHRoQ29uZmlnOmFueSA9IFtcclxuICAgIHtcclxuICAgICAgbWF4OiA0MTksXHJcbiAgICAgIGxhcmdlSW1nV2lkdGhGYWN0b3IgOiAxLFxyXG4gICAgICBzbWFsbEltZ1dpZHRoRmFjdG9yIDogMC41XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBtYXg6IDQ5OSxcclxuICAgICAgbGFyZ2VJbWdXaWR0aEZhY3RvciA6IDEsXHJcbiAgICAgIHNtYWxsSW1nV2lkdGhGYWN0b3IgOiAwLjVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG1heDogNzE5LCAvLyB0YWJsZXRcclxuICAgICAgbGFyZ2VJbWdXaWR0aEZhY3RvciA6IDAuNSxcclxuICAgICAgc21hbGxJbWdXaWR0aEZhY3RvciA6IDAuMzMzM1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbWF4OiAxMDIzLCAvLyBkZXNrb3BcclxuICAgICAgbGFyZ2VJbWdXaWR0aEZhY3RvciA6IDAuMzMzMyxcclxuICAgICAgc21hbGxJbWdXaWR0aEZhY3RvciA6IDAuMlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbWF4OiAxMzk5LFxyXG4gICAgICBsYXJnZUltZ1dpZHRoRmFjdG9yIDogMC4yNSxcclxuICAgICAgc21hbGxJbWdXaWR0aEZhY3RvciA6IDAuMTI1XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBtYXg6IDE1OTksXHJcbiAgICAgIGxhcmdlSW1nV2lkdGhGYWN0b3IgOiAwLjIsXHJcbiAgICAgIHNtYWxsSW1nV2lkdGhGYWN0b3IgOiAwLjExMTFcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGxhcmdlSW1nV2lkdGhGYWN0b3IgOiAwLjE2NjYsXHJcbiAgICAgIHNtYWxsSW1nV2lkdGhGYWN0b3IgOiAwLjFcclxuICAgIH1cclxuICBdO1xyXG5cclxuICBpbWdXaWR0aENvbmZpZzphbnkgPSBbXHJcbiAgICB7XHJcbiAgICAgIG1heDogMTAyNCxcclxuICAgICAgbGFyZ2VJbWdXaWR0aEZhY3RvciA6IDAuMjUsXHJcbiAgICAgIHNtYWxsSW1nV2lkdGhGYWN0b3IgOiAwLjEyNVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbWF4OiAxMTk5LFxyXG4gICAgICBsYXJnZUltZ1dpZHRoRmFjdG9yIDogMC4zMzMzLFxyXG4gICAgICBzbWFsbEltZ1dpZHRoRmFjdG9yIDogMC4yXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBtYXg6IDEyOTksXHJcbiAgICAgIGxhcmdlSW1nV2lkdGhGYWN0b3IgOiAwLjMzMzMsXHJcbiAgICAgIHNtYWxsSW1nV2lkdGhGYWN0b3IgOiAwLjE2NjZcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG1heDogMTM5OSxcclxuICAgICAgbGFyZ2VJbWdXaWR0aEZhY3RvciA6IDAuMjUsXHJcbiAgICAgIHNtYWxsSW1nV2lkdGhGYWN0b3IgOiAwLjE2NjZcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG1heDogMTU5OSxcclxuICAgICAgbGFyZ2VJbWdXaWR0aEZhY3RvciA6IDAuMjUsXHJcbiAgICAgIHNtYWxsSW1nV2lkdGhGYWN0b3IgOiAwLjE0XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBsYXJnZUltZ1dpZHRoRmFjdG9yIDogMC4yNSxcclxuICAgICAgc21hbGxJbWdXaWR0aEZhY3RvciA6IDAuMTI1XHJcbiAgICB9XHJcbiAgXTtcclxuXHJcbiAgbmJJbWdUb0RlbFNlbGVjdGVkOiBudW1iZXIgPSAwO1xyXG4gIGRpc2FibGU6IGJvb2xlYW4gPSBmYWxzZTsgLy8gVXNlIHRvIGRpc2FibGUgYWN0aW9uIGR1cmluZyBzZXJ2ZXIgcmVxdWVzdFxyXG4gIGRlbExpc3RJbWdMb2FkZXIgPSBmYWxzZTtcclxuICBpbml0Q29tcG9uZW50OiBib29sZWFuID0gdHJ1ZTtcclxuICBmYWlsTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY29uZmlybUltZ1N1cDpib29sZWFuID0gZmFsc2U7XHJcbiAgcHJldmlvdXNTZWFyY2hWYWx1ZTogc3RyaW5nO1xyXG5cclxuICBnZXQgc2VhcmNoSW1hZ2VzUGFyYW1ldGVycyQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pbWdNYW5hZ2VyLnNlYXJjaEltYWdlc1BhcmFtZXRlcnMkO1xyXG4gIH1cclxuXHJcbiAgLy8gQXBpIEltZyBtYW5hZ2VyIFBhcmFtc1xyXG4gIHBhcmFtczpQYXJhbXNJbWdNYW5hZ2VyRFRPO1xyXG5cclxuICBwcml2YXRlIGVycm9yR2V0QWxsSW1nID0gJ0ltZ01hbmFnZXIuSW1nTGliLmVycm9yR2V0QWxsSW1nJztcclxuICBwcml2YXRlIGVycm9yR2V0VG90YWxJbWcgPSAnSW1nTWFuYWdlci5JbWdMaWIuZXJyb3JHZXRUb3RhbEltZyc7XHJcbiAgcHJpdmF0ZSBlcnJvckdldEltZyA9ICdJbWdNYW5hZ2VyLkltZ0xpYi5lcnJvckdldENhbnZhSW1nJztcclxuICBwcml2YXRlIGVycm9yUmVtb3ZlSW1nID0gJ0ltZ01hbmFnZXIuSW1nTGlzdC5lcnJvclJlbW92ZUltZyc7XHJcblxyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICB2bSQgPSBjb21iaW5lTGF0ZXN0KHtcclxuICAgIGltYWdlU2VsZWN0aW9uOiB0aGlzLmltZ1NlbGVjdGlvblNlcnZpY2UuaW1nU2VsZWN0aW9uJCxcclxuICAgIGltYWdlTGlzdERhdGE6IHRoaXMuaW1nTWFuYWdlci5pbWFnZUxpc3QkLFxyXG4gICAgaXNMb2FkaW5nOiB0aGlzLmltZ01hbmFnZXIuaXNMb2FkaW5nJCxcclxuICAgIHNlYXJjaEltYWdlc1BhcmFtZXRlcnM6IHRoaXMuaW1nTWFuYWdlci5zZWFyY2hJbWFnZXNQYXJhbWV0ZXJzJCxcclxuICB9KS5waXBlKFxyXG4gICAgbWFwKCh7aW1hZ2VTZWxlY3Rpb24sIGltYWdlTGlzdERhdGE6IHtpbWFnZUxpc3QsIGltYWdlVG90YWx9LCBpc0xvYWRpbmcsIHNlYXJjaEltYWdlc1BhcmFtZXRlcnN9KSA9PiB7XHJcbiAgICAgIHRoaXMuaW5pdFZhcmlhYmxlcyh0cnVlKTtcclxuICAgICAgdGhpcy5jYWxjdWxhdGVOYkltZ0Zha2UoaW1hZ2VMaXN0LmRhdGEubGVuZ3RoKTtcclxuICAgICAgY29uc3QgcGljdHVyZXNMaXN0ID0gdGhpcy5zZXRTZWxlY3RlZFByb3BlcnR5KGltYWdlU2VsZWN0aW9uLCBpbWFnZUxpc3QuZGF0YSk7XHJcbiAgICAgIHRoaXMucmVuYW1lUGljdHVyZVNlcnZpY2Uuc2V0UGljdHVyZXNMaXN0KHBpY3R1cmVzTGlzdCk7XHJcblxyXG4gICAgICBjb25zdCB0YWJsZUZpbHRlcnMgOiBUYWJsZUZpbHRlcnMgPSB0aGlzLmdldFRhYmxlRmlsdGVycyhzZWFyY2hJbWFnZXNQYXJhbWV0ZXJzLCBpbWFnZVRvdGFsKTtcclxuICAgICAgY29uc3Qga2VlcEltYWdlc0Rpc3BsYXllZCA9ICh0aGlzLnRhYkRpc3BsYXllZCA9PT0gJ2ltZy11cGxvYWQnICYmIHNlYXJjaEltYWdlc1BhcmFtZXRlcnMucGFnZSA9PT0gJzEnKSB8fCAodGhpcy50YWJEaXNwbGF5ZWQgPT09ICdpbWFnZXMtdmlldycgJiYgaW1hZ2VMaXN0LmRhdGEubGVuZ3RoICYmIHNlYXJjaEltYWdlc1BhcmFtZXRlcnMucGFnZSA9PT0gJzEnKTtcclxuXHJcbiAgICAgIGNvbnN0IHNraXBTZXRJbWFnZXNUb0Rpc3BsYXkgPSAhIXBpY3R1cmVzTGlzdD8ubGVuZ3RoICYmIHRoaXMudGFiRGlzcGxheWVkID09PSAnaW1nLXVwbG9hZCcgJiYgc2VhcmNoSW1hZ2VzUGFyYW1ldGVycy5wYWdlID09PSAnMSc7XHJcbiAgICAgIGNvbnN0IGhpZGVVbnRpbEZldGNoZWRGaXJzdFBhZ2VJbWFnZXNGb3JUYWJVcGxvYWQgPSB0aGlzLnRhYkRpc3BsYXllZCA9PT0gJ2ltZy11cGxvYWQnICYmIChzZWFyY2hJbWFnZXNQYXJhbWV0ZXJzLnBhZ2UgIT09ICcxJyB8fCBpbWFnZUxpc3Q/LnBhZ2UgIT09IDEpO1xyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBpc0xvYWRpbmc6IGhpZGVVbnRpbEZldGNoZWRGaXJzdFBhZ2VJbWFnZXNGb3JUYWJVcGxvYWQgfHwgIWtlZXBJbWFnZXNEaXNwbGF5ZWQgJiYgaXNMb2FkaW5nLFxyXG4gICAgICAgIGRpc3BsYXlQZXhlbHNSZXN1bHRzOiAhaXNMb2FkaW5nICYmIGltYWdlVG90YWwgPT09IDAsXHJcbiAgICAgICAgcGljdHVyZXNMaXN0LFxyXG4gICAgICAgIGltYWdlVG90YWwsXHJcbiAgICAgICAgdGFibGVGaWx0ZXJzLFxyXG4gICAgICAgIHNraXBTZXRJbWFnZXNUb0Rpc3BsYXlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICApO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgaW1nTWFuYWdlcjogSW1nTWFuYWdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGltZ0V2ZW50U2VydmljZTogSW1nRXZlbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBpbWdTZWxlY3Rpb25TZXJ2aWNlOiBJbWdTZWxlY3Rpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgdXNlclNldHRpbmdzU2VydmljZTogVXNlclNldHRpbmdzU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVuYW1lUGljdHVyZVNlcnZpY2U6IFJlbmFtZVBpY3R1cmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHsgfVxyXG5cclxuICBwcml2YXRlIGdldFRhYmxlRmlsdGVycyhzZWFyY2hJbWFnZXNQYXJhbWV0ZXJzOiBhbnksIGltYWdlVG90YWw6IGFueSk6IFRhYmxlRmlsdGVycyB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzb3J0OiB1bmRlZmluZWQsXHJcbiAgICAgIG9yZGVyOiB1bmRlZmluZWQsXHJcbiAgICAgIHNlYXJjaFZhbHVlOiBzZWFyY2hJbWFnZXNQYXJhbWV0ZXJzLnNlYXJjaCxcclxuICAgICAgdG90YWxJdGVtczogaW1hZ2VUb3RhbCxcclxuICAgICAgaXRlbXNQZXJQYWdlOiBwYXJzZUludChzZWFyY2hJbWFnZXNQYXJhbWV0ZXJzLmxpbWl0KSxcclxuICAgICAgY3VycmVudFBhZ2U6IHBhcnNlSW50KHNlYXJjaEltYWdlc1BhcmFtZXRlcnMucGFnZSlcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLnZtJC5waXBlKFxyXG4gICAgICB0YWtlKDEpLFxyXG4gICAgICBmaWx0ZXIoKHtza2lwU2V0SW1hZ2VzVG9EaXNwbGF5fSkgPT4gIXNraXBTZXRJbWFnZXNUb0Rpc3BsYXkpXHJcbiAgICAgICkuc3Vic2NyaWJlKCh7dGFibGVGaWx0ZXJzfSkgPT57XHJcbiAgICAgICAgIHRoaXMuc2V0TmJJbWdUb0Rpc3BsYXkodGFibGVGaWx0ZXJzKVxyXG4gICAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogdHJ1ZSA6IGdvIHRvIGxpc3QgZGlzcGxheVxyXG4gICAqIGZhbHNlIDogZ28gdG8gbW9zYWljIGRpc3BsYXlcclxuICAgKiBAcGFyYW0gYWN0aXZhdGVcclxuICAgKi9cclxuICBvblN3aXRjaEZvcm1hdERpc3BsYXllZChhY3RpdmF0ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5saXN0RGlzcGxheWVkID0gYWN0aXZhdGU7XHJcbiAgICB0aGlzLnVzZXJTZXR0aW5nc1NlcnZpY2Uuc2V0VXNlckRpc3BsYXlQcmVmZXJlbmNlKGFjdGl2YXRlKTtcclxuICAgIHRoaXMuaW1nRXZlbnRTZXJ2aWNlLmVtaXRsaXN0RGlzcGxheWVkQ2hhbmdlKGFjdGl2YXRlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGN1bCB0aGUgbnVtYmVyIG9mIGltZyBzZWxlY3RlZCBmb3IgbWFzc2UgZGVsZXRpb25cclxuICAgKi9cclxuICBvbkltZ1NlbGVjdGVkKHBpY3R1cmVzTGlzdDogSW1nUGljdHVyZURUT1tdKSB7XHJcbiAgICB0aGlzLnNldE5iSW1nVG9EZWxTZWxlY3RlZChwaWN0dXJlc0xpc3QpO1xyXG4gIH1cclxuXHJcbiAgb25SZW5hbWVQaWN0dXJlKHBpY3R1cmVSZW5hbWVkOiBQaWN0dXJlTmFtZVVwZGF0ZSkge1xyXG4gICAgdGhpcy5yZW5hbWVQaWN0dXJlU2VydmljZS5yZW5hbWVQaWN0dXJlKHBpY3R1cmVSZW5hbWVkKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUxpc3RJbWcocGljdHVyZXNMaXN0OiBJbWdQaWN0dXJlRFRPW10pIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kaXNhYmxlID0gdHJ1ZTtcclxuICAgIHRoaXMuZGVsTGlzdEltZ0xvYWRlciA9IHRydWU7XHJcbiAgICB0aGlzLmNvbmZpcm1JbWdTdXAgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBHZXQgdGhlIGlkIG9mIHRoZSBpbWcgdG8gcmVtb3ZlXHJcbiAgICAvLyBBbmQgYWRkIGRlbGV0ZWQgcHJvcGVydHlcclxuICAgIGNvbnN0IGlkSW1nVG9SZW1vdmU6IHN0cmluZ1tdID0gW107XHJcbiAgICBwaWN0dXJlc0xpc3QuZm9yRWFjaCggaW1nID0+IHtcclxuICAgICAgaWYgKGltZy5kZWxTZWxlY3RlZCkge1xyXG4gICAgICAgIGltZy5kZWxldGVkID0gdHJ1ZTtcclxuICAgICAgICBpZEltZ1RvUmVtb3ZlLnB1c2goaW1nLmlkX2ZpbGUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmltZ01hbmFnZXIucmVtb3ZlTXVsdGlwbGVJbWcoaWRJbWdUb1JlbW92ZSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaW1nU2VsZWN0aW9uU2VydmljZS5yZW1vdmVJbWdTZWxlY3Rpb25CeUlkcyhpZEltZ1RvUmVtb3ZlKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLmltZ01hbmFnZXIucmVmcmVzaEltYWdlTGlzdCQubmV4dCgpO1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLm9wZW5BbGVydCh0aGlzLmVycm9yUmVtb3ZlSW1nKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RJbWdDaG9zZW4ocGljdHVyZXNMaXN0OiBJbWdQaWN0dXJlRFRPW10pIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcGljdHVyZXNMaXN0U2VsZWN0ZWQ6IEltZ1BpY3R1cmVEVE9bXSA9IFtdO1xyXG4gICAgcGljdHVyZXNMaXN0Lm1hcChpbWcgPT4ge1xyXG4gICAgICBpZihpbWcuZGVsU2VsZWN0ZWQpIHtcclxuICAgICAgICBpbWcuZGVsU2VsZWN0ZWQgPWZhbHNlO1xyXG4gICAgICAgIGltZy5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGltZy5zZWxlY3RlZCkge1xyXG4gICAgICAgIHBpY3R1cmVzTGlzdFNlbGVjdGVkLnB1c2goaW1nKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNldE5iSW1nVG9EZWxTZWxlY3RlZChwaWN0dXJlc0xpc3QpO1xyXG4gICAgdGhpcy5pbWdTZWxlY3Rpb25TZXJ2aWNlLnNldEltZ1NlbGVjdGlvbihwaWN0dXJlc0xpc3RTZWxlY3RlZCk7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5Q29uZmlybUltZ1N1cCgpe1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbmZpcm1JbWdTdXAgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsU3VwKCkge1xyXG4gICAgdGhpcy5jb25maXJtSW1nU3VwID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFdmVudCBlbWl0IHdoZW4gYSBpbWcgc2VsZWN0ZWQgaW4gb3JkZXIgdG8gZGVsZXRlXHJcbiAgICovXHJcbiAgb25QaWN0dXJlc0xpc3RDaGFuZ2UocGljdHVyZXNMaXN0OiBJbWdQaWN0dXJlRFRPW10pIHtcclxuICAgIHRoaXMuc2V0TmJJbWdUb0RlbFNlbGVjdGVkKHBpY3R1cmVzTGlzdCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgZGVmYXVsdCBudW1iZXIgb2YgaW1nIHBlciBwYWdlIHRvIGRpc3BsYXkgYXQgdGhlIGluaXRpYWxpc2F0aW9uXHJcbiAgICogVGhpcyBudW1iZXIgaXMgYmV0d2VlbiAzMCBhbmQgNTBcclxuICAgKi9cclxuICBwcml2YXRlIHNldE5iSW1nVG9EaXNwbGF5KHRhYmxlRmlsdGVyczogVGFibGVGaWx0ZXJzKSB7XHJcbiAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IHRoaXMuaW1nTGliQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggKyAzMDsgLy8gKyAzMHB4IC0+IGxlZnQgKyByaWdodCBtYXJnaW5cclxuICAgIGNvbnN0IHNjcm9sbFdpZHRoID0gd2luZG93LmlubmVyV2lkdGggLSBkb2N1bWVudC5ib2R5Lm9mZnNldFdpZHRoO1xyXG5cclxuICAgIGNvbnN0IFttYXhJbWdXaWR0aEZhY3RvciwgbWluSW1nV2lkdGhGYWN0b3JdID0gdGhpcy5nZXRJbWdXaWR0aEZhY3RvcnMoKTtcclxuXHJcbiAgICBjb25zdCBtaW5JbWdXaWR0aCA9IE1hdGguZmxvb3IoY29udGFpbmVyV2lkdGggKiBtaW5JbWdXaWR0aEZhY3Rvcik7XHJcbiAgICBjb25zdCBtYXhJbWdXaWR0aCA9IE1hdGguY2VpbCgoY29udGFpbmVyV2lkdGggKyBzY3JvbGxXaWR0aCApICogbWF4SW1nV2lkdGhGYWN0b3IpO1xyXG5cclxuICAgIHRoaXMubmJNYXhJbWdQZXJMaW5lID0gTWF0aC5mbG9vcihjb250YWluZXJXaWR0aCAvIG1pbkltZ1dpZHRoKTtcclxuICAgIHRoaXMubmJNaW5JbWdQZXJMaW5lID0gTWF0aC5mbG9vciggKGNvbnRhaW5lcldpZHRoICsgc2Nyb2xsV2lkdGggKSAvIG1heEltZ1dpZHRoKTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaEltYWdlc1BhcmFtZXRlcnMkLm5leHQodGhpcy5nZXRQYXJhbXMoe1xyXG4gICAgICAuLi50YWJsZUZpbHRlcnMsXHJcbiAgICAgIGl0ZW1zUGVyUGFnZTogdGhpcy5nZXRUb3RhbEltZ1BlclBhZ2UoKSxcclxuICAgICAgY3VycmVudFBhZ2U6IDFcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SW1nV2lkdGhGYWN0b3JzKCk6IG51bWJlcltdIHtcclxuICAgIGNvbnN0IHNjcmVlbldpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XHJcbiAgICBsZXQgbWluV2lkdGg6bnVtYmVyID0gMDtcclxuICAgIGxldCBpbWdTaXplc0NvbmZpZzogbnVtYmVyW10gPSBbXTtcclxuXHJcbiAgICBjb25zdCBjdXJyZW50SW1nV2lkdGhDb25maWcgPSB0aGlzLmZ1bGxTaXplID8gdGhpcy5pbWdGdWxsV2lkdGhDb25maWcgOiB0aGlzLmltZ1dpZHRoQ29uZmlnO1xyXG5cclxuICAgIGZvciAoY29uc3Qgd2lkdGhDb25maWcgb2YgY3VycmVudEltZ1dpZHRoQ29uZmlnKSB7XHJcbiAgICAgICAgaWYgKCF3aWR0aENvbmZpZy5tYXgpIHtcclxuICAgICAgICAgIGltZ1NpemVzQ29uZmlnID0gW3dpZHRoQ29uZmlnLmxhcmdlSW1nV2lkdGhGYWN0b3IsIHdpZHRoQ29uZmlnLnNtYWxsSW1nV2lkdGhGYWN0b3JdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtaW5XaWR0aCA8IHNjcmVlbldpZHRoICYmIHNjcmVlbldpZHRoIDw9IHdpZHRoQ29uZmlnLm1heCkge1xyXG4gICAgICAgICAgaW1nU2l6ZXNDb25maWcgPSBbd2lkdGhDb25maWcubGFyZ2VJbWdXaWR0aEZhY3Rvciwgd2lkdGhDb25maWcuc21hbGxJbWdXaWR0aEZhY3Rvcl07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgbWluV2lkdGggPSB3aWR0aENvbmZpZy5tYXg7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaW1nU2l6ZXNDb25maWc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFRvdGFsSW1nUGVyUGFnZSgpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMubmJSb3dUb1Nob3cpIHtcclxuICAgICAgY29uc3QgbmJJbWdQZXJMaW5lID0gdGhpcy5zdGF0ZURpc3BsYXllZCA9PT0gJ2Z1bGwnID8gdGhpcy5uYk1pbkltZ1BlckxpbmUgOiB0aGlzLm5iTWF4SW1nUGVyTGluZTtcclxuICAgICAgcmV0dXJuIG5iSW1nUGVyTGluZSAqIHRoaXMubmJSb3dUb1Nob3c7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHRvdGFsID0gdGhpcy5uYk1pbkltZ1BlckxpbmU7XHJcblxyXG4gICAgd2hpbGUgKHRvdGFsIDwgMzAgfHwgdG90YWwgJSB0aGlzLm5iTWF4SW1nUGVyTGluZSAhPT0gMCB8fCAgdG90YWwgJSB0aGlzLm5iTWluSW1nUGVyTGluZSAhPT0gMCkge1xyXG4gICAgICB0b3RhbCArPSB0aGlzLm5iTWluSW1nUGVyTGluZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdG90YWw7XHJcbiAgfVxyXG5cclxuICBnZXRQYXJhbXModGFibGVGaWx0ZXJzOiBUYWJsZUZpbHRlcnMpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGxpbWl0OiB0YWJsZUZpbHRlcnMuaXRlbXNQZXJQYWdlLnRvU3RyaW5nKCksXHJcbiAgICAgIHBhZ2U6IHRhYmxlRmlsdGVycy5jdXJyZW50UGFnZS50b1N0cmluZygpLFxyXG4gICAgICAgLi4uKHRhYmxlRmlsdGVycy5zZWFyY2hWYWx1ZSAmJiB7IHNlYXJjaDogdGFibGVGaWx0ZXJzLnNlYXJjaFZhbHVlLnRvU3RyaW5nKCkgfSksXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0VmFyaWFibGVzKGxvYWRpbmdTdWNjZXNzOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLm5iSW1nVG9EZWxTZWxlY3RlZCA9IDA7XHJcbiAgICB0aGlzLmRpc2FibGUgPSBmYWxzZTtcclxuICAgIHRoaXMuZGVsTGlzdEltZ0xvYWRlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5pbml0Q29tcG9uZW50ID0gZmFsc2U7XHJcbiAgICB0aGlzLmZhaWxMb2FkZWQgPSAhbG9hZGluZ1N1Y2Nlc3M7XHJcbiAgICB0aGlzLm5iRmFrZUltZyA9IDA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFNlbGVjdGVkUHJvcGVydHkoaW1nU2VsZWN0ZWRMaXN0OiBJbWdQaWN0dXJlRFRPW10sIHBpY3R1cmVzTGlzdDogSW1nUGljdHVyZURUT1tdKSB7XHJcbiAgICBjb25zdCBwaWN0dXJlc0xpc3RTZWxlY3RlZDogSW1nUGljdHVyZURUT1tdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShwaWN0dXJlc0xpc3QpKTtcclxuICAgIGltZ1NlbGVjdGVkTGlzdC5mb3JFYWNoKGltZyA9PiB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkSW1nID0gcGljdHVyZXNMaXN0U2VsZWN0ZWQuZmluZChwaWN0dXJlID0+IHBpY3R1cmUuaWRfZmlsZSA9PT0gaW1nLmlkX2ZpbGUpO1xyXG4gICAgICBpZiAoc2VsZWN0ZWRJbWcpIHtcclxuICAgICAgICBzZWxlY3RlZEltZy5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHBpY3R1cmVzTGlzdFNlbGVjdGVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGEgaW1nIGxpc3QgaW4gb3JkZXIgdG8gZmlsbCBwcm9wZXJseSBhbGwgdGhlIGxpbmUgb2YgaW1hZ2VzIGRpc3BsYXllZCBpbiBtb3NhaWMuXHJcbiAgICogT3RoZXJ3aXNlLCB0aGUgc3BhY2UtYmV0d2VlbiBjc3Mgd2lsbCBkbyBhIGJhZCBkaXNwbGF5XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjYWxjdWxhdGVOYkltZ0Zha2UobmJJbWdEaXNwbGF5ZWQ6IG51bWJlcikge1xyXG4gICAgY29uc3QgbmJJbWdQZXJMaW5lID0gdGhpcy5zdGF0ZURpc3BsYXllZCA9PT0gJ3NtYWxsJyB8fCB0aGlzLnRhYkRpc3BsYXllZCA9PT0gJ2ltZy11cGxvYWQnID8gdGhpcy5uYk1heEltZ1BlckxpbmUgOiB0aGlzLm5iTWluSW1nUGVyTGluZTtcclxuXHJcbiAgICBpZiAoaXNOYU4obmJJbWdEaXNwbGF5ZWQgJSBuYkltZ1BlckxpbmUpKSB7XHJcbiAgICAgIHRoaXMubmJGYWtlSW1nID0gMDtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChuYkltZ0Rpc3BsYXllZCAlIG5iSW1nUGVyTGluZSAhPT0gMCkge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLm5iRmFrZUltZyA9IG5iSW1nUGVyTGluZSAtIG5iSW1nRGlzcGxheWVkICUgbmJJbWdQZXJMaW5lO1xyXG4gICAgICB9LCAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0TmJJbWdUb0RlbFNlbGVjdGVkIChwaWN0dXJlc0xpc3Q6IEltZ1BpY3R1cmVEVE9bXSkge1xyXG4gICAgdGhpcy5uYkltZ1RvRGVsU2VsZWN0ZWQgPSBwaWN0dXJlc0xpc3QuZmlsdGVyKGltZyA9PiBpbWcuZGVsU2VsZWN0ZWQpLmxlbmd0aDtcclxuXHJcbiAgICBpZiAoIXRoaXMubmJJbWdUb0RlbFNlbGVjdGVkKSB7XHJcbiAgICAgIHRoaXMuY29uZmlybUltZ1N1cCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3dpdGNoRGlzcGxheVdpbmRvd01vc2FpYygpIHtcclxuICAgIHRoaXMuc3dpdGNoRGlzcGxheVdpbmRvdy5lbWl0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cInZtJCB8IGFzeW5jIGFzIHZtXCI+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJpbWFnZXMtdmlld1wiIFtuZ0NsYXNzXT1cInsnZnVsbFNpemUnOiBmdWxsU2l6ZSwgJ3NtYWxsJzogc3RhdGVEaXNwbGF5ZWQgPT09ICdzbWFsbCd9XCIgW0BlYXNlSW5PdXRdPVwiJ2luJ1wiPlxyXG4gICAgPCEtLSBTdWJoZWFkZXIgOiBJbWcgbnVtYmVyIGFuZCBhY3Rpb25zIGJ0biAoc3VwIGltZyBsaXN0LCBzd2l0Y2ggZm9ybWEgZGlzcGxheSkgLS0+XHJcbiAgICA8ZGl2XHJcbiAgICAqbmdJZj1cIihzdGF0ZURpc3BsYXllZCAhPT0gJ3NtYWxsJyB8fCB0YWJEaXNwbGF5ZWQgPT09ICdpbWctdXBsb2FkJylcIlxyXG4gICAgY2xhc3M9XCJpbWFnZXMtdmlld19fY29udGFpbmVyXCJcclxuICAgIFtuZ0NsYXNzXT1cInsnaW1hZ2VzLXZpZXdfX2NvbnRhaW5lci0tdXBsb2FkVGFiJzogdGFiRGlzcGxheWVkID09PSAnaW1nLXVwbG9hZCcsICdpbWFnZXMtdmlld19fY29udGFpbmVyLS13aW5kb3cnOiBzdGF0ZURpc3BsYXllZCA9PT0gJ3dpbmRvdyd9XCJcclxuICAgID5cclxuXHJcbiAgICAgIDxkaXYgKm5nSWY9XCJ0YWJEaXNwbGF5ZWQgIT09ICdpbWctdXBsb2FkJ1wiPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJtYWluQ29sb3JcIiBbbmdDbGFzc109XCJ7J2ltYWdlcy12aWV3X19jb250YWluZXJfX3RvdGFsLS1oaWRlJzogdm0uZGlzcGxheVBleGVsc1Jlc3VsdHN9XCI+e3sgJ0ltZ01hbmFnZXIuSW1nTGliLm5iSW1nJyB8IHRyYW5zbGF0ZSB9fSA6IHt7dm0uaW1hZ2VUb3RhbH19PC9wPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiAqbmdJZj1cInRhYkRpc3BsYXllZCA9PT0gJ2ltZy11cGxvYWQnXCI+XHJcbiAgICAgICAgICA8cCBjbGFzcz1cIm1haW5Db2xvclwiPnt7ICdJbWdNYW5hZ2VyLkltZ0xpYi5sYXN0SW1ncycgfCB0cmFuc2xhdGUgfX08L3A+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImZpZWxkIGhhcy1hZGRvbnMgc3ViSGVhZGVyQWN0aW9uc1wiICpuZ0lmPVwidGFiRGlzcGxheWVkICE9PSAnaW1nLXVwbG9hZCdcIj5cclxuXHJcbiAgICAgICAgICA8IS0tIEZvciBsaXN0Zm9ybWEgOiBEaXNwbGF5IGJ0biBkZWwgbXVsdGlwbGUgaW1nICYgQ29uZmlybSBhY3Rpb24gLS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2VzLXZpZXdfX2NvbnRhaW5lcl9fYm94QWN0aW9uXCI+XHJcblxyXG5cclxuICAgICAgICAgICAgICA8IS0tIFNlbGVjdCAtLT5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBzdWNjZXNzIGltYWdlcy12aWV3X19jb250YWluZXJfX2JveEFjdGlvbl9faW1wb3J0XCJcclxuICAgICAgICAgICAgICAgIEBpbnNlcnRSZW1vdmVBbm5pbVxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJsaXN0RGlzcGxheWVkICYmIG5iSW1nVG9EZWxTZWxlY3RlZCAmJiAhY29uZmlybUltZ1N1cCAmJiAhZGVsTGlzdEltZ0xvYWRlciAmJiBtdWx0aXBsZUltZ01vZGVcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEltZ0Nob3Nlbih2bS5waWN0dXJlc0xpc3QpXCJcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhbCBmYS1jaGVja1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAge3sgJ0ltZ01hbmFnZXIuSW1nTGliLnNlbGVjdCcgfCB0cmFuc2xhdGUgfX0gKHt7bmJJbWdUb0RlbFNlbGVjdGVkfX0pXHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gRGlzcGxheSBidG4gZGVsIG11bHRpcGxlIGltZyAtLT5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImxpc3REaXNwbGF5ZWQgJiYgbmJJbWdUb0RlbFNlbGVjdGVkICYmICFjb25maXJtSW1nU3VwXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJkaXNwbGF5Q29uZmlybUltZ1N1cCgpXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIGltYWdlcy12aWV3X19jb250YWluZXJfX2JveEFjdGlvbl9fZGVsQnRuIGRhbmdlclwiXHJcbiAgICAgICAgICAgICAgICBAaW5zZXJ0UmVtb3ZlQW5uaW1cclxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYWwgZmEtdGltZXNcIj48L2k+e3sgJ0ltZ01hbmFnZXIuSW1nTGliLmRlbE1sdCcgfCB0cmFuc2xhdGUgfX0gKHt7bmJJbWdUb0RlbFNlbGVjdGVkfX0pXHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGJ0bkxvYWRpbmdBbmltICpuZ0lmPVwiZGVsTGlzdEltZ0xvYWRlclwiIGNsYXNzPVwiYnRuTG9hZGluZ0FubmltYXRpb25cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gQ29uZmlybSBhY3Rpb24gLS0+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpbWFnZXMtdmlld19fY29udGFpbmVyX19ib3hBY3Rpb25fX2NvbmZpcm1TdXBcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydpbWFnZXMtdmlld19fY29udGFpbmVyX19ib3hBY3Rpb25fX2NvbmZpcm1TdXAtLXZpc2libGUnOiBjb25maXJtSW1nU3VwfVwiPlxyXG4gICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cIm5iSW1nVG9EZWxTZWxlY3RlZCA+IDFcIiBjbGFzcz1cImltYWdlcy12aWV3X19jb250YWluZXJfX2JveEFjdGlvbl9fY29uZmlybVN1cF9fdGV4dFwiPnt7ICdJbWdNYW5hZ2VyLkltZ0xpYi5jb25maXJtU3VwUXVlc3Rpb25zJyB8IHRyYW5zbGF0ZTp7bmJJbWFnZTogbmJJbWdUb0RlbFNlbGVjdGVkfSB9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJuYkltZ1RvRGVsU2VsZWN0ZWQgPT09IDFcIiBjbGFzcz1cImltYWdlcy12aWV3X19jb250YWluZXJfX2JveEFjdGlvbl9fY29uZmlybVN1cF9fdGV4dFwiPnt7ICdJbWdNYW5hZ2VyLkltZ0xpYi5jb25maXJtU3VwUXVlc3Rpb24nIHwgdHJhbnNsYXRlOntuYkltYWdlOiBuYkltZ1RvRGVsU2VsZWN0ZWR9IH19PC9wPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBpbWFnZXMtdmlld19fY29udGFpbmVyX19ib3hBY3Rpb25fX2NvbmZpcm1TdXBfX2NhbmNlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWxTdXAoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnSW1nTWFuYWdlci5JbWdMaWIuY2FuY2VsJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVMaXN0SW1nKHZtLnBpY3R1cmVzTGlzdClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBpbWFnZXMtdmlld19fY29udGFpbmVyX19kZWxCdG4gZGFuZ2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdJbWdNYW5hZ2VyLkltZ0xpYi5jb25maXJtJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgICAgPCEtLSBTd2l0aCBtb3NhaWMvbGlzdCBmb3JtYSAtLT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBoYXMtYWRkb25zIGltYWdlcy12aWV3X19jb250YWluZXJfX2J1dHRvbkJveFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBpcy1saWdodGVkIGltYWdlcy12aWV3X19jb250YWluZXJfX2J1dHRvbkJveF9fYnRuXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2FjdGlmRGlzcGxheWVkJzogIWxpc3REaXNwbGF5ZWR9XCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Td2l0Y2hGb3JtYXREaXNwbGF5ZWQoZmFsc2UpXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uIGlzLXNtYWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtdGhcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uIGlzLWxpZ2h0ZWQgaW1hZ2VzLXZpZXdfX2NvbnRhaW5lcl9fYnV0dG9uQm94X19idG5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYWN0aWZEaXNwbGF5ZWQnOiBsaXN0RGlzcGxheWVkfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU3dpdGNoRm9ybWF0RGlzcGxheWVkKHRydWUpXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBpcy1zbWFsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWJhcnNcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcblxyXG4gICAgPCEtLSBJbWFnZXMgc2VjdGlvbiAtLT5cclxuICA8bmctc2Nyb2xsYmFyXHJcbiAgICBjbGFzcz1cImltYWdlcy12aWV3X19zY3JvbGxcIlxyXG4gICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAnaW1hZ2VzLXZpZXdfX3Njcm9sbC0taGlkZS0tbW9zYWljJzogdm0uZGlzcGxheVBleGVsc1Jlc3VsdHMgJiYgIWxpc3REaXNwbGF5ZWQsXHJcbiAgICAgICdpbWFnZXMtdmlld19fc2Nyb2xsLS1oaWRlLS10YWJsZSc6IHZtLmRpc3BsYXlQZXhlbHNSZXN1bHRzICYmIGxpc3REaXNwbGF5ZWQsXHJcbiAgICAgICdpbWFnZXMtdmlld19fc2Nyb2xsLS1mdWxsJzogc3RhdGVEaXNwbGF5ZWQgPT09ICdmdWxsJyxcclxuICAgICAgJ2ltYWdlcy12aWV3X19zY3JvbGwtLXNtYWxsRGlzcGxheScgOiBzdGF0ZURpc3BsYXllZCA9PT0gJ3NtYWxsJyAmJiB0YWJEaXNwbGF5ZWQgIT09ICdpbWctdXBsb2FkJyxcclxuICAgICAgJ2ltYWdlcy12aWV3X19zY3JvbGwtLXNtYWxsVXBsb2FkRGlzcGxheScgOiBzdGF0ZURpc3BsYXllZCA9PT0gJ3NtYWxsJyAmJiB0YWJEaXNwbGF5ZWQgPT09ICdpbWctdXBsb2FkJyxcclxuICAgICAgJ2ltYWdlcy12aWV3X19zY3JvbGwtLXdpbmRvdyc6IHN0YXRlRGlzcGxheWVkID09PSAnd2luZG93J1xyXG4gIH1cIlxyXG4gID5cclxuICAgIDxkaXYgI2ltZ0xpYkNvbnRhaW5lciBjbGFzcz1cImltYWdlcy12aWV3X193cmFwcGVyXCI+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhbGlzdERpc3BsYXllZCB8fCBzdGF0ZURpc3BsYXllZCA9PT0gJ3NtYWxsJ1wiIFtAZWFzZUluT3V0XT1cIidpbidcIj5cclxuICAgICAgICAgIDxtb3NhaWMtdmlld1xyXG4gICAgICAgICAgICBbcGljdHVyZXNMaXN0XT1cInZtLnBpY3R1cmVzTGlzdFwiXHJcbiAgICAgICAgICAgIChwaWN0dXJlc0xpc3RDaGFuZ2UpPVwib25QaWN0dXJlc0xpc3RDaGFuZ2Uodm0ucGljdHVyZXNMaXN0KVwiXHJcbiAgICAgICAgICAgIFt0YWJsZUZpbHRlcnNdPVwidm0udGFibGVGaWx0ZXJzXCJcclxuICAgICAgICAgICAgKGZpbHRlcnNDaGFuZ2UpPVwic2VhcmNoSW1hZ2VzUGFyYW1ldGVycyQubmV4dChnZXRQYXJhbXModm0udGFibGVGaWx0ZXJzKSk7XCJcclxuICAgICAgICAgICAgWyhkaXNhYmxlKV09XCJkaXNhYmxlXCJcclxuICAgICAgICAgICAgKHBpY3R1cmVOYW1lQ2hhbmdlKT1cIm9uUmVuYW1lUGljdHVyZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKHN3aXRjaERpc3BsYXlXaW5kb3cpPVwic3dpdGNoRGlzcGxheVdpbmRvd01vc2FpYygpXCJcclxuICAgICAgICAgICAgW25iRmFrZUltZ109XCJuYkZha2VJbWdcIlxyXG4gICAgICAgICAgICBbc3RhdGVEaXNwbGF5ZWRdPVwic3RhdGVEaXNwbGF5ZWRcIlxyXG4gICAgICAgICAgICBbdGFiRGlzcGxheWVkXT1cInRhYkRpc3BsYXllZFwiXHJcbiAgICAgICAgICAgIFtkaXNwbGF5UGV4ZWxzUmVzdWx0c109XCJ2bS5kaXNwbGF5UGV4ZWxzUmVzdWx0c1wiXHJcbiAgICAgICAgICAgIFtpc0xvYWRpbmddPVwidm0uaXNMb2FkaW5nXCJcclxuICAgICAgICAgICAgW2Z1bGxTaXplXT1cImZ1bGxTaXplXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgIDwvbW9zYWljLXZpZXc+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJsaXN0RGlzcGxheWVkICYmIHN0YXRlRGlzcGxheWVkICE9PSAnc21hbGwnXCIgW0BlYXNlSW5PdXRdPVwiJ2luJ1wiPlxyXG4gICAgICAgICAgPHRhYmxlLXZpZXdcclxuICAgICAgICAgICAgW3BpY3R1cmVzTGlzdF09XCJ2bS5waWN0dXJlc0xpc3RcIlxyXG4gICAgICAgICAgICAocGljdHVyZXNMaXN0Q2hhbmdlKT1cIm9uUGljdHVyZXNMaXN0Q2hhbmdlKHZtLnBpY3R1cmVzTGlzdClcIlxyXG4gICAgICAgICAgICBbdGFibGVGaWx0ZXJzXT1cInZtLnRhYmxlRmlsdGVyc1wiXHJcbiAgICAgICAgICAgIChmaWx0ZXJzQ2hhbmdlKT1cInNlYXJjaEltYWdlc1BhcmFtZXRlcnMkLm5leHQoZ2V0UGFyYW1zKHZtLnRhYmxlRmlsdGVycykpO1wiXHJcbiAgICAgICAgICAgIFsoZGlzYWJsZSldPVwiZGlzYWJsZVwiXHJcbiAgICAgICAgICAgIChwaWN0dXJlTmFtZUNoYW5nZSk9XCJvblJlbmFtZVBpY3R1cmUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIFtkaXNwbGF5UGV4ZWxzUmVzdWx0c109XCJ2bS5kaXNwbGF5UGV4ZWxzUmVzdWx0c1wiXHJcbiAgICAgICAgICAgIFtzdGF0ZURpc3BsYXllZF09XCJzdGF0ZURpc3BsYXllZFwiXHJcbiAgICAgICAgICAgIFtpc0xvYWRpbmddPVwidm0uaXNMb2FkaW5nXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgPC90YWJsZS12aWV3PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy1zY3JvbGxiYXI+XHJcblxyXG4gIDwhLS0gUGV4ZWxzIFNlY3Rpb24gLSBXaGVuIG5vIGltZyBmb3VuZCAtLT5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cInZtLmRpc3BsYXlQZXhlbHNSZXN1bHRzXCJcclxuICAgIGNsYXNzPVwiaW1hZ2VzLXZpZXctLXBleGVsc1wiXHJcbiAgICBbQGVhc2VJbk91dF09XCInaW4nXCI+XHJcbiAgICA8cGV4ZWxzLWxpYlxyXG4gICAgICBbc2VhcmNoVmFsdWVdPVwidm0udGFibGVGaWx0ZXJzLnNlYXJjaFZhbHVlXCJcclxuICAgICAgW2Rpc2FibGVTZWFyY2hdPVwidHJ1ZVwiXHJcbiAgICA+XHJcbiAgICA8L3BleGVscy1saWI+XHJcbiAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG4iXX0=
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
-
import { ImgEventService } from '../../../../services/img-event.service';
|
|
3
|
-
import { HttpClient } from '@angular/common/http';
|
|
4
|
-
import { ImgManagerService } from '../../../../services/img-manager.service';
|
|
5
|
-
import { ImgSelectionService } from '../../../../services/img-selection.service';
|
|
6
|
-
import { ImgCDNService } from '../../../../services/config/img-cdn.service';
|
|
7
|
-
import { TranslateService } from '@ngx-translate/core';
|
|
8
|
-
import { ImagesActionHandler } from '../../images-actions-handler';
|
|
9
|
-
import { easeInOut } from '../../../../animations/easeInOut/ease-in-out.animation';
|
|
10
|
-
import { AlertService } from '../../../../services/alert.service';
|
|
11
|
-
import { ApiService } from '../../../../services/api.service';
|
|
12
|
-
import * as i0 from "@angular/core";
|
|
13
|
-
import * as i1 from "../../../../services/img-manager.service";
|
|
14
|
-
import * as i2 from "../../../../services/img-selection.service";
|
|
15
|
-
import * as i3 from "@angular/common/http";
|
|
16
|
-
import * as i4 from "../../../../services/config/img-cdn.service";
|
|
17
|
-
import * as i5 from "../../../../services/img-event.service";
|
|
18
|
-
import * as i6 from "../../../../services/alert.service";
|
|
19
|
-
import * as i7 from "@ngx-translate/core";
|
|
20
|
-
import * as i8 from "../../../../services/api.service";
|
|
21
|
-
import * as i9 from "@angular/common";
|
|
22
|
-
import * as i10 from "@angular/forms";
|
|
23
|
-
import * as i11 from "../../../../directives/loading.directive";
|
|
24
|
-
import * as i12 from "../../../../pipes/images/img-src.pipe";
|
|
25
|
-
export class ImgCardComponent extends ImagesActionHandler {
|
|
26
|
-
constructor(imgManager, imgSelectionService, http, imgCDNService, imgEventCardService, alertService, translateService, apiService) {
|
|
27
|
-
super(imgManager, imgSelectionService, http, imgCDNService, imgEventCardService, alertService, translateService, apiService);
|
|
28
|
-
this.focusInput = false;
|
|
29
|
-
this.toggleImgSelected = new EventEmitter();
|
|
30
|
-
this.switchDisplayWindow = new EventEmitter();
|
|
31
|
-
this.isUploadSection = false;
|
|
32
|
-
this.activeConfirmDelete = false;
|
|
33
|
-
}
|
|
34
|
-
ngOnInit() {
|
|
35
|
-
this.isUploadSection = this.tabDisplayed === 'img-upload';
|
|
36
|
-
}
|
|
37
|
-
displayLargeWindow() {
|
|
38
|
-
this.switchDisplayWindow.emit(true);
|
|
39
|
-
}
|
|
40
|
-
onToggleImgSelected() {
|
|
41
|
-
this.toggleImgSelected.next();
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
ImgCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ImgCardComponent, deps: [{ token: i1.ImgManagerService }, { token: i2.ImgSelectionService }, { token: i3.HttpClient }, { token: i4.ImgCDNService }, { token: i5.ImgEventService }, { token: i6.AlertService }, { token: i7.TranslateService }, { token: i8.ApiService }], target: i0.ɵɵFactoryTarget.Component });
|
|
45
|
-
ImgCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ImgCardComponent, selector: "img-card", inputs: { tabDisplayed: "tabDisplayed", fullSize: "fullSize", picture: "picture", index: "index" }, outputs: { toggleImgSelected: "toggleImgSelected", switchDisplayWindow: "switchDisplayWindow" }, usesInheritance: true, ngImport: i0, template: "<div class=\"addCssPriority\" [@easeInOut]=\"'in'\" [ngClass]=\"{ 'fullSize': fullSize }\">\r\n <div class=\"img-card\">\r\n <div class=\"img-card__container\"\r\n [ngClass]=\"{\r\n 'smallDisplay': stateDisplayed === 'small' || isUploadSection,\r\n 'imgSelected': picture.selected,\r\n 'deletion': picture.deleted}\">\r\n <img\r\n class=\"img-card__container__img\"\r\n [src]=\"picture.file_name | imgSrc : '400'\"\r\n [alt]=\"picture.display_name\"\r\n (click)=\"onToggleImgSelected()\"\r\n (error)=\"picture.imgNotLoaded=true;onPictureNotLoading($event);\"\r\n />\r\n <div\r\n class=\"img-card__container__config\"\r\n *ngIf=\"!picture.deleted && stateDisplayed !== 'small'\"\r\n >\r\n <button type=\"button\" class=\"size\"><i class=\"fal fa-image-polaroid\"></i><span>{{picture.raw_height}}x{{picture.raw_width}}</span></button>\r\n <button type=\"button\" class=\"dl\" (click)=\"onDownloadImg(picture.display_name, picture.file_name)\"><i class=\"fal fa-download\"></i><span>{{ 'ImgManager.ImgCard.download' | translate }}</span></button>\r\n <button type=\"button\" class=\"edit\" (click)=\"onEdit(picture)\"><i class=\"far fa-crop-alt\"></i><span>{{ 'ImgManager.ImgCard.edit' | translate }}</span></button>\r\n <button type=\"button\" class=\"deleted\" (click)=\"activeConfirmDelete = true;\"><i class=\"fal fa-times\"></i><span>{{ 'ImgManager.ImgCard.del' | translate }}</span></button>\r\n <button type=\"button\" class=\"selected\" (click)=\"onToggleImgSelected()\" *ngIf=\"stateDisplayed !== 'window'\">\r\n <i *ngIf=\"!picture.selected\" class=\"fal fa-square\"></i>\r\n <i *ngIf=\"picture.selected\" class=\"fa-solid fa-check-square checked\"></i>\r\n <span>{{ 'ImgManager.ImgCard.select' | translate }}</span>\r\n </button>\r\n </div>\r\n <div\r\n class=\"img-card__container__config img-card__container__config--small\"\r\n *ngIf=\"!picture.deleted && stateDisplayed === 'small'\"\r\n >\r\n <button class=\"show-edit\" (click)=\"displayLargeWindow()\"><i class=\"fa-solid fa-edit\"></i></button>\r\n </div>\r\n <div class=\"img-card__container__delete\" [ngClass]=\"{ 'show' : activeConfirmDelete}\">\r\n <span>{{ 'ImgManager.ImgCard.confirmDeleteImg' | translate }}</span>\r\n <div>\r\n <button (click)=\"activeConfirmDelete = false;\">{{ 'no' | translate }}</button>\r\n <button (click)=\"onRemoveImg(picture);activeConfirmDelete = false;\">{{ 'yes' | translate }}</button>\r\n </div>\r\n </div>\r\n <div class=\"img-card__container__valid\" *ngIf=\"stateDisplayed === 'small' && tabDisplayed == 'img-upload'\">\r\n <i class=\"far fa-check\"></i>\r\n <span>{{ 'ImgManager.ImgCard.validImgSmall' | translate }}</span>\r\n </div>\r\n <div\r\n *ngIf=\"picture.imgNotLoaded\"\r\n class=\"img-card__container__overlay\"\r\n [ngClass]=\"{'img-card__container__overlay--smallDisplay': stateDisplayed === 'small' || isUploadSection}\">\r\n <i (click)=\"onToggleImgSelected()\" class=\"fad fa-folder-times\"></i>\r\n </div>\r\n <span btnLoadingAnim class=\"btnLoadingAnnimation\" *ngIf=\"picture.deleted\"></span>\r\n\r\n </div>\r\n <div\r\n class=\"img-card__nameContainer\"\r\n [ngClass]=\"{'smallNameDisplay': stateDisplayed === 'small' || isUploadSection, 'focus': focusInput}\">\r\n <input\r\n type=\"text\"\r\n class=\"wzImgMngInput img-card__nameContainer__name\"\r\n [(ngModel)]=\"picture.display_name\"\r\n (ngModelChange)=\"onNameChange(picture.id_file)\"\r\n [ngModelOptions]=\"{standalone: true, updateOn: 'blur'}\"\r\n (focus)=\"previousName=picture.display_name;focusInput = true;\"\r\n (blur)=\"focusInput = false;\"\r\n >\r\n <span>{{picture.display_name}}</span>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i11.LoadingDirective, selector: "[btnLoadingAnim]" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "pipe", type: i12.ImageSrcPipe, name: "imgSrc" }], animations: [
|
|
46
|
-
easeInOut
|
|
47
|
-
] });
|
|
48
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ImgCardComponent, decorators: [{
|
|
49
|
-
type: Component,
|
|
50
|
-
args: [{ selector: 'img-card', animations: [
|
|
51
|
-
easeInOut
|
|
52
|
-
], template: "<div class=\"addCssPriority\" [@easeInOut]=\"'in'\" [ngClass]=\"{ 'fullSize': fullSize }\">\r\n <div class=\"img-card\">\r\n <div class=\"img-card__container\"\r\n [ngClass]=\"{\r\n 'smallDisplay': stateDisplayed === 'small' || isUploadSection,\r\n 'imgSelected': picture.selected,\r\n 'deletion': picture.deleted}\">\r\n <img\r\n class=\"img-card__container__img\"\r\n [src]=\"picture.file_name | imgSrc : '400'\"\r\n [alt]=\"picture.display_name\"\r\n (click)=\"onToggleImgSelected()\"\r\n (error)=\"picture.imgNotLoaded=true;onPictureNotLoading($event);\"\r\n />\r\n <div\r\n class=\"img-card__container__config\"\r\n *ngIf=\"!picture.deleted && stateDisplayed !== 'small'\"\r\n >\r\n <button type=\"button\" class=\"size\"><i class=\"fal fa-image-polaroid\"></i><span>{{picture.raw_height}}x{{picture.raw_width}}</span></button>\r\n <button type=\"button\" class=\"dl\" (click)=\"onDownloadImg(picture.display_name, picture.file_name)\"><i class=\"fal fa-download\"></i><span>{{ 'ImgManager.ImgCard.download' | translate }}</span></button>\r\n <button type=\"button\" class=\"edit\" (click)=\"onEdit(picture)\"><i class=\"far fa-crop-alt\"></i><span>{{ 'ImgManager.ImgCard.edit' | translate }}</span></button>\r\n <button type=\"button\" class=\"deleted\" (click)=\"activeConfirmDelete = true;\"><i class=\"fal fa-times\"></i><span>{{ 'ImgManager.ImgCard.del' | translate }}</span></button>\r\n <button type=\"button\" class=\"selected\" (click)=\"onToggleImgSelected()\" *ngIf=\"stateDisplayed !== 'window'\">\r\n <i *ngIf=\"!picture.selected\" class=\"fal fa-square\"></i>\r\n <i *ngIf=\"picture.selected\" class=\"fa-solid fa-check-square checked\"></i>\r\n <span>{{ 'ImgManager.ImgCard.select' | translate }}</span>\r\n </button>\r\n </div>\r\n <div\r\n class=\"img-card__container__config img-card__container__config--small\"\r\n *ngIf=\"!picture.deleted && stateDisplayed === 'small'\"\r\n >\r\n <button class=\"show-edit\" (click)=\"displayLargeWindow()\"><i class=\"fa-solid fa-edit\"></i></button>\r\n </div>\r\n <div class=\"img-card__container__delete\" [ngClass]=\"{ 'show' : activeConfirmDelete}\">\r\n <span>{{ 'ImgManager.ImgCard.confirmDeleteImg' | translate }}</span>\r\n <div>\r\n <button (click)=\"activeConfirmDelete = false;\">{{ 'no' | translate }}</button>\r\n <button (click)=\"onRemoveImg(picture);activeConfirmDelete = false;\">{{ 'yes' | translate }}</button>\r\n </div>\r\n </div>\r\n <div class=\"img-card__container__valid\" *ngIf=\"stateDisplayed === 'small' && tabDisplayed == 'img-upload'\">\r\n <i class=\"far fa-check\"></i>\r\n <span>{{ 'ImgManager.ImgCard.validImgSmall' | translate }}</span>\r\n </div>\r\n <div\r\n *ngIf=\"picture.imgNotLoaded\"\r\n class=\"img-card__container__overlay\"\r\n [ngClass]=\"{'img-card__container__overlay--smallDisplay': stateDisplayed === 'small' || isUploadSection}\">\r\n <i (click)=\"onToggleImgSelected()\" class=\"fad fa-folder-times\"></i>\r\n </div>\r\n <span btnLoadingAnim class=\"btnLoadingAnnimation\" *ngIf=\"picture.deleted\"></span>\r\n\r\n </div>\r\n <div\r\n class=\"img-card__nameContainer\"\r\n [ngClass]=\"{'smallNameDisplay': stateDisplayed === 'small' || isUploadSection, 'focus': focusInput}\">\r\n <input\r\n type=\"text\"\r\n class=\"wzImgMngInput img-card__nameContainer__name\"\r\n [(ngModel)]=\"picture.display_name\"\r\n (ngModelChange)=\"onNameChange(picture.id_file)\"\r\n [ngModelOptions]=\"{standalone: true, updateOn: 'blur'}\"\r\n (focus)=\"previousName=picture.display_name;focusInput = true;\"\r\n (blur)=\"focusInput = false;\"\r\n >\r\n <span>{{picture.display_name}}</span>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n" }]
|
|
53
|
-
}], ctorParameters: function () { return [{ type: i1.ImgManagerService }, { type: i2.ImgSelectionService }, { type: i3.HttpClient }, { type: i4.ImgCDNService }, { type: i5.ImgEventService }, { type: i6.AlertService }, { type: i7.TranslateService }, { type: i8.ApiService }]; }, propDecorators: { tabDisplayed: [{
|
|
54
|
-
type: Input
|
|
55
|
-
}], fullSize: [{
|
|
56
|
-
type: Input
|
|
57
|
-
}], picture: [{
|
|
58
|
-
type: Input
|
|
59
|
-
}], index: [{
|
|
60
|
-
type: Input
|
|
61
|
-
}], toggleImgSelected: [{
|
|
62
|
-
type: Output
|
|
63
|
-
}], switchDisplayWindow: [{
|
|
64
|
-
type: Output
|
|
65
|
-
}] } });
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1nLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd3otaW1nLW1hbmFnZXIvc3JjL2xpYi9jb21wb25lbnRzL2ltYWdlcy12aWV3L21vc2FpYy12aWV3L2ltZy1jYXJkL2ltZy1jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3d6LWltZy1tYW5hZ2VyL3NyYy9saWIvY29tcG9uZW50cy9pbWFnZXMtdmlldy9tb3NhaWMtdmlldy9pbWctY2FyZC9pbWctY2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUV6RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDN0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDakYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3REFBd0QsQ0FBQTtBQUVsRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7Ozs7Ozs7OztBQVM5RCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsbUJBQW1CO0lBcUJ2RCxZQUNFLFVBQTZCLEVBQzdCLG1CQUF3QyxFQUN4QyxJQUFnQixFQUNoQixhQUE0QixFQUM1QixtQkFBb0MsRUFDcEMsWUFBMEIsRUFDMUIsZ0JBQWtDLEVBQ2xDLFVBQXNCO1FBRXRCLEtBQUssQ0FDSCxVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLElBQUksRUFDSixhQUFhLEVBQ2IsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsVUFBVSxDQUNYLENBQUM7UUE5QkosZUFBVSxHQUFHLEtBQUssQ0FBQztRQUduQixzQkFBaUIsR0FBdUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUczRCx3QkFBbUIsR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVoRSxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUNqQyx3QkFBbUIsR0FBRyxLQUFLLENBQUM7SUFzQjVCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxLQUFLLFlBQVksQ0FBQztJQUM1RCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEMsQ0FBQzs7OEdBckRVLGdCQUFnQjtrR0FBaEIsZ0JBQWdCLDRRQ3JCN0IsK3JJQXVFQSwyL0JEdERjO1FBQ1YsU0FBUztLQUNWOzRGQUVVLGdCQUFnQjtrQkFQNUIsU0FBUzsrQkFDRSxVQUFVLGNBRVI7d0JBQ1YsU0FBUztxQkFDVjtnVEFLRCxZQUFZO3NCQURYLEtBQUs7Z0JBR04sUUFBUTtzQkFEUCxLQUFLO2dCQUdOLE9BQU87c0JBRE4sS0FBSztnQkFHTixLQUFLO3NCQURKLEtBQUs7Z0JBS04saUJBQWlCO3NCQURoQixNQUFNO2dCQUlQLG1CQUFtQjtzQkFEbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSW1nRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvaW1nLWV2ZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJbWdQaWN0dXJlRFRPIH0gZnJvbSAnLi4vLi4vLi4vLi4vZHRvL2ltZy1tYW5hZ2VyLmR0byc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEltZ01hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvaW1nLW1hbmFnZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEltZ1NlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9pbWctc2VsZWN0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJbWdDRE5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvY29uZmlnL2ltZy1jZG4uc2VydmljZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgSW1hZ2VzQWN0aW9uSGFuZGxlciB9IGZyb20gJy4uLy4uL2ltYWdlcy1hY3Rpb25zLWhhbmRsZXInO1xyXG5pbXBvcnQgeyBlYXNlSW5PdXQgfSBmcm9tICcuLi8uLi8uLi8uLi9hbmltYXRpb25zL2Vhc2VJbk91dC9lYXNlLWluLW91dC5hbmltYXRpb24nXHJcbmltcG9ydCB7IHRhYkRpc3BsYXllZCB9IGZyb20gJy4uLy4uLy4uLy4uL2R0by9leHBvcnQtZHRvcy5hcGknO1xyXG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9hbGVydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXBpU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2FwaS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaW1nLWNhcmQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pbWctY2FyZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgZWFzZUluT3V0XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW1nQ2FyZENvbXBvbmVudCBleHRlbmRzIEltYWdlc0FjdGlvbkhhbmRsZXIgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHRhYkRpc3BsYXllZDogdGFiRGlzcGxheWVkO1xyXG4gIEBJbnB1dCgpXHJcbiAgZnVsbFNpemU6IGJvb2xlYW47XHJcbiAgQElucHV0KClcclxuICBwaWN0dXJlOiBJbWdQaWN0dXJlRFRPO1xyXG4gIEBJbnB1dCgpXHJcbiAgaW5kZXg6IG51bWJlcjtcclxuICBmb2N1c0lucHV0ID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHRvZ2dsZUltZ1NlbGVjdGVkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHN3aXRjaERpc3BsYXlXaW5kb3c6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgaXNVcGxvYWRTZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgYWN0aXZlQ29uZmlybURlbGV0ZSA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGltZ01hbmFnZXI6IEltZ01hbmFnZXJTZXJ2aWNlLFxyXG4gICAgaW1nU2VsZWN0aW9uU2VydmljZTogSW1nU2VsZWN0aW9uU2VydmljZSxcclxuICAgIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBpbWdDRE5TZXJ2aWNlOiBJbWdDRE5TZXJ2aWNlLFxyXG4gICAgaW1nRXZlbnRDYXJkU2VydmljZTogSW1nRXZlbnRTZXJ2aWNlLFxyXG4gICAgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXHJcbiAgICB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgYXBpU2VydmljZTogQXBpU2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoXHJcbiAgICAgIGltZ01hbmFnZXIsXHJcbiAgICAgIGltZ1NlbGVjdGlvblNlcnZpY2UsXHJcbiAgICAgIGh0dHAsXHJcbiAgICAgIGltZ0NETlNlcnZpY2UsXHJcbiAgICAgIGltZ0V2ZW50Q2FyZFNlcnZpY2UsXHJcbiAgICAgIGFsZXJ0U2VydmljZSxcclxuICAgICAgdHJhbnNsYXRlU2VydmljZSxcclxuICAgICAgYXBpU2VydmljZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc1VwbG9hZFNlY3Rpb24gPSB0aGlzLnRhYkRpc3BsYXllZCA9PT0gJ2ltZy11cGxvYWQnO1xyXG4gIH1cclxuXHJcbiAgZGlzcGxheUxhcmdlV2luZG93KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zd2l0Y2hEaXNwbGF5V2luZG93LmVtaXQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBvblRvZ2dsZUltZ1NlbGVjdGVkKCkge1xyXG4gICAgdGhpcy50b2dnbGVJbWdTZWxlY3RlZC5uZXh0KCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJhZGRDc3NQcmlvcml0eVwiIFtAZWFzZUluT3V0XT1cIidpbidcIiBbbmdDbGFzc109XCJ7ICdmdWxsU2l6ZSc6IGZ1bGxTaXplIH1cIj5cclxuICA8ZGl2IGNsYXNzPVwiaW1nLWNhcmRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImltZy1jYXJkX19jb250YWluZXJcIlxyXG4gICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAnc21hbGxEaXNwbGF5Jzogc3RhdGVEaXNwbGF5ZWQgPT09ICdzbWFsbCcgfHwgaXNVcGxvYWRTZWN0aW9uLFxyXG4gICAgICAgICAgJ2ltZ1NlbGVjdGVkJzogcGljdHVyZS5zZWxlY3RlZCxcclxuICAgICAgICAgICdkZWxldGlvbic6IHBpY3R1cmUuZGVsZXRlZH1cIj5cclxuICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgY2xhc3M9XCJpbWctY2FyZF9fY29udGFpbmVyX19pbWdcIlxyXG4gICAgICAgICAgICBbc3JjXT1cInBpY3R1cmUuZmlsZV9uYW1lIHwgaW1nU3JjIDogJzQwMCdcIlxyXG4gICAgICAgICAgICBbYWx0XT1cInBpY3R1cmUuZGlzcGxheV9uYW1lXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uVG9nZ2xlSW1nU2VsZWN0ZWQoKVwiXHJcbiAgICAgICAgICAgIChlcnJvcik9XCJwaWN0dXJlLmltZ05vdExvYWRlZD10cnVlO29uUGljdHVyZU5vdExvYWRpbmcoJGV2ZW50KTtcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJpbWctY2FyZF9fY29udGFpbmVyX19jb25maWdcIlxyXG4gICAgICAgICAgICAqbmdJZj1cIiFwaWN0dXJlLmRlbGV0ZWQgJiYgc3RhdGVEaXNwbGF5ZWQgIT09ICdzbWFsbCdcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzaXplXCI+PGkgY2xhc3M9XCJmYWwgZmEtaW1hZ2UtcG9sYXJvaWRcIj48L2k+PHNwYW4+e3twaWN0dXJlLnJhd19oZWlnaHR9fXh7e3BpY3R1cmUucmF3X3dpZHRofX08L3NwYW4+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJkbFwiIChjbGljayk9XCJvbkRvd25sb2FkSW1nKHBpY3R1cmUuZGlzcGxheV9uYW1lLCBwaWN0dXJlLmZpbGVfbmFtZSlcIj48aSBjbGFzcz1cImZhbCBmYS1kb3dubG9hZFwiPjwvaT48c3Bhbj57eyAnSW1nTWFuYWdlci5JbWdDYXJkLmRvd25sb2FkJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImVkaXRcIiAoY2xpY2spPVwib25FZGl0KHBpY3R1cmUpXCI+PGkgY2xhc3M9XCJmYXIgZmEtY3JvcC1hbHRcIj48L2k+PHNwYW4+e3sgJ0ltZ01hbmFnZXIuSW1nQ2FyZC5lZGl0JyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImRlbGV0ZWRcIiAoY2xpY2spPVwiYWN0aXZlQ29uZmlybURlbGV0ZSA9IHRydWU7XCI+PGkgY2xhc3M9XCJmYWwgZmEtdGltZXNcIj48L2k+PHNwYW4+e3sgJ0ltZ01hbmFnZXIuSW1nQ2FyZC5kZWwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2VsZWN0ZWRcIiAoY2xpY2spPVwib25Ub2dnbGVJbWdTZWxlY3RlZCgpXCIgKm5nSWY9XCJzdGF0ZURpc3BsYXllZCAhPT0gJ3dpbmRvdydcIj5cclxuICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCIhcGljdHVyZS5zZWxlY3RlZFwiIGNsYXNzPVwiZmFsIGZhLXNxdWFyZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJwaWN0dXJlLnNlbGVjdGVkXCIgY2xhc3M9XCJmYS1zb2xpZCBmYS1jaGVjay1zcXVhcmUgY2hlY2tlZFwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgJ0ltZ01hbmFnZXIuSW1nQ2FyZC5zZWxlY3QnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiaW1nLWNhcmRfX2NvbnRhaW5lcl9fY29uZmlnIGltZy1jYXJkX19jb250YWluZXJfX2NvbmZpZy0tc21hbGxcIlxyXG4gICAgICAgICAgICAqbmdJZj1cIiFwaWN0dXJlLmRlbGV0ZWQgJiYgc3RhdGVEaXNwbGF5ZWQgPT09ICdzbWFsbCdcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2hvdy1lZGl0XCIgKGNsaWNrKT1cImRpc3BsYXlMYXJnZVdpbmRvdygpXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1lZGl0XCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1nLWNhcmRfX2NvbnRhaW5lcl9fZGVsZXRlXCIgW25nQ2xhc3NdPVwieyAnc2hvdycgOiAgYWN0aXZlQ29uZmlybURlbGV0ZX1cIj5cclxuICAgICAgICAgICAgPHNwYW4+e3sgJ0ltZ01hbmFnZXIuSW1nQ2FyZC5jb25maXJtRGVsZXRlSW1nJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJhY3RpdmVDb25maXJtRGVsZXRlID0gZmFsc2U7XCI+e3sgJ25vJyB8IHRyYW5zbGF0ZSB9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm9uUmVtb3ZlSW1nKHBpY3R1cmUpO2FjdGl2ZUNvbmZpcm1EZWxldGUgPSBmYWxzZTtcIj57eyAneWVzJyB8IHRyYW5zbGF0ZSB9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImltZy1jYXJkX19jb250YWluZXJfX3ZhbGlkXCIgKm5nSWY9XCJzdGF0ZURpc3BsYXllZCA9PT0gJ3NtYWxsJyAmJiB0YWJEaXNwbGF5ZWQgPT0gJ2ltZy11cGxvYWQnXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFyIGZhLWNoZWNrXCI+PC9pPlxyXG4gICAgICAgICAgICA8c3Bhbj57eyAnSW1nTWFuYWdlci5JbWdDYXJkLnZhbGlkSW1nU21hbGwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICpuZ0lmPVwicGljdHVyZS5pbWdOb3RMb2FkZWRcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImltZy1jYXJkX19jb250YWluZXJfX292ZXJsYXlcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ltZy1jYXJkX19jb250YWluZXJfX292ZXJsYXktLXNtYWxsRGlzcGxheSc6IHN0YXRlRGlzcGxheWVkID09PSAnc21hbGwnIHx8IGlzVXBsb2FkU2VjdGlvbn1cIj5cclxuICAgICAgICAgICAgICAgIDxpIChjbGljayk9XCJvblRvZ2dsZUltZ1NlbGVjdGVkKClcIiBjbGFzcz1cImZhZCBmYS1mb2xkZXItdGltZXNcIj48L2k+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxzcGFuIGJ0bkxvYWRpbmdBbmltIGNsYXNzPVwiYnRuTG9hZGluZ0FubmltYXRpb25cIiAqbmdJZj1cInBpY3R1cmUuZGVsZXRlZFwiPjwvc3Bhbj5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJpbWctY2FyZF9fbmFtZUNvbnRhaW5lclwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwieydzbWFsbE5hbWVEaXNwbGF5Jzogc3RhdGVEaXNwbGF5ZWQgPT09ICdzbWFsbCcgfHwgaXNVcGxvYWRTZWN0aW9uLCAnZm9jdXMnOiBmb2N1c0lucHV0fVwiPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgY2xhc3M9XCJ3ekltZ01uZ0lucHV0IGltZy1jYXJkX19uYW1lQ29udGFpbmVyX19uYW1lXCJcclxuICAgICAgICAgIFsobmdNb2RlbCldPVwicGljdHVyZS5kaXNwbGF5X25hbWVcIlxyXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25OYW1lQ2hhbmdlKHBpY3R1cmUuaWRfZmlsZSlcIlxyXG4gICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlLCB1cGRhdGVPbjogJ2JsdXInfVwiXHJcbiAgICAgICAgICAoZm9jdXMpPVwicHJldmlvdXNOYW1lPXBpY3R1cmUuZGlzcGxheV9uYW1lO2ZvY3VzSW5wdXQgPSB0cnVlO1wiXHJcbiAgICAgICAgICAoYmx1cik9XCJmb2N1c0lucHV0ID0gZmFsc2U7XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPHNwYW4+e3twaWN0dXJlLmRpc3BsYXlfbmFtZX19PC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|