ng-miam 3.3.2 → 3.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/ng-miam.umd.js +1844 -1111
- package/bundles/ng-miam.umd.js.map +1 -1
- package/bundles/ng-miam.umd.min.js +2 -2
- package/bundles/ng-miam.umd.min.js.map +1 -1
- package/esm2015/lib/_components/abstracts/abstract-recipe-card.component.js +1 -1
- package/esm2015/lib/_components/icon/icon.component.js +23 -6
- package/esm2015/lib/_components/recipe-filters/recipe-filters.component.js +94 -40
- package/esm2015/lib/_components/text-input/text-input.component.js +6 -4
- package/esm2015/lib/_models/article.js +43 -0
- package/esm2015/lib/_models/basket.js +2 -2
- package/esm2015/lib/_models/index.js +4 -1
- package/esm2015/lib/_models/ingredient.js +11 -7
- package/esm2015/lib/_models/package.js +14 -3
- package/esm2015/lib/_models/recipe.js +6 -2
- package/esm2015/lib/_models/user.js +10 -1
- package/esm2015/lib/_services/analytics.service.js +3 -3
- package/esm2015/lib/_services/articles.service.js +21 -0
- package/esm2015/lib/_services/baskets.service.js +2 -2
- package/esm2015/lib/_services/context.service.js +19 -1
- package/esm2015/lib/_services/groceries-lists.service.js +2 -2
- package/esm2015/lib/_services/index.js +3 -1
- package/esm2015/lib/_services/ingredients.service.js +2 -2
- package/esm2015/lib/_services/interceptor.service.js +2 -3
- package/esm2015/lib/_services/package.service.js +32 -9
- package/esm2015/lib/_services/recipe-events.service.js +2 -2
- package/esm2015/lib/_services/recipe-likes.service.js +6 -2
- package/esm2015/lib/_services/recipe-share.service.js +2 -2
- package/esm2015/lib/_services/recipes.service.js +2 -2
- package/esm2015/lib/_services/suppliers.service.js +2 -2
- package/esm2015/lib/_services/toastr.service.js +52 -0
- package/esm2015/lib/_services/user.service.js +64 -21
- package/esm2015/lib/_types/icon.enum.js +2 -1
- package/esm2015/lib/_web-components/catalog-article-card/catalog-article-card.component.js +71 -0
- package/esm2015/lib/_web-components/catalog-category/catalog-category.component.js +134 -92
- package/esm2015/lib/_web-components/catalog-header/catalog-header.component.js +51 -34
- package/esm2015/lib/_web-components/catalog-list/catalog-list.component.js +106 -61
- package/esm2015/lib/_web-components/catalog-recipe-card/catalog-recipe-card.component.js +65 -52
- package/esm2015/lib/_web-components/favorite-page/favorite-page.component.js +8 -6
- package/esm2015/lib/_web-components/index.js +2 -1
- package/esm2015/lib/_web-components/personal-recipes/personal-recipes.component.js +7 -5
- package/esm2015/lib/_web-components/recipe-card/recipe-card.component.js +73 -58
- package/esm2015/lib/_web-components/recipe-catalog/recipe-catalog.component.js +152 -92
- package/esm2015/lib/_web-components/recipe-details/recipe-details.component.js +355 -278
- package/esm2015/lib/_web-components/suggestion-card/suggestion-card.component.js +3 -6
- package/esm2015/lib/_web-components/web-components.module.js +17 -9
- package/esm2015/lib/environments/environment.js +6 -0
- package/esm2015/lib/ng-miam.module.js +4 -4
- package/fesm2015/ng-miam.js +1755 -1140
- package/fesm2015/ng-miam.js.map +1 -1
- package/lib/_components/abstracts/abstract-recipe-card.component.d.ts +1 -1
- package/lib/_components/recipe-filters/recipe-filters.component.d.ts +14 -4
- package/lib/_components/text-input/text-input.component.d.ts +2 -1
- package/lib/_models/article.d.ts +23 -0
- package/lib/_models/basket.d.ts +1 -2
- package/lib/_models/index.d.ts +3 -0
- package/lib/_models/ingredient.d.ts +2 -0
- package/lib/_models/package.d.ts +10 -3
- package/lib/_models/recipe.d.ts +2 -0
- package/lib/_models/user.d.ts +16 -1
- package/lib/_services/articles.service.d.ts +10 -0
- package/lib/_services/context.service.d.ts +14 -6
- package/lib/_services/index.d.ts +2 -0
- package/lib/_services/package.service.d.ts +6 -1
- package/lib/_services/toastr.service.d.ts +10 -0
- package/lib/_services/user.service.d.ts +12 -6
- package/lib/_types/icon.enum.d.ts +2 -1
- package/lib/_web-components/catalog-article-card/catalog-article-card.component.d.ts +8 -0
- package/lib/_web-components/catalog-category/catalog-category.component.d.ts +12 -7
- package/lib/_web-components/catalog-header/catalog-header.component.d.ts +5 -2
- package/lib/_web-components/catalog-list/catalog-list.component.d.ts +13 -6
- package/lib/_web-components/catalog-recipe-card/catalog-recipe-card.component.d.ts +1 -0
- package/lib/_web-components/favorite-page/favorite-page.component.d.ts +0 -1
- package/lib/_web-components/index.d.ts +1 -0
- package/lib/_web-components/personal-recipes/personal-recipes.component.d.ts +0 -1
- package/lib/_web-components/recipe-card/recipe-card.component.d.ts +1 -0
- package/lib/_web-components/recipe-catalog/recipe-catalog.component.d.ts +13 -4
- package/lib/_web-components/recipe-details/recipe-details.component.d.ts +19 -6
- package/lib/_web-components/suggestion-card/suggestion-card.component.d.ts +0 -1
- package/lib/_web-components/web-components.module.d.ts +13 -11
- package/lib/environments/environment.d.ts +5 -0
- package/miam-style.css +1 -1
- package/package.json +1 -1
- package/esm2015/lib/environment.js +0 -18
- package/lib/environment.d.ts +0 -5
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Component, ViewEncapsulation, ChangeDetectionStrategy, ViewChild, ChangeDetectorRef, ElementRef, ViewChildren, QueryList } from '@angular/core';
|
|
2
|
-
import { skipWhile, take } from 'rxjs/operators';
|
|
2
|
+
import { skipWhile, switchMap, take, tap } from 'rxjs/operators';
|
|
3
3
|
import { CatalogCategoryComponent } from '../catalog-category/catalog-category.component';
|
|
4
|
-
import { RecipeTypeService, SponsorService, PackageService, SuppliersService, RecipesService } from '../../_services';
|
|
4
|
+
import { RecipeTypeService, SponsorService, PackageService, SuppliersService, RecipesService, UserService } from '../../_services';
|
|
5
5
|
import { Icon } from '../../_types/icon.enum';
|
|
6
6
|
import { CatalogHeaderComponent } from '../catalog-header/catalog-header.component';
|
|
7
|
-
import { forkJoin } from 'rxjs';
|
|
7
|
+
import { combineLatest, forkJoin } from 'rxjs';
|
|
8
8
|
import { MediaMatcher } from '@angular/cdk/layout';
|
|
9
9
|
import * as i0 from "@angular/core";
|
|
10
10
|
import * as i1 from "../../_services";
|
|
@@ -18,94 +18,115 @@ import * as i8 from "../../_components/icon/icon.component";
|
|
|
18
18
|
import * as i9 from "../recipe-stepper/recipe-stepper.component";
|
|
19
19
|
const _c0 = ["miamCatalogTopAnchor"];
|
|
20
20
|
function RecipeCatalogComponent_div_2_div_4_Template(rf, ctx) { if (rf & 1) {
|
|
21
|
-
const
|
|
22
|
-
i0.ɵɵelementStart(0, "div",
|
|
23
|
-
i0.ɵɵelementStart(1, "
|
|
24
|
-
i0.ɵɵ
|
|
21
|
+
const _r10 = i0.ɵɵgetCurrentView();
|
|
22
|
+
i0.ɵɵelementStart(0, "div", 12);
|
|
23
|
+
i0.ɵɵelementStart(1, "span");
|
|
24
|
+
i0.ɵɵtext(2, "Une petite question : Avez-vous des enfants ?");
|
|
25
|
+
i0.ɵɵelementEnd();
|
|
26
|
+
i0.ɵɵelementStart(3, "div", 13);
|
|
27
|
+
i0.ɵɵelementStart(4, "button", 14);
|
|
28
|
+
i0.ɵɵlistener("click", function RecipeCatalogComponent_div_2_div_4_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r10); const ctx_r9 = i0.ɵɵnextContext(2); return ctx_r9.setUserPreference("has_children", true); });
|
|
29
|
+
i0.ɵɵtext(5, "Oui");
|
|
30
|
+
i0.ɵɵelementEnd();
|
|
31
|
+
i0.ɵɵelementStart(6, "button", 14);
|
|
32
|
+
i0.ɵɵlistener("click", function RecipeCatalogComponent_div_2_div_4_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r10); const ctx_r11 = i0.ɵɵnextContext(2); return ctx_r11.setUserPreference("has_children", false); });
|
|
33
|
+
i0.ɵɵtext(7, "Non");
|
|
34
|
+
i0.ɵɵelementEnd();
|
|
35
|
+
i0.ɵɵelementEnd();
|
|
36
|
+
i0.ɵɵelementEnd();
|
|
37
|
+
} }
|
|
38
|
+
function RecipeCatalogComponent_div_2_div_5_Template(rf, ctx) { if (rf & 1) {
|
|
39
|
+
const _r13 = i0.ɵɵgetCurrentView();
|
|
40
|
+
i0.ɵɵelementStart(0, "div", 15);
|
|
41
|
+
i0.ɵɵelementStart(1, "ng-miam-catalog-list", 16);
|
|
42
|
+
i0.ɵɵlistener("retrievedRecipes", function RecipeCatalogComponent_div_2_div_5_Template_ng_miam_catalog_list_retrievedRecipes_1_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r12 = i0.ɵɵnextContext(2); return ctx_r12.changeHeaderImage($event); })("filterRemoved", function RecipeCatalogComponent_div_2_div_5_Template_ng_miam_catalog_list_filterRemoved_1_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r14 = i0.ɵɵnextContext(2); return ctx_r14.removeFilter($event); })("recipeActionTriggered", function RecipeCatalogComponent_div_2_div_5_Template_ng_miam_catalog_list_recipeActionTriggered_1_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r15 = i0.ɵɵnextContext(2); return ctx_r15.manageRecipeAction($event); });
|
|
25
43
|
i0.ɵɵelementEnd();
|
|
26
44
|
i0.ɵɵelementEnd();
|
|
27
45
|
} if (rf & 2) {
|
|
28
|
-
const
|
|
46
|
+
const ctx_r5 = i0.ɵɵnextContext(2);
|
|
29
47
|
i0.ɵɵadvance(1);
|
|
30
|
-
i0.ɵɵproperty("filters",
|
|
48
|
+
i0.ɵɵproperty("filters", ctx_r5.filters)("randomMode", true);
|
|
31
49
|
} }
|
|
32
|
-
function
|
|
33
|
-
const
|
|
34
|
-
i0.ɵɵelementStart(0, "ng-miam-catalog-category",
|
|
35
|
-
i0.ɵɵlistener("displayList", function
|
|
50
|
+
function RecipeCatalogComponent_div_2_ng_template_6_div_0_ng_miam_catalog_category_1_Template(rf, ctx) { if (rf & 1) {
|
|
51
|
+
const _r20 = i0.ɵɵgetCurrentView();
|
|
52
|
+
i0.ɵɵelementStart(0, "ng-miam-catalog-category", 20);
|
|
53
|
+
i0.ɵɵlistener("displayList", function RecipeCatalogComponent_div_2_ng_template_6_div_0_ng_miam_catalog_category_1_Template_ng_miam_catalog_category_displayList_0_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r19 = i0.ɵɵnextContext(4); return ctx_r19.categoryTitleClicked($event); });
|
|
36
54
|
i0.ɵɵelementEnd();
|
|
37
55
|
} if (rf & 2) {
|
|
38
|
-
const
|
|
39
|
-
i0.ɵɵproperty("title",
|
|
56
|
+
const category_r18 = ctx.$implicit;
|
|
57
|
+
i0.ɵɵproperty("title", category_r18.title)("filters", category_r18.filters);
|
|
40
58
|
} }
|
|
41
|
-
function
|
|
42
|
-
i0.ɵɵelementStart(0, "div",
|
|
43
|
-
i0.ɵɵtemplate(1,
|
|
59
|
+
function RecipeCatalogComponent_div_2_ng_template_6_div_0_Template(rf, ctx) { if (rf & 1) {
|
|
60
|
+
i0.ɵɵelementStart(0, "div", 18);
|
|
61
|
+
i0.ɵɵtemplate(1, RecipeCatalogComponent_div_2_ng_template_6_div_0_ng_miam_catalog_category_1_Template, 1, 2, "ng-miam-catalog-category", 19);
|
|
44
62
|
i0.ɵɵelementEnd();
|
|
45
63
|
} if (rf & 2) {
|
|
46
|
-
const
|
|
64
|
+
const ctx_r16 = i0.ɵɵnextContext(3);
|
|
47
65
|
i0.ɵɵadvance(1);
|
|
48
|
-
i0.ɵɵproperty("ngForOf",
|
|
66
|
+
i0.ɵɵproperty("ngForOf", ctx_r16.categories);
|
|
49
67
|
} }
|
|
50
|
-
function
|
|
51
|
-
i0.ɵɵtemplate(0,
|
|
68
|
+
function RecipeCatalogComponent_div_2_ng_template_6_Template(rf, ctx) { if (rf & 1) {
|
|
69
|
+
i0.ɵɵtemplate(0, RecipeCatalogComponent_div_2_ng_template_6_div_0_Template, 2, 1, "div", 17);
|
|
52
70
|
} if (rf & 2) {
|
|
53
|
-
const
|
|
54
|
-
i0.ɵɵproperty("ngIf",
|
|
71
|
+
const ctx_r7 = i0.ɵɵnextContext(2);
|
|
72
|
+
i0.ɵɵproperty("ngIf", ctx_r7.categories.length > 0);
|
|
55
73
|
} }
|
|
56
|
-
function
|
|
57
|
-
const
|
|
58
|
-
i0.ɵɵelementStart(0, "div",
|
|
59
|
-
i0.ɵɵlistener("click", function
|
|
60
|
-
i0.ɵɵelement(1, "ng-miam-icon",
|
|
74
|
+
function RecipeCatalogComponent_div_2_div_8_Template(rf, ctx) { if (rf & 1) {
|
|
75
|
+
const _r22 = i0.ɵɵgetCurrentView();
|
|
76
|
+
i0.ɵɵelementStart(0, "div", 21);
|
|
77
|
+
i0.ɵɵlistener("click", function RecipeCatalogComponent_div_2_div_8_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r22); const ctx_r21 = i0.ɵɵnextContext(2); return ctx_r21.returnToTop(); });
|
|
78
|
+
i0.ɵɵelement(1, "ng-miam-icon", 22);
|
|
61
79
|
i0.ɵɵelementEnd();
|
|
62
80
|
} if (rf & 2) {
|
|
63
|
-
const
|
|
81
|
+
const ctx_r8 = i0.ɵɵnextContext(2);
|
|
64
82
|
i0.ɵɵadvance(1);
|
|
65
|
-
i0.ɵɵproperty("iconName",
|
|
83
|
+
i0.ɵɵproperty("iconName", ctx_r8.icon.ChevronDown);
|
|
66
84
|
} }
|
|
67
85
|
const _c1 = function (a0) { return { "filter-collapsed": a0 }; };
|
|
68
86
|
function RecipeCatalogComponent_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
69
|
-
const
|
|
87
|
+
const _r24 = i0.ɵɵgetCurrentView();
|
|
70
88
|
i0.ɵɵelementStart(0, "div", 4);
|
|
71
|
-
i0.ɵɵlistener("scroll", function RecipeCatalogComponent_div_2_Template_div_scroll_0_listener() { i0.ɵɵrestoreView(
|
|
89
|
+
i0.ɵɵlistener("scroll", function RecipeCatalogComponent_div_2_Template_div_scroll_0_listener() { i0.ɵɵrestoreView(_r24); const ctx_r23 = i0.ɵɵnextContext(); return ctx_r23.displayReturnTopButton(); }, false, i0.ɵɵresolveWindow);
|
|
72
90
|
i0.ɵɵelementStart(1, "ng-miam-recipe-filters", 5);
|
|
73
|
-
i0.ɵɵlistener("filterReset", function RecipeCatalogComponent_div_2_Template_ng_miam_recipe_filters_filterReset_1_listener() { i0.ɵɵrestoreView(
|
|
91
|
+
i0.ɵɵlistener("filterReset", function RecipeCatalogComponent_div_2_Template_ng_miam_recipe_filters_filterReset_1_listener() { i0.ɵɵrestoreView(_r24); const ctx_r25 = i0.ɵɵnextContext(); return ctx_r25.resetFilters(); })("filterChanged", function RecipeCatalogComponent_div_2_Template_ng_miam_recipe_filters_filterChanged_1_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r26 = i0.ɵɵnextContext(); return ctx_r26.updateFilters($event); })("filterCollapsed", function RecipeCatalogComponent_div_2_Template_ng_miam_recipe_filters_filterCollapsed_1_listener() { i0.ɵɵrestoreView(_r24); const ctx_r27 = i0.ɵɵnextContext(); return ctx_r27.onFilterCollapsed(); })("preferencesChanged", function RecipeCatalogComponent_div_2_Template_ng_miam_recipe_filters_preferencesChanged_1_listener() { i0.ɵɵrestoreView(_r24); const ctx_r28 = i0.ɵɵnextContext(); return ctx_r28.reloadPackages(); });
|
|
74
92
|
i0.ɵɵelementEnd();
|
|
75
93
|
i0.ɵɵelementStart(2, "div", 6);
|
|
76
94
|
i0.ɵɵelementStart(3, "ng-miam-catalog-header", 7);
|
|
77
|
-
i0.ɵɵlistener("returnButtonPressed", function RecipeCatalogComponent_div_2_Template_ng_miam_catalog_header_returnButtonPressed_3_listener() { i0.ɵɵrestoreView(
|
|
95
|
+
i0.ɵɵlistener("returnButtonPressed", function RecipeCatalogComponent_div_2_Template_ng_miam_catalog_header_returnButtonPressed_3_listener() { i0.ɵɵrestoreView(_r24); const ctx_r29 = i0.ɵɵnextContext(); return ctx_r29.returnToHomePage(); })("searchStringChanged", function RecipeCatalogComponent_div_2_Template_ng_miam_catalog_header_searchStringChanged_3_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r30 = i0.ɵɵnextContext(); return ctx_r30.updateSearch($event); });
|
|
78
96
|
i0.ɵɵelementEnd();
|
|
79
|
-
i0.ɵɵtemplate(4, RecipeCatalogComponent_div_2_div_4_Template,
|
|
80
|
-
i0.ɵɵtemplate(5,
|
|
81
|
-
i0.ɵɵtemplate(
|
|
97
|
+
i0.ɵɵtemplate(4, RecipeCatalogComponent_div_2_div_4_Template, 8, 0, "div", 8);
|
|
98
|
+
i0.ɵɵtemplate(5, RecipeCatalogComponent_div_2_div_5_Template, 2, 2, "div", 9);
|
|
99
|
+
i0.ɵɵtemplate(6, RecipeCatalogComponent_div_2_ng_template_6_Template, 1, 1, "ng-template", null, 10, i0.ɵɵtemplateRefExtractor);
|
|
100
|
+
i0.ɵɵtemplate(8, RecipeCatalogComponent_div_2_div_8_Template, 2, 1, "div", 11);
|
|
82
101
|
i0.ɵɵelementEnd();
|
|
83
102
|
i0.ɵɵelementEnd();
|
|
84
103
|
} if (rf & 2) {
|
|
85
|
-
const
|
|
104
|
+
const _r6 = i0.ɵɵreference(7);
|
|
86
105
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
87
106
|
i0.ɵɵadvance(1);
|
|
88
107
|
i0.ɵɵproperty("filters", ctx_r1.filters)("mobileFixed", ctx_r1.returnTopButtonShouldBeDisplayed)("filterToRemove", ctx_r1.filterToRemove);
|
|
89
108
|
i0.ɵɵadvance(1);
|
|
90
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(
|
|
109
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(11, _c1, ctx_r1.isFilterCollapsed));
|
|
91
110
|
i0.ɵɵadvance(1);
|
|
92
111
|
i0.ɵɵproperty("displayReturnButton", !ctx_r1.displayHomePage)("forcedRecipe", ctx_r1.recipeInHeader)("title", ctx_r1.displayHomePage ? ctx_r1.homePageTitle : ctx_r1.filters.additionalFilters && ctx_r1.filters.additionalFilters.title !== "" ? ctx_r1.filters.additionalFilters.title : ctx_r1.titleInResearchMode);
|
|
93
112
|
i0.ɵɵadvance(1);
|
|
94
|
-
i0.ɵɵproperty("ngIf",
|
|
113
|
+
i0.ɵɵproperty("ngIf", ctx_r1.showUserFeedback);
|
|
114
|
+
i0.ɵɵadvance(1);
|
|
115
|
+
i0.ɵɵproperty("ngIf", !ctx_r1.displayHomePage)("ngIfElse", _r6);
|
|
95
116
|
i0.ɵɵadvance(3);
|
|
96
117
|
i0.ɵɵproperty("ngIf", ctx_r1.returnTopButtonShouldBeDisplayed);
|
|
97
118
|
} }
|
|
98
119
|
function RecipeCatalogComponent_ng_template_3_Template(rf, ctx) { if (rf & 1) {
|
|
99
|
-
const
|
|
100
|
-
i0.ɵɵelementStart(0, "ng-miam-recipe-stepper",
|
|
101
|
-
i0.ɵɵlistener("recipeChange", function RecipeCatalogComponent_ng_template_3_Template_ng_miam_recipe_stepper_recipeChange_0_listener() { i0.ɵɵrestoreView(
|
|
120
|
+
const _r32 = i0.ɵɵgetCurrentView();
|
|
121
|
+
i0.ɵɵelementStart(0, "ng-miam-recipe-stepper", 23);
|
|
122
|
+
i0.ɵɵlistener("recipeChange", function RecipeCatalogComponent_ng_template_3_Template_ng_miam_recipe_stepper_recipeChange_0_listener() { i0.ɵɵrestoreView(_r32); const ctx_r31 = i0.ɵɵnextContext(); return ctx_r31.leaveCreatePage(); })("canceled", function RecipeCatalogComponent_ng_template_3_Template_ng_miam_recipe_stepper_canceled_0_listener() { i0.ɵɵrestoreView(_r32); const ctx_r33 = i0.ɵɵnextContext(); return ctx_r33.leaveCreatePage(); });
|
|
102
123
|
i0.ɵɵelementEnd();
|
|
103
124
|
} if (rf & 2) {
|
|
104
125
|
const ctx_r3 = i0.ɵɵnextContext();
|
|
105
126
|
i0.ɵɵproperty("recipe", ctx_r3.recipeToUpdate);
|
|
106
127
|
} }
|
|
107
128
|
export class RecipeCatalogComponent {
|
|
108
|
-
constructor(cdr, recipeTypesService, sponsorService, supplierService, packageService, recipesService, mediaMatcher) {
|
|
129
|
+
constructor(cdr, recipeTypesService, sponsorService, supplierService, packageService, recipesService, mediaMatcher, usersService) {
|
|
109
130
|
this.cdr = cdr;
|
|
110
131
|
this.recipeTypesService = recipeTypesService;
|
|
111
132
|
this.sponsorService = sponsorService;
|
|
@@ -113,6 +134,7 @@ export class RecipeCatalogComponent {
|
|
|
113
134
|
this.packageService = packageService;
|
|
114
135
|
this.recipesService = recipesService;
|
|
115
136
|
this.mediaMatcher = mediaMatcher;
|
|
137
|
+
this.usersService = usersService;
|
|
116
138
|
this.homePageTitle = 'Qu\'est-ce qui vous ferait plaisir ?';
|
|
117
139
|
this.titleInResearchMode = 'Résultats de recherche';
|
|
118
140
|
this.displayHomePage = true;
|
|
@@ -123,35 +145,39 @@ export class RecipeCatalogComponent {
|
|
|
123
145
|
this.creatingRecipe = false;
|
|
124
146
|
this.isMobile = false;
|
|
125
147
|
this.listIsEmpty = false;
|
|
148
|
+
this.showUserFeedback = false;
|
|
149
|
+
this.subscriptions = [];
|
|
126
150
|
this.isMobile = mediaMatcher.matchMedia('(max-width: 1022px)').matches;
|
|
127
151
|
this.isFilterCollapsed = this.isMobile;
|
|
128
152
|
}
|
|
129
153
|
ngOnInit() {
|
|
130
154
|
this.resetFilters();
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
this.
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
});
|
|
155
|
+
this.subscriptions = [
|
|
156
|
+
forkJoin([
|
|
157
|
+
this.recipeTypesService.getTypes().pipe(skipWhile(types => types.length === 0),
|
|
158
|
+
// recipeTypesService.getTypes() comes from a behavior subject, it does not emit the complete() function
|
|
159
|
+
// you absolutly need a take(1) or call complete yourself to trigger the forkjoin subscribe
|
|
160
|
+
take(1)),
|
|
161
|
+
this.supplierService.supplier$.asObservable().pipe(skipWhile(supp => supp === undefined || supp == null), take(1))
|
|
162
|
+
]).pipe(switchMap(res => {
|
|
163
|
+
this.supplierId = res[1].id;
|
|
164
|
+
return this.loadPackages();
|
|
165
|
+
})).subscribe(),
|
|
166
|
+
this.assessShowUserFeedback()
|
|
167
|
+
];
|
|
145
168
|
}
|
|
146
169
|
ngAfterViewInit() {
|
|
147
170
|
this.cdr.detectChanges();
|
|
148
171
|
}
|
|
172
|
+
ngOnDestroy() {
|
|
173
|
+
this.subscriptions.forEach(s => s.unsubscribe());
|
|
174
|
+
}
|
|
149
175
|
initCategories(packages) {
|
|
150
|
-
this.categories
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
176
|
+
this.categories = [{
|
|
177
|
+
key: 'suggestions',
|
|
178
|
+
title: 'Suggestions de la semaine',
|
|
179
|
+
filters: { suggested: true }
|
|
180
|
+
}];
|
|
155
181
|
packages.data.forEach(categoryPackage => {
|
|
156
182
|
this.categories.push({
|
|
157
183
|
key: categoryPackage.title,
|
|
@@ -159,34 +185,43 @@ export class RecipeCatalogComponent {
|
|
|
159
185
|
filters: { packages: categoryPackage.id }
|
|
160
186
|
});
|
|
161
187
|
});
|
|
162
|
-
this.
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
188
|
+
const startersType = this.recipeTypesService.getTypeByName('entrée');
|
|
189
|
+
if (startersType) {
|
|
190
|
+
this.categories.push({
|
|
191
|
+
key: 'entrees',
|
|
192
|
+
title: 'Entrées',
|
|
193
|
+
filters: { recipe_type_id: startersType.id }
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
const mainType = this.recipeTypesService.getTypeByName('plat principal');
|
|
197
|
+
if (mainType) {
|
|
198
|
+
this.categories.push({
|
|
199
|
+
key: 'plats',
|
|
200
|
+
title: 'Plats',
|
|
201
|
+
filters: { recipe_type_id: mainType.id }
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
const dessertType = this.recipeTypesService.getTypeByName('dessert');
|
|
205
|
+
if (dessertType) {
|
|
206
|
+
this.categories.push({
|
|
207
|
+
key: 'desserts',
|
|
208
|
+
title: 'Desserts',
|
|
209
|
+
filters: { recipe_type_id: dessertType.id }
|
|
210
|
+
});
|
|
211
|
+
}
|
|
177
212
|
}
|
|
178
213
|
selectCategoryFromUrl() {
|
|
179
214
|
const paramsString = window.location.search;
|
|
180
215
|
const paramsArray = new URLSearchParams(paramsString);
|
|
181
|
-
const
|
|
182
|
-
if (!
|
|
216
|
+
const selectedCategoryKey = paramsArray.get('catalogCategory');
|
|
217
|
+
if (!selectedCategoryKey) {
|
|
183
218
|
return;
|
|
184
219
|
}
|
|
185
|
-
const
|
|
186
|
-
if (!
|
|
220
|
+
const selectedCategory = this.categories.find((cat) => cat.key === selectedCategoryKey);
|
|
221
|
+
if (!selectedCategory) {
|
|
187
222
|
return;
|
|
188
223
|
}
|
|
189
|
-
this.categoryTitleClicked(
|
|
224
|
+
this.categoryTitleClicked(selectedCategory);
|
|
190
225
|
}
|
|
191
226
|
// Used on load to build the filters attribute, and on click on the link to reset the filters
|
|
192
227
|
resetFilters() {
|
|
@@ -325,9 +360,9 @@ export class RecipeCatalogComponent {
|
|
|
325
360
|
}
|
|
326
361
|
case 'DELETE': {
|
|
327
362
|
if (((_a = event.recipe) === null || _a === void 0 ? void 0 : _a.id) && ((_b = event.recipe.relationships['recipe-provider']) === null || _b === void 0 ? void 0 : _b.data.id) === 'personal') {
|
|
328
|
-
this.recipesService.delete(event.recipe.id).subscribe(() => {
|
|
363
|
+
this.subscriptions.push(this.recipesService.delete(event.recipe.id).subscribe(() => {
|
|
329
364
|
this.reloadList();
|
|
330
|
-
});
|
|
365
|
+
}));
|
|
331
366
|
}
|
|
332
367
|
break;
|
|
333
368
|
}
|
|
@@ -337,8 +372,33 @@ export class RecipeCatalogComponent {
|
|
|
337
372
|
this.listIsEmpty = recipes.length === 0;
|
|
338
373
|
this.cdr.detectChanges();
|
|
339
374
|
}
|
|
375
|
+
setUserPreference(pref, state) {
|
|
376
|
+
this.subscriptions.push(this.usersService.setPreference(pref, state).pipe(switchMap(() => this.loadPackages())).subscribe());
|
|
377
|
+
}
|
|
378
|
+
reloadPackages() {
|
|
379
|
+
this.subscriptions.push(this.loadPackages().subscribe());
|
|
380
|
+
}
|
|
381
|
+
loadPackages() {
|
|
382
|
+
return this.packageService.categories_for([this.supplierId]).pipe(skipWhile(packages => packages.is_loading), tap((packages) => {
|
|
383
|
+
this.initCategories(packages);
|
|
384
|
+
this.selectCategoryFromUrl();
|
|
385
|
+
this.cdr.detectChanges();
|
|
386
|
+
}));
|
|
387
|
+
}
|
|
388
|
+
// Show feedback block only if user is logged and the children preference is unknown
|
|
389
|
+
assessShowUserFeedback() {
|
|
390
|
+
return combineLatest([
|
|
391
|
+
this.usersService.isLogged$,
|
|
392
|
+
this.usersService.preferenceDefined('has_children')
|
|
393
|
+
]).subscribe(results => {
|
|
394
|
+
const logged = results[0];
|
|
395
|
+
const preferenceDefined = results[1];
|
|
396
|
+
this.showUserFeedback = logged && !preferenceDefined;
|
|
397
|
+
this.cdr.detectChanges();
|
|
398
|
+
});
|
|
399
|
+
}
|
|
340
400
|
}
|
|
341
|
-
RecipeCatalogComponent.ɵfac = function RecipeCatalogComponent_Factory(t) { return new (t || RecipeCatalogComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.RecipeTypeService), i0.ɵɵdirectiveInject(i1.SponsorService), i0.ɵɵdirectiveInject(i1.SuppliersService), i0.ɵɵdirectiveInject(i1.PackageService), i0.ɵɵdirectiveInject(i1.RecipesService), i0.ɵɵdirectiveInject(i2.MediaMatcher)); };
|
|
401
|
+
RecipeCatalogComponent.ɵfac = function RecipeCatalogComponent_Factory(t) { return new (t || RecipeCatalogComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.RecipeTypeService), i0.ɵɵdirectiveInject(i1.SponsorService), i0.ɵɵdirectiveInject(i1.SuppliersService), i0.ɵɵdirectiveInject(i1.PackageService), i0.ɵɵdirectiveInject(i1.RecipesService), i0.ɵɵdirectiveInject(i2.MediaMatcher), i0.ɵɵdirectiveInject(i1.UserService)); };
|
|
342
402
|
RecipeCatalogComponent.ɵcmp = i0.ɵɵdefineComponent({ type: RecipeCatalogComponent, selectors: [["ng-miam-recipe-catalog"]], viewQuery: function RecipeCatalogComponent_Query(rf, ctx) { if (rf & 1) {
|
|
343
403
|
i0.ɵɵviewQuery(CatalogHeaderComponent, true);
|
|
344
404
|
i0.ɵɵviewQuery(_c0, true);
|
|
@@ -348,15 +408,15 @@ RecipeCatalogComponent.ɵcmp = i0.ɵɵdefineComponent({ type: RecipeCatalogCompo
|
|
|
348
408
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.catalogHeader = _t.first);
|
|
349
409
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.topAnchor = _t.first);
|
|
350
410
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.categoriesComp = _t);
|
|
351
|
-
} }, decls: 5, vars: 2, consts: [[1, "miam-catalog-anchor"], ["miamCatalogTopAnchor", ""], ["class", "miam-recipe-catalog", 3, "scroll", 4, "ngIf", "ngIfElse"], ["creationPage", ""], [1, "miam-recipe-catalog", 3, "scroll"], [3, "filters", "mobileFixed", "filterToRemove", "filterReset", "filterChanged", "filterCollapsed"], [1, "miam-recipe-catalog__content", 3, "ngClass"], [3, "displayReturnButton", "forcedRecipe", "title", "returnButtonPressed", "searchStringChanged"], ["class", "miam-recipe-catalog__list", 4, "ngIf", "ngIfElse"], ["categoriesComponents", ""], ["class", "miam-recipe-catalog__returnTop", 3, "click", 4, "ngIf"], [1, "miam-recipe-catalog__list"], [3, "filters", "randomMode", "retrievedRecipes", "filterRemoved", "recipeActionTriggered"], ["class", "miam-recipe-catalog__categories", 4, "ngIf"], [1, "miam-recipe-catalog__categories"], [3, "title", "filters", "displayList", 4, "ngFor", "ngForOf"], [3, "title", "filters", "displayList"], [1, "miam-recipe-catalog__returnTop", 3, "click"], ["height", "32", "width", "32", "primaryColor", "var(--m-color-white)", 3, "iconName"], [3, "recipe", "recipeChange", "canceled"]], template: function RecipeCatalogComponent_Template(rf, ctx) { if (rf & 1) {
|
|
411
|
+
} }, decls: 5, vars: 2, consts: [[1, "miam-catalog-anchor"], ["miamCatalogTopAnchor", ""], ["class", "miam-recipe-catalog", 3, "scroll", 4, "ngIf", "ngIfElse"], ["creationPage", ""], [1, "miam-recipe-catalog", 3, "scroll"], [3, "filters", "mobileFixed", "filterToRemove", "filterReset", "filterChanged", "filterCollapsed", "preferencesChanged"], [1, "miam-recipe-catalog__content", 3, "ngClass"], [3, "displayReturnButton", "forcedRecipe", "title", "returnButtonPressed", "searchStringChanged"], ["class", "miam-recipe-catalog__content__user-feedback", 4, "ngIf"], ["class", "miam-recipe-catalog__list", 4, "ngIf", "ngIfElse"], ["categoriesComponents", ""], ["class", "miam-recipe-catalog__returnTop", 3, "click", 4, "ngIf"], [1, "miam-recipe-catalog__content__user-feedback"], [1, "miam-recipe-catalog__content__user-feedback__actions"], [1, "m-button-grey", 3, "click"], [1, "miam-recipe-catalog__list"], [3, "filters", "randomMode", "retrievedRecipes", "filterRemoved", "recipeActionTriggered"], ["class", "miam-recipe-catalog__categories", 4, "ngIf"], [1, "miam-recipe-catalog__categories"], [3, "title", "filters", "displayList", 4, "ngFor", "ngForOf"], [3, "title", "filters", "displayList"], [1, "miam-recipe-catalog__returnTop", 3, "click"], ["height", "32", "width", "32", "primaryColor", "var(--m-color-white)", 3, "iconName"], [3, "recipe", "recipeChange", "canceled"]], template: function RecipeCatalogComponent_Template(rf, ctx) { if (rf & 1) {
|
|
352
412
|
i0.ɵɵelement(0, "div", 0, 1);
|
|
353
|
-
i0.ɵɵtemplate(2, RecipeCatalogComponent_div_2_Template,
|
|
413
|
+
i0.ɵɵtemplate(2, RecipeCatalogComponent_div_2_Template, 9, 13, "div", 2);
|
|
354
414
|
i0.ɵɵtemplate(3, RecipeCatalogComponent_ng_template_3_Template, 1, 1, "ng-template", null, 3, i0.ɵɵtemplateRefExtractor);
|
|
355
415
|
} if (rf & 2) {
|
|
356
416
|
const _r2 = i0.ɵɵreference(4);
|
|
357
417
|
i0.ɵɵadvance(2);
|
|
358
418
|
i0.ɵɵproperty("ngIf", !ctx.creatingRecipe)("ngIfElse", _r2);
|
|
359
|
-
} }, directives: [i3.NgIf, i4.RecipeFiltersComponent, i3.NgClass, i5.CatalogHeaderComponent, i6.CatalogListComponent, i3.NgForOf, i7.CatalogCategoryComponent, i8.IconComponent, i9.RecipeStepperComponent], styles: [".miam-recipe-catalog{display:flex;justify-content:space-between;width:100%}.miam-recipe-catalog .miam-recipe-catalog__content{width:calc(100% - 216px)}.miam-recipe-catalog .miam-recipe-catalog__content.filter-collapsed{overflow-x:hidden;width:100%}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories{display:flex;flex-direction:column;margin-top:40px;width:100%}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__list{margin-top:40px;width:100%}.miam-recipe-catalog .miam-recipe-catalog__returnTop{-webkit-tap-highlight-color:transparent;background-color:var(--m-color-primary);border-radius:var(--m-border-radius-circle);bottom:24px;box-shadow:0 2px 10px -4px var(--m-color-grey-text-dark);cursor:pointer;padding:8px;position:fixed;right:56px;transform:rotate(-180deg);z-index:var(--m-z-index-position-absolute-high)}@media (max-width:1022px){.miam-recipe-catalog{max-width:100vw}.miam-recipe-catalog .miam-recipe-catalog__returnTop{bottom:72px;right:24px}.miam-recipe-catalog .miam-recipe-catalog__content{width:100%}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories,.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__list{margin-top:
|
|
419
|
+
} }, directives: [i3.NgIf, i4.RecipeFiltersComponent, i3.NgClass, i5.CatalogHeaderComponent, i6.CatalogListComponent, i3.NgForOf, i7.CatalogCategoryComponent, i8.IconComponent, i9.RecipeStepperComponent], styles: [".miam-recipe-catalog{display:flex;justify-content:space-between;width:100%}.miam-recipe-catalog .miam-recipe-catalog__content{width:calc(100% - 216px)}.miam-recipe-catalog .miam-recipe-catalog__content.filter-collapsed{overflow-x:hidden;width:100%}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__content__user-feedback{align-items:center;background-color:var(--m-color-secondary);color:#fff;display:flex;font-size:18px;font-weight:700;justify-content:center;padding:8px}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__content__user-feedback>span{margin-right:16px}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__content__user-feedback .miam-recipe-catalog__content__user-feedback__actions{display:flex}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__content__user-feedback .miam-recipe-catalog__content__user-feedback__actions>.m-button-grey{margin-left:4px;min-width:80px;padding:12px 16px}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories{display:flex;flex-direction:column;margin-top:40px;width:100%}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__list{margin-top:40px;width:100%}.miam-recipe-catalog .miam-recipe-catalog__returnTop{-webkit-tap-highlight-color:transparent;background-color:var(--m-color-primary);border-radius:var(--m-border-radius-circle);bottom:24px;box-shadow:0 2px 10px -4px var(--m-color-grey-text-dark);cursor:pointer;padding:8px;position:fixed;right:56px;transform:rotate(-180deg);z-index:var(--m-z-index-position-absolute-high)}@media (max-width:1022px){.miam-recipe-catalog{max-width:100vw}.miam-recipe-catalog .miam-recipe-catalog__returnTop{bottom:72px;right:24px}.miam-recipe-catalog .miam-recipe-catalog__content{width:100%}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__content__user-feedback{margin-top:55px}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories,.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__list{margin-top:60px}.miam-recipe-catalog .miam-recipe-catalog__content:not(.filter-collapsed){display:none}}"], encapsulation: 2, changeDetection: 0 });
|
|
360
420
|
/*@__PURE__*/ (function () { i0.ɵsetClassMetadata(RecipeCatalogComponent, [{
|
|
361
421
|
type: Component,
|
|
362
422
|
args: [{
|
|
@@ -366,7 +426,7 @@ RecipeCatalogComponent.ɵcmp = i0.ɵɵdefineComponent({ type: RecipeCatalogCompo
|
|
|
366
426
|
encapsulation: ViewEncapsulation.None,
|
|
367
427
|
changeDetection: ChangeDetectionStrategy.OnPush
|
|
368
428
|
}]
|
|
369
|
-
}], function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.RecipeTypeService }, { type: i1.SponsorService }, { type: i1.SuppliersService }, { type: i1.PackageService }, { type: i1.RecipesService }, { type: i2.MediaMatcher }]; }, { catalogHeader: [{
|
|
429
|
+
}], function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.RecipeTypeService }, { type: i1.SponsorService }, { type: i1.SuppliersService }, { type: i1.PackageService }, { type: i1.RecipesService }, { type: i2.MediaMatcher }, { type: i1.UserService }]; }, { catalogHeader: [{
|
|
370
430
|
type: ViewChild,
|
|
371
431
|
args: [CatalogHeaderComponent]
|
|
372
432
|
}], topAnchor: [{
|
|
@@ -376,4 +436,4 @@ RecipeCatalogComponent.ɵcmp = i0.ɵɵdefineComponent({ type: RecipeCatalogCompo
|
|
|
376
436
|
type: ViewChildren,
|
|
377
437
|
args: [CatalogCategoryComponent]
|
|
378
438
|
}] }); })();
|
|
379
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaXBlLWNhdGFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii9idWlsZHMvbWlhbS9uZy1taWFtLXNkay9wcm9qZWN0cy9uZy1taWFtL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9fd2ViLWNvbXBvbmVudHMvcmVjaXBlLWNhdGFsb2cvcmVjaXBlLWNhdGFsb2cuY29tcG9uZW50LnRzIiwibGliL193ZWItY29tcG9uZW50cy9yZWNpcGUtY2F0YWxvZy9yZWNpcGUtY2F0YWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBaUIsaUJBQWlCLEVBQVUsVUFBVSxFQUM3SCxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFFMUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEgsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRXBGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7OztJQ1cvQywrQkFDRTtJQUFBLGdEQU11QjtJQUhyQix3UEFBOEMsa09BQUEsd1BBQUE7SUFHaEQsaUJBQXVCO0lBQ3pCLGlCQUFNOzs7SUFORixlQUFtQjtJQUFuQix3Q0FBbUIsb0JBQUE7Ozs7SUFVbkIsb0RBSzJCO0lBRHpCLGlTQUE0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RUFBRSxDQUFDO0lBQzNCLENBQUM7OzRGQXhRVSxzQkFBc0I7MkRBQXRCLHNCQUFzQjt1QkFDdEIsc0JBQXNCOzt1QkFHbkIsd0JBQXdCOzs7Ozs7O1FDeEJ4Qyw0QkFBNkQ7UUFDN0Qsd0VBQ0U7UUE2Q0Ysd0hBQ0U7OztRQS9DRyxlQUF5QztRQUF6QywwQ0FBeUMsaUJBQUE7O2tERG1CakMsc0JBQXNCO2NBUGxDLFNBQVM7ZUFBQztnQkFDVCxRQUFRLEVBQUUsd0JBQXdCO2dCQUNsQyxXQUFXLEVBQUUsaUNBQWlDO2dCQUM5QyxTQUFTLEVBQUUsQ0FBQyxpQ0FBaUMsQ0FBQztnQkFDOUMsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7Z0JBQ3JDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2FBQ2hEO3FQQUVvQyxhQUFhO2tCQUEvQyxTQUFTO21CQUFDLHNCQUFzQjtZQUNFLFNBQVM7a0JBQTNDLFNBQVM7bUJBQUMsc0JBQXNCO1lBRVEsY0FBYztrQkFBdEQsWUFBWTttQkFBQyx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdFbmNhcHN1bGF0aW9uLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgVmlld0NoaWxkLCBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgT25Jbml0LCBFbGVtZW50UmVmLFxuICBWaWV3Q2hpbGRyZW4sIFF1ZXJ5TGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgc2tpcFdoaWxlLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2F0YWxvZ0NhdGVnb3J5Q29tcG9uZW50IH0gZnJvbSAnLi4vY2F0YWxvZy1jYXRlZ29yeS9jYXRhbG9nLWNhdGVnb3J5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZWNpcGUgfSBmcm9tICcuLi8uLi9fbW9kZWxzJztcbmltcG9ydCB7IFJlY2lwZVR5cGVTZXJ2aWNlLCBTcG9uc29yU2VydmljZSwgUGFja2FnZVNlcnZpY2UsIFN1cHBsaWVyc1NlcnZpY2UsIFJlY2lwZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vX3NlcnZpY2VzJztcbmltcG9ydCB7IEljb24gfSBmcm9tICcuLi8uLi9fdHlwZXMvaWNvbi5lbnVtJztcbmltcG9ydCB7IENhdGFsb2dIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuLi9jYXRhbG9nLWhlYWRlci9jYXRhbG9nLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVjaXBlRmlsdGVyLCBSZWNpcGVGaWx0ZXJzIH0gZnJvbSAnLi4vLi4vX3R5cGVzL3JlY2lwZS1maWx0ZXJzJztcbmltcG9ydCB7IGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNZWRpYU1hdGNoZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZy1taWFtLXJlY2lwZS1jYXRhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JlY2lwZS1jYXRhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmVjaXBlLWNhdGFsb2cuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgUmVjaXBlQ2F0YWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uSW5pdCB7XG4gIEBWaWV3Q2hpbGQoQ2F0YWxvZ0hlYWRlckNvbXBvbmVudCkgY2F0YWxvZ0hlYWRlcjogQ2F0YWxvZ0hlYWRlckNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnbWlhbUNhdGFsb2dUb3BBbmNob3InKSB0b3BBbmNob3I6IEVsZW1lbnRSZWY7XG5cbiAgQFZpZXdDaGlsZHJlbihDYXRhbG9nQ2F0ZWdvcnlDb21wb25lbnQpICBjYXRlZ29yaWVzQ29tcCE6IFF1ZXJ5TGlzdDxDYXRhbG9nQ2F0ZWdvcnlDb21wb25lbnQ+O1xuXG4gIGZpbHRlcnM6IFJlY2lwZUZpbHRlcnM7XG4gIGhvbWVQYWdlVGl0bGUgPSAnUXVcXCdlc3QtY2UgcXVpIHZvdXMgZmVyYWl0IHBsYWlzaXIgPyc7XG4gIHRpdGxlSW5SZXNlYXJjaE1vZGUgPSAnUsOpc3VsdGF0cyBkZSByZWNoZXJjaGUnO1xuICBkaXNwbGF5SG9tZVBhZ2UgPSB0cnVlO1xuICBpc0ZpbHRlckNvbGxhcHNlZCA9IGZhbHNlO1xuICByZXR1cm5Ub3BCdXR0b25TaG91bGRCZURpc3BsYXllZCA9IGZhbHNlO1xuICBpY29uID0gSWNvbjtcbiAgY2F0ZWdvcmllcyA9IFtdO1xuICByZWNpcGVJbkhlYWRlcjogUmVjaXBlO1xuICBjcmVhdGluZ1JlY2lwZSA9IGZhbHNlO1xuICByZWNpcGVUb1VwZGF0ZTogUmVjaXBlO1xuICBmaWx0ZXJUb1JlbW92ZTogc3RyaW5nO1xuICBpc01vYmlsZSA9IGZhbHNlO1xuICBsaXN0SXNFbXB0eSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHB1YmxpYyByZWNpcGVUeXBlc1NlcnZpY2U6IFJlY2lwZVR5cGVTZXJ2aWNlLFxuICAgIHB1YmxpYyBzcG9uc29yU2VydmljZTogU3BvbnNvclNlcnZpY2UsXG4gICAgcHVibGljIHN1cHBsaWVyU2VydmljZTogU3VwcGxpZXJzU2VydmljZSxcbiAgICBwdWJsaWMgcGFja2FnZVNlcnZpY2U6IFBhY2thZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVjaXBlc1NlcnZpY2U6IFJlY2lwZXNTZXJ2aWNlLFxuICAgIHB1YmxpYyBtZWRpYU1hdGNoZXI6IE1lZGlhTWF0Y2hlcikge1xuICAgIHRoaXMuaXNNb2JpbGUgPSBtZWRpYU1hdGNoZXIubWF0Y2hNZWRpYSgnKG1heC13aWR0aDogMTAyMnB4KScpLm1hdGNoZXM7XG4gICAgdGhpcy5pc0ZpbHRlckNvbGxhcHNlZCA9IHRoaXMuaXNNb2JpbGU7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnJlc2V0RmlsdGVycygpO1xuXG4gICAgZm9ya0pvaW4oW1xuICAgICAgdGhpcy5yZWNpcGVUeXBlc1NlcnZpY2UuZ2V0VHlwZXMoKS5waXBlKFxuICAgICAgICBza2lwV2hpbGUodHlwZXMgPT4gdHlwZXMubGVuZ3RoID09PSAwKSxcbiAgICAgICAgLy8gcmVjaXBlVHlwZXNTZXJ2aWNlLmdldFR5cGVzKCkgY29tZXMgZnJvbSBhIGJlaGF2aW9yIHN1YmplY3QsIGl0IGRvZXMgbm90IGVtaXQgdGhlIGNvbXBsZXRlKCkgZnVuY3Rpb25cbiAgICAgICAgLy8geW91IGFic29sdXRseSBuZWVkIGEgdGFrZSgxKSBvciBjYWxsIGNvbXBsZXRlIHlvdXJzZWxmIHRvIHRyaWdnZXIgdGhlIGZvcmtqb2luIHN1YnNjcmliZVxuICAgICAgICB0YWtlKDEpXG4gICAgICApLFxuICAgICAgdGhpcy5zdXBwbGllclNlcnZpY2Uuc3VwcGxpZXIkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgICAgIHNraXBXaGlsZShzdXBwID0+IHN1cHAgPT09IHVuZGVmaW5lZCB8fCBzdXBwID09IG51bGwpLFxuICAgICAgICB0YWtlKDEpXG4gICAgICApXG4gICAgXSkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgIGNvbnN0IHN1cHBsaWVyID0gcmVzWzFdO1xuICAgICAgdGhpcy5wYWNrYWdlU2VydmljZS5jYXRlZ29yaWVzX2Zvcihbc3VwcGxpZXIuaWRdKS5waXBlKFxuICAgICAgICBza2lwV2hpbGUocGFja2FnZXMgPT4gcGFja2FnZXMuaXNfbG9hZGluZylcbiAgICAgICkuc3Vic2NyaWJlKChwYWNrYWdlcykgPT4ge1xuICAgICAgICB0aGlzLmluaXRDYXRlZ29yaWVzKHBhY2thZ2VzKTtcbiAgICAgICAgdGhpcy5zZWxlY3RDYXRlZ29yeUZyb21VcmwoKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSlcbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBpbml0Q2F0ZWdvcmllcyhwYWNrYWdlcykge1xuICAgIHRoaXMuY2F0ZWdvcmllcy5wdXNoKHtcbiAgICAgIGtleTogJ3N1Z2dlc3Rpb25zJyxcbiAgICAgIHRpdGxlOiAnU3VnZ2VzdGlvbnMgZGUgbGEgc2VtYWluZScsXG4gICAgICBmaWx0ZXJzOiB7IHN1Z2dlc3RlZDogdHJ1ZSB9XG4gICAgfSk7XG4gICAgcGFja2FnZXMuZGF0YS5mb3JFYWNoKGNhdGVnb3J5UGFja2FnZSA9PiB7XG4gICAgICB0aGlzLmNhdGVnb3JpZXMucHVzaCh7XG4gICAgICAgIGtleTogY2F0ZWdvcnlQYWNrYWdlLnRpdGxlLFxuICAgICAgICB0aXRsZTogY2F0ZWdvcnlQYWNrYWdlLnRpdGxlLFxuICAgICAgICBmaWx0ZXJzOiB7IHBhY2thZ2VzOiBjYXRlZ29yeVBhY2thZ2UuaWQgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5jYXRlZ29yaWVzLnB1c2goe1xuICAgICAga2V5OiAnZW50cmVlcycsXG4gICAgICB0aXRsZTogJ0VudHLDqWVzJyxcbiAgICAgIGZpbHRlcnM6IHsgcmVjaXBlX3R5cGVfaWQ6IHRoaXMucmVjaXBlVHlwZXNTZXJ2aWNlLmdldFR5cGVCeU5hbWUoJ2VudHLDqWUnKS5pZCB9XG4gICAgfSk7XG4gICAgdGhpcy5jYXRlZ29yaWVzLnB1c2goe1xuICAgICAga2V5OiAncGxhdHMnLFxuICAgICAgdGl0bGU6ICdQbGF0cycsXG4gICAgICBmaWx0ZXJzOiB7IHJlY2lwZV90eXBlX2lkOiB0aGlzLnJlY2lwZVR5cGVzU2VydmljZS5nZXRUeXBlQnlOYW1lKCdwbGF0IHByaW5jaXBhbCcpLmlkIH1cbiAgICB9KTtcbiAgICB0aGlzLmNhdGVnb3JpZXMucHVzaCh7XG4gICAgICBrZXk6ICdkZXNzZXJ0cycsXG4gICAgICB0aXRsZTogJ0Rlc3NlcnRzJyxcbiAgICAgIGZpbHRlcnM6IHsgcmVjaXBlX3R5cGVfaWQ6IHRoaXMucmVjaXBlVHlwZXNTZXJ2aWNlLmdldFR5cGVCeU5hbWUoJ2Rlc3NlcnQnKS5pZCB9XG4gICAgfSk7XG4gIH1cblxuICBzZWxlY3RDYXRlZ29yeUZyb21VcmwoKSB7XG4gICAgY29uc3QgcGFyYW1zU3RyaW5nID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaDtcbiAgICBjb25zdCBwYXJhbXNBcnJheSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocGFyYW1zU3RyaW5nKTtcbiAgICBjb25zdCBzZWxlY3RlZF9jYXRlZ29yeV9rZXkgPSBwYXJhbXNBcnJheS5nZXQoJ2NhdGFsb2dDYXRlZ29yeScpO1xuICAgIGlmICghc2VsZWN0ZWRfY2F0ZWdvcnlfa2V5KXtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0ZWRfY2F0ZWdvcnkgPSB0aGlzLmNhdGVnb3JpZXMuZmluZCgoY2F0KSA9PiBjYXQua2V5ID09PSBzZWxlY3RlZF9jYXRlZ29yeV9rZXkpO1xuICAgIGlmICghc2VsZWN0ZWRfY2F0ZWdvcnkpe1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNhdGVnb3J5VGl0bGVDbGlja2VkKHNlbGVjdGVkX2NhdGVnb3J5KTtcbiAgfVxuXG4gIC8vIFVzZWQgb24gbG9hZCB0byBidWlsZCB0aGUgZmlsdGVycyBhdHRyaWJ1dGUsIGFuZCBvbiBjbGljayBvbiB0aGUgbGluayB0byByZXNldCB0aGUgZmlsdGVyc1xuICByZXNldEZpbHRlcnMoKSB7XG4gICAgdGhpcy5maWx0ZXJzID0ge1xuICAgICAgLy8gdHlwZTogW1xuICAgICAgLy8gICB7bmFtZTogcmVjaXBlVHlwZXNTZXJ2aWNlLmdldFR5cGUoMSkuaWQsIHZhbHVlOiBmYWxzZSwgdGV4dDogJ0VudHLDqWVzJ30sXG4gICAgICAvLyAgIHtuYW1lOiByZWNpcGVUeXBlc1NlcnZpY2UuZ2V0VHlwZSgyKS5pZCwgdmFsdWU6IGZhbHNlLCB0ZXh0OiAnUGxhdHMnfSxcbiAgICAgIC8vICAge25hbWU6IHJlY2lwZVR5cGVzU2VydmljZS5nZXRUeXBlKDMpLmlkLCB2YWx1ZTogZmFsc2UsIHRleHQ6ICdEZXNzZXJ0cyd9XG4gICAgICAvLyBdLFxuICAgICAgZGlmZmljdWx0eTogW1xuICAgICAgICB7bmFtZTogJzEnLCB2YWx1ZTogZmFsc2UsIHRleHQ6ICdGYWNpbGUnfSxcbiAgICAgICAge25hbWU6ICcyJywgdmFsdWU6IGZhbHNlLCB0ZXh0OiAnTW95ZW5uZSd9LFxuICAgICAgICB7bmFtZTogJzMnLCB2YWx1ZTogZmFsc2UsIHRleHQ6ICdEaWZmaWNpbGUnfVxuICAgICAgXSxcbiAgICAgIGNvc3Q6IFtcbiAgICAgICAge25hbWU6ICcwLTUnLCB2YWx1ZTogZmFsc2UsIHRleHQ6ICdCYXMgKOKJiCDiiaQgNeKCrCknfSxcbiAgICAgICAge25hbWU6ICc1LTEwJywgdmFsdWU6IGZhbHNlLCB0ZXh0OiAnTW95ZW4gKOKJiCA1LTEw4oKsKSAnfSxcbiAgICAgICAge25hbWU6ICcxMC0xMDAwJywgdmFsdWU6IGZhbHNlLCB0ZXh0OiAnw4lsZXbDqSAo4omIIOKJpSAxMOKCrCkgJ31cbiAgICAgICAgLy8gd2Ugc2V0IGEgbGltaXQgYXQgMTAwMOKCrCBtYXgsIGlmIGEgcmVjaXBlIGNvc3QgbW9yZSBzaG91bGQgYmUgbm9uIHNlbnNlIGFueXdheVxuICAgICAgXSxcbiAgICAgIHRpbWU6IFtcbiAgICAgICAge25hbWU6ICcxNScsIHZhbHVlOiBmYWxzZSwgdGV4dDogJzE1bSd9LFxuICAgICAgICB7bmFtZTogJzMwJywgdmFsdWU6IGZhbHNlLCB0ZXh0OiAnMzBtJ30sXG4gICAgICAgIHtuYW1lOiAnNjAnLCB2YWx1ZTogZmFsc2UsIHRleHQ6ICcxaCd9LFxuICAgICAgICB7bmFtZTogJzEyMCcsIHZhbHVlOiBmYWxzZSwgdGV4dDogJzJoJ31cbiAgICAgIF0sXG4gICAgfTtcbiAgICBpZiAodGhpcy5jYXRhbG9nSGVhZGVyKSB7IHRoaXMuY2F0YWxvZ0hlYWRlci5yZXNldFNlYXJjaFN0cmluZygpOyB9XG4gICAgdGhpcy5maWx0ZXJzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMubGlzdElzRW1wdHkgPSBmYWxzZTtcbiAgICBpZiAoIXRoaXMuZGlzcGxheUhvbWVQYWdlKXsgdGhpcy5yZXR1cm5Ub0hvbWVQYWdlKCk7IH1cbiAgfVxuXG4gIHVwZGF0ZVNlYXJjaChzZWFyY2g6IHN0cmluZykge1xuICAgIGlmIChzZWFyY2ggIT09IHRoaXMuZmlsdGVycy5zZWFyY2gpIHtcbiAgICAgIHRoaXMuZmlsdGVycy5zZWFyY2ggPSBzZWFyY2g7XG4gICAgICB0aGlzLnJlbG9hZExpc3QoKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVGaWx0ZXJzKGZpbHRlcnM6IFJlY2lwZUZpbHRlcnMpIHtcbiAgICB0aGlzLmZpbHRlcnMgPSB7IC4uLmZpbHRlcnMgfTsgLy8gTmVjZXNzYXJ5IHRvIHRyaWdnZXIgdGhlIG5nT25DaGFuZ2VzXG4gICAgdGhpcy5maWx0ZXJUb1JlbW92ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmxpc3RJc0VtcHR5ID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuaXNNb2JpbGUpIHtcbiAgICAgIHRoaXMucmV0dXJuVG9Ub3AoKTtcbiAgICB9XG4gICAgdGhpcy5yZWxvYWRMaXN0KCk7XG4gIH1cblxuICByZWxvYWRMaXN0KCkge1xuICAgIC8vIElmIHRoZXJlIGFyZSBubyBmaWx0ZXJzIG5vciBzZWFyY2gsIHJldHVybiB0byBob21lIHBhZ2VcbiAgICBpZiAodGhpcy5hcmVGaWx0ZXJzRW1wdHkoKSkgeyB0aGlzLnJldHVyblRvSG9tZVBhZ2UoKTsgfVxuICAgIGVsc2UgeyAvLyBSZWxvYWQgdGhlIGxpc3RcbiAgICAgIHRoaXMuZmlsdGVycyA9IHsgLi4udGhpcy5maWx0ZXJzIH07IC8vIE5lY2Vzc2FyeSB0byB0cmlnZ2VyIHRoZSBuZ09uQ2hhbmdlc1xuICAgICAgdGhpcy5kaXNwbGF5SG9tZVBhZ2UgPSBmYWxzZTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBjYXRlZ29yeVRpdGxlQ2xpY2tlZChldmVudDoge3RpdGxlOiBzdHJpbmcsIGZpbHRlcnM6IGFueX0pIHtcbiAgICB0aGlzLnJldHVyblRvVG9wKCk7XG4gICAgdGhpcy5maWx0ZXJzLmFkZGl0aW9uYWxGaWx0ZXJzID0geyBmaWx0ZXJzOiBldmVudC5maWx0ZXJzLCB0aXRsZTogZXZlbnQudGl0bGUgfTtcbiAgICB0aGlzLnJlbG9hZExpc3QoKTtcbiAgfVxuXG4gIGFyZUZpbHRlcnNFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0ZpZWxkRW1wdHkodGhpcy5maWx0ZXJzLmRpZmZpY3VsdHkpICYmIHRoaXMuaXNGaWVsZEVtcHR5KHRoaXMuZmlsdGVycy5jb3N0KSAmJiB0aGlzLmlzRmllbGRFbXB0eSh0aGlzLmZpbHRlcnMudGltZSlcbiAgICAgICYmIHRoaXMuZmlsdGVycy5zZWFyY2ggPT09ICcnICYmICF0aGlzLmZpbHRlcnMuYWRkaXRpb25hbEZpbHRlcnM/LmZpbHRlcnM7XG4gIH1cblxuICBpc0ZpZWxkRW1wdHkoZmlsdGVyOiBSZWNpcGVGaWx0ZXJbXSkge1xuICAgIGZvciAoY29uc3QgZiBvZiBmaWx0ZXIpIHtcbiAgICAgIGlmIChmLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZW1vdmVGaWx0ZXIoZmlsdGVyVGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5maWx0ZXJUb1JlbW92ZSA9IGZpbHRlclRleHQ7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcmV0dXJuVG9Ub3AoKSB7XG4gICAgaWYgKHRoaXMudG9wQW5jaG9yKSB7XG4gICAgICB0aGlzLnRvcEFuY2hvci5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KCk7XG4gICAgfVxuICB9XG5cbiAgZGlzcGxheVJldHVyblRvcEJ1dHRvbigpIHtcbiAgICB0aGlzLnJldHVyblRvcEJ1dHRvblNob3VsZEJlRGlzcGxheWVkID0gdGhpcy50b3BBbmNob3IubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20gPCAtNDAwO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGNoYW5nZUhlYWRlckltYWdlKHJlY2lwZXM6IFJlY2lwZVtdKSB7XG4gICAgaWYgKHJlY2lwZXMubGVuZ3RoID4gMCAmJiB0aGlzLmZpbHRlcnMuYWRkaXRpb25hbEZpbHRlcnM/LmZpbHRlcnMgJiYgIXRoaXMucmVjaXBlSW5IZWFkZXIpIHtcbiAgICAgIHRoaXMucmVjaXBlSW5IZWFkZXIgPSByZWNpcGVzWzBdO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVyblRvSG9tZVBhZ2UoKSB7XG4gICAgdGhpcy5kaXNwbGF5SG9tZVBhZ2UgPSB0cnVlO1xuICAgIHRoaXMucmVjaXBlSW5IZWFkZXIgPSB1bmRlZmluZWQ7IC8vIERvbid0IGZvcmNlIGEgcmVjaXBlIGluIGhlYWRlciBvbiBob21lUGFnZVxuICAgIHRoaXMucmVzZXRGaWx0ZXJzKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgb25GaWx0ZXJDb2xsYXBzZWQoKSB7XG4gICAgdGhpcy5pc0ZpbHRlckNvbGxhcHNlZCA9ICF0aGlzLmlzRmlsdGVyQ29sbGFwc2VkO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAvLyB0byB0cmlnZ2VyIGFmdGVyIHRoZSBkZXRlY3RDaGFuZ2VzIGJlY2F1c2Ugd2UgbmVlZCB0byBhbHJlYWQgaGF2ZSB0aGUgZGlzcGxheSBjaGFuZ2UgdG8gdXBkYXRlIGNhcmRzXG4gICAgdGhpcy5jYXRlZ29yaWVzQ29tcC5mb3JFYWNoKCBjYXQgPT4ge1xuICAgICAgY2F0LnVwZGF0ZVdpZHRoKCk7XG4gICAgfSk7XG4gIH1cblxuICBnb1RvQ3JlYXRlUGFnZShyZWNpcGUgPSBudWxsKSB7XG4gICAgdGhpcy5jcmVhdGluZ1JlY2lwZSA9IHRydWU7XG4gICAgdGhpcy5yZWNpcGVUb1VwZGF0ZSA9IHJlY2lwZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5yZXR1cm5Ub1RvcCgpO1xuICB9XG5cbiAgbGVhdmVDcmVhdGVQYWdlKCkge1xuICAgIHRoaXMuY3JlYXRpbmdSZWNpcGUgPSBmYWxzZTtcbiAgICB0aGlzLnJlbG9hZExpc3QoKTtcbiAgICB0aGlzLnJldHVyblRvVG9wKCk7XG4gIH1cblxuICBtYW5hZ2VSZWNpcGVBY3Rpb24oZXZlbnQ6IHthY3Rpb246IHN0cmluZywgcmVjaXBlOiBSZWNpcGV9KSB7XG4gICAgc3dpdGNoIChldmVudC5hY3Rpb24pIHtcbiAgICAgIGNhc2UgJ0NSRUFURSc6IHtcbiAgICAgICAgdGhpcy5nb1RvQ3JlYXRlUGFnZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSAnRURJVCc6IHtcbiAgICAgICAgdGhpcy5nb1RvQ3JlYXRlUGFnZShldmVudC5yZWNpcGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSAnREVMRVRFJzoge1xuICAgICAgICBpZiAoZXZlbnQucmVjaXBlPy5pZCAmJiBldmVudC5yZWNpcGUucmVsYXRpb25zaGlwc1sncmVjaXBlLXByb3ZpZGVyJ10/LmRhdGEuaWQgPT09ICdwZXJzb25hbCcpIHtcbiAgICAgICAgICB0aGlzLnJlY2lwZXNTZXJ2aWNlLmRlbGV0ZShldmVudC5yZWNpcGUuaWQpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbG9hZExpc3QoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpc0xpc3RFbXB0eShyZWNpcGVzOiBSZWNpcGVbXSkge1xuICAgIHRoaXMubGlzdElzRW1wdHkgPSByZWNpcGVzLmxlbmd0aCA9PT0gMDtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbn1cbiIsIjxkaXYgI21pYW1DYXRhbG9nVG9wQW5jaG9yIGNsYXNzPVwibWlhbS1jYXRhbG9nLWFuY2hvclwiPjwvZGl2PlxuPGRpdiAqbmdJZj1cIiFjcmVhdGluZ1JlY2lwZSBlbHNlIGNyZWF0aW9uUGFnZVwiIGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ1wiICh3aW5kb3c6c2Nyb2xsKT1cImRpc3BsYXlSZXR1cm5Ub3BCdXR0b24oKVwiPlxuICA8bmctbWlhbS1yZWNpcGUtZmlsdGVyc1xuICAgIFtmaWx0ZXJzXT1cImZpbHRlcnNcIlxuICAgIFttb2JpbGVGaXhlZF09XCJyZXR1cm5Ub3BCdXR0b25TaG91bGRCZURpc3BsYXllZFwiXG4gICAgW2ZpbHRlclRvUmVtb3ZlXT1cImZpbHRlclRvUmVtb3ZlXCJcbiAgICAoZmlsdGVyUmVzZXQpPVwicmVzZXRGaWx0ZXJzKClcIlxuICAgIChmaWx0ZXJDaGFuZ2VkKT1cInVwZGF0ZUZpbHRlcnMoJGV2ZW50KVwiXG4gICAgKGZpbHRlckNvbGxhcHNlZCk9XCJvbkZpbHRlckNvbGxhcHNlZCgpXCI+XG4gIDwvbmctbWlhbS1yZWNpcGUtZmlsdGVycz5cblxuICA8ZGl2IGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fY29udGVudFwiIFtuZ0NsYXNzXT1cInsnZmlsdGVyLWNvbGxhcHNlZCc6IGlzRmlsdGVyQ29sbGFwc2VkfVwiPlxuICAgIDxuZy1taWFtLWNhdGFsb2ctaGVhZGVyIFxuICAgICAgW2Rpc3BsYXlSZXR1cm5CdXR0b25dPVwiIWRpc3BsYXlIb21lUGFnZVwiXG4gICAgICBbZm9yY2VkUmVjaXBlXT1cInJlY2lwZUluSGVhZGVyXCJcbiAgICAgIFt0aXRsZV09XCJkaXNwbGF5SG9tZVBhZ2UgPyBob21lUGFnZVRpdGxlIDogXG4gICAgICAgIChmaWx0ZXJzLmFkZGl0aW9uYWxGaWx0ZXJzICYmIGZpbHRlcnMuYWRkaXRpb25hbEZpbHRlcnMudGl0bGUgIT09ICcnID8gZmlsdGVycy5hZGRpdGlvbmFsRmlsdGVycy50aXRsZSA6IHRpdGxlSW5SZXNlYXJjaE1vZGUpXCJcbiAgICAgIChyZXR1cm5CdXR0b25QcmVzc2VkKT1cInJldHVyblRvSG9tZVBhZ2UoKVwiXG4gICAgICAoc2VhcmNoU3RyaW5nQ2hhbmdlZCk9XCJ1cGRhdGVTZWFyY2goJGV2ZW50KVwiPlxuICAgIDwvbmctbWlhbS1jYXRhbG9nLWhlYWRlcj5cblxuICAgIDxkaXYgKm5nSWY9XCIhZGlzcGxheUhvbWVQYWdlIGVsc2UgY2F0ZWdvcmllc0NvbXBvbmVudHNcIiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2xpc3RcIj5cbiAgICAgIDxuZy1taWFtLWNhdGFsb2ctbGlzdFxuICAgICAgICBbZmlsdGVyc109XCJmaWx0ZXJzXCJcbiAgICAgICAgW3JhbmRvbU1vZGVdPVwidHJ1ZVwiXG4gICAgICAgIChyZXRyaWV2ZWRSZWNpcGVzKT1cImNoYW5nZUhlYWRlckltYWdlKCRldmVudClcIlxuICAgICAgICAoZmlsdGVyUmVtb3ZlZCk9XCJyZW1vdmVGaWx0ZXIoJGV2ZW50KVwiXG4gICAgICAgIChyZWNpcGVBY3Rpb25UcmlnZ2VyZWQpPVwibWFuYWdlUmVjaXBlQWN0aW9uKCRldmVudClcIj5cbiAgICAgIDwvbmctbWlhbS1jYXRhbG9nLWxpc3Q+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctdGVtcGxhdGUgI2NhdGVnb3JpZXNDb21wb25lbnRzPlxuICAgICAgPGRpdiAqbmdJZj1cImNhdGVnb3JpZXMubGVuZ3RoID4gMFwiIGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fY2F0ZWdvcmllc1wiPlxuICAgICAgICA8bmctbWlhbS1jYXRhbG9nLWNhdGVnb3J5IFxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjYXRlZ29yeSBvZiBjYXRlZ29yaWVzXCIgXG4gICAgICAgICAgW3RpdGxlXT1cImNhdGVnb3J5LnRpdGxlXCJcbiAgICAgICAgICBbZmlsdGVyc109XCJjYXRlZ29yeS5maWx0ZXJzXCIgXG4gICAgICAgICAgKGRpc3BsYXlMaXN0KT1cImNhdGVnb3J5VGl0bGVDbGlja2VkKCRldmVudClcIj5cbiAgICAgICAgPC9uZy1taWFtLWNhdGFsb2ctY2F0ZWdvcnk+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPGRpdiAqbmdJZj1cInJldHVyblRvcEJ1dHRvblNob3VsZEJlRGlzcGxheWVkXCIgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19yZXR1cm5Ub3BcIiAoY2xpY2spPVwicmV0dXJuVG9Ub3AoKVwiPlxuICAgICAgPG5nLW1pYW0taWNvbiBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHByaW1hcnlDb2xvcj1cInZhcigtLW0tY29sb3Itd2hpdGUpXCIgW2ljb25OYW1lXT1cImljb24uQ2hldnJvbkRvd25cIj48L25nLW1pYW0taWNvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjY3JlYXRpb25QYWdlPlxuICA8bmctbWlhbS1yZWNpcGUtc3RlcHBlciBbcmVjaXBlXT1cInJlY2lwZVRvVXBkYXRlXCIgKHJlY2lwZUNoYW5nZSk9XCJsZWF2ZUNyZWF0ZVBhZ2UoKVwiIChjYW5jZWxlZCk9XCJsZWF2ZUNyZWF0ZVBhZ2UoKVwiPjwvbmctbWlhbS1yZWNpcGUtc3RlcHBlcj5cbjwvbmctdGVtcGxhdGU+Il19
|
|
439
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaXBlLWNhdGFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii9idWlsZHMvbWlhbS9uZy1taWFtLXNkay9wcm9qZWN0cy9uZy1taWFtL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9fd2ViLWNvbXBvbmVudHMvcmVjaXBlLWNhdGFsb2cvcmVjaXBlLWNhdGFsb2cuY29tcG9uZW50LnRzIiwibGliL193ZWItY29tcG9uZW50cy9yZWNpcGUtY2F0YWxvZy9yZWNpcGUtY2F0YWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBaUIsaUJBQWlCLEVBQVUsVUFBVSxFQUM3SCxZQUFZLEVBQUUsU0FBUyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBTyxTQUFTLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUUxRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkksT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRXBGLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUE0QixNQUFNLE1BQU0sQ0FBQztBQUN6RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7Ozs7Ozs7O0lDYy9DLCtCQUNFO0lBQUEsNEJBQU07SUFBQSw2REFBNkM7SUFBQSxpQkFBTztJQUMxRCwrQkFDRTtJQUFBLGtDQUFnRjtJQUFsRCxvTUFBMkIsY0FBYyxFQUFFLElBQUksS0FBRTtJQUFDLG1CQUFHO0lBQUEsaUJBQVM7SUFDNUYsa0NBQWlGO0lBQW5ELHNNQUEyQixjQUFjLEVBQUUsS0FBSyxLQUFFO0lBQUMsbUJBQUc7SUFBQSxpQkFBUztJQUMvRixpQkFBTTtJQUNSLGlCQUFNOzs7O0lBRU4sK0JBQ0U7SUFBQSxnREFNdUI7SUFIckIsMlBBQThDLG1PQUFBLHlQQUFBO0lBR2hELGlCQUF1QjtJQUN6QixpQkFBTTs7O0lBTkYsZUFBbUI7SUFBbkIsd0NBQW1CLG9CQUFBOzs7O0lBVW5CLG9EQUsyQjtJQUR6QixpU0FBNEM7SUFDOUMsaUJBQTJCOzs7SUFIekIsMENBQXdCLGlDQUFBOzs7SUFINUIsK0JBQ0U7SUFBQSw0SUFLQTtJQUNGLGlCQUFNOzs7SUFMRixlQUFtQztJQUFuQyw0Q0FBbUM7OztJQUZ2Qyw0RkFDRTs7O0lBREcsbURBQTZCOzs7O0lBVXBDLCtCQUNFO0lBRG1GLGtNQUF1QjtJQUMxRyxtQ0FBc0g7SUFDeEgsaUJBQU07OztJQURxRSxlQUE2QjtJQUE3QixrREFBNkI7Ozs7O0lBckQ1Ryw4QkFFRTtJQUZ5RSxtT0FBMEM7SUFFbkgsaURBU3lCO0lBTHZCLDJOQUE4QiwrTkFBQSwyTkFBQSw4TkFBQTtJQUtoQyxpQkFBeUI7SUFFekIsOEJBQ0U7SUFBQSxpREFPeUI7SUFGdkIsK09BQTBDLDBPQUFBO0lBRTVDLGlCQUF5QjtJQUV6Qiw2RUFDRTtJQU9GLDZFQUNFO0lBU0YsK0hBQ0U7SUFVRiw4RUFDRTtJQUVKLGlCQUFNO0lBQ1IsaUJBQU07Ozs7SUFyREYsZUFBbUI7SUFBbkIsd0NBQW1CLHdEQUFBLHlDQUFBO0lBVXFCLGVBQW1EO0lBQW5ELCtFQUFtRDtJQUV6RixlQUF3QztJQUF4Qyw2REFBd0MsdUNBQUEsa05BQUE7SUFRZSxlQUF3QjtJQUF4Qiw4Q0FBd0I7SUFRNUUsZUFBa0Q7SUFBbEQsOENBQWtELGlCQUFBO0lBcUJsRCxlQUF3QztJQUF4Qyw4REFBd0M7Ozs7SUFNL0Msa0RBQTZJO0lBQTNGLHdPQUFrQyxtTkFBQTtJQUFnQyxpQkFBeUI7OztJQUFySCw4Q0FBeUI7O0FEdENuRCxNQUFNLE9BQU8sc0JBQXNCO0lBd0JqQyxZQUNTLEdBQXNCLEVBQ3RCLGtCQUFxQyxFQUNyQyxjQUE4QixFQUM5QixlQUFpQyxFQUNqQyxjQUE4QixFQUM3QixjQUE4QixFQUMvQixZQUEwQixFQUMxQixZQUF5QjtRQVB6QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBQ3JDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixvQkFBZSxHQUFmLGVBQWUsQ0FBa0I7UUFDakMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzdCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUMvQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQTFCbEMsa0JBQWEsR0FBRyxzQ0FBc0MsQ0FBQztRQUN2RCx3QkFBbUIsR0FBRyx3QkFBd0IsQ0FBQztRQUMvQyxvQkFBZSxHQUFHLElBQUksQ0FBQztRQUN2QixzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDMUIscUNBQWdDLEdBQUcsS0FBSyxDQUFDO1FBQ3pDLFNBQUksR0FBRyxJQUFJLENBQUM7UUFDWixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBRWhCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBR3ZCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBRWpCLGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztRQWF6QyxJQUFJLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDdkUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDekMsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFcEIsSUFBSSxDQUFDLGFBQWEsR0FBRztZQUNuQixRQUFRLENBQUM7Z0JBQ1AsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FDckMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7Z0JBQ3RDLHdHQUF3RztnQkFDeEcsMkZBQTJGO2dCQUMzRixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQ1I7Z0JBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUNoRCxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsRUFDckQsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUNSO2FBQ0YsQ0FBQyxDQUFDLElBQUksQ0FDTCxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM1QixPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM3QixDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRTtZQUNiLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtTQUM5QixDQUFDO0lBQ0osQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsY0FBYyxDQUFDLFFBQVE7UUFDckIsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDO2dCQUNqQixHQUFHLEVBQUUsYUFBYTtnQkFDbEIsS0FBSyxFQUFFLDJCQUEyQjtnQkFDbEMsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRTthQUM3QixDQUFDLENBQUM7UUFDSCxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFBRTtZQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDbkIsR0FBRyxFQUFFLGVBQWUsQ0FBQyxLQUFLO2dCQUMxQixLQUFLLEVBQUUsZUFBZSxDQUFDLEtBQUs7Z0JBQzVCLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxlQUFlLENBQUMsRUFBRSxFQUFFO2FBQzFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyRSxJQUFJLFlBQVksRUFBRTtZQUNoQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDbkIsR0FBRyxFQUFFLFNBQVM7Z0JBQ2QsS0FBSyxFQUFFLFNBQVM7Z0JBQ2hCLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFFO2FBQzdDLENBQUMsQ0FBQztTQUNKO1FBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pFLElBQUksUUFBUSxFQUFFO1lBQ1osSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQ25CLEdBQUcsRUFBRSxPQUFPO2dCQUNaLEtBQUssRUFBRSxPQUFPO2dCQUNkLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFO2FBQ3pDLENBQUMsQ0FBQztTQUNKO1FBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyRSxJQUFJLFdBQVcsRUFBRTtZQUNmLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO2dCQUNuQixHQUFHLEVBQUUsVUFBVTtnQkFDZixLQUFLLEVBQUUsVUFBVTtnQkFDakIsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUU7YUFDNUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQzVDLE1BQU0sV0FBVyxHQUFHLElBQUksZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3RELE1BQU0sbUJBQW1CLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxtQkFBbUIsRUFBQztZQUN2QixPQUFPO1NBQ1I7UUFDRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLG1CQUFtQixDQUFDLENBQUM7UUFDeEYsSUFBSSxDQUFDLGdCQUFnQixFQUFDO1lBQ3BCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCw2RkFBNkY7SUFDN0YsWUFBWTtRQUNWLElBQUksQ0FBQyxPQUFPLEdBQUc7WUFDYixVQUFVO1lBQ1YsNkVBQTZFO1lBQzdFLDJFQUEyRTtZQUMzRSw2RUFBNkU7WUFDN0UsS0FBSztZQUNMLFVBQVUsRUFBRTtnQkFDVixFQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFDO2dCQUN6QyxFQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFDO2dCQUMxQyxFQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFDO2FBQzdDO1lBQ0QsSUFBSSxFQUFFO2dCQUNKLEVBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUM7Z0JBQ2pELEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBQztnQkFDdEQsRUFBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFDO2dCQUN6RCxnRkFBZ0Y7YUFDakY7WUFDRCxJQUFJLEVBQUU7Z0JBQ0osRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBQztnQkFDdkMsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBQztnQkFDdkMsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQztnQkFDdEMsRUFBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQzthQUN4QztTQUNGLENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixFQUFFLENBQUM7U0FBRTtRQUNuRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUM7WUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUFFO0lBQ3hELENBQUM7SUFFRCxZQUFZLENBQUMsTUFBYztRQUN6QixJQUFJLE1BQU0sS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFDN0IsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ25CO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxPQUFzQjtRQUNsQyxJQUFJLENBQUMsT0FBTyxxQkFBUSxPQUFPLENBQUUsQ0FBQyxDQUFDLHVDQUF1QztRQUN0RSxJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztRQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3BCO1FBQ0QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxVQUFVO1FBQ1IsMERBQTBEO1FBQzFELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFO1lBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FBRTthQUNuRCxFQUFFLGtCQUFrQjtZQUN2QixJQUFJLENBQUMsT0FBTyxxQkFBUSxJQUFJLENBQUMsT0FBTyxDQUFFLENBQUMsQ0FBQyx1Q0FBdUM7WUFDM0UsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUMxQjtJQUNILENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxLQUFvQztRQUN2RCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEYsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxlQUFlOztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO2VBQzVILElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLEVBQUUsSUFBSSxRQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLDBDQUFFLE9BQU8sQ0FBQSxDQUFDO0lBQzlFLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBc0I7UUFDakMsS0FBSyxNQUFNLENBQUMsSUFBSSxNQUFNLEVBQUU7WUFDdEIsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFO2dCQUNYLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFlBQVksQ0FBQyxVQUFrQjtRQUM3QixJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQztRQUNqQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQy9DO0lBQ0gsQ0FBQztJQUVELHNCQUFzQjtRQUNwQixJQUFJLENBQUMsZ0NBQWdDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDM0csSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsT0FBaUI7O1FBQ2pDLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLFdBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsMENBQUUsT0FBTyxDQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3pGLElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUMsQ0FBQyw2Q0FBNkM7UUFDOUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUNqRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLHVHQUF1RztRQUN2RyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBRSxHQUFHLENBQUMsRUFBRTtZQUNqQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQU0sR0FBRyxJQUFJO1FBQzFCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDO1FBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBdUM7O1FBQ3hELFFBQVEsS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUNwQixLQUFLLFFBQVEsQ0FBQyxDQUFDO2dCQUNiLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdEIsTUFBTTthQUNQO1lBRUQsS0FBSyxNQUFNLENBQUMsQ0FBQztnQkFDWCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDbEMsTUFBTTthQUNQO1lBRUQsS0FBSyxRQUFRLENBQUMsQ0FBQztnQkFDYixJQUFJLE9BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsRUFBRSxLQUFJLE9BQUEsS0FBSyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsMENBQUUsSUFBSSxDQUFDLEVBQUUsTUFBSyxVQUFVLEVBQUU7b0JBQzdGLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNyQixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7d0JBQ3pELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDcEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztpQkFDSDtnQkFDRCxNQUFNO2FBQ1A7U0FDRjtJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsT0FBaUI7UUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsS0FBSztRQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FDL0MsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUNyQyxDQUFDLFNBQVMsRUFBRSxDQUNkLENBQUM7SUFDSixDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNyQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQ2hDLENBQUM7SUFDSixDQUFDO0lBRU8sWUFBWTtRQUNsQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMvRCxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQzFDLEdBQUcsQ0FBQyxDQUFDLFFBQXFDLEVBQUUsRUFBRTtZQUM1QyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxvRkFBb0Y7SUFDNUUsc0JBQXNCO1FBQzVCLE9BQU8sYUFBYSxDQUFDO1lBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUztZQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQztTQUNwRCxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3JCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQixNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUM7WUFDckQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OzRGQXBVVSxzQkFBc0I7MkRBQXRCLHNCQUFzQjt1QkFDdEIsc0JBQXNCOzt1QkFFbkIsd0JBQXdCOzs7Ozs7O1FDeEJ4Qyw0QkFBNkQ7UUFDN0Qsd0VBRUU7UUF1REYsd0hBQ0U7OztRQTFERyxlQUF5QztRQUF6QywwQ0FBeUMsaUJBQUE7O2tERG9CakMsc0JBQXNCO2NBUGxDLFNBQVM7ZUFBQztnQkFDVCxRQUFRLEVBQUUsd0JBQXdCO2dCQUNsQyxXQUFXLEVBQUUsaUNBQWlDO2dCQUM5QyxTQUFTLEVBQUUsQ0FBQyxpQ0FBaUMsQ0FBQztnQkFDOUMsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7Z0JBQ3JDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2FBQ2hEOytRQUVvQyxhQUFhO2tCQUEvQyxTQUFTO21CQUFDLHNCQUFzQjtZQUNFLFNBQVM7a0JBQTNDLFNBQVM7bUJBQUMsc0JBQXNCO1lBQ1EsY0FBYztrQkFBdEQsWUFBWTttQkFBQyx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdFbmNhcHN1bGF0aW9uLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgVmlld0NoaWxkLCBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgT25Jbml0LCBFbGVtZW50UmVmLFxuICBWaWV3Q2hpbGRyZW4sIFF1ZXJ5TGlzdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBtYXAsIHNraXBXaGlsZSwgc3dpdGNoTWFwLCB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDYXRhbG9nQ2F0ZWdvcnlDb21wb25lbnQgfSBmcm9tICcuLi9jYXRhbG9nLWNhdGVnb3J5L2NhdGFsb2ctY2F0ZWdvcnkuY29tcG9uZW50JztcbmltcG9ydCB7IFJlY2lwZSB9IGZyb20gJy4uLy4uL19tb2RlbHMnO1xuaW1wb3J0IHsgUmVjaXBlVHlwZVNlcnZpY2UsIFNwb25zb3JTZXJ2aWNlLCBQYWNrYWdlU2VydmljZSwgU3VwcGxpZXJzU2VydmljZSwgUmVjaXBlc1NlcnZpY2UsIFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vX3NlcnZpY2VzJztcbmltcG9ydCB7IEljb24gfSBmcm9tICcuLi8uLi9fdHlwZXMvaWNvbi5lbnVtJztcbmltcG9ydCB7IENhdGFsb2dIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuLi9jYXRhbG9nLWhlYWRlci9jYXRhbG9nLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVjaXBlRmlsdGVyLCBSZWNpcGVGaWx0ZXJzIH0gZnJvbSAnLi4vLi4vX3R5cGVzL3JlY2lwZS1maWx0ZXJzJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGZvcmtKb2luLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1lZGlhTWF0Y2hlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xuaW1wb3J0IHsgRG9jdW1lbnRDb2xsZWN0aW9uIH0gZnJvbSAnbmd4LWpzb25hcGknO1xuaW1wb3J0IHsgUGFja2FnZSB9IGZyb20gJy4uLy4uL19tb2RlbHMvcGFja2FnZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nLW1pYW0tcmVjaXBlLWNhdGFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmVjaXBlLWNhdGFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZWNpcGUtY2F0YWxvZy5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBSZWNpcGVDYXRhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKENhdGFsb2dIZWFkZXJDb21wb25lbnQpIGNhdGFsb2dIZWFkZXI6IENhdGFsb2dIZWFkZXJDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ21pYW1DYXRhbG9nVG9wQW5jaG9yJykgdG9wQW5jaG9yOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkcmVuKENhdGFsb2dDYXRlZ29yeUNvbXBvbmVudCkgIGNhdGVnb3JpZXNDb21wITogUXVlcnlMaXN0PENhdGFsb2dDYXRlZ29yeUNvbXBvbmVudD47XG5cbiAgZmlsdGVyczogUmVjaXBlRmlsdGVycztcbiAgaG9tZVBhZ2VUaXRsZSA9ICdRdVxcJ2VzdC1jZSBxdWkgdm91cyBmZXJhaXQgcGxhaXNpciA/JztcbiAgdGl0bGVJblJlc2VhcmNoTW9kZSA9ICdSw6lzdWx0YXRzIGRlIHJlY2hlcmNoZSc7XG4gIGRpc3BsYXlIb21lUGFnZSA9IHRydWU7XG4gIGlzRmlsdGVyQ29sbGFwc2VkID0gZmFsc2U7XG4gIHJldHVyblRvcEJ1dHRvblNob3VsZEJlRGlzcGxheWVkID0gZmFsc2U7XG4gIGljb24gPSBJY29uO1xuICBjYXRlZ29yaWVzID0gW107XG4gIHJlY2lwZUluSGVhZGVyOiBSZWNpcGU7XG4gIGNyZWF0aW5nUmVjaXBlID0gZmFsc2U7XG4gIHJlY2lwZVRvVXBkYXRlOiBSZWNpcGU7XG4gIGZpbHRlclRvUmVtb3ZlOiBzdHJpbmc7XG4gIGlzTW9iaWxlID0gZmFsc2U7XG4gIGxpc3RJc0VtcHR5ID0gZmFsc2U7XG4gIHNob3dVc2VyRmVlZGJhY2sgPSBmYWxzZTtcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgc3VwcGxpZXJJZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwdWJsaWMgcmVjaXBlVHlwZXNTZXJ2aWNlOiBSZWNpcGVUeXBlU2VydmljZSxcbiAgICBwdWJsaWMgc3BvbnNvclNlcnZpY2U6IFNwb25zb3JTZXJ2aWNlLFxuICAgIHB1YmxpYyBzdXBwbGllclNlcnZpY2U6IFN1cHBsaWVyc1NlcnZpY2UsXG4gICAgcHVibGljIHBhY2thZ2VTZXJ2aWNlOiBQYWNrYWdlU2VydmljZSxcbiAgICBwcml2YXRlIHJlY2lwZXNTZXJ2aWNlOiBSZWNpcGVzU2VydmljZSxcbiAgICBwdWJsaWMgbWVkaWFNYXRjaGVyOiBNZWRpYU1hdGNoZXIsXG4gICAgcHVibGljIHVzZXJzU2VydmljZTogVXNlclNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5pc01vYmlsZSA9IG1lZGlhTWF0Y2hlci5tYXRjaE1lZGlhKCcobWF4LXdpZHRoOiAxMDIycHgpJykubWF0Y2hlcztcbiAgICB0aGlzLmlzRmlsdGVyQ29sbGFwc2VkID0gdGhpcy5pc01vYmlsZTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucmVzZXRGaWx0ZXJzKCk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBbXG4gICAgICBmb3JrSm9pbihbXG4gICAgICAgIHRoaXMucmVjaXBlVHlwZXNTZXJ2aWNlLmdldFR5cGVzKCkucGlwZShcbiAgICAgICAgICBza2lwV2hpbGUodHlwZXMgPT4gdHlwZXMubGVuZ3RoID09PSAwKSxcbiAgICAgICAgICAvLyByZWNpcGVUeXBlc1NlcnZpY2UuZ2V0VHlwZXMoKSBjb21lcyBmcm9tIGEgYmVoYXZpb3Igc3ViamVjdCwgaXQgZG9lcyBub3QgZW1pdCB0aGUgY29tcGxldGUoKSBmdW5jdGlvblxuICAgICAgICAgIC8vIHlvdSBhYnNvbHV0bHkgbmVlZCBhIHRha2UoMSkgb3IgY2FsbCBjb21wbGV0ZSB5b3Vyc2VsZiB0byB0cmlnZ2VyIHRoZSBmb3Jram9pbiBzdWJzY3JpYmVcbiAgICAgICAgICB0YWtlKDEpXG4gICAgICAgICksXG4gICAgICAgIHRoaXMuc3VwcGxpZXJTZXJ2aWNlLnN1cHBsaWVyJC5hc09ic2VydmFibGUoKS5waXBlKFxuICAgICAgICAgIHNraXBXaGlsZShzdXBwID0+IHN1cHAgPT09IHVuZGVmaW5lZCB8fCBzdXBwID09IG51bGwpLFxuICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgKVxuICAgICAgXSkucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKHJlcyA9PiB7XG4gICAgICAgICAgdGhpcy5zdXBwbGllcklkID0gcmVzWzFdLmlkO1xuICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRQYWNrYWdlcygpO1xuICAgICAgICB9KVxuICAgICAgKS5zdWJzY3JpYmUoKSxcbiAgICAgIHRoaXMuYXNzZXNzU2hvd1VzZXJGZWVkYmFjaygpXG4gICAgXTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBpbml0Q2F0ZWdvcmllcyhwYWNrYWdlcykge1xuICAgIHRoaXMuY2F0ZWdvcmllcyA9IFt7XG4gICAgICBrZXk6ICdzdWdnZXN0aW9ucycsXG4gICAgICB0aXRsZTogJ1N1Z2dlc3Rpb25zIGRlIGxhIHNlbWFpbmUnLFxuICAgICAgZmlsdGVyczogeyBzdWdnZXN0ZWQ6IHRydWUgfVxuICAgIH1dO1xuICAgIHBhY2thZ2VzLmRhdGEuZm9yRWFjaChjYXRlZ29yeVBhY2thZ2UgPT4ge1xuICAgICAgdGhpcy5jYXRlZ29yaWVzLnB1c2goe1xuICAgICAgICBrZXk6IGNhdGVnb3J5UGFja2FnZS50aXRsZSxcbiAgICAgICAgdGl0bGU6IGNhdGVnb3J5UGFja2FnZS50aXRsZSxcbiAgICAgICAgZmlsdGVyczogeyBwYWNrYWdlczogY2F0ZWdvcnlQYWNrYWdlLmlkIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc3RhcnRlcnNUeXBlID0gdGhpcy5yZWNpcGVUeXBlc1NlcnZpY2UuZ2V0VHlwZUJ5TmFtZSgnZW50csOpZScpO1xuICAgIGlmIChzdGFydGVyc1R5cGUpIHtcbiAgICAgIHRoaXMuY2F0ZWdvcmllcy5wdXNoKHtcbiAgICAgICAga2V5OiAnZW50cmVlcycsXG4gICAgICAgIHRpdGxlOiAnRW50csOpZXMnLFxuICAgICAgICBmaWx0ZXJzOiB7IHJlY2lwZV90eXBlX2lkOiBzdGFydGVyc1R5cGUuaWQgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgbWFpblR5cGUgPSB0aGlzLnJlY2lwZVR5cGVzU2VydmljZS5nZXRUeXBlQnlOYW1lKCdwbGF0IHByaW5jaXBhbCcpO1xuICAgIGlmIChtYWluVHlwZSkge1xuICAgICAgdGhpcy5jYXRlZ29yaWVzLnB1c2goe1xuICAgICAgICBrZXk6ICdwbGF0cycsXG4gICAgICAgIHRpdGxlOiAnUGxhdHMnLFxuICAgICAgICBmaWx0ZXJzOiB7IHJlY2lwZV90eXBlX2lkOiBtYWluVHlwZS5pZCB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBkZXNzZXJ0VHlwZSA9IHRoaXMucmVjaXBlVHlwZXNTZXJ2aWNlLmdldFR5cGVCeU5hbWUoJ2Rlc3NlcnQnKTtcbiAgICBpZiAoZGVzc2VydFR5cGUpIHtcbiAgICAgIHRoaXMuY2F0ZWdvcmllcy5wdXNoKHtcbiAgICAgICAga2V5OiAnZGVzc2VydHMnLFxuICAgICAgICB0aXRsZTogJ0Rlc3NlcnRzJyxcbiAgICAgICAgZmlsdGVyczogeyByZWNpcGVfdHlwZV9pZDogZGVzc2VydFR5cGUuaWQgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0Q2F0ZWdvcnlGcm9tVXJsKCkge1xuICAgIGNvbnN0IHBhcmFtc1N0cmluZyA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7XG4gICAgY29uc3QgcGFyYW1zQXJyYXkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHBhcmFtc1N0cmluZyk7XG4gICAgY29uc3Qgc2VsZWN0ZWRDYXRlZ29yeUtleSA9IHBhcmFtc0FycmF5LmdldCgnY2F0YWxvZ0NhdGVnb3J5Jyk7XG4gICAgaWYgKCFzZWxlY3RlZENhdGVnb3J5S2V5KXtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0ZWRDYXRlZ29yeSA9IHRoaXMuY2F0ZWdvcmllcy5maW5kKChjYXQpID0+IGNhdC5rZXkgPT09IHNlbGVjdGVkQ2F0ZWdvcnlLZXkpO1xuICAgIGlmICghc2VsZWN0ZWRDYXRlZ29yeSl7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2F0ZWdvcnlUaXRsZUNsaWNrZWQoc2VsZWN0ZWRDYXRlZ29yeSk7XG4gIH1cblxuICAvLyBVc2VkIG9uIGxvYWQgdG8gYnVpbGQgdGhlIGZpbHRlcnMgYXR0cmlidXRlLCBhbmQgb24gY2xpY2sgb24gdGhlIGxpbmsgdG8gcmVzZXQgdGhlIGZpbHRlcnNcbiAgcmVzZXRGaWx0ZXJzKCkge1xuICAgIHRoaXMuZmlsdGVycyA9IHtcbiAgICAgIC8vIHR5cGU6IFtcbiAgICAgIC8vICAge25hbWU6IHJlY2lwZVR5cGVzU2VydmljZS5nZXRUeXBlKDEpLmlkLCB2YWx1ZTogZmFsc2UsIHRleHQ6ICdFbnRyw6llcyd9LFxuICAgICAgLy8gICB7bmFtZTogcmVjaXBlVHlwZXNTZXJ2aWNlLmdldFR5cGUoMikuaWQsIHZhbHVlOiBmYWxzZSwgdGV4dDogJ1BsYXRzJ30sXG4gICAgICAvLyAgIHtuYW1lOiByZWNpcGVUeXBlc1NlcnZpY2UuZ2V0VHlwZSgzKS5pZCwgdmFsdWU6IGZhbHNlLCB0ZXh0OiAnRGVzc2VydHMnfVxuICAgICAgLy8gXSxcbiAgICAgIGRpZmZpY3VsdHk6IFtcbiAgICAgICAge25hbWU6ICcxJywgdmFsdWU6IGZhbHNlLCB0ZXh0OiAnRmFjaWxlJ30sXG4gICAgICAgIHtuYW1lOiAnMicsIHZhbHVlOiBmYWxzZSwgdGV4dDogJ01veWVubmUnfSxcbiAgICAgICAge25hbWU6ICczJywgdmFsdWU6IGZhbHNlLCB0ZXh0OiAnRGlmZmljaWxlJ31cbiAgICAgIF0sXG4gICAgICBjb3N0OiBbXG4gICAgICAgIHtuYW1lOiAnMC01JywgdmFsdWU6IGZhbHNlLCB0ZXh0OiAnQmFzICjiiYgg4omkIDXigqwpJ30sXG4gICAgICAgIHtuYW1lOiAnNS0xMCcsIHZhbHVlOiBmYWxzZSwgdGV4dDogJ01veWVuICjiiYggNS0xMOKCrCkgJ30sXG4gICAgICAgIHtuYW1lOiAnMTAtMTAwMCcsIHZhbHVlOiBmYWxzZSwgdGV4dDogJ8OJbGV2w6kgKOKJiCDiiaUgMTDigqwpICd9XG4gICAgICAgIC8vIHdlIHNldCBhIGxpbWl0IGF0IDEwMDDigqwgbWF4LCBpZiBhIHJlY2lwZSBjb3N0IG1vcmUgc2hvdWxkIGJlIG5vbiBzZW5zZSBhbnl3YXlcbiAgICAgIF0sXG4gICAgICB0aW1lOiBbXG4gICAgICAgIHtuYW1lOiAnMTUnLCB2YWx1ZTogZmFsc2UsIHRleHQ6ICcxNW0nfSxcbiAgICAgICAge25hbWU6ICczMCcsIHZhbHVlOiBmYWxzZSwgdGV4dDogJzMwbSd9LFxuICAgICAgICB7bmFtZTogJzYwJywgdmFsdWU6IGZhbHNlLCB0ZXh0OiAnMWgnfSxcbiAgICAgICAge25hbWU6ICcxMjAnLCB2YWx1ZTogZmFsc2UsIHRleHQ6ICcyaCd9XG4gICAgICBdLFxuICAgIH07XG4gICAgaWYgKHRoaXMuY2F0YWxvZ0hlYWRlcikgeyB0aGlzLmNhdGFsb2dIZWFkZXIucmVzZXRTZWFyY2hTdHJpbmcoKTsgfVxuICAgIHRoaXMuZmlsdGVycy5zZWFyY2ggPSAnJztcbiAgICB0aGlzLmxpc3RJc0VtcHR5ID0gZmFsc2U7XG4gICAgaWYgKCF0aGlzLmRpc3BsYXlIb21lUGFnZSl7IHRoaXMucmV0dXJuVG9Ib21lUGFnZSgpOyB9XG4gIH1cblxuICB1cGRhdGVTZWFyY2goc2VhcmNoOiBzdHJpbmcpIHtcbiAgICBpZiAoc2VhcmNoICE9PSB0aGlzLmZpbHRlcnMuc2VhcmNoKSB7XG4gICAgICB0aGlzLmZpbHRlcnMuc2VhcmNoID0gc2VhcmNoO1xuICAgICAgdGhpcy5yZWxvYWRMaXN0KCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlRmlsdGVycyhmaWx0ZXJzOiBSZWNpcGVGaWx0ZXJzKSB7XG4gICAgdGhpcy5maWx0ZXJzID0geyAuLi5maWx0ZXJzIH07IC8vIE5lY2Vzc2FyeSB0byB0cmlnZ2VyIHRoZSBuZ09uQ2hhbmdlc1xuICAgIHRoaXMuZmlsdGVyVG9SZW1vdmUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5saXN0SXNFbXB0eSA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmlzTW9iaWxlKSB7XG4gICAgICB0aGlzLnJldHVyblRvVG9wKCk7XG4gICAgfVxuICAgIHRoaXMucmVsb2FkTGlzdCgpO1xuICB9XG5cbiAgcmVsb2FkTGlzdCgpIHtcbiAgICAvLyBJZiB0aGVyZSBhcmUgbm8gZmlsdGVycyBub3Igc2VhcmNoLCByZXR1cm4gdG8gaG9tZSBwYWdlXG4gICAgaWYgKHRoaXMuYXJlRmlsdGVyc0VtcHR5KCkpIHsgdGhpcy5yZXR1cm5Ub0hvbWVQYWdlKCk7IH1cbiAgICBlbHNlIHsgLy8gUmVsb2FkIHRoZSBsaXN0XG4gICAgICB0aGlzLmZpbHRlcnMgPSB7IC4uLnRoaXMuZmlsdGVycyB9OyAvLyBOZWNlc3NhcnkgdG8gdHJpZ2dlciB0aGUgbmdPbkNoYW5nZXNcbiAgICAgIHRoaXMuZGlzcGxheUhvbWVQYWdlID0gZmFsc2U7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgY2F0ZWdvcnlUaXRsZUNsaWNrZWQoZXZlbnQ6IHt0aXRsZTogc3RyaW5nLCBmaWx0ZXJzOiBhbnl9KSB7XG4gICAgdGhpcy5yZXR1cm5Ub1RvcCgpO1xuICAgIHRoaXMuZmlsdGVycy5hZGRpdGlvbmFsRmlsdGVycyA9IHsgZmlsdGVyczogZXZlbnQuZmlsdGVycywgdGl0bGU6IGV2ZW50LnRpdGxlIH07XG4gICAgdGhpcy5yZWxvYWRMaXN0KCk7XG4gIH1cblxuICBhcmVGaWx0ZXJzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNGaWVsZEVtcHR5KHRoaXMuZmlsdGVycy5kaWZmaWN1bHR5KSAmJiB0aGlzLmlzRmllbGRFbXB0eSh0aGlzLmZpbHRlcnMuY29zdCkgJiYgdGhpcy5pc0ZpZWxkRW1wdHkodGhpcy5maWx0ZXJzLnRpbWUpXG4gICAgICAmJiB0aGlzLmZpbHRlcnMuc2VhcmNoID09PSAnJyAmJiAhdGhpcy5maWx0ZXJzLmFkZGl0aW9uYWxGaWx0ZXJzPy5maWx0ZXJzO1xuICB9XG5cbiAgaXNGaWVsZEVtcHR5KGZpbHRlcjogUmVjaXBlRmlsdGVyW10pIHtcbiAgICBmb3IgKGNvbnN0IGYgb2YgZmlsdGVyKSB7XG4gICAgICBpZiAoZi52YWx1ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmVtb3ZlRmlsdGVyKGZpbHRlclRleHQ6IHN0cmluZykge1xuICAgIHRoaXMuZmlsdGVyVG9SZW1vdmUgPSBmaWx0ZXJUZXh0O1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHJldHVyblRvVG9wKCkge1xuICAgIGlmICh0aGlzLnRvcEFuY2hvcikge1xuICAgICAgdGhpcy50b3BBbmNob3IubmF0aXZlRWxlbWVudC5zY3JvbGxJbnRvVmlldygpO1xuICAgIH1cbiAgfVxuXG4gIGRpc3BsYXlSZXR1cm5Ub3BCdXR0b24oKSB7XG4gICAgdGhpcy5yZXR1cm5Ub3BCdXR0b25TaG91bGRCZURpc3BsYXllZCA9IHRoaXMudG9wQW5jaG9yLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tIDwgLTQwMDtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBjaGFuZ2VIZWFkZXJJbWFnZShyZWNpcGVzOiBSZWNpcGVbXSkge1xuICAgIGlmIChyZWNpcGVzLmxlbmd0aCA+IDAgJiYgdGhpcy5maWx0ZXJzLmFkZGl0aW9uYWxGaWx0ZXJzPy5maWx0ZXJzICYmICF0aGlzLnJlY2lwZUluSGVhZGVyKSB7XG4gICAgICB0aGlzLnJlY2lwZUluSGVhZGVyID0gcmVjaXBlc1swXTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm5Ub0hvbWVQYWdlKCkge1xuICAgIHRoaXMuZGlzcGxheUhvbWVQYWdlID0gdHJ1ZTtcbiAgICB0aGlzLnJlY2lwZUluSGVhZGVyID0gdW5kZWZpbmVkOyAvLyBEb24ndCBmb3JjZSBhIHJlY2lwZSBpbiBoZWFkZXIgb24gaG9tZVBhZ2VcbiAgICB0aGlzLnJlc2V0RmlsdGVycygpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG9uRmlsdGVyQ29sbGFwc2VkKCkge1xuICAgIHRoaXMuaXNGaWx0ZXJDb2xsYXBzZWQgPSAhdGhpcy5pc0ZpbHRlckNvbGxhcHNlZDtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgLy8gdG8gdHJpZ2dlciBhZnRlciB0aGUgZGV0ZWN0Q2hhbmdlcyBiZWNhdXNlIHdlIG5lZWQgdG8gYWxyZWFkIGhhdmUgdGhlIGRpc3BsYXkgY2hhbmdlIHRvIHVwZGF0ZSBjYXJkc1xuICAgIHRoaXMuY2F0ZWdvcmllc0NvbXAuZm9yRWFjaCggY2F0ID0+IHtcbiAgICAgIGNhdC51cGRhdGVXaWR0aCgpO1xuICAgIH0pO1xuICB9XG5cbiAgZ29Ub0NyZWF0ZVBhZ2UocmVjaXBlID0gbnVsbCkge1xuICAgIHRoaXMuY3JlYXRpbmdSZWNpcGUgPSB0cnVlO1xuICAgIHRoaXMucmVjaXBlVG9VcGRhdGUgPSByZWNpcGU7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMucmV0dXJuVG9Ub3AoKTtcbiAgfVxuXG4gIGxlYXZlQ3JlYXRlUGFnZSgpIHtcbiAgICB0aGlzLmNyZWF0aW5nUmVjaXBlID0gZmFsc2U7XG4gICAgdGhpcy5yZWxvYWRMaXN0KCk7XG4gICAgdGhpcy5yZXR1cm5Ub1RvcCgpO1xuICB9XG5cbiAgbWFuYWdlUmVjaXBlQWN0aW9uKGV2ZW50OiB7YWN0aW9uOiBzdHJpbmcsIHJlY2lwZTogUmVjaXBlfSkge1xuICAgIHN3aXRjaCAoZXZlbnQuYWN0aW9uKSB7XG4gICAgICBjYXNlICdDUkVBVEUnOiB7XG4gICAgICAgIHRoaXMuZ29Ub0NyZWF0ZVBhZ2UoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ0VESVQnOiB7XG4gICAgICAgIHRoaXMuZ29Ub0NyZWF0ZVBhZ2UoZXZlbnQucmVjaXBlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ0RFTEVURSc6IHtcbiAgICAgICAgaWYgKGV2ZW50LnJlY2lwZT8uaWQgJiYgZXZlbnQucmVjaXBlLnJlbGF0aW9uc2hpcHNbJ3JlY2lwZS1wcm92aWRlciddPy5kYXRhLmlkID09PSAncGVyc29uYWwnKSB7XG4gICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICB0aGlzLnJlY2lwZXNTZXJ2aWNlLmRlbGV0ZShldmVudC5yZWNpcGUuaWQpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMucmVsb2FkTGlzdCgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlzTGlzdEVtcHR5KHJlY2lwZXM6IFJlY2lwZVtdKSB7XG4gICAgdGhpcy5saXN0SXNFbXB0eSA9IHJlY2lwZXMubGVuZ3RoID09PSAwO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHNldFVzZXJQcmVmZXJlbmNlKHByZWYsIHN0YXRlKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLnVzZXJzU2VydmljZS5zZXRQcmVmZXJlbmNlKHByZWYsIHN0YXRlKS5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5sb2FkUGFja2FnZXMoKSlcbiAgICAgICkuc3Vic2NyaWJlKClcbiAgICApO1xuICB9XG5cbiAgcmVsb2FkUGFja2FnZXMoKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmxvYWRQYWNrYWdlcygpLnN1YnNjcmliZSgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFBhY2thZ2VzKCk6IE9ic2VydmFibGU8RG9jdW1lbnRDb2xsZWN0aW9uPFBhY2thZ2U+PiB7XG4gICAgcmV0dXJuIHRoaXMucGFja2FnZVNlcnZpY2UuY2F0ZWdvcmllc19mb3IoW3RoaXMuc3VwcGxpZXJJZF0pLnBpcGUoXG4gICAgICBza2lwV2hpbGUocGFja2FnZXMgPT4gcGFja2FnZXMuaXNfbG9hZGluZyksXG4gICAgICB0YXAoKHBhY2thZ2VzOiBEb2N1bWVudENvbGxlY3Rpb248UGFja2FnZT4pID0+IHtcbiAgICAgICAgdGhpcy5pbml0Q2F0ZWdvcmllcyhwYWNrYWdlcyk7XG4gICAgICAgIHRoaXMuc2VsZWN0Q2F0ZWdvcnlGcm9tVXJsKCk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8vIFNob3cgZmVlZGJhY2sgYmxvY2sgb25seSBpZiB1c2VyIGlzIGxvZ2dlZCBhbmQgdGhlIGNoaWxkcmVuIHByZWZlcmVuY2UgaXMgdW5rbm93blxuICBwcml2YXRlIGFzc2Vzc1Nob3dVc2VyRmVlZGJhY2soKTogU3Vic2NyaXB0aW9uIHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnVzZXJzU2VydmljZS5pc0xvZ2dlZCQsXG4gICAgICB0aGlzLnVzZXJzU2VydmljZS5wcmVmZXJlbmNlRGVmaW5lZCgnaGFzX2NoaWxkcmVuJylcbiAgICBdKS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XG4gICAgICBjb25zdCBsb2dnZWQgPSByZXN1bHRzWzBdO1xuICAgICAgY29uc3QgcHJlZmVyZW5jZURlZmluZWQgPSByZXN1bHRzWzFdO1xuICAgICAgdGhpcy5zaG93VXNlckZlZWRiYWNrID0gbG9nZ2VkICYmICFwcmVmZXJlbmNlRGVmaW5lZDtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiAjbWlhbUNhdGFsb2dUb3BBbmNob3IgY2xhc3M9XCJtaWFtLWNhdGFsb2ctYW5jaG9yXCI+PC9kaXY+XG48ZGl2ICpuZ0lmPVwiIWNyZWF0aW5nUmVjaXBlIGVsc2UgY3JlYXRpb25QYWdlXCIgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nXCIgKHdpbmRvdzpzY3JvbGwpPVwiZGlzcGxheVJldHVyblRvcEJ1dHRvbigpXCI+XG5cbiAgPG5nLW1pYW0tcmVjaXBlLWZpbHRlcnNcbiAgICBbZmlsdGVyc109XCJmaWx0ZXJzXCJcbiAgICBbbW9iaWxlRml4ZWRdPVwicmV0dXJuVG9wQnV0dG9uU2hvdWxkQmVEaXNwbGF5ZWRcIlxuICAgIFtmaWx0ZXJUb1JlbW92ZV09XCJmaWx0ZXJUb1JlbW92ZVwiXG4gICAgKGZpbHRlclJlc2V0KT1cInJlc2V0RmlsdGVycygpXCJcbiAgICAoZmlsdGVyQ2hhbmdlZCk9XCJ1cGRhdGVGaWx0ZXJzKCRldmVudClcIlxuICAgIChmaWx0ZXJDb2xsYXBzZWQpPVwib25GaWx0ZXJDb2xsYXBzZWQoKVwiXG4gICAgKHByZWZlcmVuY2VzQ2hhbmdlZCk9XCJyZWxvYWRQYWNrYWdlcygpXCJcbiAgPlxuICA8L25nLW1pYW0tcmVjaXBlLWZpbHRlcnM+XG5cbiAgPGRpdiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2NvbnRlbnRcIiBbbmdDbGFzc109XCJ7J2ZpbHRlci1jb2xsYXBzZWQnOiBpc0ZpbHRlckNvbGxhcHNlZH1cIj5cbiAgICA8bmctbWlhbS1jYXRhbG9nLWhlYWRlciBcbiAgICAgIFtkaXNwbGF5UmV0dXJuQnV0dG9uXT1cIiFkaXNwbGF5SG9tZVBhZ2VcIlxuICAgICAgW2ZvcmNlZFJlY2lwZV09XCJyZWNpcGVJbkhlYWRlclwiXG4gICAgICBbdGl0bGVdPVwiZGlzcGxheUhvbWVQYWdlID8gaG9tZVBhZ2VUaXRsZSA6IFxuICAgICAgICAoZmlsdGVycy5hZGRpdGlvbmFsRmlsdGVycyAmJiBmaWx0ZXJzLmFkZGl0aW9uYWxGaWx0ZXJzLnRpdGxlICE9PSAnJyA/IGZpbHRlcnMuYWRkaXRpb25hbEZpbHRlcnMudGl0bGUgOiB0aXRsZUluUmVzZWFyY2hNb2RlKVwiXG4gICAgICAocmV0dXJuQnV0dG9uUHJlc3NlZCk9XCJyZXR1cm5Ub0hvbWVQYWdlKClcIlxuICAgICAgKHNlYXJjaFN0cmluZ0NoYW5nZWQpPVwidXBkYXRlU2VhcmNoKCRldmVudClcIj5cbiAgICA8L25nLW1pYW0tY2F0YWxvZy1oZWFkZXI+XG5cbiAgICA8ZGl2IGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fY29udGVudF9fdXNlci1mZWVkYmFja1wiICpuZ0lmPVwic2hvd1VzZXJGZWVkYmFja1wiPlxuICAgICAgPHNwYW4+VW5lIHBldGl0ZSBxdWVzdGlvbiA6IEF2ZXotdm91cyBkZXMgZW5mYW50cyA/PC9zcGFuPlxuICAgICAgPGRpdiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2NvbnRlbnRfX3VzZXItZmVlZGJhY2tfX2FjdGlvbnNcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm0tYnV0dG9uLWdyZXlcIiAoY2xpY2spPVwic2V0VXNlclByZWZlcmVuY2UoJ2hhc19jaGlsZHJlbicsIHRydWUpXCI+T3VpPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJtLWJ1dHRvbi1ncmV5XCIgKGNsaWNrKT1cInNldFVzZXJQcmVmZXJlbmNlKCdoYXNfY2hpbGRyZW4nLCBmYWxzZSlcIj5Ob248L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cIiFkaXNwbGF5SG9tZVBhZ2UgZWxzZSBjYXRlZ29yaWVzQ29tcG9uZW50c1wiIGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fbGlzdFwiPlxuICAgICAgPG5nLW1pYW0tY2F0YWxvZy1saXN0XG4gICAgICAgIFtmaWx0ZXJzXT1cImZpbHRlcnNcIlxuICAgICAgICBbcmFuZG9tTW9kZV09XCJ0cnVlXCJcbiAgICAgICAgKHJldHJpZXZlZFJlY2lwZXMpPVwiY2hhbmdlSGVhZGVySW1hZ2UoJGV2ZW50KVwiXG4gICAgICAgIChmaWx0ZXJSZW1vdmVkKT1cInJlbW92ZUZpbHRlcigkZXZlbnQpXCJcbiAgICAgICAgKHJlY2lwZUFjdGlvblRyaWdnZXJlZCk9XCJtYW5hZ2VSZWNpcGVBY3Rpb24oJGV2ZW50KVwiPlxuICAgICAgPC9uZy1taWFtLWNhdGFsb2ctbGlzdD5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy10ZW1wbGF0ZSAjY2F0ZWdvcmllc0NvbXBvbmVudHM+XG4gICAgICA8ZGl2ICpuZ0lmPVwiY2F0ZWdvcmllcy5sZW5ndGggPiAwXCIgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19jYXRlZ29yaWVzXCI+XG4gICAgICAgIDxuZy1taWFtLWNhdGFsb2ctY2F0ZWdvcnkgXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNhdGVnb3J5IG9mIGNhdGVnb3JpZXNcIiBcbiAgICAgICAgICBbdGl0bGVdPVwiY2F0ZWdvcnkudGl0bGVcIlxuICAgICAgICAgIFtmaWx0ZXJzXT1cImNhdGVnb3J5LmZpbHRlcnNcIiBcbiAgICAgICAgICAoZGlzcGxheUxpc3QpPVwiY2F0ZWdvcnlUaXRsZUNsaWNrZWQoJGV2ZW50KVwiPlxuICAgICAgICA8L25nLW1pYW0tY2F0YWxvZy1jYXRlZ29yeT5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8ZGl2ICpuZ0lmPVwicmV0dXJuVG9wQnV0dG9uU2hvdWxkQmVEaXNwbGF5ZWRcIiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX3JldHVyblRvcFwiIChjbGljayk9XCJyZXR1cm5Ub1RvcCgpXCI+XG4gICAgICA8bmctbWlhbS1pY29uIGhlaWdodD0nMzInIHdpZHRoPSczMicgcHJpbWFyeUNvbG9yPVwidmFyKC0tbS1jb2xvci13aGl0ZSlcIiBbaWNvbk5hbWVdPVwiaWNvbi5DaGV2cm9uRG93blwiPjwvbmctbWlhbS1pY29uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNjcmVhdGlvblBhZ2U+XG4gIDxuZy1taWFtLXJlY2lwZS1zdGVwcGVyIFtyZWNpcGVdPVwicmVjaXBlVG9VcGRhdGVcIiAocmVjaXBlQ2hhbmdlKT1cImxlYXZlQ3JlYXRlUGFnZSgpXCIgKGNhbmNlbGVkKT1cImxlYXZlQ3JlYXRlUGFnZSgpXCI+PC9uZy1taWFtLXJlY2lwZS1zdGVwcGVyPlxuPC9uZy10ZW1wbGF0ZT4iXX0=
|