ng-miam 6.3.2 → 6.3.4

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.
Files changed (30) hide show
  1. package/bundles/ng-miam.umd.js +410 -273
  2. package/bundles/ng-miam.umd.js.map +1 -1
  3. package/bundles/ng-miam.umd.min.js +1 -1
  4. package/bundles/ng-miam.umd.min.js.map +1 -1
  5. package/esm2015/lib/_components/meals-planner-link/meals-planner-link.component.js +6 -19
  6. package/esm2015/lib/_services/analytics.service.js +2 -1
  7. package/esm2015/lib/_services/groceries-lists.service.js +2 -2
  8. package/esm2015/lib/_services/interceptor.service.js +2 -2
  9. package/esm2015/lib/_web-components/meals-planner/meals-planner-basket-confirmation/meals-planner-basket-confirmation.component.js +14 -7
  10. package/esm2015/lib/_web-components/meals-planner/meals-planner-basket-preview/meals-planner-basket-preview.component.js +83 -54
  11. package/esm2015/lib/_web-components/meals-planner/meals-planner-catalog/meals-planner-catalog.component.js +21 -10
  12. package/esm2015/lib/_web-components/meals-planner/meals-planner-form/meals-planner-form.component.js +84 -62
  13. package/esm2015/lib/_web-components/meals-planner/meals-planner-result/meals-planner-result.component.js +18 -10
  14. package/esm2015/lib/_web-components/meals-planner/meals-planner.component.js +77 -31
  15. package/esm2015/lib/_web-components/recipe-cards/suggestion-card/suggestion-card.component.js +5 -7
  16. package/esm2015/lib/_web-components/recipe-catalog/catalog-list/catalog-list.component.js +31 -19
  17. package/esm2015/lib/_web-components/recipe-catalog/recipe-catalog.component.js +3 -3
  18. package/fesm2015/ng-miam.js +322 -206
  19. package/fesm2015/ng-miam.js.map +1 -1
  20. package/lib/_components/meals-planner-link/meals-planner-link.component.d.ts +2 -4
  21. package/lib/_services/analytics.service.d.ts +7 -0
  22. package/lib/_web-components/meals-planner/meals-planner-basket-confirmation/meals-planner-basket-confirmation.component.d.ts +8 -4
  23. package/lib/_web-components/meals-planner/meals-planner-basket-preview/meals-planner-basket-preview.component.d.ts +12 -6
  24. package/lib/_web-components/meals-planner/meals-planner-catalog/meals-planner-catalog.component.d.ts +8 -4
  25. package/lib/_web-components/meals-planner/meals-planner-form/meals-planner-form.component.d.ts +8 -4
  26. package/lib/_web-components/meals-planner/meals-planner-result/meals-planner-result.component.d.ts +8 -4
  27. package/lib/_web-components/meals-planner/meals-planner.component.d.ts +9 -1
  28. package/lib/_web-components/recipe-cards/suggestion-card/suggestion-card.component.d.ts +1 -0
  29. package/lib/_web-components/recipe-catalog/catalog-list/catalog-list.component.d.ts +2 -1
  30. package/package.json +1 -1
@@ -18,9 +18,9 @@ import * as i6 from "../../recipe-cards/catalog-recipe-card/catalog-recipe-card.
18
18
  import * as i7 from "../catalog-article-card/catalog-article-card.component";
19
19
  import * as i8 from "../../../_components/loader/loader.component";
20
20
  function CatalogListComponent_div_1_div_2_div_4_Template(rf, ctx) { if (rf & 1) {
21
- i0.ɵɵelementStart(0, "div");
21
+ i0.ɵɵelementStart(0, "div", 17);
22
22
  i0.ɵɵelementStart(1, "span");
23
- i0.ɵɵi18n(2, 17);
23
+ i0.ɵɵi18n(2, 18);
24
24
  i0.ɵɵelementEnd();
25
25
  i0.ɵɵelementStart(3, "span");
26
26
  i0.ɵɵtext(4);
@@ -40,7 +40,9 @@ function CatalogListComponent_div_1_div_2_Template(rf, ctx) { if (rf & 1) {
40
40
  i0.ɵɵtemplate(4, CatalogListComponent_div_1_div_2_div_4_Template, 5, 1, "div", 14);
41
41
  i0.ɵɵelementEnd();
42
42
  i0.ɵɵelementStart(5, "div", 15);
43
- i0.ɵɵi18n(6, 16);
43
+ i0.ɵɵelementStart(6, "span");
44
+ i0.ɵɵi18n(7, 16);
45
+ i0.ɵɵelementEnd();
44
46
  i0.ɵɵelementEnd();
45
47
  i0.ɵɵelementEnd();
46
48
  } if (rf & 2) {
@@ -50,13 +52,15 @@ function CatalogListComponent_div_1_div_2_Template(rf, ctx) { if (rf & 1) {
50
52
  } }
51
53
  function CatalogListComponent_div_1_ng_template_3_div_0_Template(rf, ctx) { if (rf & 1) {
52
54
  i0.ɵɵelementStart(0, "div");
53
- i0.ɵɵelementStart(1, "span", 12);
54
- i0.ɵɵi18n(2, 18);
55
+ i0.ɵɵelementStart(1, "div", 19);
56
+ i0.ɵɵelementStart(2, "span");
57
+ i0.ɵɵi18n(3, 20);
58
+ i0.ɵɵelementEnd();
55
59
  i0.ɵɵelementEnd();
56
60
  i0.ɵɵelementEnd();
57
61
  } }
58
62
  function CatalogListComponent_div_1_ng_template_3_Template(rf, ctx) { if (rf & 1) {
59
- i0.ɵɵtemplate(0, CatalogListComponent_div_1_ng_template_3_div_0_Template, 3, 0, "div", 9);
63
+ i0.ɵɵtemplate(0, CatalogListComponent_div_1_ng_template_3_div_0_Template, 4, 0, "div", 9);
60
64
  i0.ɵɵpipe(1, "async");
61
65
  } if (rf & 2) {
62
66
  i0.ɵɵnextContext();
@@ -65,16 +69,18 @@ function CatalogListComponent_div_1_ng_template_3_Template(rf, ctx) { if (rf & 1
65
69
  i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(1, 2, ctx_r7.userService.isLogged$))("ngIfElse", _r8);
66
70
  } }
67
71
  function CatalogListComponent_div_1_ng_template_5_Template(rf, ctx) { if (rf & 1) {
68
- i0.ɵɵelementStart(0, "span", 12);
69
- i0.ɵɵi18n(1, 19);
72
+ i0.ɵɵelementStart(0, "div", 21);
73
+ i0.ɵɵelementStart(1, "span");
74
+ i0.ɵɵi18n(2, 22);
75
+ i0.ɵɵelementEnd();
70
76
  i0.ɵɵelementEnd();
71
77
  } }
72
78
  function CatalogListComponent_div_1_Template(rf, ctx) { if (rf & 1) {
73
79
  i0.ɵɵelementStart(0, "div", 7);
74
80
  i0.ɵɵelement(1, "ng-miam-icon", 8);
75
- i0.ɵɵtemplate(2, CatalogListComponent_div_1_div_2_Template, 7, 1, "div", 9);
81
+ i0.ɵɵtemplate(2, CatalogListComponent_div_1_div_2_Template, 8, 1, "div", 9);
76
82
  i0.ɵɵtemplate(3, CatalogListComponent_div_1_ng_template_3_Template, 2, 4, "ng-template", null, 10, i0.ɵɵtemplateRefExtractor);
77
- i0.ɵɵtemplate(5, CatalogListComponent_div_1_ng_template_5_Template, 2, 0, "ng-template", null, 11, i0.ɵɵtemplateRefExtractor);
83
+ i0.ɵɵtemplate(5, CatalogListComponent_div_1_ng_template_5_Template, 3, 0, "ng-template", null, 11, i0.ɵɵtemplateRefExtractor);
78
84
  i0.ɵɵelementEnd();
79
85
  } if (rf & 2) {
80
86
  const _r6 = i0.ɵɵreference(4);
@@ -86,13 +92,13 @@ function CatalogListComponent_div_1_Template(rf, ctx) { if (rf & 1) {
86
92
  } }
87
93
  function CatalogListComponent_ng_miam_card_create_recipe_3_Template(rf, ctx) { if (rf & 1) {
88
94
  const _r13 = i0.ɵɵgetCurrentView();
89
- i0.ɵɵelementStart(0, "ng-miam-card-create-recipe", 20);
95
+ i0.ɵɵelementStart(0, "ng-miam-card-create-recipe", 23);
90
96
  i0.ɵɵlistener("clicked", function CatalogListComponent_ng_miam_card_create_recipe_3_Template_ng_miam_card_create_recipe_clicked_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r12 = i0.ɵɵnextContext(); return ctx_r12.recipeActionTriggered.emit({ action: "CREATE", recipe: null }); });
91
97
  i0.ɵɵelementEnd();
92
98
  } }
93
99
  function CatalogListComponent_ng_miam_catalog_recipe_card_4_Template(rf, ctx) { if (rf & 1) {
94
100
  const _r16 = i0.ɵɵgetCurrentView();
95
- i0.ɵɵelementStart(0, "ng-miam-catalog-recipe-card", 21);
101
+ i0.ɵɵelementStart(0, "ng-miam-catalog-recipe-card", 24);
96
102
  i0.ɵɵlistener("addToMealsPlanner", function CatalogListComponent_ng_miam_catalog_recipe_card_4_Template_ng_miam_catalog_recipe_card_addToMealsPlanner_0_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r15 = i0.ɵɵnextContext(); return ctx_r15.addToMealsPlanner.emit($event); })("actionTriggered", function CatalogListComponent_ng_miam_catalog_recipe_card_4_Template_ng_miam_catalog_recipe_card_actionTriggered_0_listener($event) { i0.ɵɵrestoreView(_r16); const recipe_r14 = ctx.$implicit; const ctx_r17 = i0.ɵɵnextContext(); return ctx_r17.recipeActionTriggered.emit({ action: $event, recipe: recipe_r14 }); });
97
103
  i0.ɵɵelementEnd();
98
104
  } if (rf & 2) {
@@ -101,16 +107,16 @@ function CatalogListComponent_ng_miam_catalog_recipe_card_4_Template(rf, ctx) {
101
107
  i0.ɵɵproperty("recipe", recipe_r14)("originTrace", ctx_r2.eventTrace())("displayPricing", ctx_r2.displayPricing)("previewAllowed", !ctx_r2.addRecipeMode)("addRecipeMode", ctx_r2.addRecipeMode)("displayGuests", ctx_r2.displayGuests);
102
108
  } }
103
109
  function CatalogListComponent_ng_miam_catalog_article_card_5_Template(rf, ctx) { if (rf & 1) {
104
- i0.ɵɵelement(0, "ng-miam-catalog-article-card", 22);
110
+ i0.ɵɵelement(0, "ng-miam-catalog-article-card", 25);
105
111
  } if (rf & 2) {
106
112
  const article_r18 = ctx.$implicit;
107
113
  i0.ɵɵproperty("article", article_r18);
108
114
  } }
109
115
  function CatalogListComponent_div_6_Template(rf, ctx) { if (rf & 1) {
110
- i0.ɵɵelementStart(0, "div", 23);
116
+ i0.ɵɵelementStart(0, "div", 26);
111
117
  i0.ɵɵelement(1, "ng-miam-loader");
112
118
  i0.ɵɵelementStart(2, "div");
113
- i0.ɵɵi18n(3, 24);
119
+ i0.ɵɵi18n(3, 27);
114
120
  i0.ɵɵelementEnd();
115
121
  i0.ɵɵelementEnd();
116
122
  } }
@@ -135,6 +141,7 @@ export class CatalogListComponent extends EventTracerComponent {
135
141
  this.randomMode = false;
136
142
  this.displayGuests = true;
137
143
  this.addRecipeMode = false;
144
+ this.excludedRecipesIds = [];
138
145
  this.addToMealsPlanner = new EventEmitter();
139
146
  this.filterRemoved = new EventEmitter();
140
147
  this.recipeActionTriggered = new EventEmitter();
@@ -224,6 +231,9 @@ export class CatalogListComponent extends EventTracerComponent {
224
231
  processResults(results, requestFilters, page) {
225
232
  // Because Filter is a type, attributes are always in the same order, so stringify won't be false for objects with same attributes
226
233
  if (JSON.stringify(requestFilters) === JSON.stringify(this.filters)) {
234
+ if (this.excludedRecipesIds.length > 0) {
235
+ results = results.filter(recipe => !this.excludedRecipesIds.includes(recipe.id));
236
+ }
227
237
  // if you spam click on filters, multiple requests with page == 1 could be sent for the same filters -> only keep the last result
228
238
  this.currentRecipes = page === 1 ? results : [...this.currentRecipes, ...results];
229
239
  this.currentRecipes.forEach((r) => {
@@ -335,7 +345,7 @@ CatalogListComponent.ɵcmp = i0.ɵɵdefineComponent({ type: CatalogListComponent
335
345
  } if (rf & 2) {
336
346
  var _t;
337
347
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.recipeCards = _t);
338
- } }, inputs: { filters: "filters", insertCreateCard: "insertCreateCard", randomMode: "randomMode", modifiedGuests: "modifiedGuests", displayPricing: "displayPricing", displayGuests: "displayGuests", addRecipeMode: "addRecipeMode" }, outputs: { addToMealsPlanner: "addToMealsPlanner", filterRemoved: "filterRemoved", recipeActionTriggered: "recipeActionTriggered", loading: "loading" }, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 9, vars: 9, consts: function () { var i18n_0; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
348
+ } }, inputs: { filters: "filters", insertCreateCard: "insertCreateCard", randomMode: "randomMode", modifiedGuests: "modifiedGuests", displayPricing: "displayPricing", displayGuests: "displayGuests", addRecipeMode: "addRecipeMode", excludedRecipesIds: "excludedRecipesIds" }, outputs: { addToMealsPlanner: "addToMealsPlanner", filterRemoved: "filterRemoved", recipeActionTriggered: "recipeActionTriggered", loading: "loading" }, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 9, vars: 9, consts: function () { var i18n_0; if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
339
349
  const MSG_EXTERNAL_2565683500171826824$$LIB__WEB_COMPONENTS_RECIPE_CATALOG_CATALOG_LIST_CATALOG_LIST_COMPONENT_TS___1 = goog.getMsg("D\u00E9sol\u00E9, aucune proposition trouv\u00E9e");
340
350
  i18n_0 = MSG_EXTERNAL_2565683500171826824$$LIB__WEB_COMPONENTS_RECIPE_CATALOG_CATALOG_LIST_CATALOG_LIST_COMPONENT_TS___1;
341
351
  }
@@ -371,7 +381,7 @@ CatalogListComponent.ɵcmp = i0.ɵɵdefineComponent({ type: CatalogListComponent
371
381
  }
372
382
  else {
373
383
  i18n_10 = $localize `:␟834498e5698b366d53cba7a7f98b06a12967862c␟1875448131572248295: Chargement des résultats... `;
374
- } return [[1, "miam-catalog-list__cards"], ["class", "miam-catalog-list__notFound", 4, "ngIf"], ["class", "miam-catalog-list__card", 3, "clicked", 4, "ngIf"], [3, "recipe", "originTrace", "displayPricing", "previewAllowed", "addRecipeMode", "displayGuests", "addToMealsPlanner", "actionTriggered", 4, "ngFor", "ngForOf"], [3, "article", 4, "ngFor", "ngForOf"], ["class", "miam-catalog-list__loader", 4, "ngIf"], ["id", "miam-catalog-list__anchor"], [1, "miam-catalog-list__notFound"], [1, "miam-catalog-list__notFound__icon", 3, "width", "height", "iconName"], [4, "ngIf", "ngIfElse"], ["notFiltering", ""], ["notLogged", ""], [1, "miam-catalog-list__notFound__title1"], i18n_0, [4, "ngIf"], [1, "miam-catalog-list__notFound__title2"], i18n_2, i18n_4, i18n_6, i18n_8, [1, "miam-catalog-list__card", 3, "clicked"], [3, "recipe", "originTrace", "displayPricing", "previewAllowed", "addRecipeMode", "displayGuests", "addToMealsPlanner", "actionTriggered"], [3, "article"], [1, "miam-catalog-list__loader"], i18n_10]; }, template: function CatalogListComponent_Template(rf, ctx) { if (rf & 1) {
384
+ } return [[1, "miam-catalog-list__cards"], ["class", "miam-catalog-list__notFound", 4, "ngIf"], ["class", "miam-catalog-list__card", 3, "clicked", 4, "ngIf"], [3, "recipe", "originTrace", "displayPricing", "previewAllowed", "addRecipeMode", "displayGuests", "addToMealsPlanner", "actionTriggered", 4, "ngFor", "ngForOf"], [3, "article", 4, "ngFor", "ngForOf"], ["class", "miam-catalog-list__loader", 4, "ngIf"], ["id", "miam-catalog-list__anchor"], [1, "miam-catalog-list__notFound"], [1, "miam-catalog-list__notFound__icon", 3, "width", "height", "iconName"], [4, "ngIf", "ngIfElse"], ["notFiltering", ""], ["notLogged", ""], [1, "miam-catalog-list__notFound__title1", "filtering"], i18n_0, ["class", "miam-catalog-list__notFound__searching", 4, "ngIf"], [1, "miam-catalog-list__notFound__title2"], i18n_2, [1, "miam-catalog-list__notFound__searching"], i18n_4, [1, "miam-catalog-list__notFound__title1", "not-filtering"], i18n_6, [1, "miam-catalog-list__notFound__title1", "not-logged"], i18n_8, [1, "miam-catalog-list__card", 3, "clicked"], [3, "recipe", "originTrace", "displayPricing", "previewAllowed", "addRecipeMode", "displayGuests", "addToMealsPlanner", "actionTriggered"], [3, "article"], [1, "miam-catalog-list__loader"], i18n_10]; }, template: function CatalogListComponent_Template(rf, ctx) { if (rf & 1) {
375
385
  i0.ɵɵelementStart(0, "div", 0);
376
386
  i0.ɵɵtemplate(1, CatalogListComponent_div_1_Template, 7, 5, "div", 1);
377
387
  i0.ɵɵpipe(2, "async");
@@ -393,7 +403,7 @@ CatalogListComponent.ɵcmp = i0.ɵɵdefineComponent({ type: CatalogListComponent
393
403
  i0.ɵɵproperty("ngForOf", ctx.articles);
394
404
  i0.ɵɵadvance(1);
395
405
  i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(7, 7, ctx.loading));
396
- } }, directives: [i3.NgIf, i3.NgForOf, i4.IconComponent, i5.CardCreateRecipeComponent, i6.CatalogRecipeCardComponent, i7.CatalogArticleCardComponent, i8.LoaderComponent], pipes: [i3.AsyncPipe], styles: [".miam-catalog-list__cards{display:flex;flex-flow:row wrap;justify-content:center;margin:calc(0px - var(--m-catalog-cards-spacing)/2);position:relative;right:0;top:0;width:calc(100% + var(--m-catalog-cards-spacing))}.miam-catalog-list__cards .miam-catalog-list__notFound{display:flex;flex-direction:column;justify-content:center;padding:36px 0 0;text-align:center;width:100%}.miam-catalog-list__cards .miam-catalog-list__notFound .miam-catalog-list__notFound__title1{color:var(--m-color-primary);font-size:24px;font-weight:700;margin-top:36px}.miam-catalog-list__cards .miam-catalog-list__notFound .miam-catalog-list__notFound__title2{color:var(--m-color-grey-text);font-size:22px}.miam-catalog-list__cards .miam-catalog-list__loader{color:var(--m-color-grey-text);font-size:20px;font-weight:700;text-align:center;width:100%}.miam-catalog-list__cards .miam-catalog-list__loader .miam-loader{height:80px;margin-bottom:16px;margin-left:calc(50% - 40px);margin-top:80px;width:80px}.miam-catalog-list__cards #miam-catalog-list__anchor{bottom:0;height:600px;margin-top:-600px;position:relative}"], encapsulation: 2, changeDetection: 0 });
406
+ } }, directives: [i3.NgIf, i3.NgForOf, i4.IconComponent, i5.CardCreateRecipeComponent, i6.CatalogRecipeCardComponent, i7.CatalogArticleCardComponent, i8.LoaderComponent], pipes: [i3.AsyncPipe], styles: [".miam-catalog-list__cards{display:flex;flex-flow:row wrap;justify-content:center;margin:calc(0px - var(--m-catalog-cards-spacing)/2);position:relative;right:0;top:0;width:calc(100% + var(--m-catalog-cards-spacing))}.miam-catalog-list__cards .miam-catalog-list__notFound{display:flex;flex-direction:column;justify-content:center;padding:36px 0 0;text-align:center;width:100%}.miam-catalog-list__cards .miam-catalog-list__notFound .miam-catalog-list__notFound__title1{color:var(--m-color-primary);font-size:24px;font-weight:700;margin-top:36px}.miam-catalog-list__cards .miam-catalog-list__notFound .miam-catalog-list__notFound__title1.filtering{display:flex;justify-content:center}.miam-catalog-list__cards .miam-catalog-list__notFound .miam-catalog-list__notFound__title1.filtering .miam-catalog-list__notFound__searching span{margin-left:5px}.miam-catalog-list__cards .miam-catalog-list__notFound .miam-catalog-list__notFound__title2{color:var(--m-color-grey-text);font-size:22px}.miam-catalog-list__cards .miam-catalog-list__loader{color:var(--m-color-grey-text);font-size:20px;font-weight:700;text-align:center;width:100%}.miam-catalog-list__cards .miam-catalog-list__loader .miam-loader{height:80px;margin-bottom:16px;margin-left:calc(50% - 40px);margin-top:80px;width:80px}.miam-catalog-list__cards #miam-catalog-list__anchor{bottom:0;height:600px;margin-top:-600px;position:relative}"], encapsulation: 2, changeDetection: 0 });
397
407
  /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(CatalogListComponent, [{
398
408
  type: Component,
399
409
  args: [{
@@ -417,6 +427,8 @@ CatalogListComponent.ɵcmp = i0.ɵɵdefineComponent({ type: CatalogListComponent
417
427
  type: Input
418
428
  }], addRecipeMode: [{
419
429
  type: Input
430
+ }], excludedRecipesIds: [{
431
+ type: Input
420
432
  }], addToMealsPlanner: [{
421
433
  type: Output
422
434
  }], filterRemoved: [{
@@ -429,4 +441,4 @@ CatalogListComponent.ɵcmp = i0.ɵɵdefineComponent({ type: CatalogListComponent
429
441
  type: ViewChildren,
430
442
  args: [CatalogRecipeCardComponent]
431
443
  }] }); })();
432
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIvYnVpbGRzL21pYW0vbmctbWlhbS1zZGsvcHJvamVjdHMvbmctbWlhbS9zcmMvIiwic291cmNlcyI6WyJsaWIvX3dlYi1jb21wb25lbnRzL3JlY2lwZS1jYXRhbG9nL2NhdGFsb2ctbGlzdC9jYXRhbG9nLWxpc3QuY29tcG9uZW50LnRzIiwibGliL193ZWItY29tcG9uZW50cy9yZWNpcGUtY2F0YWxvZy9jYXRhbG9nLWxpc3QvY2F0YWxvZy1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLHVCQUF1QixFQUN2QixpQkFBaUIsRUFHakIsTUFBTSxFQUNOLFlBQVksRUFDWixLQUFLLEVBRUwsWUFBWSxFQUNaLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFhLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEgsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pELE9BQU8sRUFBZ0IsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDN0UsT0FBTyxJQUFJLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDN0YsT0FBTyxFQUFFLGdCQUFnQixFQUFvQixNQUFNLHNDQUFzQyxDQUFDO0FBQzFGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHNFQUFzRSxD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LE9BQU87a0JBQWhCLE1BQU07WUFXbUMsV0FBVztrQkFBcEQsWUFBWTttQkFBQywwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgVmlld0NoaWxkcmVuLFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb2N1bWVudENvbGxlY3Rpb24gfSBmcm9tICduZ3gtanNvbmFwaSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgc2tpcFdoaWxlLCBzd2l0Y2hNYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBcnRpY2xlIH0gZnJvbSAnLi4vLi4vLi4vX21vZGVscyc7XG5pbXBvcnQgeyBSZWNpcGUgfSBmcm9tICcuLi8uLi8uLi9fbW9kZWxzL3JlY2lwZSc7XG5pbXBvcnQgeyBBcnRpY2xlc1NlcnZpY2UsIENvbnRleHRTZXJ2aWNlLCBSZWNpcGVMaWtlc1NlcnZpY2UsIFJlY2lwZXNTZXJ2aWNlLCBVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL19zZXJ2aWNlcyc7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSAnLi4vLi4vLi4vX3R5cGVzL2ljb24uZW51bSc7XG5pbXBvcnQgeyBSZWNpcGVGaWx0ZXIsIFJlY2lwZUZpbHRlcnMgfSBmcm9tICcuLi8uLi8uLi9fdHlwZXMvcmVjaXBlLWZpbHRlcnMnO1xuaW1wb3J0IHBpY2sgZnJvbSAnbG9kYXNoLWVzL3BpY2snO1xuaW1wb3J0IHsgRXZlbnRUcmFjZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9fY29tcG9uZW50cy9hYnN0cmFjdHMvZXZlbnQtdHJhY2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBbmFseXRpY3NTZXJ2aWNlLCBDdXN0b21Qcm9wZXJ0aWVzIH0gZnJvbSAnLi4vLi4vLi4vX3NlcnZpY2VzL2FuYWx5dGljcy5zZXJ2aWNlJztcbmltcG9ydCB7IENhdGFsb2dSZWNpcGVDYXJkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcmVjaXBlLWNhcmRzL2NhdGFsb2ctcmVjaXBlLWNhcmQvY2F0YWxvZy1yZWNpcGUtY2FyZC5jb21wb25lbnQnO1xuXG5jb25zdCByZWNpcGVJbmNsdWRlcyA9IFsncmVjaXBlLXByb3ZpZGVyJywgJ3Nwb25zb3JzJ107XG5jb25zdCByZWNpcGVTcGFyc2VGaWVsZHMgPSB7XG4gIHJlY2lwZXM6IFsndGl0bGUnLCAnbnVtYmVyLW9mLWd1ZXN0cycsICdtZWRpYS11cmwnLCAndmlkZW8taWQnLCAnZmlsaWdyYW5lLWxvZ28tdXJsJywgJ2RpZmZpY3VsdHknLCAncHJlcGFyYXRpb24tdGltZScsICdjb29raW5nLXRpbWUnLFxuICAgICAgICAgICAgJ3Jlc3RpbmctdGltZScsICdjb21wdXRlZC1jb3N0JywgLi4ucmVjaXBlSW5jbHVkZXNdLFxuICBzcG9uc29yczogWydsb2dvLXVybCddLFxuICBbJ3JlY2lwZS1wcm92aWRlciddOiBbJ25hbWUnXVxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmctbWlhbS1jYXRhbG9nLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2F0YWxvZy1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2F0YWxvZy1saXN0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIENhdGFsb2dMaXN0Q29tcG9uZW50IGV4dGVuZHMgRXZlbnRUcmFjZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgZmlsdGVyczogUmVjaXBlRmlsdGVycztcbiAgQElucHV0KCkgaW5zZXJ0Q3JlYXRlQ2FyZCA9IGZhbHNlO1xuICBASW5wdXQoKSByYW5kb21Nb2RlID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1vZGlmaWVkR3Vlc3RzO1xuICBASW5wdXQoKSBkaXNwbGF5UHJpY2luZztcbiAgQElucHV0KCkgZGlzcGxheUd1ZXN0cyA9IHRydWU7XG4gIEBJbnB1dCgpIGFkZFJlY2lwZU1vZGUgPSBmYWxzZTtcbiAgQE91dHB1dCgpIGFkZFRvTWVhbHNQbGFubmVyID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNpcGU+KCk7XG4gIEBPdXRwdXQoKSBmaWx0ZXJSZW1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSByZWNpcGVBY3Rpb25UcmlnZ2VyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHthY3Rpb246IHN0cmluZywgcmVjaXBlOiBSZWNpcGV9PigpO1xuICBAT3V0cHV0KCkgbG9hZGluZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgY3VycmVudFJlY2lwZXM6IFJlY2lwZVtdID0gW107XG4gIGxhc3RQYWdlID0gMDtcbiAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW107XG4gIGljb24gPSBJY29uO1xuICBub01vcmVSZWNpcGVzID0gZmFsc2U7XG4gIG5vTW9yZUFydGljbGVzID0gZmFsc2U7XG4gIGJvdHRvbUFuY2hvcjogSFRNTEVsZW1lbnQ7XG4gIGZpbHRlcnNUb0Rpc3BsYXkgPSBbXTtcbiAgYXJ0aWNsZXM6IEFydGljbGVbXSA9IFtdO1xuICBAVmlld0NoaWxkcmVuKENhdGFsb2dSZWNpcGVDYXJkQ29tcG9uZW50KSByZWNpcGVDYXJkcyE6IFF1ZXJ5TGlzdDxDYXRhbG9nUmVjaXBlQ2FyZENvbXBvbmVudD47XG5cbiAgcHJpdmF0ZSBpbnRlcnNlY3Rpb25PYnNlcnZlcjogSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG4gIHByaXZhdGUgbXV0YXRpb25PYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlY2lwZXNTZXJ2aWNlOiBSZWNpcGVzU2VydmljZSxcbiAgICBwcml2YXRlIHJlY2lwZUxpa2VzU2VydmljZTogUmVjaXBlTGlrZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXJ0aWNsZXNTZXJ2aWNlOiBBcnRpY2xlc1NlcnZpY2UsXG4gICAgcHVibGljIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICBwcml2YXRlIGNvbnRleHQ6IENvbnRleHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcm90ZWN0ZWQgYW5hbHl0aWNzU2VydmljZTogQW5hbHl0aWNzU2VydmljZVxuICApIHtcbiAgICBzdXBlcihhbmFseXRpY3NTZXJ2aWNlKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBbXTtcbiAgICB0aGlzLmN1cnJlbnRSZWNpcGVzID0gW107XG4gICAgdGhpcy5maWx0ZXJzID0gbmV3IFJlY2lwZUZpbHRlcnMoeyBzZWFyY2g6ICcnIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5ib3R0b21BbmNob3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWlhbS1jYXRhbG9nLWxpc3RfX2FuY2hvcicpO1xuICAgIHRoaXMuaW5pdExvYWRPblNjcm9sbCgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIC8vIFByZXZlbnRzIHJlbG9hZCBsb29wIGluIGFuZ3VsYXJcbiAgICBpZiAoIShPYmplY3Qua2V5cyhjaGFuZ2VzKS5sZW5ndGggPT09IDEgJiYgT2JqZWN0LmtleXMoY2hhbmdlcylbMF0gPT09ICdvcmlnaW5UcmFjZScpICkge1xuICAgICAgdGhpcy5maWx0ZXJzVG9EaXNwbGF5ID0gdGhpcy5idWlsZEZpbHRlcnNBcnJheSgpO1xuICAgICAgdGhpcy5yZWxvYWRQYWdlKCk7XG4gICAgICBpZiAodGhpcy5maWx0ZXJzLnNlYXJjaCkge1xuICAgICAgICB0aGlzLnNlbmRFdmVudCh0aGlzLmFuYWx5dGljc1NlcnZpY2UuRVZFTlRfU0VBUkNIKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFnZXZpZXcoKTtcbiAgICB9XG4gIH1cblxuICBjdXJyZW50UGF0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmZpbHRlcnMuZXZlbnRQYXRoKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvcHMoKTogQ3VzdG9tUHJvcGVydGllcyB7XG4gICAgaWYgKCF0aGlzLmZpbHRlcnM/LnNlYXJjaCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICByZXR1cm4geyBzZWFyY2hfdGVybTogdGhpcy5maWx0ZXJzPy5zZWFyY2ggfTtcbiAgfVxuXG4gIGluaXRMb2FkT25TY3JvbGwoKSB7XG4gICAgLy8gUmVjZWl2ZSBhbiBldmVudCBlYWNoIHRpbWUgdGhlIGFuY2hvciBlbnRlcnMvbGVhdmVzIHRoZSB2aWV3cG9ydFxuICAgIHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKFtlbnRyeV0pID0+IHsgdGhpcy5hdXRvbG9hZENvbnRlbnRJZk5lY2Vzc2FyeSgpOyB9LCB7fSk7XG4gICAgLy8gUmVjZWl2ZSBhbiBldmVudCBlYWNoIHRpbWUgYW4gYXR0cmlidXRlL2NoaWxkIGlzIGFkZGVkL2RlbGV0ZWQvdXBkYXRlZCBpbiB0aGUgcGFyZW50IGRpdiBvZiB0aGUgcmVjaXBlc1xuICAgIC8vIGkuZS4gd2lsbCBiZSB0cmlnZ2VyZWQgZWFjaCB0aW1lIG5ldyByZWNpcGVzIGFyZSBkaXNwbGF5ZWRcbiAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7IHRoaXMuYXV0b2xvYWRDb250ZW50SWZOZWNlc3NhcnkoKTsgfSk7XG5cbiAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy5ib3R0b21BbmNob3IpO1xuICAgIHRoaXMubXV0YXRpb25PYnNlcnZlci5vYnNlcnZlKFxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbWlhbS1jYXRhbG9nLWxpc3RfX2NhcmRzJylbMF0sXG4gICAgICB7IGF0dHJpYnV0ZXM6IHRydWUsIGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogZmFsc2UgfSAvLyBzdWJ0cmVlIGZhbHNlID0+IGNoYW5nZXMgb24gY2hpbGRyZW4gd29uJ3QgdHJpZ2dlciB0aGUgY2FsbGJhY2tcbiAgICApO1xuICB9XG5cbiAgYW5jaG9ySXNPblNjcmVlbigpIHtcbiAgICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgIGNvbnN0IHJlY3QgPSB0aGlzLmJvdHRvbUFuY2hvci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICByZXR1cm4gKHJlY3QudG9wIDw9IHZpZXdwb3J0SGVpZ2h0ICYmIHJlY3QuYm90dG9tID49IDApO1xuICB9XG5cbiAgYXV0b2xvYWRDb250ZW50SWZOZWNlc3NhcnkoKSB7XG4gICAgdGhpcy5sb2FkaW5nLnBpcGUodGFrZSgxKSwgZmlsdGVyKGxvYWRpbmcgPT4gIWxvYWRpbmcpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmFuY2hvcklzT25TY3JlZW4oKSAmJiAoXG4gICAgICAgICAgKHRoaXMuY3VycmVudFJlY2lwZXMubGVuZ3RoID4gMCAmJiAhdGhpcy5ub01vcmVSZWNpcGVzKSB8fFxuICAgICAgICAgICh0aGlzLmFydGljbGVzLmxlbmd0aCA+IDAgJiYgIXRoaXMubm9Nb3JlQXJ0aWNsZXMpXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICAvLyBBdCBjb21wb25lbnQgaW5pdGlhbCBsb2FkLCAyIGNhbGxzIHdpbGwgYmUgbWFkZSBmb3IgdGhlIGZpcnN0IHR3byByZWNpcGVzIHBhZ2VcbiAgICAgICAgLy8gVGhpcyBpcyB0byBhdm9pZCBtYWtpbmcgdGhlIGxvYWRlciBzcGluIHR3aWNlXG4gICAgICAgIHRoaXMubG9hZE1vcmUodGhpcy5sYXN0UGFnZSA+IDIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbG9hZE1vcmUobG9hZGVyID0gdHJ1ZSkge1xuICAgIGlmIChsb2FkZXIpIHsgdGhpcy5sb2FkaW5nLm5leHQodHJ1ZSk7IH1cbiAgICB0aGlzLmxhc3RQYWdlKys7XG4gICAgdGhpcy5sb2FkQ29udGVudCgpO1xuICB9XG5cbiAgbG9hZFJlY2lwZXNQYWdlKHBhZ2U6IG51bWJlcik6IE9ic2VydmFibGU8UmVjaXBlW10+IHtcbiAgICBpZiAodGhpcy5ub01vcmVSZWNpcGVzKSB7XG4gICAgICByZXR1cm4gb2YoW10pO1xuICAgIH1cblxuICAgIC8vIGtlZXAgYSBjb3B5IG9mIHRoZSBmaWx0ZXJzIHdoZW4gcmVxdWVzdCBpcyBzZW50LCBzbyB3ZSBjYW4gY2hlY2sgdGhleSBhcmUgc3RpbGwgdGhlIHNhbWUgd2hlbiBpdCBpcyByZWNlaXZlZFxuICAgIC8vIEJlY2F1c2UgaWYgaXQncyBub3QgdGhlIGNhc2Ugd2UgaGF2ZSB0byBpZ25vcmUgdGhlIHJlc3VsdHNcbiAgICBjb25zdCByZXF1ZXN0RmlsdGVycyA9IHRoaXMuZmlsdGVycy5jb3B5KCk7XG4gICAgaWYgKHRoaXMuY29udGV4dC5kaXNwbGF5SW5ncmVkaWVudFBpY3R1cmVzT25SZWNpcGVDYXJkcyAmJiAhcmVjaXBlSW5jbHVkZXMuaW5jbHVkZXMoJ2luZ3JlZGllbnRzJykpIHtcbiAgICAgIHJlY2lwZUluY2x1ZGVzLnB1c2goJ2luZ3JlZGllbnRzJyk7XG4gICAgICByZWNpcGVTcGFyc2VGaWVsZHMucmVjaXBlcy5wdXNoKCdpbmdyZWRpZW50cycpO1xuICAgICAgcmVjaXBlU3BhcnNlRmllbGRzWydpbmdyZWRpZW50cyddID0gWyduYW1lJywgJ3F1YW50aXR5JywgJ3VuaXQnLCAnYWN0aXZlJywgJ2ZvcmNlZC1lYW5zJywgJ3BpY3R1cmUtdXJsJywgJ3Bvc2l0aW9uJ107XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucmVjaXBlc1NlcnZpY2UuZmlsdGVyKFxuICAgICAgcmVxdWVzdEZpbHRlcnMsXG4gICAgICB7IHNpemU6IDIwLCBudW1iZXI6IHBhZ2UgfSxcbiAgICAgIHJlY2lwZUluY2x1ZGVzLFxuICAgICAgcmVjaXBlU3BhcnNlRmllbGRzLFxuICAgICAgbnVsbCxcbiAgICAgIHRoaXMucmFuZG9tTW9kZSxcbiAgICAgIHRoaXMuc29ydFxuICAgICkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocmVzdWx0OiBSZWNpcGVbXSkgPT4gdGhpcy5wcm9jZXNzUmVzdWx0cyhyZXN1bHQsIHJlcXVlc3RGaWx0ZXJzLCBwYWdlKSlcbiAgICApO1xuICB9XG5cbiAgcHJvY2Vzc1Jlc3VsdHMocmVzdWx0czogUmVjaXBlW10sIHJlcXVlc3RGaWx0ZXJzLCBwYWdlKTogT2JzZXJ2YWJsZTxSZWNpcGVbXT4ge1xuICAgIC8vIEJlY2F1c2UgRmlsdGVyIGlzIGEgdHlwZSwgYXR0cmlidXRlcyBhcmUgYWx3YXlzIGluIHRoZSBzYW1lIG9yZGVyLCBzbyBzdHJpbmdpZnkgd29uJ3QgYmUgZmFsc2UgZm9yIG9iamVjdHMgd2l0aCBzYW1lIGF0dHJpYnV0ZXNcbiAgICBpZiAoSlNPTi5zdHJpbmdpZnkocmVxdWVzdEZpbHRlcnMpID09PSBKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlcnMpKSB7XG4gICAgICAvLyBpZiB5b3Ugc3BhbSBjbGljayBvbiBmaWx0ZXJzLCBtdWx0aXBsZSByZXF1ZXN0cyB3aXRoIHBhZ2UgPT0gMSBjb3VsZCBiZSBzZW50IGZvciB0aGUgc2FtZSBmaWx0ZXJzIC0+IG9ubHkga2VlcCB0aGUgbGFzdCByZXN1bHRcbiAgICAgIHRoaXMuY3VycmVudFJlY2lwZXMgPSBwYWdlID09PSAxID8gcmVzdWx0cyA6IFsuLi50aGlzLmN1cnJlbnRSZWNpcGVzLCAuLi5yZXN1bHRzXTtcbiAgICAgIHRoaXMuY3VycmVudFJlY2lwZXMuZm9yRWFjaCgocjogUmVjaXBlKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm1vZGlmaWVkR3Vlc3RzICYmIHBhcnNlSW50KHRoaXMubW9kaWZpZWRHdWVzdHMsIDEwKSA+IDApIHtcbiAgICAgICAgICByLm1vZGlmaWVkR3Vlc3RzID0gcGFyc2VJbnQodGhpcy5tb2RpZmllZEd1ZXN0cywgMTApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMubm9Nb3JlUmVjaXBlcyA9IHJlc3VsdHMubGVuZ3RoID09PSAwO1xuICAgICAgcmV0dXJuIG9mKHRoaXMuY3VycmVudFJlY2lwZXMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxuICAgICAgY29uc29sZS5kZWJ1ZyhgRmlsdGVyaW5nIGFib3J0ZWQgOiAke0pTT04uc3RyaW5naWZ5KHJlcXVlc3RGaWx0ZXJzKX0gYW5kICR7SlNPTi5zdHJpbmdpZnkodGhpcy5maWx0ZXJzKX0gYXJlIGRpZmZlcmVudGApO1xuICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVGaWx0ZXIoZmlsdGVyTmFtZSkge1xuICAgIHRoaXMuZmlsdGVyUmVtb3ZlZC5lbWl0KGZpbHRlck5hbWUpO1xuICB9XG5cbiAgYnVpbGRGaWx0ZXJzQXJyYXkoKTogc3RyaW5nW10ge1xuICAgIGxldCBmaWx0ZXJOYW1lcyA9IFtdO1xuICAgIGZpbHRlck5hbWVzID0gWy4uLmZpbHRlck5hbWVzLCAuLi50aGlzLmdldFNlbGVjdGVkRmlsdGVycyh0aGlzLmZpbHRlcnMuY29zdCksIC4uLnRoaXMuZ2V0U2VsZWN0ZWRGaWx0ZXJzKHRoaXMuZmlsdGVycy5kaWZmaWN1bHR5KSxcbiAgICAgIC4uLnRoaXMuZ2V0U2VsZWN0ZWRGaWx0ZXJzKHRoaXMuZmlsdGVycy50aW1lKV07XG4gICAgaWYgKHRoaXMuZmlsdGVycy5hZGRpdGlvbmFsRmlsdGVycyAmJiB0aGlzLmZpbHRlcnMuYWRkaXRpb25hbEZpbHRlcnMudGl0bGUgIT09ICcnKSB7XG4gICAgICBmaWx0ZXJOYW1lcyA9IFt0aGlzLmZpbHRlcnMuYWRkaXRpb25hbEZpbHRlcnMudGl0bGVdLmNvbmNhdChmaWx0ZXJOYW1lcyk7XG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXJOYW1lcztcbiAgfVxuXG4gIGdldFNlbGVjdGVkRmlsdGVycyhmaWx0ZXJzQXJyYXkpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCFmaWx0ZXJzQXJyYXkpIHsgcmV0dXJuIFtdOyB9XG5cbiAgICByZXR1cm4gZmlsdGVyc0FycmF5LmZpbHRlcihlbCA9PiBlbC52YWx1ZSkubWFwKGVsID0+IGVsLnRleHQpO1xuICB9XG5cbiAgcmVsb2FkUGFnZSgpIHtcbiAgICB0aGlzLmxvYWRpbmcubmV4dCh0cnVlKTtcbiAgICB0aGlzLmxhc3RQYWdlID0gMTtcbiAgICB0aGlzLm5vTW9yZVJlY2lwZXMgPSBmYWxzZTtcbiAgICB0aGlzLm5vTW9yZUFydGljbGVzID0gZmFsc2U7XG4gICAgdGhpcy5jdXJyZW50UmVjaXBlcyA9IFtdO1xuICAgIHRoaXMuYXJ0aWNsZXMgPSBbXTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5sb2FkQ29udGVudCgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goc3ViID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcbiAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgLy8gQXJ0aWNsZXMgd2lsbCBiZSBsb2FkZWQgb25seSBpZiBhIGZpbHRlciBpcyBhcHBsaWVkIG9uIHBhY2thZ2VzXG4gIC8vIFRoaXMgaXMgdG8gYXZvaWQgYXJ0aWNsZXMgYmVpbmcgbG9hZGVkIGluIHNwZWNpYWwgcGFnZXMgd2hlcmUgb25seSBmaWx0ZXJzIG9uIHJlY2lwZXMgYXJlIHBhc3NlZCAoZmF2b3JpdGVzLCBzdWdnZXN0ZWQsIGV0Yy4pXG4gIC8vID0+IFBhY2thZ2VzIG1peGluZyBhcnRpY2xlcyB3aXRoIHJlY2lwZXMgaXMgbm90IHN1cHBvcnRlZCB5ZXRcbiAgcHJpdmF0ZSBsb2FkQXJ0aWNsZXMocGFnZTogbnVtYmVyKTogT2JzZXJ2YWJsZTxBcnRpY2xlW10+IHtcbiAgICBpZiAoIXRoaXMuY29udGV4dC5hcnRpY2xlc0luQ2F0YWxvZ0VuYWJsZWQgfHwgdGhpcy5ub01vcmVBcnRpY2xlcyB8fCAhdGhpcy5maWx0ZXJzWydwYWNrYWdlcyddKSB7XG4gICAgICByZXR1cm4gb2YoW10pO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RGaWx0ZXJzID0gcGljayh0aGlzLmZpbHRlcnMsICdwYWNrYWdlcycsICdzZWFyY2gnKTtcbiAgICByZXR1cm4gdGhpcy5hcnRpY2xlc1NlcnZpY2UuYWxsKHtcbiAgICAgIHJlbW90ZWZpbHRlcjogcmVxdWVzdEZpbHRlcnMsXG4gICAgICBwYWdlOiB7IHNpemU6IDIwLCBudW1iZXI6IHBhZ2UgfSxcbiAgICAgIHNvcnQ6IFsnLWRhdGUnXSB9KS5waXBlKFxuICAgICAgbWFwKChyZXN1bHQ6IERvY3VtZW50Q29sbGVjdGlvbjxBcnRpY2xlPikgPT4ge1xuICAgICAgICB0aGlzLmFydGljbGVzID0gcGFnZSA9PT0gMSA/IHJlc3VsdC5kYXRhIDogWy4uLnRoaXMuYXJ0aWNsZXMsIC4uLnJlc3VsdC5kYXRhXTtcbiAgICAgICAgdGhpcy5ub01vcmVBcnRpY2xlcyA9IHJlc3VsdC5kYXRhLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXJ0aWNsZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRDb250ZW50KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgZm9ya0pvaW4oW3RoaXMubG9hZFJlY2lwZXNQYWdlKHRoaXMubGFzdFBhZ2UpLCB0aGlzLmxvYWRBcnRpY2xlcyh0aGlzLmxhc3RQYWdlKV0pLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZy5uZXh0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgaXNTZWFyY2hpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVycy5zZWFyY2ggJiYgdGhpcy5maWx0ZXJzLnNlYXJjaCAhPT0gJyc7XG4gIH1cblxuICBpc0ZpZWxkRW1wdHkocmVjaXBlRmlsdGVyOiBSZWNpcGVGaWx0ZXJbXSk6IGJvb2xlYW4ge1xuICAgIGlmICghcmVjaXBlRmlsdGVyKSB7IHJldHVybiB0cnVlIH1cblxuICAgIGZvciAoY29uc3QgZiBvZiByZWNpcGVGaWx0ZXIpIHtcbiAgICAgIGlmIChmLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpc0ZpbHRlcmluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1NlYXJjaGluZygpIHx8XG4gICAgICAhdGhpcy5pc0ZpZWxkRW1wdHkodGhpcy5maWx0ZXJzLmRpZmZpY3VsdHkpIHx8XG4gICAgICAhdGhpcy5pc0ZpZWxkRW1wdHkodGhpcy5maWx0ZXJzLmNvc3QpIHx8XG4gICAgICAhdGhpcy5pc0ZpZWxkRW1wdHkodGhpcy5maWx0ZXJzLnRpbWUpO1xuICB9XG5cbiAgZ2V0IHNvcnQoKSB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1zdHJpbmctbGl0ZXJhbFxuICAgIGlmICh0aGlzLmZpbHRlcnMuYWRkaXRpb25hbEZpbHRlcnM/LmZpbHRlcnNbJ3BhY2thZ2VzJ10pIHtcbiAgICAgIHJldHVybiAncG9zaXRpb24nO1xuICAgIH1cbiAgICBpZiAodGhpcy5hZGRSZWNpcGVNb2RlKSB7XG4gICAgICByZXR1cm4gJ2NvbXB1dGVkX2Nvc3QnO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtaWFtLWNhdGFsb2ctbGlzdF9fY2FyZHNcIj5cblxuICA8IS0tIDxkaXYgKm5nSWY9XCJmaWx0ZXJzVG9EaXNwbGF5Lmxlbmd0aCA+IDBcIiBjbGFzcz1cIm1pYW0tY2F0YWxvZy1saXN0X19maWx0ZXJzXCI+XG4gICAgPGRpdiBjbGFzcz1cIm1pYW0tY2F0YWxvZy1saXN0X19maWx0ZXJfX3RpdGxlXCI+Vm9zIGZpbHRyZXM8L2Rpdj5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgZmlsdGVyc1RvRGlzcGxheVwiIGNsYXNzPVwibWlhbS1jYXRhbG9nLWxpc3RfX2ZpbHRlclwiPlxuICAgICAgPHNwYW4+e3tmaWx0ZXJ9fTwvc3Bhbj5cbiAgICAgIDxuZy1taWFtLWljb24gXG4gICAgICAgIGNsYXNzPVwibWlhbS1jYXRhbG9nLWxpc3RfX2ZpbHRlcl9faWNvblwiIFxuICAgICAgICAoY2xpY2spPVwicmVtb3ZlRmlsdGVyKGZpbHRlcilcIiBcbiAgICAgICAgW2ljb25OYW1lXT1cImljb24uQ2xlYXJcIlxuICAgICAgICBwcmltYXJ5Q29sb3I9XCJ2YXIoLS1tLWNvbG9yLXByaW1hcnkpXCI+XG4gICAgICA8L25nLW1pYW0taWNvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+IC0tPlxuXG4gIDwhLS0gTm8gcmVzdWx0cyAtLT5cbiAgPGRpdiAqbmdJZj1cIiEobG9hZGluZyB8IGFzeW5jKSAmJiBjdXJyZW50UmVjaXBlcy5sZW5ndGggPT09IDAgJiYgYXJ0aWNsZXMubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJtaWFtLWNhdGFsb2ctbGlzdF9fbm90Rm91bmRcIj5cbiAgICA8bmctbWlhbS1pY29uIGNsYXNzPVwibWlhbS1jYXRhbG9nLWxpc3RfX25vdEZvdW5kX19pY29uXCIgW3dpZHRoXT1cIjI3OVwiIFtoZWlnaHRdPVwiMjQzXCIgW2ljb25OYW1lXT1cImljb24uTm9SZWNpcGVGb3VuZFwiPjwvbmctbWlhbS1pY29uPlxuICAgIDxkaXYgKm5nSWY9XCJpc0ZpbHRlcmluZygpIGVsc2Ugbm90RmlsdGVyaW5nXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWlhbS1jYXRhbG9nLWxpc3RfX25vdEZvdW5kX190aXRsZTFcIj5cbiAgICAgICAgPHNwYW4gaTE4bj5Ew6lzb2zDqSwgYXVjdW5lIHByb3Bvc2l0aW9uIHRyb3V2w6llPC9zcGFuPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNTZWFyY2hpbmcoKVwiPlxuICAgICAgICAgIDxzcGFuIGkxOG4+cG91cjwvc3Bhbj5cbiAgICAgICAgICA8c3Bhbj5cInt7ZmlsdGVycy5zZWFyY2h9fVwiPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBpMThuIGNsYXNzPVwibWlhbS1jYXRhbG9nLWxpc3RfX25vdEZvdW5kX190aXRsZTJcIj5WZXVpbGxleiBtb2RpZmllciBsZXMgdGVybWVzIGRlIHZvdHJlIHJlY2hlcmNoZSBvdSByw6lnbGVyIGxlcyBmaWx0cmVzPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPG5nLXRlbXBsYXRlICNub3RGaWx0ZXJpbmc+XG4gICAgICA8ZGl2ICpuZ0lmPVwidGhpcy51c2VyU2VydmljZS5pc0xvZ2dlZCQgfCBhc3luYyBlbHNlIG5vdExvZ2dlZFwiPlxuICAgICAgICA8c3BhbiBpMThuIGNsYXNzPVwibWlhbS1jYXRhbG9nLWxpc3RfX25vdEZvdW5kX190aXRsZTFcIj5Ew6lzb2zDqSwgdm91cyBuJ2F2ZXogcGFzIGVuY29yZSBkJ2lkw6llcyByZXBhcyBzYXV2ZWdhcmTDqWVzPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI25vdExvZ2dlZD5cbiAgICAgIDxzcGFuIGkxOG4gY2xhc3M9XCJtaWFtLWNhdGFsb2ctbGlzdF9fbm90Rm91bmRfX3RpdGxlMVwiPkTDqXNvbMOpLCB2b3VzIGRldmV6IMOqdHJlIGNvbm5lY3TDqSBwb3VyIGFjY8OpZGVyIGF1IGNvbnRlbnUgZGUgY2V0dGUgcGFnZS48L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG5cbiAgPCEtLSBJbnNlcnQgYSBjYXJkIHRvIGNyZWF0ZSBhIHJlY2lwZSAtLT5cbiAgPG5nLW1pYW0tY2FyZC1jcmVhdGUtcmVjaXBlICpuZ0lmPVwiaW5zZXJ0Q3JlYXRlQ2FyZCAmJiBjdXJyZW50UmVjaXBlcy5sZW5ndGggIT09IDBcIiAoY2xpY2tlZCk9XCJyZWNpcGVBY3Rpb25UcmlnZ2VyZWQuZW1pdCh7YWN0aW9uOiAnQ1JFQVRFJywgcmVjaXBlOiBudWxsfSlcIiBjbGFzcz1cIm1pYW0tY2F0YWxvZy1saXN0X19jYXJkXCI+PC9uZy1taWFtLWNhcmQtY3JlYXRlLXJlY2lwZT5cbiAgXG4gIDwhLS0gQ2xhc3NpY2FsIHJlY2lwZSBjYXJkIC0tPlxuICA8bmctbWlhbS1jYXRhbG9nLXJlY2lwZS1jYXJkXG4gICAgKm5nRm9yPVwibGV0IHJlY2lwZSBvZiBjdXJyZW50UmVjaXBlc1wiXG4gICAgW3JlY2lwZV09J3JlY2lwZSdcbiAgICBbb3JpZ2luVHJhY2VdPVwiZXZlbnRUcmFjZSgpXCJcbiAgICBbZGlzcGxheVByaWNpbmddPVwiZGlzcGxheVByaWNpbmdcIlxuICAgIFtwcmV2aWV3QWxsb3dlZF09XCIhYWRkUmVjaXBlTW9kZVwiXG4gICAgW2FkZFJlY2lwZU1vZGVdPVwiYWRkUmVjaXBlTW9kZVwiXG4gICAgW2Rpc3BsYXlHdWVzdHNdPVwiZGlzcGxheUd1ZXN0c1wiXG4gICAgKGFkZFRvTWVhbHNQbGFubmVyKT1cImFkZFRvTWVhbHNQbGFubmVyLmVtaXQoJGV2ZW50KVwiXG4gICAgKGFjdGlvblRyaWdnZXJlZCk9XCJyZWNpcGVBY3Rpb25UcmlnZ2VyZWQuZW1pdCh7YWN0aW9uOiAkZXZlbnQsIHJlY2lwZTogcmVjaXBlfSlcIlxuICA+PC9uZy1taWFtLWNhdGFsb2ctcmVjaXBlLWNhcmQ+XG4gIFxuICA8IS0tIEFydGljbGUgY2FyZCAtLT5cbiAgPG5nLW1pYW0tY2F0YWxvZy1hcnRpY2xlLWNhcmQgKm5nRm9yPVwibGV0IGFydGljbGUgb2YgYXJ0aWNsZXNcIiBbYXJ0aWNsZV09XCJhcnRpY2xlXCI+PC9uZy1taWFtLWNhdGFsb2ctYXJ0aWNsZS1jYXJkPlxuXG4gIDwhLS0gTG9hZGVyIC0tPlxuICA8ZGl2ICpuZ0lmPVwibG9hZGluZyB8IGFzeW5jXCIgY2xhc3M9XCJtaWFtLWNhdGFsb2ctbGlzdF9fbG9hZGVyXCI+XG4gICAgPG5nLW1pYW0tbG9hZGVyPjwvbmctbWlhbS1sb2FkZXI+XG4gICAgPGRpdiBpMThuPlxuICAgICAgQ2hhcmdlbWVudCBkZXMgcsOpc3VsdGF0cy4uLlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBpZD1cIm1pYW0tY2F0YWxvZy1saXN0X19hbmNob3JcIj48L2Rpdj5cbjwvZGl2PiJdfQ==
444
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIvYnVpbGRzL21pYW0vbmctbWlhbS1zZGsvcHJvamVjdHMvbmctbWlhbS9zcmMvIiwic291cmNlcyI6WyJsaWIvX3dlYi1jb21wb25lbnRzL3JlY2lwZS1jYXRhbG9nL2NhdGFsb2ctbGlzdC9jYXRhbG9nLWxpc3QuY29tcG9uZW50LnRzIiwibGliL193ZWItY29tcG9uZW50cy9yZWNpcGUtY2F0YWxvZy9jYXRhbG9nLWxpc3QvY2F0YWxvZy1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLHVCQUF1QixFQUN2QixpQkFBaUIsRUFHakIsTUFBTSxFQUNOLFlBQVksRUFDWixLQUFLLEVBRUwsWUFBWSxFQUNaLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFhLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEgsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pELE9BQU8sRUFBZ0IsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDN0UsT0FBTyxJQUFJLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDN0YsT0FBTyxFQUFFLGdCQUFnQixFQUFvQixNQUFNLHNDQUFzQyxDQUFDO0FBQzFGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHNFQUFzRSxD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QkFDckMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07YUFDaEQ7c1BBRVUsT0FBTztrQkFBZixLQUFLO1lBQ0csZ0JBQWdCO2tCQUF4QixLQUFLO1lBQ0csVUFBVTtrQkFBbEIsS0FBSztZQUNHLGNBQWM7a0JBQXRCLEtBQUs7WUFDRyxjQUFjO2tCQUF0QixLQUFLO1lBQ0csYUFBYTtrQkFBckIsS0FBSztZQUNHLGFBQWE7a0JBQXJCLEtBQUs7WUFDRyxrQkFBa0I7a0JBQTFCLEtBQUs7WUFDSSxpQkFBaUI7a0JBQTFCLE1BQU07WUFDRyxhQUFhO2tCQUF0QixNQUFNO1lBQ0cscUJBQXFCO2tCQUE5QixNQUFNO1lBQ0csT0FBTztrQkFBaEIsTUFBTTtZQVdtQyxXQUFXO2tCQUFwRCxZQUFZO21CQUFDLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBWaWV3Q2hpbGRyZW4sXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvY3VtZW50Q29sbGVjdGlvbiB9IGZyb20gJ25neC1qc29uYXBpJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZm9ya0pvaW4sIE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBza2lwV2hpbGUsIHN3aXRjaE1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFydGljbGUgfSBmcm9tICcuLi8uLi8uLi9fbW9kZWxzJztcbmltcG9ydCB7IFJlY2lwZSB9IGZyb20gJy4uLy4uLy4uL19tb2RlbHMvcmVjaXBlJztcbmltcG9ydCB7IEFydGljbGVzU2VydmljZSwgQ29udGV4dFNlcnZpY2UsIFJlY2lwZUxpa2VzU2VydmljZSwgUmVjaXBlc1NlcnZpY2UsIFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vX3NlcnZpY2VzJztcbmltcG9ydCB7IEljb24gfSBmcm9tICcuLi8uLi8uLi9fdHlwZXMvaWNvbi5lbnVtJztcbmltcG9ydCB7IFJlY2lwZUZpbHRlciwgUmVjaXBlRmlsdGVycyB9IGZyb20gJy4uLy4uLy4uL190eXBlcy9yZWNpcGUtZmlsdGVycyc7XG5pbXBvcnQgcGljayBmcm9tICdsb2Rhc2gtZXMvcGljayc7XG5pbXBvcnQgeyBFdmVudFRyYWNlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL19jb21wb25lbnRzL2Fic3RyYWN0cy9ldmVudC10cmFjZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UsIEN1c3RvbVByb3BlcnRpZXMgfSBmcm9tICcuLi8uLi8uLi9fc2VydmljZXMvYW5hbHl0aWNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2F0YWxvZ1JlY2lwZUNhcmRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9yZWNpcGUtY2FyZHMvY2F0YWxvZy1yZWNpcGUtY2FyZC9jYXRhbG9nLXJlY2lwZS1jYXJkLmNvbXBvbmVudCc7XG5cbmNvbnN0IHJlY2lwZUluY2x1ZGVzID0gWydyZWNpcGUtcHJvdmlkZXInLCAnc3BvbnNvcnMnXTtcbmNvbnN0IHJlY2lwZVNwYXJzZUZpZWxkcyA9IHtcbiAgcmVjaXBlczogWyd0aXRsZScsICdudW1iZXItb2YtZ3Vlc3RzJywgJ21lZGlhLXVybCcsICd2aWRlby1pZCcsICdmaWxpZ3JhbmUtbG9nby11cmwnLCAnZGlmZmljdWx0eScsICdwcmVwYXJhdGlvbi10aW1lJywgJ2Nvb2tpbmctdGltZScsXG4gICAgICAgICAgICAncmVzdGluZy10aW1lJywgJ2NvbXB1dGVkLWNvc3QnLCAuLi5yZWNpcGVJbmNsdWRlc10sXG4gIHNwb25zb3JzOiBbJ2xvZ28tdXJsJ10sXG4gIFsncmVjaXBlLXByb3ZpZGVyJ106IFsnbmFtZSddXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZy1taWFtLWNhdGFsb2ctbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXRhbG9nLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYXRhbG9nLWxpc3QuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQ2F0YWxvZ0xpc3RDb21wb25lbnQgZXh0ZW5kcyBFdmVudFRyYWNlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBmaWx0ZXJzOiBSZWNpcGVGaWx0ZXJzO1xuICBASW5wdXQoKSBpbnNlcnRDcmVhdGVDYXJkID0gZmFsc2U7XG4gIEBJbnB1dCgpIHJhbmRvbU1vZGUgPSBmYWxzZTtcbiAgQElucHV0KCkgbW9kaWZpZWRHdWVzdHM7XG4gIEBJbnB1dCgpIGRpc3BsYXlQcmljaW5nO1xuICBASW5wdXQoKSBkaXNwbGF5R3Vlc3RzID0gdHJ1ZTtcbiAgQElucHV0KCkgYWRkUmVjaXBlTW9kZSA9IGZhbHNlO1xuICBASW5wdXQoKSBleGNsdWRlZFJlY2lwZXNJZHM6IHN0cmluZ1tdID0gW107XG4gIEBPdXRwdXQoKSBhZGRUb01lYWxzUGxhbm5lciA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjaXBlPigpO1xuICBAT3V0cHV0KCkgZmlsdGVyUmVtb3ZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgcmVjaXBlQWN0aW9uVHJpZ2dlcmVkID0gbmV3IEV2ZW50RW1pdHRlcjx7YWN0aW9uOiBzdHJpbmcsIHJlY2lwZTogUmVjaXBlfT4oKTtcbiAgQE91dHB1dCgpIGxvYWRpbmcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuXG4gIGN1cnJlbnRSZWNpcGVzOiBSZWNpcGVbXSA9IFtdO1xuICBsYXN0UGFnZSA9IDA7XG4gIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdO1xuICBpY29uID0gSWNvbjtcbiAgbm9Nb3JlUmVjaXBlcyA9IGZhbHNlO1xuICBub01vcmVBcnRpY2xlcyA9IGZhbHNlO1xuICBib3R0b21BbmNob3I6IEhUTUxFbGVtZW50O1xuICBmaWx0ZXJzVG9EaXNwbGF5ID0gW107XG4gIGFydGljbGVzOiBBcnRpY2xlW10gPSBbXTtcbiAgQFZpZXdDaGlsZHJlbihDYXRhbG9nUmVjaXBlQ2FyZENvbXBvbmVudCkgcmVjaXBlQ2FyZHMhOiBRdWVyeUxpc3Q8Q2F0YWxvZ1JlY2lwZUNhcmRDb21wb25lbnQ+O1xuXG4gIHByaXZhdGUgaW50ZXJzZWN0aW9uT2JzZXJ2ZXI6IEludGVyc2VjdGlvbk9ic2VydmVyO1xuICBwcml2YXRlIG11dGF0aW9uT2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWNpcGVzU2VydmljZTogUmVjaXBlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWNpcGVMaWtlc1NlcnZpY2U6IFJlY2lwZUxpa2VzU2VydmljZSxcbiAgICBwcml2YXRlIGFydGljbGVzU2VydmljZTogQXJ0aWNsZXNTZXJ2aWNlLFxuICAgIHB1YmxpYyB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb250ZXh0OiBDb250ZXh0U2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJvdGVjdGVkIGFuYWx5dGljc1NlcnZpY2U6IEFuYWx5dGljc1NlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoYW5hbHl0aWNzU2VydmljZSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zID0gW107XG4gICAgdGhpcy5jdXJyZW50UmVjaXBlcyA9IFtdO1xuICAgIHRoaXMuZmlsdGVycyA9IG5ldyBSZWNpcGVGaWx0ZXJzKHsgc2VhcmNoOiAnJyB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuYm90dG9tQW5jaG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21pYW0tY2F0YWxvZy1saXN0X19hbmNob3InKTtcbiAgICB0aGlzLmluaXRMb2FkT25TY3JvbGwoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAvLyBQcmV2ZW50cyByZWxvYWQgbG9vcCBpbiBhbmd1bGFyXG4gICAgaWYgKCEoT2JqZWN0LmtleXMoY2hhbmdlcykubGVuZ3RoID09PSAxICYmIE9iamVjdC5rZXlzKGNoYW5nZXMpWzBdID09PSAnb3JpZ2luVHJhY2UnKSApIHtcbiAgICAgIHRoaXMuZmlsdGVyc1RvRGlzcGxheSA9IHRoaXMuYnVpbGRGaWx0ZXJzQXJyYXkoKTtcbiAgICAgIHRoaXMucmVsb2FkUGFnZSgpO1xuICAgICAgaWYgKHRoaXMuZmlsdGVycy5zZWFyY2gpIHtcbiAgICAgICAgdGhpcy5zZW5kRXZlbnQodGhpcy5hbmFseXRpY3NTZXJ2aWNlLkVWRU5UX1NFQVJDSCk7XG4gICAgICB9XG4gICAgICB0aGlzLnBhZ2V2aWV3KCk7XG4gICAgfVxuICB9XG5cbiAgY3VycmVudFBhdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJzLmV2ZW50UGF0aCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb3BzKCk6IEN1c3RvbVByb3BlcnRpZXMge1xuICAgIGlmICghdGhpcy5maWx0ZXJzPy5zZWFyY2gpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgcmV0dXJuIHsgc2VhcmNoX3Rlcm06IHRoaXMuZmlsdGVycz8uc2VhcmNoIH07XG4gIH1cblxuICBpbml0TG9hZE9uU2Nyb2xsKCkge1xuICAgIC8vIFJlY2VpdmUgYW4gZXZlbnQgZWFjaCB0aW1lIHRoZSBhbmNob3IgZW50ZXJzL2xlYXZlcyB0aGUgdmlld3BvcnRcbiAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChbZW50cnldKSA9PiB7IHRoaXMuYXV0b2xvYWRDb250ZW50SWZOZWNlc3NhcnkoKTsgfSwge30pO1xuICAgIC8vIFJlY2VpdmUgYW4gZXZlbnQgZWFjaCB0aW1lIGFuIGF0dHJpYnV0ZS9jaGlsZCBpcyBhZGRlZC9kZWxldGVkL3VwZGF0ZWQgaW4gdGhlIHBhcmVudCBkaXYgb2YgdGhlIHJlY2lwZXNcbiAgICAvLyBpLmUuIHdpbGwgYmUgdHJpZ2dlcmVkIGVhY2ggdGltZSBuZXcgcmVjaXBlcyBhcmUgZGlzcGxheWVkXG4gICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4geyB0aGlzLmF1dG9sb2FkQ29udGVudElmTmVjZXNzYXJ5KCk7IH0pO1xuXG4gICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5vYnNlcnZlKHRoaXMuYm90dG9tQW5jaG9yKTtcbiAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZShcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ21pYW0tY2F0YWxvZy1saXN0X19jYXJkcycpWzBdLFxuICAgICAgeyBhdHRyaWJ1dGVzOiB0cnVlLCBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IGZhbHNlIH0gLy8gc3VidHJlZSBmYWxzZSA9PiBjaGFuZ2VzIG9uIGNoaWxkcmVuIHdvbid0IHRyaWdnZXIgdGhlIGNhbGxiYWNrXG4gICAgKTtcbiAgfVxuXG4gIGFuY2hvcklzT25TY3JlZW4oKSB7XG4gICAgY29uc3Qgdmlld3BvcnRIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICBjb25zdCByZWN0ID0gdGhpcy5ib3R0b21BbmNob3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcmV0dXJuIChyZWN0LnRvcCA8PSB2aWV3cG9ydEhlaWdodCAmJiByZWN0LmJvdHRvbSA+PSAwKTtcbiAgfVxuXG4gIGF1dG9sb2FkQ29udGVudElmTmVjZXNzYXJ5KCkge1xuICAgIHRoaXMubG9hZGluZy5waXBlKHRha2UoMSksIGZpbHRlcihsb2FkaW5nID0+ICFsb2FkaW5nKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5hbmNob3JJc09uU2NyZWVuKCkgJiYgKFxuICAgICAgICAgICh0aGlzLmN1cnJlbnRSZWNpcGVzLmxlbmd0aCA+IDAgJiYgIXRoaXMubm9Nb3JlUmVjaXBlcykgfHxcbiAgICAgICAgICAodGhpcy5hcnRpY2xlcy5sZW5ndGggPiAwICYmICF0aGlzLm5vTW9yZUFydGljbGVzKVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgLy8gQXQgY29tcG9uZW50IGluaXRpYWwgbG9hZCwgMiBjYWxscyB3aWxsIGJlIG1hZGUgZm9yIHRoZSBmaXJzdCB0d28gcmVjaXBlcyBwYWdlXG4gICAgICAgIC8vIFRoaXMgaXMgdG8gYXZvaWQgbWFraW5nIHRoZSBsb2FkZXIgc3BpbiB0d2ljZVxuICAgICAgICB0aGlzLmxvYWRNb3JlKHRoaXMubGFzdFBhZ2UgPiAyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGxvYWRNb3JlKGxvYWRlciA9IHRydWUpIHtcbiAgICBpZiAobG9hZGVyKSB7IHRoaXMubG9hZGluZy5uZXh0KHRydWUpOyB9XG4gICAgdGhpcy5sYXN0UGFnZSsrO1xuICAgIHRoaXMubG9hZENvbnRlbnQoKTtcbiAgfVxuXG4gIGxvYWRSZWNpcGVzUGFnZShwYWdlOiBudW1iZXIpOiBPYnNlcnZhYmxlPFJlY2lwZVtdPiB7XG4gICAgaWYgKHRoaXMubm9Nb3JlUmVjaXBlcykge1xuICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICB9XG5cbiAgICAvLyBrZWVwIGEgY29weSBvZiB0aGUgZmlsdGVycyB3aGVuIHJlcXVlc3QgaXMgc2VudCwgc28gd2UgY2FuIGNoZWNrIHRoZXkgYXJlIHN0aWxsIHRoZSBzYW1lIHdoZW4gaXQgaXMgcmVjZWl2ZWRcbiAgICAvLyBCZWNhdXNlIGlmIGl0J3Mgbm90IHRoZSBjYXNlIHdlIGhhdmUgdG8gaWdub3JlIHRoZSByZXN1bHRzXG4gICAgY29uc3QgcmVxdWVzdEZpbHRlcnMgPSB0aGlzLmZpbHRlcnMuY29weSgpO1xuICAgIGlmICh0aGlzLmNvbnRleHQuZGlzcGxheUluZ3JlZGllbnRQaWN0dXJlc09uUmVjaXBlQ2FyZHMgJiYgIXJlY2lwZUluY2x1ZGVzLmluY2x1ZGVzKCdpbmdyZWRpZW50cycpKSB7XG4gICAgICByZWNpcGVJbmNsdWRlcy5wdXNoKCdpbmdyZWRpZW50cycpO1xuICAgICAgcmVjaXBlU3BhcnNlRmllbGRzLnJlY2lwZXMucHVzaCgnaW5ncmVkaWVudHMnKTtcbiAgICAgIHJlY2lwZVNwYXJzZUZpZWxkc1snaW5ncmVkaWVudHMnXSA9IFsnbmFtZScsICdxdWFudGl0eScsICd1bml0JywgJ2FjdGl2ZScsICdmb3JjZWQtZWFucycsICdwaWN0dXJlLXVybCcsICdwb3NpdGlvbiddO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlY2lwZXNTZXJ2aWNlLmZpbHRlcihcbiAgICAgIHJlcXVlc3RGaWx0ZXJzLFxuICAgICAgeyBzaXplOiAyMCwgbnVtYmVyOiBwYWdlIH0sXG4gICAgICByZWNpcGVJbmNsdWRlcyxcbiAgICAgIHJlY2lwZVNwYXJzZUZpZWxkcyxcbiAgICAgIG51bGwsXG4gICAgICB0aGlzLnJhbmRvbU1vZGUsXG4gICAgICB0aGlzLnNvcnRcbiAgICApLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHJlc3VsdDogUmVjaXBlW10pID0+IHRoaXMucHJvY2Vzc1Jlc3VsdHMocmVzdWx0LCByZXF1ZXN0RmlsdGVycywgcGFnZSkpXG4gICAgKTtcbiAgfVxuXG4gIHByb2Nlc3NSZXN1bHRzKHJlc3VsdHM6IFJlY2lwZVtdLCByZXF1ZXN0RmlsdGVycywgcGFnZSk6IE9ic2VydmFibGU8UmVjaXBlW10+IHtcbiAgICAvLyBCZWNhdXNlIEZpbHRlciBpcyBhIHR5cGUsIGF0dHJpYnV0ZXMgYXJlIGFsd2F5cyBpbiB0aGUgc2FtZSBvcmRlciwgc28gc3RyaW5naWZ5IHdvbid0IGJlIGZhbHNlIGZvciBvYmplY3RzIHdpdGggc2FtZSBhdHRyaWJ1dGVzXG4gICAgaWYgKEpTT04uc3RyaW5naWZ5KHJlcXVlc3RGaWx0ZXJzKSA9PT0gSlNPTi5zdHJpbmdpZnkodGhpcy5maWx0ZXJzKSkge1xuICAgICAgaWYgKHRoaXMuZXhjbHVkZWRSZWNpcGVzSWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKHJlY2lwZSA9PiAhdGhpcy5leGNsdWRlZFJlY2lwZXNJZHMuaW5jbHVkZXMocmVjaXBlLmlkKSk7XG4gICAgICB9XG4gICAgICAvLyBpZiB5b3Ugc3BhbSBjbGljayBvbiBmaWx0ZXJzLCBtdWx0aXBsZSByZXF1ZXN0cyB3aXRoIHBhZ2UgPT0gMSBjb3VsZCBiZSBzZW50IGZvciB0aGUgc2FtZSBmaWx0ZXJzIC0+IG9ubHkga2VlcCB0aGUgbGFzdCByZXN1bHRcbiAgICAgIHRoaXMuY3VycmVudFJlY2lwZXMgPSBwYWdlID09PSAxID8gcmVzdWx0cyA6IFsuLi50aGlzLmN1cnJlbnRSZWNpcGVzLCAuLi5yZXN1bHRzXTtcbiAgICAgIHRoaXMuY3VycmVudFJlY2lwZXMuZm9yRWFjaCgocjogUmVjaXBlKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm1vZGlmaWVkR3Vlc3RzICYmIHBhcnNlSW50KHRoaXMubW9kaWZpZWRHdWVzdHMsIDEwKSA+IDApIHtcbiAgICAgICAgICByLm1vZGlmaWVkR3Vlc3RzID0gcGFyc2VJbnQodGhpcy5tb2RpZmllZEd1ZXN0cywgMTApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMubm9Nb3JlUmVjaXBlcyA9IHJlc3VsdHMubGVuZ3RoID09PSAwO1xuICAgICAgcmV0dXJuIG9mKHRoaXMuY3VycmVudFJlY2lwZXMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxuICAgICAgY29uc29sZS5kZWJ1ZyhgRmlsdGVyaW5nIGFib3J0ZWQgOiAke0pTT04uc3RyaW5naWZ5KHJlcXVlc3RGaWx0ZXJzKX0gYW5kICR7SlNPTi5zdHJpbmdpZnkodGhpcy5maWx0ZXJzKX0gYXJlIGRpZmZlcmVudGApO1xuICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVGaWx0ZXIoZmlsdGVyTmFtZSkge1xuICAgIHRoaXMuZmlsdGVyUmVtb3ZlZC5lbWl0KGZpbHRlck5hbWUpO1xuICB9XG5cbiAgYnVpbGRGaWx0ZXJzQXJyYXkoKTogc3RyaW5nW10ge1xuICAgIGxldCBmaWx0ZXJOYW1lcyA9IFtdO1xuICAgIGZpbHRlck5hbWVzID0gWy4uLmZpbHRlck5hbWVzLCAuLi50aGlzLmdldFNlbGVjdGVkRmlsdGVycyh0aGlzLmZpbHRlcnMuY29zdCksIC4uLnRoaXMuZ2V0U2VsZWN0ZWRGaWx0ZXJzKHRoaXMuZmlsdGVycy5kaWZmaWN1bHR5KSxcbiAgICAgIC4uLnRoaXMuZ2V0U2VsZWN0ZWRGaWx0ZXJzKHRoaXMuZmlsdGVycy50aW1lKV07XG4gICAgaWYgKHRoaXMuZmlsdGVycy5hZGRpdGlvbmFsRmlsdGVycyAmJiB0aGlzLmZpbHRlcnMuYWRkaXRpb25hbEZpbHRlcnMudGl0bGUgIT09ICcnKSB7XG4gICAgICBmaWx0ZXJOYW1lcyA9IFt0aGlzLmZpbHRlcnMuYWRkaXRpb25hbEZpbHRlcnMudGl0bGVdLmNvbmNhdChmaWx0ZXJOYW1lcyk7XG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXJOYW1lcztcbiAgfVxuXG4gIGdldFNlbGVjdGVkRmlsdGVycyhmaWx0ZXJzQXJyYXkpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCFmaWx0ZXJzQXJyYXkpIHsgcmV0dXJuIFtdOyB9XG5cbiAgICByZXR1cm4gZmlsdGVyc0FycmF5LmZpbHRlcihlbCA9PiBlbC52YWx1ZSkubWFwKGVsID0+IGVsLnRleHQpO1xuICB9XG5cbiAgcmVsb2FkUGFnZSgpIHtcbiAgICB0aGlzLmxvYWRpbmcubmV4dCh0cnVlKTtcbiAgICB0aGlzLmxhc3RQYWdlID0gMTtcbiAgICB0aGlzLm5vTW9yZVJlY2lwZXMgPSBmYWxzZTtcbiAgICB0aGlzLm5vTW9yZUFydGljbGVzID0gZmFsc2U7XG4gICAgdGhpcy5jdXJyZW50UmVjaXBlcyA9IFtdO1xuICAgIHRoaXMuYXJ0aWNsZXMgPSBbXTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5sb2FkQ29udGVudCgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goc3ViID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcbiAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgLy8gQXJ0aWNsZXMgd2lsbCBiZSBsb2FkZWQgb25seSBpZiBhIGZpbHRlciBpcyBhcHBsaWVkIG9uIHBhY2thZ2VzXG4gIC8vIFRoaXMgaXMgdG8gYXZvaWQgYXJ0aWNsZXMgYmVpbmcgbG9hZGVkIGluIHNwZWNpYWwgcGFnZXMgd2hlcmUgb25seSBmaWx0ZXJzIG9uIHJlY2lwZXMgYXJlIHBhc3NlZCAoZmF2b3JpdGVzLCBzdWdnZXN0ZWQsIGV0Yy4pXG4gIC8vID0+IFBhY2thZ2VzIG1peGluZyBhcnRpY2xlcyB3aXRoIHJlY2lwZXMgaXMgbm90IHN1cHBvcnRlZCB5ZXRcbiAgcHJpdmF0ZSBsb2FkQXJ0aWNsZXMocGFnZTogbnVtYmVyKTogT2JzZXJ2YWJsZTxBcnRpY2xlW10+IHtcbiAgICBpZiAoIXRoaXMuY29udGV4dC5hcnRpY2xlc0luQ2F0YWxvZ0VuYWJsZWQgfHwgdGhpcy5ub01vcmVBcnRpY2xlcyB8fCAhdGhpcy5maWx0ZXJzWydwYWNrYWdlcyddKSB7XG4gICAgICByZXR1cm4gb2YoW10pO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RGaWx0ZXJzID0gcGljayh0aGlzLmZpbHRlcnMsICdwYWNrYWdlcycsICdzZWFyY2gnKTtcbiAgICByZXR1cm4gdGhpcy5hcnRpY2xlc1NlcnZpY2UuYWxsKHtcbiAgICAgIHJlbW90ZWZpbHRlcjogcmVxdWVzdEZpbHRlcnMsXG4gICAgICBwYWdlOiB7IHNpemU6IDIwLCBudW1iZXI6IHBhZ2UgfSxcbiAgICAgIHNvcnQ6IFsnLWRhdGUnXSB9KS5waXBlKFxuICAgICAgbWFwKChyZXN1bHQ6IERvY3VtZW50Q29sbGVjdGlvbjxBcnRpY2xlPikgPT4ge1xuICAgICAgICB0aGlzLmFydGljbGVzID0gcGFnZSA9PT0gMSA/IHJlc3VsdC5kYXRhIDogWy4uLnRoaXMuYXJ0aWNsZXMsIC4uLnJlc3VsdC5kYXRhXTtcbiAgICAgICAgdGhpcy5ub01vcmVBcnRpY2xlcyA9IHJlc3VsdC5kYXRhLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXJ0aWNsZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRDb250ZW50KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgZm9ya0pvaW4oW3RoaXMubG9hZFJlY2lwZXNQYWdlKHRoaXMubGFzdFBhZ2UpLCB0aGlzLmxvYWRBcnRpY2xlcyh0aGlzLmxhc3RQYWdlKV0pLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZy5uZXh0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgaXNTZWFyY2hpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVycy5zZWFyY2ggJiYgdGhpcy5maWx0ZXJzLnNlYXJjaCAhPT0gJyc7XG4gIH1cblxuICBpc0ZpZWxkRW1wdHkocmVjaXBlRmlsdGVyOiBSZWNpcGVGaWx0ZXJbXSk6IGJvb2xlYW4ge1xuICAgIGlmICghcmVjaXBlRmlsdGVyKSB7IHJldHVybiB0cnVlIH1cblxuICAgIGZvciAoY29uc3QgZiBvZiByZWNpcGVGaWx0ZXIpIHtcbiAgICAgIGlmIChmLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpc0ZpbHRlcmluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1NlYXJjaGluZygpIHx8XG4gICAgICAhdGhpcy5pc0ZpZWxkRW1wdHkodGhpcy5maWx0ZXJzLmRpZmZpY3VsdHkpIHx8XG4gICAgICAhdGhpcy5pc0ZpZWxkRW1wdHkodGhpcy5maWx0ZXJzLmNvc3QpIHx8XG4gICAgICAhdGhpcy5pc0ZpZWxkRW1wdHkodGhpcy5maWx0ZXJzLnRpbWUpO1xuICB9XG5cbiAgZ2V0IHNvcnQoKSB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1zdHJpbmctbGl0ZXJhbFxuICAgIGlmICh0aGlzLmZpbHRlcnMuYWRkaXRpb25hbEZpbHRlcnM/LmZpbHRlcnNbJ3BhY2thZ2VzJ10pIHtcbiAgICAgIHJldHVybiAncG9zaXRpb24nO1xuICAgIH1cbiAgICBpZiAodGhpcy5hZGRSZWNpcGVNb2RlKSB7XG4gICAgICByZXR1cm4gJ2NvbXB1dGVkX2Nvc3QnO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtaWFtLWNhdGFsb2ctbGlzdF9fY2FyZHNcIj5cblxuICA8IS0tIDxkaXYgKm5nSWY9XCJmaWx0ZXJzVG9EaXNwbGF5Lmxlbmd0aCA+IDBcIiBjbGFzcz1cIm1pYW0tY2F0YWxvZy1saXN0X19maWx0ZXJzXCI+XG4gICAgPGRpdiBjbGFzcz1cIm1pYW0tY2F0YWxvZy1saXN0X19maWx0ZXJfX3RpdGxlXCI+Vm9zIGZpbHRyZXM8L2Rpdj5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgZmlsdGVyc1RvRGlzcGxheVwiIGNsYXNzPVwibWlhbS1jYXRhbG9nLWxpc3RfX2ZpbHRlclwiPlxuICAgICAgPHNwYW4+e3tmaWx0ZXJ9fTwvc3Bhbj5cbiAgICAgIDxuZy1taWFtLWljb24gXG4gICAgICAgIGNsYXNzPVwibWlhbS1jYXRhbG9nLWxpc3RfX2ZpbHRlcl9faWNvblwiIFxuICAgICAgICAoY2xpY2spPVwicmVtb3ZlRmlsdGVyKGZpbHRlcilcIiBcbiAgICAgICAgW2ljb25OYW1lXT1cImljb24uQ2xlYXJcIlxuICAgICAgICBwcmltYXJ5Q29sb3I9XCJ2YXIoLS1tLWNvbG9yLXByaW1hcnkpXCI+XG4gICAgICA8L25nLW1pYW0taWNvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+IC0tPlxuXG4gIDwhLS0gTm8gcmVzdWx0cyAtLT5cbiAgPGRpdiAqbmdJZj1cIiEobG9hZGluZyB8IGFzeW5jKSAmJiBjdXJyZW50UmVjaXBlcy5sZW5ndGggPT09IDAgJiYgYXJ0aWNsZXMubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJtaWFtLWNhdGFsb2ctbGlzdF9fbm90Rm91bmRcIj5cbiAgICA8bmctbWlhbS1pY29uIGNsYXNzPVwibWlhbS1jYXRhbG9nLWxpc3RfX25vdEZvdW5kX19pY29uXCIgW3dpZHRoXT1cIjI3OVwiIFtoZWlnaHRdPVwiMjQzXCIgW2ljb25OYW1lXT1cImljb24uTm9SZWNpcGVGb3VuZFwiPjwvbmctbWlhbS1pY29uPlxuICAgIDxkaXYgKm5nSWY9XCJpc0ZpbHRlcmluZygpIGVsc2Ugbm90RmlsdGVyaW5nXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWlhbS1jYXRhbG9nLWxpc3RfX25vdEZvdW5kX190aXRsZTEgZmlsdGVyaW5nXCI+XG4gICAgICAgIDxzcGFuIGkxOG4+RMOpc29sw6ksIGF1Y3VuZSBwcm9wb3NpdGlvbiB0cm91dsOpZTwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1pYW0tY2F0YWxvZy1saXN0X19ub3RGb3VuZF9fc2VhcmNoaW5nXCIgKm5nSWY9XCJpc1NlYXJjaGluZygpXCI+XG4gICAgICAgICAgPHNwYW4gaTE4bj5wb3VyPC9zcGFuPlxuICAgICAgICAgIDxzcGFuPlwie3tmaWx0ZXJzLnNlYXJjaH19XCI8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibWlhbS1jYXRhbG9nLWxpc3RfX25vdEZvdW5kX190aXRsZTJcIj5cbiAgICAgICAgPHNwYW4gaTE4bj5WZXVpbGxleiBtb2RpZmllciBsZXMgdGVybWVzIGRlIHZvdHJlIHJlY2hlcmNoZSBvdSByw6lnbGVyIGxlcyBmaWx0cmVzPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPG5nLXRlbXBsYXRlICNub3RGaWx0ZXJpbmc+XG4gICAgICA8ZGl2ICpuZ0lmPVwidGhpcy51c2VyU2VydmljZS5pc0xvZ2dlZCQgfCBhc3luYyBlbHNlIG5vdExvZ2dlZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWlhbS1jYXRhbG9nLWxpc3RfX25vdEZvdW5kX190aXRsZTEgbm90LWZpbHRlcmluZ1wiPlxuICAgICAgICAgIDxzcGFuIGkxOG4+RMOpc29sw6ksIHZvdXMgbidhdmV6IHBhcyBlbmNvcmUgZCdpZMOpZXMgcmVwYXMgc2F1dmVnYXJkw6llczwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjbm90TG9nZ2VkPlxuICAgICAgPGRpdiBjbGFzcz1cIm1pYW0tY2F0YWxvZy1saXN0X19ub3RGb3VuZF9fdGl0bGUxIG5vdC1sb2dnZWRcIj5cbiAgICAgICAgPHNwYW4gaTE4bj5Ew6lzb2zDqSwgdm91cyBkZXZleiDDqnRyZSBjb25uZWN0w6kgcG91ciBhY2PDqWRlciBhdSBjb250ZW51IGRlIGNldHRlIHBhZ2UuPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG5cbiAgPCEtLSBJbnNlcnQgYSBjYXJkIHRvIGNyZWF0ZSBhIHJlY2lwZSAtLT5cbiAgPG5nLW1pYW0tY2FyZC1jcmVhdGUtcmVjaXBlICpuZ0lmPVwiaW5zZXJ0Q3JlYXRlQ2FyZCAmJiBjdXJyZW50UmVjaXBlcy5sZW5ndGggIT09IDBcIiAoY2xpY2tlZCk9XCJyZWNpcGVBY3Rpb25UcmlnZ2VyZWQuZW1pdCh7YWN0aW9uOiAnQ1JFQVRFJywgcmVjaXBlOiBudWxsfSlcIiBjbGFzcz1cIm1pYW0tY2F0YWxvZy1saXN0X19jYXJkXCI+PC9uZy1taWFtLWNhcmQtY3JlYXRlLXJlY2lwZT5cbiAgXG4gIDwhLS0gQ2xhc3NpY2FsIHJlY2lwZSBjYXJkIC0tPlxuICA8bmctbWlhbS1jYXRhbG9nLXJlY2lwZS1jYXJkXG4gICAgKm5nRm9yPVwibGV0IHJlY2lwZSBvZiBjdXJyZW50UmVjaXBlc1wiXG4gICAgW3JlY2lwZV09J3JlY2lwZSdcbiAgICBbb3JpZ2luVHJhY2VdPVwiZXZlbnRUcmFjZSgpXCJcbiAgICBbZGlzcGxheVByaWNpbmddPVwiZGlzcGxheVByaWNpbmdcIlxuICAgIFtwcmV2aWV3QWxsb3dlZF09XCIhYWRkUmVjaXBlTW9kZVwiXG4gICAgW2FkZFJlY2lwZU1vZGVdPVwiYWRkUmVjaXBlTW9kZVwiXG4gICAgW2Rpc3BsYXlHdWVzdHNdPVwiZGlzcGxheUd1ZXN0c1wiXG4gICAgKGFkZFRvTWVhbHNQbGFubmVyKT1cImFkZFRvTWVhbHNQbGFubmVyLmVtaXQoJGV2ZW50KVwiXG4gICAgKGFjdGlvblRyaWdnZXJlZCk9XCJyZWNpcGVBY3Rpb25UcmlnZ2VyZWQuZW1pdCh7YWN0aW9uOiAkZXZlbnQsIHJlY2lwZTogcmVjaXBlfSlcIlxuICA+PC9uZy1taWFtLWNhdGFsb2ctcmVjaXBlLWNhcmQ+XG4gIFxuICA8IS0tIEFydGljbGUgY2FyZCAtLT5cbiAgPG5nLW1pYW0tY2F0YWxvZy1hcnRpY2xlLWNhcmQgKm5nRm9yPVwibGV0IGFydGljbGUgb2YgYXJ0aWNsZXNcIiBbYXJ0aWNsZV09XCJhcnRpY2xlXCI+PC9uZy1taWFtLWNhdGFsb2ctYXJ0aWNsZS1jYXJkPlxuXG4gIDwhLS0gTG9hZGVyIC0tPlxuICA8ZGl2ICpuZ0lmPVwibG9hZGluZyB8IGFzeW5jXCIgY2xhc3M9XCJtaWFtLWNhdGFsb2ctbGlzdF9fbG9hZGVyXCI+XG4gICAgPG5nLW1pYW0tbG9hZGVyPjwvbmctbWlhbS1sb2FkZXI+XG4gICAgPGRpdiBpMThuPlxuICAgICAgQ2hhcmdlbWVudCBkZXMgcsOpc3VsdGF0cy4uLlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBpZD1cIm1pYW0tY2F0YWxvZy1saXN0X19hbmNob3JcIj48L2Rpdj5cbjwvZGl2PiJdfQ==
@@ -402,7 +402,7 @@ export class RecipeCatalogComponent extends EventTracerComponent {
402
402
  setPriceFilters(cost) {
403
403
  const filters = Object.assign(this.filters, {
404
404
  additionalFilters: {
405
- filters: { computed_cost: cost[0] + ',gt,' + cost[1] + ',lt', recipe_type_id: '1' },
405
+ filters: { computed_cost: cost[0] + ',gt,' + cost[1] + ',lt', recipe_type_id: 'main-dish' },
406
406
  title: `Recettes à moins de ${cost[1]}€`
407
407
  }
408
408
  });
@@ -605,7 +605,7 @@ RecipeCatalogComponent.ɵcmp = i0.ɵɵdefineComponent({ type: RecipeCatalogCompo
605
605
  const _r2 = i0.ɵɵreference(4);
606
606
  i0.ɵɵadvance(2);
607
607
  i0.ɵɵproperty("ngIf", !ctx.creatingRecipe && ctx.catalogSettingHasLoaded)("ngIfElse", _r2);
608
- } }, directives: [i4.NgIf, i5.CatalogHeaderComponent, i6.RecipeFiltersComponent, i7.IconComponent, i8.CatalogListComponent, i4.NgForOf, i9.CatalogCategoryComponent, i10.ExplainBannerComponent, i11.MealsPlannerLink, i12.RecipeStepperComponent], pipes: [i4.AsyncPipe], styles: [".miam-recipe-catalog{display:flex;justify-content:space-between}.miam-recipe-catalog,.miam-recipe-catalog .miam-recipe-catalog__content{position:relative;width:100%}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__content__title{align-items:center;display:flex;font-size:24px;font-weight:700;line-height:34px;margin-bottom:24px}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__content__title ng-miam-icon{cursor:pointer;margin-right:20px}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__content__title ng-miam-icon .icon-container{transform:rotate(90deg)}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories{display:flex;flex-direction:column;padding:48px 24px;width:100%}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories .miam-recipe-catalog__first-category{align-items:flex-end;display:flex;flex-direction:row;width:100%}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories .miam-recipe-catalog__first-category ng-miam-meals-planner-link{margin:0 22px 40px 0}@media (max-width:1023px){.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories{padding:48px 0 48px 24px}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories .miam-recipe-catalog__first-category{align-items:flex-start;flex-direction:column}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories .miam-recipe-catalog__first-category ng-miam-catalog-category{width:100%}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories .miam-recipe-catalog__first-category ng-miam-meals-planner-link{margin:0 24px 24px 0;width:calc(100% - 24px)}}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__list{padding:24px;width:100%}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__list .miam-recipe-catalog__list__create___button{align-items:center;border:1px solid var(--miam-color-primary);border-radius:20px;color:var(--miam-color-primary);cursor:pointer;display:flex;padding:4px 8px;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.miam-recipe-catalog .miam-recipe-catalog__content__myMeal__button{align-items:center;background:var(--m-color-primary);border-radius:0 0 20px 20px;cursor:pointer;display:flex;height:50px;justify-content:space-around;left:unset;position:absolute;right:50px;width:200px}.miam-recipe-catalog .miam-recipe-catalog__content__myMeal__button .miam-recipe-catalog__myMeal__button__text{color:var(--m-color-white);font-weight:700}.miam-recipe-catalog .miam-recipe-catalog__content__myMeal__button .miam-recipe-catalog__myMeal__second__icon{transform:rotate(-90deg)}@media (max-width:1023px){.miam-recipe-catalog .miam-recipe-catalog__content__myMeal__button{border-radius:20px 20px 0 0;bottom:0;left:8px;position:fixed;right:8px;width:auto;z-index:2}}"], encapsulation: 2, changeDetection: 0 });
608
+ } }, directives: [i4.NgIf, i5.CatalogHeaderComponent, i6.RecipeFiltersComponent, i7.IconComponent, i8.CatalogListComponent, i4.NgForOf, i9.CatalogCategoryComponent, i10.ExplainBannerComponent, i11.MealsPlannerLink, i12.RecipeStepperComponent], pipes: [i4.AsyncPipe], styles: [".miam-recipe-catalog{display:flex;justify-content:space-between}.miam-recipe-catalog,.miam-recipe-catalog .miam-recipe-catalog__content{position:relative;width:100%}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__content__title{align-items:center;display:flex;font-size:24px;font-weight:700;line-height:34px;margin-bottom:24px}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__content__title ng-miam-icon{cursor:pointer;margin-right:20px}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__content__title ng-miam-icon .icon-container{transform:rotate(90deg)}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__content__title span:last-child{margin-left:6px}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories{display:flex;flex-direction:column;padding:48px 24px;width:100%}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories .miam-recipe-catalog__first-category{align-items:flex-end;display:flex;flex-direction:row;width:100%}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories .miam-recipe-catalog__first-category ng-miam-meals-planner-link{margin:0 22px 40px 0}@media (max-width:1023px){.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories{padding:48px 0 48px 24px}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories .miam-recipe-catalog__first-category{align-items:flex-start;flex-direction:column}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories .miam-recipe-catalog__first-category ng-miam-catalog-category{width:100%}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories .miam-recipe-catalog__first-category ng-miam-meals-planner-link{margin:0 24px 24px 0;width:calc(100% - 24px)}}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__list{padding:24px;width:100%}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__list .miam-recipe-catalog__list__create___button{align-items:center;border:1px solid var(--miam-color-primary);border-radius:20px;color:var(--miam-color-primary);cursor:pointer;display:flex;padding:4px 8px;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.miam-recipe-catalog .miam-recipe-catalog__content__myMeal__button{align-items:center;background:var(--m-color-primary);border-radius:0 0 20px 20px;cursor:pointer;display:flex;height:50px;justify-content:space-around;left:unset;position:absolute;right:50px;width:200px}.miam-recipe-catalog .miam-recipe-catalog__content__myMeal__button .miam-recipe-catalog__myMeal__button__text{color:var(--m-color-white);font-weight:700}.miam-recipe-catalog .miam-recipe-catalog__content__myMeal__button .miam-recipe-catalog__myMeal__second__icon{transform:rotate(-90deg)}@media (max-width:1023px){.miam-recipe-catalog .miam-recipe-catalog__content__myMeal__button{border-radius:20px 20px 0 0;bottom:0;left:8px;position:fixed;right:8px;width:auto;z-index:2}}"], encapsulation: 2, changeDetection: 0 });
609
609
  /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(RecipeCatalogComponent, [{
610
610
  type: Component,
611
611
  args: [{
@@ -637,4 +637,4 @@ RecipeCatalogComponent.ɵcmp = i0.ɵɵdefineComponent({ type: RecipeCatalogCompo
637
637
  }], customFilters: [{
638
638
  type: Input
639
639
  }] }); })();
640
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaXBlLWNhdGFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii9idWlsZHMvbWlhbS9uZy1taWFtLXNkay9wcm9qZWN0cy9uZy1taWFtL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9fd2ViLWNvbXBvbmVudHMvcmVjaXBlLWNhdGFsb2cvcmVjaXBlLWNhdGFsb2cuY29tcG9uZW50LnRzIiwibGliL193ZWItY29tcG9uZW50cy9yZWNpcGUtY2F0YWxvZy9yZWNpcGUtY2F0YWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBaUIsaUJBQWlCLEVBQVUsVUFBVSxFQUM3SCxZQUFZLEVBQUUsU0FBUyxFQUFhLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRXpGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQzlILGNBQWMsRUFBRSxjQUFjLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxFQUFnQixhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsYUFBYSxFQUE0QixNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHbkQs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LFlBQVk7a0JBQXBCLEtBQUs7WUFDRyxlQUFlO2tCQUF2QixLQUFLO1lBQ0csU0FBUztrQkFBakIsS0FBSztZQUNHLGNBQWM7a0JBQXRCLEtBQUs7WUFDRyxhQUFhO2tCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3RW5jYXBzdWxhdGlvbiwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIFZpZXdDaGlsZCwgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIE9uSW5pdCwgRWxlbWVudFJlZixcbiAgVmlld0NoaWxkcmVuLCBRdWVyeUxpc3QsIE9uRGVzdHJveSwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG1hcCwgc2tpcFdoaWxlLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENhdGFsb2dDYXRlZ29yeUNvbXBvbmVudCB9IGZyb20gJy4vY2F0YWxvZy1jYXRlZ29yeS9jYXRhbG9nLWNhdGVnb3J5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYXRhbG9nU2V0dGluZywgUmVjaXBlLCBTdXBwbGllciB9IGZyb20gJy4uLy4uL19tb2RlbHMnO1xuaW1wb3J0IHsgUmVjaXBlVHlwZVNlcnZpY2UsIFNwb25zb3JTZXJ2aWNlLCBQYWNrYWdlU2VydmljZSwgU3VwcGxpZXJzU2VydmljZSwgUmVjaXBlc1NlcnZpY2UsIFVzZXJTZXJ2aWNlLCBHcm9jZXJpZXNMaXN0c1NlcnZpY2UsXG4gIEJhc2tldHNTZXJ2aWNlLCBDb250ZXh0U2VydmljZSwgQ2F0YWxvZ1NldHRpbmdzU2VydmljZSB9IGZyb20gJy4uLy4uL19zZXJ2aWNlcyc7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSAnLi4vLi4vX3R5cGVzL2ljb24uZW51bSc7XG5pbXBvcnQgeyBDYXRhbG9nSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9jYXRhbG9nLWhlYWRlci9jYXRhbG9nLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVjaXBlRmlsdGVyLCBSZWNpcGVGaWx0ZXJzIH0gZnJvbSAnLi4vLi4vX3R5cGVzL3JlY2lwZS1maWx0ZXJzJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTWVkaWFNYXRjaGVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XG5pbXBvcnQgeyBEb2N1bWVudENvbGxlY3Rpb24gfSBmcm9tICduZ3gtanNvbmFwaSc7XG5pbXBvcnQgeyBQYWNrYWdlIH0gZnJvbSAnLi4vLi4vX21vZGVscy9wYWNrYWdlJztcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9fc2VydmljZXMvYW5hbHl0aWNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgRXZlbnRUcmFjZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9fY29tcG9uZW50cy9hYnN0cmFjdHMvZXZlbnQtdHJhY2VyLmNvbXBvbmVudCc7XG5cbmludGVyZmFjZSBDYXRlZ29yeSB7XG4gIGtleTogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBzdWJ0aXRsZTogc3RyaW5nO1xuICBmaWx0ZXJzOiB7IGFkZGl0aW9uYWxGaWx0ZXJzOiB7IGZpbHRlcnM6IHsgcGFja2FnZXM6IHN0cmluZyB9LCB0aXRsZTogc3RyaW5nIH19O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZy1taWFtLXJlY2lwZS1jYXRhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JlY2lwZS1jYXRhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmVjaXBlLWNhdGFsb2cuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgUmVjaXBlQ2F0YWxvZ0NvbXBvbmVudCBleHRlbmRzIEV2ZW50VHJhY2VyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKENhdGFsb2dIZWFkZXJDb21wb25lbnQpIGNhdGFsb2dIZWFkZXI6IENhdGFsb2dIZWFkZXJDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ21pYW1DYXRhbG9nVG9wQW5jaG9yJykgdG9wQW5jaG9yOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkcmVuKENhdGFsb2dDYXRlZ29yeUNvbXBvbmVudCkgIGNhdGVnb3JpZXNDb21wITogUXVlcnlMaXN0PENhdGFsb2dDYXRlZ29yeUNvbXBvbmVudD47XG5cbiAgQElucHV0KCkgaGVhZGVyUGljdHVyZVVybCA9ICdodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vYXNzZXRzLm1pYW0udGVjaC9nZW5lcmljL2ltYWdlcy9kZWZhdWx0LWNhdGFsb2ctcGljdHVyZS5wbmcnO1xuICBASW5wdXQoKSBpbml0aWFsUm91dGUgPSAnJztcbiAgQElucHV0KCkgZmlsdGVyc1Bvc2l0aW9uID0gJ2xlZnQnO1xuICBASW5wdXQoKSBob21lTGFiZWw6IHN0cmluZztcbiAgQElucHV0KCkgZGlzcGxheVByaWNpbmcgPSBmYWxzZTtcbiAgQElucHV0KCkgY3VzdG9tRmlsdGVyczogeyBkaWZmaWN1bHR5PzogUmVjaXBlRmlsdGVyW10sIGNvc3Q/OiBSZWNpcGVGaWx0ZXJbXSwgdGltZT86IFJlY2lwZUZpbHRlcltdIH07XG5cbiAgZmlsdGVyczogUmVjaXBlRmlsdGVycztcbiAgaXNGaWx0ZXJDb2xsYXBzZWQgPSB0cnVlO1xuICBpY29uID0gSWNvbjtcbiAgY2F0ZWdvcmllczogQ2F0ZWdvcnlbXSA9IFtdO1xuICBjcmVhdGluZ1JlY2lwZSA9IGZhbHNlO1xuICByZWNpcGVUb1VwZGF0ZTogUmVjaXBlO1xuICBmaWx0ZXJUb1JlbW92ZTogc3RyaW5nO1xuICBpc01vYmlsZSA9IGZhbHNlO1xuICBzaG93VXNlckZlZWRiYWNrID0gZmFsc2U7XG4gIHJlY2lwZUNvdW50ID0gMDtcbiAgdG90YWxQcmljZSA9IDA7XG4gIGlzTXlNZWFsQ2xvc2UgPSB0cnVlO1xuICBjYXRhbG9nU2V0dGluZzogQ2F0YWxvZ1NldHRpbmc7XG4gIGNhdGFsb2dTZXR0aW5nSGFzTG9hZGVkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBwcml2YXRlIHN1cHBsaWVySWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHVibGljIHJlY2lwZVR5cGVzU2VydmljZTogUmVjaXBlVHlwZVNlcnZpY2UsXG4gICAgcHVibGljIHNwb25zb3JTZXJ2aWNlOiBTcG9uc29yU2VydmljZSxcbiAgICBwdWJsaWMgc3VwcGxpZXJTZXJ2aWNlOiBTdXBwbGllcnNTZXJ2aWNlLFxuICAgIHB1YmxpYyBwYWNrYWdlU2VydmljZTogUGFja2FnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWNpcGVzU2VydmljZTogUmVjaXBlc1NlcnZpY2UsXG4gICAgcHVibGljIG1lZGlhTWF0Y2hlcjogTWVkaWFNYXRjaGVyLFxuICAgIHB1YmxpYyB1c2Vyc1NlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgIHB1YmxpYyBjYXRhbG9nU2V0dGluZ1NlcnZpY2U6IENhdGFsb2dTZXR0aW5nc1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGFuYWx5dGljc1NlcnZpY2U6IEFuYWx5dGljc1NlcnZpY2UsXG4gICAgcHVibGljIGdyb2Nlcmllc0xpc3RTZXJ2aWNlOiBHcm9jZXJpZXNMaXN0c1NlcnZpY2UsXG4gICAgcHVibGljIGJhc2tldHNTZXJ2aWNlOiBCYXNrZXRzU2VydmljZSxcbiAgICBwdWJsaWMgY29udGV4dFNlcnZpY2U6IENvbnRleHRTZXJ2aWNlLFxuICApIHtcbiAgICBzdXBlcihhbmFseXRpY3NTZXJ2aWNlKTtcbiAgICB0aGlzLmlzTW9iaWxlID0gbWVkaWFNYXRjaGVyLm1hdGNoTWVkaWEoJyhtYXgtd2lkdGg6IDEwMjJweCknKS5tYXRjaGVzO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5wYWdldmlldygpO1xuICAgIHRoaXMuaW5pdEZpbHRlcnMoKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtcbiAgICAgIHRoaXMuc3VwcGxpZXJTZXJ2aWNlLnN1cHBsaWVyJC5hc09ic2VydmFibGUoKS5waXBlKFxuICAgICAgICBza2lwV2hpbGUoc3VwcCA9PiBzdXBwID09PSB1bmRlZmluZWQgfHwgc3VwcCA9PSBudWxsKSxcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgc3dpdGNoTWFwKHN1cHBsaWVyID0+IHtcbiAgICAgICAgICB0aGlzLnN1cHBsaWVySWQgPSBzdXBwbGllci5pZDtcbiAgICAgICAgICB0aGlzLmluaXRDYXRhbG9nSGVhZGVyKHN1cHBsaWVyKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkUGFja2FnZXMoKTtcbiAgICAgICAgfSlcbiAgICAgICkuc3Vic2NyaWJlKCksXG4gICAgICB0aGlzLmJhc2tldHNTZXJ2aWNlLmJhc2tldFN0YXRzJC5waXBlKHNraXBXaGlsZShicyA9PiAhYnMpKS5zdWJzY3JpYmUoYnMgPT4ge1xuICAgICAgICB0aGlzLnJlY2lwZUNvdW50ID0gYnMucmVjaXBlc0NvdW50O1xuICAgICAgICB0aGlzLnRvdGFsUHJpY2UgPSBicy50b3RhbFByaWNlO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgICAgICksXG4gICAgICB0aGlzLmFzc2Vzc1Nob3dVc2VyRmVlZGJhY2soKVxuICAgIF07XG5cbiAgICB0aGlzLnNldERpcmVjdEFjY2Vzcyh0aGlzLmluaXRpYWxSb3V0ZSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5vcGVuRmVhdHVyZXNGcm9tVVJMKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICB9XG5cbiAgY3VycmVudFBhdGgoKTogc3RyaW5nIHsgcmV0dXJuICdtaWFtL3JlY2lwZXMnOyB9XG5cbiAgb3BlbkZlYXR1cmVzRnJvbVVSTCgpIHtcbiAgICBjb25zdCBwYXJhbXNBcnJheSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgaWYgKHBhcmFtc0FycmF5LmdldCgnb3BlbkJhc2tldCcpID09PSAndHJ1ZScpIHtcbiAgICAgIHRoaXMudG9nZ2xlTXlNZWFsRHJhd2VyKCk7XG4gICAgfVxuICAgIGlmIChwYXJhbXNBcnJheS5nZXQoJ3BlcnNvbmFsQ2F0YWxvZycpID09PSAndHJ1ZScpIHtcbiAgICAgIHRoaXMuc2V0UGVyc29uYWxGaWx0ZXIoKTtcbiAgICB9XG4gICAgY29uc3QgY29zdCA9IHBhcmFtc0FycmF5LmdldCgnY29zdCcpPy5zcGxpdCgnLCcpO1xuICAgIGlmIChjb3N0Py5sZW5ndGggPT09IDIpIHtcbiAgICAgIHRoaXMuc2V0UHJpY2VGaWx0ZXJzKGNvc3QpO1xuICAgIH1cbiAgfVxuXG4gIGRpc3BsYXlIb21lUGFnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJzLmlzRW1wdHkoKTtcbiAgfVxuXG4gIC8vIGluaXQgdGhlIHZhbHVlIG9mIHRoZSBpbWFnZSBhbmQgdGhlIHRleHQgZm9yIHRoZSBjYXRhbG9nIGhlYWRlciwgdXNpbmcgdGhlIGNhdGFsb2cgc2V0dGluZyBvZiB0aGUgc3VwcGxpZXJcbiAgaW5pdENhdGFsb2dIZWFkZXIoc3VwcGxpZXI6IFN1cHBsaWVyKSB7XG4gICAgaWYgKHN1cHBsaWVyLnJlbGF0aW9uc2hpcHNbJ2NhdGFsb2ctc2V0dGluZyddPy5kYXRhKSB7XG4gICAgICBjb25zdCBpZCA9IHN1cHBsaWVyLnJlbGF0aW9uc2hpcHNbJ2NhdGFsb2ctc2V0dGluZyddPy5kYXRhPy5pZDtcbiAgICAgIHRoaXMuY2F0YWxvZ1NldHRpbmdTZXJ2aWNlLmdldChpZCkucGlwZShcbiAgICAgICAgc2tpcFdoaWxlKGMgPT4gYy5pc19sb2FkaW5nKSxcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgdGFwKGNhdGFsb2cgPT4ge1xuICAgICAgICAgIHRoaXMuY2F0YWxvZ1NldHRpbmcgPSBjYXRhbG9nO1xuICAgICAgICAgIHRoaXMuY2F0YWxvZ1NldHRpbmdIYXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSlcbiAgICAgICkuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVXNlZCBvbiBsb2FkIHRvIGJ1aWxkIHRoZSBmaWx0ZXJzIGF0dHJpYnV0ZSwgYW5kIG9uIGNsaWNrIG9uIHRoZSBsaW5rIHRvIHJlc2V0IHRoZSBmaWx0ZXJzXG4gIGluaXRGaWx0ZXJzKCkge1xuICAgIHRoaXMuZmlsdGVycyA9IG5ldyBSZWNpcGVGaWx0ZXJzKFxuICAgICAge1xuICAgICAgICBkaWZmaWN1bHR5OiB0aGlzLnJlY2lwZXNTZXJ2aWNlLmRpZmZpY3VsdHlMZXZlbHMubWFwKGYgPT4ge1xuICAgICAgICAgIHJldHVybiB7IG5hbWU6IGYudmFsdWUudG9TdHJpbmcoKSwgdGV4dDogZi5sYWJlbCwgdmFsdWU6IGZhbHNlIH07XG4gICAgICAgIH0pLFxuICAgICAgICBjb3N0OiBbXG4gICAgICAgICAge25hbWU6ICcwLTUnLCB2YWx1ZTogZmFsc2V9LFxuICAgICAgICAgIHtuYW1lOiAnNS0xMCcsIHZhbHVlOiBmYWxzZX0sXG4gICAgICAgICAge25hbWU6ICcxMC0xMDAwJywgdmFsdWU6IGZhbHNlfVxuICAgICAgICAgIC8vIHdlIHNldCBhIGxpbWl0IGF0IDEwMDDigqwgbWF4LCBpZiBhIHJlY2lwZSBjb3N0IG1vcmUgc2hvdWxkIGJlIG5vbiBzZW5zZSBhbnl3YXlcbiAgICAgICAgXSxcbiAgICAgICAgdGltZTogW1xuICAgICAgICAgIHtuYW1lOiAnMTUnLCB2YWx1ZTogZmFsc2V9LFxuICAgICAgICAgIHtuYW1lOiAnMzAnLCB2YWx1ZTogZmFsc2V9LFxuICAgICAgICAgIHtuYW1lOiAnNjAnLCB2YWx1ZTogZmFsc2V9LFxuICAgICAgICAgIHtuYW1lOiAnMTIwJywgdmFsdWU6IGZhbHNlfVxuXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICApO1xuICAgIGlmICh0aGlzLmN1c3RvbUZpbHRlcnMpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5maWx0ZXJzLCB0aGlzLmN1c3RvbUZpbHRlcnMpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jYXRhbG9nSGVhZGVyKSB7IHRoaXMuY2F0YWxvZ0hlYWRlci5yZXNldFNlYXJjaFN0cmluZygpOyB9XG4gICAgdGhpcy5maWx0ZXJzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMuZmlsdGVycy5hZGRpdGlvbmFsRmlsdGVycyA9IG51bGw7XG4gIH1cblxuICB1cGRhdGVGaWx0ZXJzKGZpbHRlcnM6IFJlY2lwZUZpbHRlcnMpIHtcbiAgICB0aGlzLmZpbHRlcnMgPSBmaWx0ZXJzLmNvcHkoKTsgLy8gbmVjZXNzYXJ5IHRvIHRyaWdnZXIgY2hpbGQgY29tcG9uZW50IGNoYW5nZVxuICAgIHRoaXMuZmlsdGVyVG9SZW1vdmUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5yZXR1cm5Ub1RvcCgpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHVwZGF0ZVNlYXJjaChzZWFyY2g6IHN0cmluZykge1xuICAgIGlmIChzZWFyY2ggIT09IHRoaXMuZmlsdGVycy5zZWFyY2gpIHtcbiAgICAgIGNvbnN0IGZpbHRlcnMgPSBPYmplY3QuYXNzaWduKHRoaXMuZmlsdGVycywgeyBzZWFyY2ggfSk7XG4gICAgICB0aGlzLnVwZGF0ZUZpbHRlcnMoZmlsdGVycyk7XG4gICAgfVxuICB9XG5cbiAgY2F0ZWdvcnlUaXRsZUNsaWNrZWQoZXZlbnQ6IHt0aXRsZTogc3RyaW5nLCBmaWx0ZXJzOiBhbnl9KSB7XG4gICAgY29uc3QgZmlsdGVycyA9IE9iamVjdC5hc3NpZ24odGhpcy5maWx0ZXJzLCB7XG4gICAgICBhZGRpdGlvbmFsRmlsdGVyczogeyBmaWx0ZXJzOiBldmVudC5maWx0ZXJzLCB0aXRsZTogZXZlbnQudGl0bGUgfVxuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlRmlsdGVycyhmaWx0ZXJzKTtcbiAgfVxuXG4gIHNldEZhdm9yaXRlc0ZpbHRlcigpOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXJzID0gT2JqZWN0LmFzc2lnbih0aGlzLmZpbHRlcnMsIHtcbiAgICAgIGFkZGl0aW9uYWxGaWx0ZXJzOiB7XG4gICAgICAgIGZpbHRlcnM6IHsgbGlrZWQ6IHRydWUgfSxcbiAgICAgICAgdGl0bGU6ICdNZXMgaWTDqWVzIHJlcGFzJ1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlRmlsdGVycyhmaWx0ZXJzKTtcbiAgfVxuXG4gIHNldFBlcnNvbmFsRmlsdGVyKCk6IHZvaWQge1xuICAgIGNvbnN0IGZpbHRlcnMgPSBPYmplY3QuYXNzaWduKHRoaXMuZmlsdGVycywge1xuICAgICAgYWRkaXRpb25hbEZpbHRlcnM6IHtcbiAgICAgICAgZmlsdGVyczogeyBwZXJzb25hbDogdHJ1ZSwgYWN0aXZlOiAndHJ1ZSxmYWxzZScgfSxcbiAgICAgICAgdGl0bGU6ICdNb24gY2FybmV0IHBlcnNvJ1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlRmlsdGVycyhmaWx0ZXJzKTtcbiAgfVxuXG4gIHNldFByaWNlRmlsdGVycyhjb3N0OiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGNvbnN0IGZpbHRlcnMgPSBPYmplY3QuYXNzaWduKHRoaXMuZmlsdGVycywge1xuICAgICAgYWRkaXRpb25hbEZpbHRlcnM6IHtcbiAgICAgICAgZmlsdGVyczogeyBjb21wdXRlZF9jb3N0OiBjb3N0WzBdICsgJyxndCwnICsgY29zdFsxXSArICcsbHQnLCByZWNpcGVfdHlwZV9pZDogJzEnIH0sXG4gICAgICAgIHRpdGxlOiBgUmVjZXR0ZXMgw6AgbW9pbnMgZGUgJHtjb3N0WzFdfeKCrGBcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcnMoZmlsdGVycyk7XG4gIH1cblxuICByZW1vdmVGaWx0ZXIoZmlsdGVyVGV4dDogc3RyaW5nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGZ1bmN0aW9uIGlzIGJyb2tlbiwgdXNlIGhhcyBiZWVuIGNvbW1lbnRhdGVkLCByZXBhaXIgaXQgaWYgeW91IHdhbnQgdG8gdXNlIGl0IGFnYWluJyk7XG4gICAgdGhpcy5maWx0ZXJUb1JlbW92ZSA9IGZpbHRlclRleHQ7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcmV0dXJuVG9Ub3AoKSB7XG4gICAgaWYgKHRoaXMudG9wQW5jaG9yKSB7XG4gICAgICB0aGlzLnRvcEFuY2hvci5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuVG9Ib21lUGFnZSgpIHtcbiAgICB0aGlzLnBhZ2V2aWV3KCk7XG4gICAgLy8gZWl0aGVyIHlvdSBoYXZlIGZpbHRlcnMgZWl0aGVyIHlvdSBhcmUgb24gaG9tZSBwYWdlLiBUaGF0IG1lYW4gaWYgeW91IGdvIG9uIGhvbWUgcGFnZSB5b3UgZG9uJ3Qgd2FudCBBTlkgZmlsdGVyXG4gICAgdGhpcy5pbml0RmlsdGVycygpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG9uRmlsdGVyQ29sbGFwc2VkKCkge1xuICAgIHRoaXMuaXNGaWx0ZXJDb2xsYXBzZWQgPSAhdGhpcy5pc0ZpbHRlckNvbGxhcHNlZDtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgLy8gdG8gdHJpZ2dlciBhZnRlciB0aGUgZGV0ZWN0Q2hhbmdlcyBiZWNhdXNlIHdlIG5lZWQgdG8gYWxyZWFkIGhhdmUgdGhlIGRpc3BsYXkgY2hhbmdlIHRvIHVwZGF0ZSBjYXJkc1xuICAgIHRoaXMuY2F0ZWdvcmllc0NvbXAuZm9yRWFjaCggY2F0ID0+IHtcbiAgICAgIGNhdC51cGRhdGVXaWR0aCgpO1xuICAgIH0pO1xuICB9XG5cbiAgZ29Ub0NyZWF0ZVBhZ2UocmVjaXBlID0gbnVsbCkge1xuICAgIHRoaXMuY3JlYXRpbmdSZWNpcGUgPSB0cnVlO1xuICAgIHRoaXMucmVjaXBlVG9VcGRhdGUgPSByZWNpcGU7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMucmV0dXJuVG9Ub3AoKTtcbiAgfVxuXG4gIGxlYXZlQ3JlYXRlUGFnZSgpIHtcbiAgICB0aGlzLmNyZWF0aW5nUmVjaXBlID0gZmFsc2U7XG4gICAgdGhpcy5yZXR1cm5Ub1RvcCgpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG1hbmFnZVJlY2lwZUFjdGlvbihldmVudDoge2FjdGlvbjogc3RyaW5nLCByZWNpcGU6IFJlY2lwZX0pIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmFjdGlvbikge1xuICAgICAgY2FzZSAnQ1JFQVRFJzoge1xuICAgICAgICB0aGlzLmdvVG9DcmVhdGVQYWdlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdFRElUJzoge1xuICAgICAgICB0aGlzLmdvVG9DcmVhdGVQYWdlKGV2ZW50LnJlY2lwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdERUxFVEUnOiB7XG4gICAgICAgIGlmIChldmVudC5yZWNpcGU/LmlkICYmIGV2ZW50LnJlY2lwZS5yZWxhdGlvbnNoaXBzWydyZWNpcGUtcHJvdmlkZXInXT8uZGF0YS5pZCA9PT0gJ3BlcnNvbmFsJykge1xuICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgdGhpcy5yZWNpcGVzU2VydmljZS5kZWxldGUoZXZlbnQucmVjaXBlLmlkKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMucHJvcHMoKSwgeyByZWNpcGVJZDogZXZlbnQucmVjaXBlLmlkIH0pO1xuICAgICAgICAgICAgICB0aGlzLnNlbmRFdmVudCh0aGlzLmFuYWx5dGljc1NlcnZpY2UuRVZFTlRfUEVSU09OQUxfUkVDSVBFX0RFTEVURSk7XG4gICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWxvYWRQYWNrYWdlcygpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMubG9hZFBhY2thZ2VzKCkuc3Vic2NyaWJlKClcbiAgICApO1xuICB9XG5cbiAgaXNTZWFyY2hQYWdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5kaXNwbGF5SG9tZVBhZ2UoKSAmJiB0aGlzLmZpbHRlcnMuc2VhcmNoICYmIHRoaXMuZmlsdGVycy5zZWFyY2gubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGlzRmF2b3JpdGVzUGFnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuZGlzcGxheUhvbWVQYWdlKCkgJiYgIXRoaXMuaXNTZWFyY2hQYWdlKCkgJiYgdGhpcy5maWx0ZXJzPy5hZGRpdGlvbmFsRmlsdGVycz8udGl0bGUgPT09ICdNZXMgaWTDqWVzIHJlcGFzJztcbiAgfVxuXG4gIGlzUGVyc29uYWxQYWdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5kaXNwbGF5SG9tZVBhZ2UoKSAmJiAhdGhpcy5pc1NlYXJjaFBhZ2UoKSAmJiB0aGlzLmZpbHRlcnM/LmFkZGl0aW9uYWxGaWx0ZXJzPy50aXRsZSA9PT0gJ01vbiBjYXJuZXQgcGVyc28nO1xuICB9XG5cbiAgaXNDYXRlZ29yeVBhZ2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmRpc3BsYXlIb21lUGFnZSgpICYmICF0aGlzLmlzU2VhcmNoUGFnZSgpICYmICF0aGlzLmlzRmF2b3JpdGVzUGFnZSgpICYmICF0aGlzLmlzUGVyc29uYWxQYWdlKCkgJiZcbiAgICAgIHRoaXMuZmlsdGVycz8uYWRkaXRpb25hbEZpbHRlcnM/LnRpdGxlPy5sZW5ndGggPiAwO1xuICB9XG5cbiAgaXNEZWZhdWx0UGFnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuZGlzcGxheUhvbWVQYWdlKCkgJiYgIXRoaXMuaXNTZWFyY2hQYWdlKCkgJiYgIXRoaXMuaXNGYXZvcml0ZXNQYWdlKCkgJiYgIXRoaXMuaXNQZXJzb25hbFBhZ2UoKSAmJiAhdGhpcy5pc0NhdGVnb3J5UGFnZSgpO1xuICB9XG5cbiAgY2FuRGlzcGxheUNyZWF0aW9uQnV0dG9uKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnVzZXJzU2VydmljZS5pc0xvZ2dlZCQuYXNPYnNlcnZhYmxlKCkucGlwZShcbiAgICAgIG1hcChpc0xvZ2dlZCA9PiBpc0xvZ2dlZCAmJiB0aGlzLmlzUGVyc29uYWxQYWdlKCkpXG4gICAgKTtcbiAgfVxuXG4gIHRvZ2dsZU15TWVhbERyYXdlcigpOiB2b2lkIHtcbiAgICB0aGlzLnJlY2lwZXNTZXJ2aWNlLm9wZW5CYXNrZXQodGhpcy5ldmVudFRyYWNlKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkUGFja2FnZXMoKTogT2JzZXJ2YWJsZTxEb2N1bWVudENvbGxlY3Rpb248UGFja2FnZT4+IHtcbiAgICByZXR1cm4gdGhpcy5wYWNrYWdlU2VydmljZS5jYXRlZ29yaWVzX2ZvcihbdGhpcy5zdXBwbGllcklkXSkucGlwZShcbiAgICAgIHNraXBXaGlsZShwYWNrYWdlcyA9PiBwYWNrYWdlcy5pc19sb2FkaW5nKSxcbiAgICAgIHRhcCgocGFja2FnZXM6IERvY3VtZW50Q29sbGVjdGlvbjxQYWNrYWdlPikgPT4ge1xuICAgICAgICB0aGlzLmluaXRDYXRlZ29yaWVzKHBhY2thZ2VzKTtcbiAgICAgICAgdGhpcy5zZWxlY3RDYXRlZ29yeUZyb21VcmwoKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0Q2F0ZWdvcmllcyhwYWNrYWdlczogRG9jdW1lbnRDb2xsZWN0aW9uPFBhY2thZ2U+KTogdm9pZCB7XG4gICAgdGhpcy5jYXRlZ29yaWVzID0gcGFja2FnZXMuZGF0YS5tYXAoY2F0ZWdvcnlQYWNrYWdlID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleTogY2F0ZWdvcnlQYWNrYWdlLnRpdGxlLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16QS1aMC05IC1dLywgJycpLnJlcGxhY2UoL1xccy9nLCAnLScpLFxuICAgICAgICB0aXRsZTogY2F0ZWdvcnlQYWNrYWdlLnRpdGxlLFxuICAgICAgICBzdWJ0aXRsZTogY2F0ZWdvcnlQYWNrYWdlLnN1YnRpdGxlLFxuICAgICAgICBmaWx0ZXJzOiB7IGFkZGl0aW9uYWxGaWx0ZXJzOiB7IGZpbHRlcnM6IHsgcGFja2FnZXM6IGNhdGVnb3J5UGFja2FnZS5pZCB9LCB0aXRsZTogJycgfSB9XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RDYXRlZ29yeUZyb21VcmwoKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1zQXJyYXkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICAgIGlmIChwYXJhbXNBcnJheS5nZXQoJ2NhdGFsb2dDYXRlZ29yeScpID09PSAnZmF2b3JpdGVzJykge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0RmF2b3JpdGVzRmlsdGVyKCk7XG4gICAgfVxuICAgIGNvbnN0IHNlbGVjdGVkQ2F0ZWdvcnkgPSB0aGlzLmNhdGVnb3JpZXMuZmluZCgoY2F0KSA9PiBjYXQua2V5ID09PSBwYXJhbXNBcnJheS5nZXQoJ2NhdGFsb2dDYXRlZ29yeScpKTtcbiAgICBpZiAoc2VsZWN0ZWRDYXRlZ29yeSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2F0ZWdvcnlUaXRsZUNsaWNrZWQoeyB0aXRsZTogc2VsZWN0ZWRDYXRlZ29yeS50aXRsZSwgZmlsdGVyczogc2VsZWN0ZWRDYXRlZ29yeS5maWx0ZXJzLmFkZGl0aW9uYWxGaWx0ZXJzLmZpbHRlcnMgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2hvdyBmZWVkYmFjayBibG9jayBvbmx5IGlmIHVzZXIgaXMgbG9nZ2VkIGFuZCB0aGUgY2hpbGRyZW4gcHJlZmVyZW5jZSBpcyB1bmtub3duXG4gIHByaXZhdGUgYXNzZXNzU2hvd1VzZXJGZWVkYmFjaygpOiBTdWJzY3JpcHRpb24ge1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMudXNlcnNTZXJ2aWNlLmlzTG9nZ2VkJCxcbiAgICAgIHRoaXMudXNlcnNTZXJ2aWNlLnByZWZlcmVuY2VEZWZpbmVkKCdoYXNfY2hpbGRyZW4nKSxcbiAgICAgIHRoaXMudXNlcnNTZXJ2aWNlLnByZWZlcmVuY2VzQWN0aXZhdGVkJFxuICAgIF0pLnN1YnNjcmliZShyZXN1bHRzID0+IHtcbiAgICAgIGNvbnN0IGxvZ2dlZCA9IHJlc3VsdHNbMF07XG4gICAgICBjb25zdCBwcmVmZXJlbmNlRGVmaW5lZCA9IHJlc3VsdHNbMV07XG4gICAgICBjb25zdCBwcmVmZXJlbmNlc0FjdGl2YXRlZCA9IHJlc3VsdHNbMl07XG4gICAgICB0aGlzLnNob3dVc2VyRmVlZGJhY2sgPSBsb2dnZWQgJiYgIXByZWZlcmVuY2VEZWZpbmVkICYmIHByZWZlcmVuY2VzQWN0aXZhdGVkO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREaXJlY3RBY2Nlc3Mocm91dGU6IHN0cmluZyl7XG4gICAgaWYgKHRoaXMuaW5pdGlhbFJvdXRlICE9PSAnJyl7XG4gICAgICBzd2l0Y2ggKHRoaXMuaW5pdGlhbFJvdXRlKXtcbiAgICAgICAgY2FzZSAnbWVzLXJlcGFzJzpcbiAgICAgICAgICB0aGlzLnRvZ2dsZU15TWVhbERyYXdlcigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtZXMtcmVjZXR0ZXMtcGVyc29ubmVsbGVzJzpcbiAgICAgICAgICB0aGlzLnNldFBlcnNvbmFsRmlsdGVyKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3JlY2V0dGVzLWZhdm9yaXRlcyc6XG4gICAgICAgICAgdGhpcy5zZXRGYXZvcml0ZXNGaWx0ZXIoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBVbnVzZWQgZm9yIG5vdy4uLlxuICAvLyBzZXRVc2VyUHJlZmVyZW5jZShwcmVmLCBzdGF0ZSkge1xuICAvLyAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAvLyAgICAgdGhpcy51c2Vyc1NlcnZpY2Uuc2V0UHJlZmVyZW5jZShwcmVmLCBzdGF0ZSkucGlwZShcbiAgLy8gICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMubG9hZFBhY2thZ2VzKCkpXG4gIC8vICAgICApLnN1YnNjcmliZSgpXG4gIC8vICAgKTtcbiAgLy8gICB0aGlzLmNsb3NlTW9kYWwoKTtcbiAgLy8gfVxuXG4gIC8vIHByaXZhdGUgY2xvc2VNb2RhbCgpIHtcbiAgLy8gICB0aGlzLnNob3dVc2VyRmVlZGJhY2sgPSAhdGhpcy5zaG93VXNlckZlZWRiYWNrO1xuICAvLyAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgLy8gfVxufVxuIiwiPGRpdiAjbWlhbUNhdGFsb2dUb3BBbmNob3IgY2xhc3M9XCJtaWFtLWNhdGFsb2ctYW5jaG9yXCI+PC9kaXY+XG48ZGl2ICpuZ0lmPVwiIWNyZWF0aW5nUmVjaXBlICYmIGNhdGFsb2dTZXR0aW5nSGFzTG9hZGVkIGVsc2UgY3JlYXRpb25QYWdlXCIgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nXCI+XG4gIDxkaXYgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19jb250ZW50XCI+XG4gICAgPG5nLW1pYW0tY2F0YWxvZy1oZWFkZXIgXG4gICAgICBbaG9tZV09XCJkaXNwbGF5SG9tZVBhZ2VcIlxuICAgICAgW3NlYXJjaFRlcm1dPVwiZmlsdGVycz8uc2VhcmNoXCJcbiAgICAgIFthZGRpdGlvbmFsRmlsdGVyc1RpdGxlXT1cImZpbHRlcnM/LmFkZGl0aW9uYWxGaWx0ZXJzPy50aXRsZVwiXG4gICAgICBbaG9tZUxhYmVsXT1cImhvbWVMYWJlbFwiXG4gICAgICBbcGljdHVyZVVybF09XCJkaXNwbGF5SG9tZVBhZ2UoKSA/IGhlYWRlclBpY3R1cmVVcmwgOiBudWxsXCJcbiAgICAgIFtjYXRhbG9nU2V0dGluZ109XCJjYXRhbG9nU2V0dGluZ1wiXG4gICAgICBbZmF2b3JpdGVzQnV0dG9uSGlkZGVuXT1cImlzRmF2b3JpdGVzUGFnZSgpXCJcbiAgICAgIFtwZXJzb25hbEJ1dHRvbkhpZGRlbl09XCIhKGNvbnRleHRTZXJ2aWNlLmVuYWJsZVBlcnNvbmFsUmVjaXBlcyQgfCBhc3luYylcIlxuICAgICAgW2ZpbHRlckJhZGdlQ291bnRdPVwiZmlsdGVycy5zZWxlY3RhYmxlRmlsdGVyc0NvdW50KClcIlxuICAgICAgKHJldHVybkJ1dHRvblByZXNzZWQpPVwicmV0dXJuVG9Ib21lUGFnZSgpXCJcbiAgICAgIChmaWx0ZXJCdXR0b25QcmVzc2VkKT1cIm9uRmlsdGVyQ29sbGFwc2VkKClcIlxuICAgICAgKHNlYXJjaFN0cmluZ0NoYW5nZWQpPVwidXBkYXRlU2VhcmNoKCRldmVudClcIlxuICAgICAgKHBlcnNvbmFsQnV0dG9uUHJlc3NlZCk9XCJzZXRQZXJzb25hbEZpbHRlcigpXCJcbiAgICAgIChmYXZvcml0ZXNCdXR0b25QcmVzc2VkKT1cInNldEZhdm9yaXRlc0ZpbHRlcigpXCI+XG4gICAgPC9uZy1taWFtLWNhdGFsb2ctaGVhZGVyPlxuICAgIDxkaXYgKm5nSWY9XCJyZWNpcGVDb3VudCA+IDBcIiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2NvbnRlbnRfX215TWVhbF9fYnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZU15TWVhbERyYXdlcigpXCIgPlxuICAgICAgPG5nLW1pYW0taWNvbiBbaWNvbk5hbWVdPVwiaWNvbi5DYXJ0XCIgcHJpbWFyeUNvbG9yPSd2YXIoLS1tLWNvbG9yLXdoaXRlKScgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19teU1lYWxfX2ZpcnN0X19pY29uXCIgPjwvbmctbWlhbS1pY29uPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19teU1lYWxfX2J1dHRvbl9fdGV4dFwiPlxuICAgICAgICA8c3Bhbj57e3JlY2lwZUNvdW50fX08L3NwYW4+XG4gICAgICAgIDxzcGFuIGkxOG4+IHJlcGFzPC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgICAgPG5nLW1pYW0taWNvbiAgW2ljb25OYW1lXT1cImljb24uQ2hldnJvbkRvd25cIiBwcmltYXJ5Q29sb3I9J3ZhcigtLW0tY29sb3Itd2hpdGUpJyBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX215TWVhbF9fc2Vjb25kX19pY29uXCI+PC9uZy1taWFtLWljb24+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFVzZXIgZmVlZGJhY2sgYmFubmVyICh1bnVzZWQgZm9yIG5vdyAvIG1heWJlIHJlYWN0aXZhdGVkIGxhdGVyKSAtLT5cbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19jb250ZW50X191c2VyLWZlZWRiYWNrX19tb2RhbFwiICpuZ0lmPVwic2hvd1VzZXJGZWVkYmFja1wiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2NvbnRlbnRfX3VzZXItZmVlZGJhY2tcIj5cbiAgICAgICAgPG5nLW1pYW0taWNvbiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2NvbnRlbnRfX3VzZXItZmVlZGJhY2tfX2ljb24tY3Jvc3NcIiAoY2xpY2spPVwiY2xvc2VNb2RhbCgpXCIgW2ljb25OYW1lXT1cImljb24uQ3Jvc3NcIiBbd2lkdGhdPVwiMzBcIiBbaGVpZ2h0XT1cIjMwXCIgcHJpbWFyeUNvbG9yPVwibm9uZVwiPjwvbmctbWlhbS1pY29uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fY29udGVudF9fdXNlci1mZWVkYmFja19fdGl0bGVcIj5cbiAgICAgICAgICAgIDxzcGFuPlBvdXIgbWlldXggdm91cyBjb25uYcOudHJlPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2NvbnRlbnRfX3VzZXItZmVlZGJhY2tfX3F1ZXN0aW9uXCI+XG4gICAgICAgICAgICA8c3Bhbj5BdmV6LXZvdXMgbCdoYWJpdHVkZSBkZSBjdWlzaW5lciBwb3VyIG91IGF2ZWMgZGVzIGVuZmFudHMgPzwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgICAgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19jb250ZW50X191c2VyLWZlZWRiYWNrX19hY3Rpb25zXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm0tZmVlZGJhY2stYnV0dG9uXCIgKGNsaWNrKT1cInNldFVzZXJQcmVmZXJlbmNlKCdoYXNfY2hpbGRyZW4nLCBmYWxzZSlcIj5Ob248L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibS1mZWVkYmFjay1idXR0b25cIiAoY2xpY2spPVwic2V0VXNlclByZWZlcmVuY2UoJ2hhc19jaGlsZHJlbicsIHRydWUpXCI+T3VpPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuXG4gICAgPCEtLSBDYXRhbG9nIHBhZ2UgY29udGVudCB3aGVuIGZpbHRlcnMgYXBwbGllZCAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiIWRpc3BsYXlIb21lUGFnZSgpIGVsc2UgY2F0ZWdvcmllc0NvbXBvbmVudHNcIiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2xpc3RcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19jb250ZW50X190aXRsZVwiPlxuICAgICAgICA8bmctbWlhbS1pY29uIFtpY29uTmFtZV09XCJpY29uLkFycm93RG93blwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIChjbGljayk9XCJyZXR1cm5Ub0hvbWVQYWdlKClcIj48L25nLW1pYW0taWNvbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJpc1NlYXJjaFBhZ2UoKVwiIGkxOG4+Vm90cmUgcmVjaGVyY2hlIDogPC9zcGFuPjxzcGFuICpuZ0lmPVwiaXNTZWFyY2hQYWdlKClcIj57eyBmaWx0ZXJzLnNlYXJjaCB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJpc0Zhdm9yaXRlc1BhZ2UoKVwiIGkxOG4+TWVzIGlkw6llcyByZXBhczwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJpc1BlcnNvbmFsUGFnZSgpXCIgaTE4bj5Nb24gY2FybmV0IHBlcnNvPC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImlzQ2F0ZWdvcnlQYWdlKClcIj57eyBmaWx0ZXJzLmFkZGl0aW9uYWxGaWx0ZXJzLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImlzRGVmYXVsdFBhZ2UoKVwiIGkxOG4+Vm90cmUgc8OpbGVjdGlvbjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2xpc3RfX2NyZWF0ZV9fX2J1dHRvblwiICpuZ0lmPVwiY2FuRGlzcGxheUNyZWF0aW9uQnV0dG9uKCkgfCBhc3luY1wiIFxuICAgICAgKGNsaWNrKT1cIm1hbmFnZVJlY2lwZUFjdGlvbih7YWN0aW9uOiAnQ1JFQVRFJywgcmVjaXBlOiBudWxsfSlcIj5cbiAgICAgICAgPG5nLW1pYW0taWNvbiBbaWNvbk5hbWVdPVwiaWNvbi5QbHVzXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgcHJpbWFyeUNvbG9yPVwidmFyKC0tbS1jb2xvci1wcmltYXJ5KVwiPjwvbmctbWlhbS1pY29uPlxuICAgICAgICA8c3BhbiBpMThuPkFqb3V0ZXIgdW5lIGlkw6llIHJlcGFzPC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxuZy1taWFtLWNhdGFsb2ctbGlzdFxuICAgICAgICBbZmlsdGVyc109XCJmaWx0ZXJzXCJcbiAgICAgICAgW29yaWdpblRyYWNlXT1cImV2ZW50VHJhY2UoKVwiXG4gICAgICAgIFtkaXNwbGF5UHJpY2luZ109XCJkaXNwbGF5UHJpY2luZ1wiXG4gICAgICAgIChmaWx0ZXJSZW1vdmVkKT1cInJlbW92ZUZpbHRlcigkZXZlbnQpXCJcbiAgICAgICAgKHJlY2lwZUFjdGlvblRyaWdnZXJlZCk9XCJtYW5hZ2VSZWNpcGVBY3Rpb24oJGV2ZW50KVwiPlxuICAgICAgPC9uZy1taWFtLWNhdGFsb2ctbGlzdD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPG5nLW1pYW0tcmVjaXBlLWZpbHRlcnNcbiAgICBbZmlsdGVyc109XCJmaWx0ZXJzXCJcbiAgICBbaXNGaWx0ZXJDb2xsYXBzZWRdPVwiaXNGaWx0ZXJDb2xsYXBzZWRcIlxuICAgIFtmaWx0ZXJUb1JlbW92ZV09XCJmaWx0ZXJUb1JlbW92ZVwiXG4gICAgW3Bvc2l0aW9uXT1cImZpbHRlcnNQb3NpdGlvblwiXG4gICAgW29yaWdpblRyYWNlXT1cImV2ZW50VHJhY2UoKVwiXG4gICAgKGZpbHRlckNoYW5nZWQpPVwidXBkYXRlRmlsdGVycygkZXZlbnQpXCJcbiAgICAoZmlsdGVyQ29sbGFwc2VkKT1cIm9uRmlsdGVyQ29sbGFwc2VkKClcIlxuICAgIChwcmVmZXJlbmNlc0NoYW5nZWQpPVwicmVsb2FkUGFja2FnZXMoKVwiXG4gID5cbiAgPC9uZy1taWFtLXJlY2lwZS1maWx0ZXJzPlxuICA8IS0tIENhdGFsb2cgaG9tZSBwYWdlIGNvbnRlbnQgLS0+XG4gIDxuZy10ZW1wbGF0ZSAjY2F0ZWdvcmllc0NvbXBvbmVudHM+XG4gICAgPGRpdiAqbmdJZj1cImNhdGVnb3JpZXMubGVuZ3RoID4gMFwiIGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fY2F0ZWdvcmllc1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2F0ZWdvcnkgb2YgY2F0ZWdvcmllcyBsZXQgaSA9IGluZGV4XCIgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaSAhPT0gMCBlbHNlIGZpcnN0Q2F0ZWdvcnlcIj5cbiAgICAgICAgICA8bmctbWlhbS1jYXRhbG9nLWNhdGVnb3J5IFxuICAgICAgICAgICAgW3RpdGxlXT1cImNhdGVnb3J5LnRpdGxlXCJcbiAgICAgICAgICAgIFtzdWJ0aXRsZV09XCJjYXRlZ29yeS5zdWJ0aXRsZVwiXG4gICAgICAgICAgICBbZmlsdGVyc109XCJjYXRlZ29yeS5maWx0ZXJzXCJcbiAgICAgICAgICAgIFtkaXNwbGF5UHJpY2luZ109XCJkaXNwbGF5UHJpY2luZ1wiXG4gICAgICAgICAgICBbb3JpZ2luVHJhY2VdPVwiZXZlbnRUcmFjZSgpXCJcbiAgICAgICAgICAgIChkaXNwbGF5TGlzdCk9XCJjYXRlZ29yeVRpdGxlQ2xpY2tlZCgkZXZlbnQpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9uZy1taWFtLWNhdGFsb2ctY2F0ZWdvcnk+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2ZpcnN0Q2F0ZWdvcnk+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2ZpcnN0LWNhdGVnb3J5XCI+XG4gICAgICAgICAgICA8bmctbWlhbS1tZWFscy1wbGFubmVyLWxpbmsgKm5nSWY9XCJjb250ZXh0U2VydmljZS5lbmFibGVNZWFsc1BsYW5uZXIkIHwgYXN5bmNcIj48L25nLW1pYW0tbWVhbHMtcGxhbm5lci1saW5rPlxuICAgICAgICAgICAgPG5nLW1pYW0tY2F0YWxvZy1jYXRlZ29yeSBcbiAgICAgICAgICAgICAgW3RpdGxlXT1cImNhdGVnb3J5LnRpdGxlXCJcbiAgICAgICAgICAgICAgW3N1YnRpdGxlXT1cImNhdGVnb3J5LnN1YnRpdGxlXCJcbiAgICAgICAgICAgICAgW2ZpbHRlcnNdPVwiY2F0ZWdvcnkuZmlsdGVyc1wiXG4gICAgICAgICAgICAgIFtkaXNwbGF5UHJpY2luZ109XCJkaXNwbGF5UHJpY2luZ1wiXG4gICAgICAgICAgICAgIFtvcmlnaW5UcmFjZV09XCJldmVudFRyYWNlKClcIlxuICAgICAgICAgICAgICAoZGlzcGxheUxpc3QpPVwiY2F0ZWdvcnlUaXRsZUNsaWNrZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L25nLW1pYW0tY2F0YWxvZy1jYXRlZ29yeT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2V4cGxhaW5fYmFubmVyXCI+XG4gICAgICAgICAgICA8bmctbWlhbS1leHBsYWluLWJhbm5lciBbY2F0YWxvZ1NldHRpbmddPVwiY2F0YWxvZ1NldHRpbmdcIj48L25nLW1pYW0tZXhwbGFpbi1iYW5uZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2NyZWF0aW9uUGFnZT5cbiAgPG5nLW1pYW0tcmVjaXBlLXN0ZXBwZXJcbiAgICAqbmdJZj1cImNhdGFsb2dTZXR0aW5nSGFzTG9hZGVkXCJcbiAgICBbcmVjaXBlVG9VcGRhdGVdPVwicmVjaXBlVG9VcGRhdGVcIlxuICAgIFtvcmlnaW5UcmFjZV09XCJldmVudFRyYWNlKClcIlxuICAgIChyZWNpcGVDaGFuZ2UpPVwibGVhdmVDcmVhdGVQYWdlKClcIlxuICAgIChjYW5jZWxlZCk9XCJsZWF2ZUNyZWF0ZVBhZ2UoKVwiPlxuICA8L25nLW1pYW0tcmVjaXBlLXN0ZXBwZXI+XG48L25nLXRlbXBsYXRlPiJdfQ==
640
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaXBlLWNhdGFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii9idWlsZHMvbWlhbS9uZy1taWFtLXNkay9wcm9qZWN0cy9uZy1taWFtL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9fd2ViLWNvbXBvbmVudHMvcmVjaXBlLWNhdGFsb2cvcmVjaXBlLWNhdGFsb2cuY29tcG9uZW50LnRzIiwibGliL193ZWItY29tcG9uZW50cy9yZWNpcGUtY2F0YWxvZy9yZWNpcGUtY2F0YWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBaUIsaUJBQWlCLEVBQVUsVUFBVSxFQUM3SCxZQUFZLEVBQUUsU0FBUyxFQUFhLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRXpGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQzlILGNBQWMsRUFBRSxjQUFjLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxFQUFnQixhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsYUFBYSxFQUE0QixNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDSXRGLCtCQUNFO0lBRGdGLHNNQUE4QjtJQUM5RyxtQ0FBMEk7SUFDMUksZ0NBQ0U7SUFBQSw0QkFBTTtJQUFBLFlBQWU7SUFBQSxpQkFBTztJQUM1Qiw0QkFBWTtJQUFaLGdCQUFZO0lBQUssaUJBQU87SUFDMUIsaUJBQU87SUFDUCxtQ0FBa0o7SUFDcEosaUJBQU07OztJQU5VLGVBQXNCO0lBQXRCLDJDQUFzQjtJQUU1QixlQUFlO0lBQWYsd0NBQWU7SUFHUixlQUE2QjtJQUE3QixrREFBNkI7OztJQXlCMUMsNEJBQWtDO0lBQWxDLGdCQUFrQztJQUFrQixpQkFBTzs7O0lBQUEsNEJBQTZCO0lBQUEsWUFBb0I7SUFBQSxpQkFBTzs7O0lBQTNCLGVBQW9CO0lBQXBCLDRDQUFvQjs7O0lBQzVHLDRCQUFxQztJQUFyQyxnQkFBcUM7SUFBZSxpQkFBTzs7O0lBQzNELDRCQUFvQztJQUFwQyxnQkFBb0M7SUFBZ0IsaUJBQU87OztJQUMzRCw0QkFBK0I7SUFBQSxZQUFxQztJQUFBLGlCQUFPOzs7SUFBNUMsZUFBcUM7SUFBckMsNkRBQXFDOzs7SUFDcEUsNEJBQW1DO0lBQW5DLGdCQUFtQztJQUFlLGlCQUFPOzs7O0lBRTNELCtCQUVFO0lBREYsb05BQXFDLFFBQVEsVUFBVSxJQUFJLE9BQUc7SUFDNUQsbUNBQWlIO0lBQ2pILDRCQUFXO0lBQVgsZ0JBQVc7SUFBc0IsaUJBQU87SUFDMUMsaUJBQU07OztJQUZVLGVBQXNCO0lBQXRCLDRDQUFzQjs7OztJQVh4QywrQkFDRTtJQUFBLCtCQUNFO0lBQUEsd0NBQTZHO0lBQTVDLGdOQUE0QjtJQUFDLGlCQUFlO0lBQzdHLHNGQUFrQztJQUF5QixzRkFBNkI7SUFDeEYsc0ZBQXFDO0lBQ3JDLHNGQUFvQztJQUNwQyxzRkFBK0I7SUFDL0Isc0ZBQW1DO0lBQ3JDLGlCQUFNO0lBQ04sb0ZBRUU7O0lBSUYsaURBTXVCO0lBRnJCLGlQQUFzQywwUEFBQTtJQUV4QyxpQkFBdUI7SUFDekIsaUJBQU07OztJQXBCWSxlQUEyQjtJQUEzQixnREFBMkI7SUFDbkMsZUFBc0I7SUFBdEIsNENBQXNCO0lBQXFDLGVBQXNCO0lBQXRCLDRDQUFzQjtJQUNqRixlQUF5QjtJQUF6QiwrQ0FBeUI7SUFDekIsZUFBd0I7SUFBeEIsOENBQXdCO0lBQ3hCLGVBQXdCO0lBQXhCLDhDQUF3QjtJQUN4QixlQUF1QjtJQUF2Qiw2Q0FBdUI7SUFFeUIsZUFBMEM7SUFBMUMsZ0ZBQTBDO0lBT2hHLGVBQW1CO0lBQW5CLHdDQUFtQixvQ0FBQSx5Q0FBQTs7OztJQXdCbkIsNkJBQ0U7SUFBQSxvREFRMkI7SUFGekIsb1NBQTRDO0lBRTlDLGlCQUEyQjtJQUM3QiwwQkFBZTs7OztJQVJYLGVBQXdCO0lBQXhCLDBDQUF3QixtQ0FBQSxpQ0FBQSwwQ0FBQSxxQ0FBQTs7O0lBV3hCLDZDQUE0Rzs7OztJQUQ5RywrQkFDRTtJQUFBLDZLQUErRTs7SUFDL0Usb0RBUTJCO0lBRnpCLG1TQUE0QztJQUU5QyxpQkFBMkI7SUFDN0IsaUJBQU07SUFDTiwrQkFDRTtJQUFBLDZDQUFtRjtJQUNyRixpQkFBTTs7OztJQWJ3QixlQUFrRDtJQUFsRCx1RkFBa0Q7SUFFNUUsZUFBd0I7SUFBeEIsMENBQXdCLG1DQUFBLGlDQUFBLDBDQUFBLHFDQUFBO0lBVUYsZUFBaUM7SUFBakMsdURBQWlDOzs7SUExQi9ELDZCQUNFO0lBQUEsbUlBQ0U7SUFVRixrS0FDRTtJQWdCSiwwQkFBZTs7OztJQTVCQyxlQUFrQztJQUFsQyxrQ0FBa0Msa0JBQUE7OztJQUZwRCwrQkFDRTtJQUFBLG9IQUNFO0lBNkJKLGlCQUFNOzs7SUE5QlUsZUFBaUQ7SUFBakQsNENBQWlEOzs7SUFEakUsNEZBQ0U7OztJQURHLG1EQUE2Qjs7OztJQXBGdEMsOEJBQ0U7SUFBQSw4QkFDRTtJQUFBLGlEQWV5QjtJQUx2QiwrT0FBMEMsbU9BQUEsME9BQUEsdU9BQUEsME9BQUE7O0lBSzVDLGlCQUF5QjtJQUN6Qiw2RUFDRTtJQTJCRiwrRUFDRTtJQXNCSixpQkFBTTtJQUVOLGlEQVV5QjtJQUp2Qiw0T0FBdUMsMk5BQUEsOE5BQUE7SUFJekMsaUJBQXlCO0lBRXpCLCtIQUNFO0lBaUNKLGlCQUFNOzs7O0lBbEhBLGVBQXdCO0lBQXhCLDZDQUF3QixxRUFBQSxvSkFBQSwrQkFBQSx5RUFBQSx5Q0FBQSxtREFBQSw4RkFBQSw2REFBQTtJQWVyQixlQUF1QjtJQUF2Qiw2Q0FBdUI7SUE0QnZCLGVBQW9EO0lBQXBELGdEQUFvRCxpQkFBQTtJQTBCekQsZUFBbUI7SUFBbkIsd0NBQW1CLCtDQUFBLHlDQUFBLG9DQUFBLG9DQUFBOzs7O0lBZ0RyQixrREFNeUI7SUFGdkIsa1FBQWtDLDZPQUFBO0lBRXBDLGlCQUF5Qjs7O0lBSnZCLHVEQUFpQyxxQ0FBQTs7O0lBRm5DLDRIQU1BOzs7SUFMRSxxREFBK0I7O0FEM0ZuQyxNQUFNLE9BQU8sc0JBQXVCLFNBQVEsb0JBQW9CO0lBOEI5RCxZQUNTLEdBQXNCLEVBQ3RCLGtCQUFxQyxFQUNyQyxjQUE4QixFQUM5QixlQUFpQyxFQUNqQyxjQUE4QixFQUM3QixjQUE4QixFQUMvQixZQUEwQixFQUMxQixZQUF5QixFQUN6QixxQkFBNkMsRUFDMUMsZ0JBQWtDLEVBQ3JDLG9CQUEyQyxFQUMzQyxjQUE4QixFQUM5QixjQUE4QjtRQUVyQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQWRqQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBQ3JDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixvQkFBZSxHQUFmLGVBQWUsQ0FBa0I7UUFDakMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzdCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUMvQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUN6QiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXdCO1FBQzFDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDckMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUF1QjtRQUMzQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBdEM5QixxQkFBZ0IsR0FBRyw0RkFBNEYsQ0FBQztRQUNoSCxpQkFBWSxHQUFHLEVBQUUsQ0FBQztRQUNsQixvQkFBZSxHQUFHLE1BQU0sQ0FBQztRQUV6QixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUloQyxzQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDekIsU0FBSSxHQUFHLElBQUksQ0FBQztRQUNaLGVBQVUsR0FBZSxFQUFFLENBQUM7UUFDNUIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFHdkIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDekIsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFDaEIsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUNmLGtCQUFhLEdBQUcsSUFBSSxDQUFDO1FBRXJCLDRCQUF1QixHQUFHLEtBQUssQ0FBQztRQUV4QixrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFtQnpDLElBQUksQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUN6RSxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFbkIsSUFBSSxDQUFDLGFBQWEsR0FBRztZQUNuQixJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQ2hELFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxFQUNyRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNuQixJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDakMsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDN0IsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUU7WUFDYixJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDekUsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDM0IsQ0FBQyxDQUNFO1lBQ0gsSUFBSSxDQUFDLHNCQUFzQixFQUFFO1NBQzlCLENBQUM7UUFFRixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxXQUFXLEtBQWEsT0FBTyxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBRWhELG1CQUFtQjs7UUFDakIsTUFBTSxXQUFXLEdBQUcsSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoRSxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssTUFBTSxFQUFFO1lBQzVDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1NBQzNCO1FBQ0QsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEtBQUssTUFBTSxFQUFFO1lBQ2pELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQzFCO1FBQ0QsTUFBTSxJQUFJLFNBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsMENBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsTUFBTSxNQUFLLENBQUMsRUFBRTtZQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzVCO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELDZHQUE2RztJQUM3RyxpQkFBaUIsQ0FBQyxRQUFrQjs7UUFDbEMsVUFBSSxRQUFRLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLDBDQUFFLElBQUksRUFBRTtZQUNuRCxNQUFNLEVBQUUsZUFBRyxRQUFRLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLDBDQUFFLElBQUksMENBQUUsRUFBRSxDQUFDO1lBQy9ELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUNyQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQzVCLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUM7Z0JBQzlCLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDM0IsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNmO0lBQ0gsQ0FBQztJQUVELDZGQUE2RjtJQUM3RixXQUFXO1FBQ1QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGFBQWEsQ0FDOUI7WUFDRSxVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3ZELE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDbkUsQ0FBQyxDQUFDO1lBQ0YsSUFBSSxFQUFFO2dCQUNKLEVBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFDO2dCQUMzQixFQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBQztnQkFDNUIsRUFBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUM7Z0JBQy9CLGdGQUFnRjthQUNqRjtZQUNELElBQUksRUFBRTtnQkFDSixFQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBQztnQkFDMUIsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUM7Z0JBQzFCLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFDO2dCQUMxQixFQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBQzthQUU1QjtTQUNGLENBQ0YsQ0FBQztRQUNGLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ2pEO1FBQ0QsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQUU7UUFDbkUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxhQUFhLENBQUMsT0FBc0I7UUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyw4Q0FBOEM7UUFDN0UsSUFBSSxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUM7UUFDaEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFjO1FBQ3pCLElBQUksTUFBTSxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQ2xDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM3QjtJQUNILENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxLQUFvQztRQUN2RCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDMUMsaUJBQWlCLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRTtTQUNsRSxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQzFDLGlCQUFpQixFQUFFO2dCQUNqQixPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO2dCQUN4QixLQUFLLEVBQUUsaUJBQWlCO2FBQ3pCO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQzFDLGlCQUFpQixFQUFFO2dCQUNqQixPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUU7Z0JBQ2pELEtBQUssRUFBRSxrQkFBa0I7YUFDMUI7U0FDRixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxlQUFlLENBQUMsSUFBYztRQUM1QixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDMUMsaUJBQWlCLEVBQUU7Z0JBQ2pCLE9BQU8sRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRTtnQkFDM0YsS0FBSyxFQUFFLHVCQUF1QixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUc7YUFDekM7U0FDRixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxZQUFZLENBQUMsVUFBa0I7UUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FBQywwRkFBMEYsQ0FBQyxDQUFDO1FBQzVHLElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDL0M7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hCLGtIQUFrSDtRQUNsSCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQ2pELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsdUdBQXVHO1FBQ3ZHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQ2pDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxjQUFjLENBQUMsTUFBTSxHQUFHLElBQUk7UUFDMUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUM7UUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBdUM7O1FBQ3hELFFBQVEsS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUNwQixLQUFLLFFBQVEsQ0FBQyxDQUFDO2dCQUNiLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdEIsTUFBTTthQUNQO1lBRUQsS0FBSyxNQUFNLENBQUMsQ0FBQztnQkFDWCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDbEMsTUFBTTthQUNQO1lBRUQsS0FBSyxRQUFRLENBQUMsQ0FBQztnQkFDYixJQUFJLE9BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsRUFBRSxLQUFJLE9BQUEsS0FBSyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsMENBQUUsSUFBSSxDQUFDLEVBQUUsTUFBSyxVQUFVLEVBQUU7b0JBQzdGLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNyQixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7d0JBQ3pELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDM0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsNEJBQTRCLENBQUMsQ0FBQzt3QkFDbkUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDM0IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztpQkFDSDtnQkFDRCxNQUFNO2FBQ1A7U0FDRjtJQUNILENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3JCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FDaEMsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRCxlQUFlOztRQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksYUFBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSxpQkFBaUIsMENBQUUsS0FBSyxNQUFLLGlCQUFpQixDQUFDO0lBQ3pILENBQUM7SUFFRCxjQUFjOztRQUNaLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksYUFBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSxpQkFBaUIsMENBQUUsS0FBSyxNQUFLLGtCQUFrQixDQUFDO0lBQzFILENBQUM7SUFFRCxjQUFjOztRQUNaLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3pHLG1CQUFBLElBQUksQ0FBQyxPQUFPLDBDQUFFLGlCQUFpQiwwQ0FBRSxLQUFLLDBDQUFFLE1BQU0sSUFBRyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELGFBQWE7UUFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hJLENBQUM7SUFFRCx3QkFBd0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQ3BELEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FDbkQsQ0FBQztJQUNKLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVPLFlBQVk7UUFDbEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDL0QsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUMxQyxHQUFHLENBQUMsQ0FBQyxRQUFxQyxFQUFFLEVBQUU7WUFDNUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRU8sY0FBYyxDQUFDLFFBQXFDO1FBQzFELElBQUksQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUU7WUFDcEQsT0FBTztnQkFDTCxHQUFHLEVBQUUsZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7Z0JBQ2pHLEtBQUssRUFBRSxlQUFlLENBQUMsS0FBSztnQkFDNUIsUUFBUSxFQUFFLGVBQWUsQ0FBQyxRQUFRO2dCQUNsQyxPQUFPLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxlQUFlLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFO2FBQ3pGLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoRSxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsS0FBSyxXQUFXLEVBQUU7WUFDdEQsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztTQUNsQztRQUNELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssV0FBVyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7UUFDdkcsSUFBSSxnQkFBZ0IsRUFBRTtZQUNwQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1NBQ2xJO0lBQ0gsQ0FBQztJQUVELG9GQUFvRjtJQUM1RSxzQkFBc0I7UUFDNUIsT0FBTyxhQUFhLENBQUM7WUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTO1lBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDO1lBQ25ELElBQUksQ0FBQyxZQUFZLENBQUMscUJBQXFCO1NBQ3hDLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDckIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLE1BQU0saUJBQWlCLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxvQkFBb0IsQ0FBQztZQUM3RSxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGVBQWUsQ0FBQyxLQUFhO1FBQ25DLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxFQUFFLEVBQUM7WUFDM0IsUUFBUSxJQUFJLENBQUMsWUFBWSxFQUFDO2dCQUN4QixLQUFLLFdBQVc7b0JBQ2QsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7b0JBQzFCLE1BQU07Z0JBQ1IsS0FBSywyQkFBMkI7b0JBQzlCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO29CQUN6QixNQUFNO2dCQUNSLEtBQUssb0JBQW9CO29CQUN2QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztvQkFDMUIsTUFBTTthQUNUO1NBQ0Y7SUFDSCxDQUFDOzs0RkFoWFUsc0JBQXNCOzJEQUF0QixzQkFBc0I7dUJBQ3RCLHNCQUFzQjs7dUJBRW5CLHdCQUF3Qjs7Ozs7Ozs7Ozs7aUJDWHBCLFVBQUEsdUVBQUs7Ozs7OztpQkEyQmlCLFVBQUEsbUZBQWtCOzs7Ozs7aUJBQ2YsVUFBQSwrRUFBZTs7Ozs7O2lCQUNoQixVQUFBLGlGQUFnQjs7Ozs7O2lCQUVqQixVQUFBLGdGQUFlOzs7Ozs7a0JBS3ZDLFVBQUEsdUZBQXNCOztRQTNEekMsNEJBQTZEO1FBQzdELHdFQUNFO1FBc0hGLHdIQUNFOzs7UUF4SEcsZUFBb0U7UUFBcEUseUVBQW9FLGlCQUFBOztrREQ4QjVELHNCQUFzQjtjQVBsQyxTQUFTO2VBQUM7Z0JBQ1QsUUFBUSxFQUFFLHdCQUF3QjtnQkFDbEMsV0FBVyxFQUFFLGlDQUFpQztnQkFDOUMsU0FBUyxFQUFFLENBQUMsaUNBQWlDLENBQUM7Z0JBQzlDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2dCQUNyQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTthQUNoRDtpYkFFb0MsYUFBYTtrQkFBL0MsU0FBUzttQkFBQyxzQkFBc0I7WUFDRSxTQUFTO2tCQUEzQyxTQUFTO21CQUFDLHNCQUFzQjtZQUNRLGNBQWM7a0JBQXRELFlBQVk7bUJBQUMsd0JBQXdCO1lBRTdCLGdCQUFnQjtrQkFBeEIsS0FBSztZQUNHLFlBQVk7a0JBQXBCLEtBQUs7WUFDRyxlQUFlO2tCQUF2QixLQUFLO1lBQ0csU0FBUztrQkFBakIsS0FBSztZQUNHLGNBQWM7a0JBQXRCLEtBQUs7WUFDRyxhQUFhO2tCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3RW5jYXBzdWxhdGlvbiwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIFZpZXdDaGlsZCwgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIE9uSW5pdCwgRWxlbWVudFJlZixcbiAgVmlld0NoaWxkcmVuLCBRdWVyeUxpc3QsIE9uRGVzdHJveSwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG1hcCwgc2tpcFdoaWxlLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENhdGFsb2dDYXRlZ29yeUNvbXBvbmVudCB9IGZyb20gJy4vY2F0YWxvZy1jYXRlZ29yeS9jYXRhbG9nLWNhdGVnb3J5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYXRhbG9nU2V0dGluZywgUmVjaXBlLCBTdXBwbGllciB9IGZyb20gJy4uLy4uL19tb2RlbHMnO1xuaW1wb3J0IHsgUmVjaXBlVHlwZVNlcnZpY2UsIFNwb25zb3JTZXJ2aWNlLCBQYWNrYWdlU2VydmljZSwgU3VwcGxpZXJzU2VydmljZSwgUmVjaXBlc1NlcnZpY2UsIFVzZXJTZXJ2aWNlLCBHcm9jZXJpZXNMaXN0c1NlcnZpY2UsXG4gIEJhc2tldHNTZXJ2aWNlLCBDb250ZXh0U2VydmljZSwgQ2F0YWxvZ1NldHRpbmdzU2VydmljZSB9IGZyb20gJy4uLy4uL19zZXJ2aWNlcyc7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSAnLi4vLi4vX3R5cGVzL2ljb24uZW51bSc7XG5pbXBvcnQgeyBDYXRhbG9nSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9jYXRhbG9nLWhlYWRlci9jYXRhbG9nLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVjaXBlRmlsdGVyLCBSZWNpcGVGaWx0ZXJzIH0gZnJvbSAnLi4vLi4vX3R5cGVzL3JlY2lwZS1maWx0ZXJzJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTWVkaWFNYXRjaGVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XG5pbXBvcnQgeyBEb2N1bWVudENvbGxlY3Rpb24gfSBmcm9tICduZ3gtanNvbmFwaSc7XG5pbXBvcnQgeyBQYWNrYWdlIH0gZnJvbSAnLi4vLi4vX21vZGVscy9wYWNrYWdlJztcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9fc2VydmljZXMvYW5hbHl0aWNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgRXZlbnRUcmFjZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9fY29tcG9uZW50cy9hYnN0cmFjdHMvZXZlbnQtdHJhY2VyLmNvbXBvbmVudCc7XG5cbmludGVyZmFjZSBDYXRlZ29yeSB7XG4gIGtleTogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBzdWJ0aXRsZTogc3RyaW5nO1xuICBmaWx0ZXJzOiB7IGFkZGl0aW9uYWxGaWx0ZXJzOiB7IGZpbHRlcnM6IHsgcGFja2FnZXM6IHN0cmluZyB9LCB0aXRsZTogc3RyaW5nIH19O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZy1taWFtLXJlY2lwZS1jYXRhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JlY2lwZS1jYXRhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmVjaXBlLWNhdGFsb2cuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgUmVjaXBlQ2F0YWxvZ0NvbXBvbmVudCBleHRlbmRzIEV2ZW50VHJhY2VyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKENhdGFsb2dIZWFkZXJDb21wb25lbnQpIGNhdGFsb2dIZWFkZXI6IENhdGFsb2dIZWFkZXJDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ21pYW1DYXRhbG9nVG9wQW5jaG9yJykgdG9wQW5jaG9yOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkcmVuKENhdGFsb2dDYXRlZ29yeUNvbXBvbmVudCkgIGNhdGVnb3JpZXNDb21wITogUXVlcnlMaXN0PENhdGFsb2dDYXRlZ29yeUNvbXBvbmVudD47XG5cbiAgQElucHV0KCkgaGVhZGVyUGljdHVyZVVybCA9ICdodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vYXNzZXRzLm1pYW0udGVjaC9nZW5lcmljL2ltYWdlcy9kZWZhdWx0LWNhdGFsb2ctcGljdHVyZS5wbmcnO1xuICBASW5wdXQoKSBpbml0aWFsUm91dGUgPSAnJztcbiAgQElucHV0KCkgZmlsdGVyc1Bvc2l0aW9uID0gJ2xlZnQnO1xuICBASW5wdXQoKSBob21lTGFiZWw6IHN0cmluZztcbiAgQElucHV0KCkgZGlzcGxheVByaWNpbmcgPSBmYWxzZTtcbiAgQElucHV0KCkgY3VzdG9tRmlsdGVyczogeyBkaWZmaWN1bHR5PzogUmVjaXBlRmlsdGVyW10sIGNvc3Q/OiBSZWNpcGVGaWx0ZXJbXSwgdGltZT86IFJlY2lwZUZpbHRlcltdIH07XG5cbiAgZmlsdGVyczogUmVjaXBlRmlsdGVycztcbiAgaXNGaWx0ZXJDb2xsYXBzZWQgPSB0cnVlO1xuICBpY29uID0gSWNvbjtcbiAgY2F0ZWdvcmllczogQ2F0ZWdvcnlbXSA9IFtdO1xuICBjcmVhdGluZ1JlY2lwZSA9IGZhbHNlO1xuICByZWNpcGVUb1VwZGF0ZTogUmVjaXBlO1xuICBmaWx0ZXJUb1JlbW92ZTogc3RyaW5nO1xuICBpc01vYmlsZSA9IGZhbHNlO1xuICBzaG93VXNlckZlZWRiYWNrID0gZmFsc2U7XG4gIHJlY2lwZUNvdW50ID0gMDtcbiAgdG90YWxQcmljZSA9IDA7XG4gIGlzTXlNZWFsQ2xvc2UgPSB0cnVlO1xuICBjYXRhbG9nU2V0dGluZzogQ2F0YWxvZ1NldHRpbmc7XG4gIGNhdGFsb2dTZXR0aW5nSGFzTG9hZGVkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBwcml2YXRlIHN1cHBsaWVySWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHVibGljIHJlY2lwZVR5cGVzU2VydmljZTogUmVjaXBlVHlwZVNlcnZpY2UsXG4gICAgcHVibGljIHNwb25zb3JTZXJ2aWNlOiBTcG9uc29yU2VydmljZSxcbiAgICBwdWJsaWMgc3VwcGxpZXJTZXJ2aWNlOiBTdXBwbGllcnNTZXJ2aWNlLFxuICAgIHB1YmxpYyBwYWNrYWdlU2VydmljZTogUGFja2FnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWNpcGVzU2VydmljZTogUmVjaXBlc1NlcnZpY2UsXG4gICAgcHVibGljIG1lZGlhTWF0Y2hlcjogTWVkaWFNYXRjaGVyLFxuICAgIHB1YmxpYyB1c2Vyc1NlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgIHB1YmxpYyBjYXRhbG9nU2V0dGluZ1NlcnZpY2U6IENhdGFsb2dTZXR0aW5nc1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGFuYWx5dGljc1NlcnZpY2U6IEFuYWx5dGljc1NlcnZpY2UsXG4gICAgcHVibGljIGdyb2Nlcmllc0xpc3RTZXJ2aWNlOiBHcm9jZXJpZXNMaXN0c1NlcnZpY2UsXG4gICAgcHVibGljIGJhc2tldHNTZXJ2aWNlOiBCYXNrZXRzU2VydmljZSxcbiAgICBwdWJsaWMgY29udGV4dFNlcnZpY2U6IENvbnRleHRTZXJ2aWNlLFxuICApIHtcbiAgICBzdXBlcihhbmFseXRpY3NTZXJ2aWNlKTtcbiAgICB0aGlzLmlzTW9iaWxlID0gbWVkaWFNYXRjaGVyLm1hdGNoTWVkaWEoJyhtYXgtd2lkdGg6IDEwMjJweCknKS5tYXRjaGVzO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5wYWdldmlldygpO1xuICAgIHRoaXMuaW5pdEZpbHRlcnMoKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtcbiAgICAgIHRoaXMuc3VwcGxpZXJTZXJ2aWNlLnN1cHBsaWVyJC5hc09ic2VydmFibGUoKS5waXBlKFxuICAgICAgICBza2lwV2hpbGUoc3VwcCA9PiBzdXBwID09PSB1bmRlZmluZWQgfHwgc3VwcCA9PSBudWxsKSxcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgc3dpdGNoTWFwKHN1cHBsaWVyID0+IHtcbiAgICAgICAgICB0aGlzLnN1cHBsaWVySWQgPSBzdXBwbGllci5pZDtcbiAgICAgICAgICB0aGlzLmluaXRDYXRhbG9nSGVhZGVyKHN1cHBsaWVyKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkUGFja2FnZXMoKTtcbiAgICAgICAgfSlcbiAgICAgICkuc3Vic2NyaWJlKCksXG4gICAgICB0aGlzLmJhc2tldHNTZXJ2aWNlLmJhc2tldFN0YXRzJC5waXBlKHNraXBXaGlsZShicyA9PiAhYnMpKS5zdWJzY3JpYmUoYnMgPT4ge1xuICAgICAgICB0aGlzLnJlY2lwZUNvdW50ID0gYnMucmVjaXBlc0NvdW50O1xuICAgICAgICB0aGlzLnRvdGFsUHJpY2UgPSBicy50b3RhbFByaWNlO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgICAgICksXG4gICAgICB0aGlzLmFzc2Vzc1Nob3dVc2VyRmVlZGJhY2soKVxuICAgIF07XG5cbiAgICB0aGlzLnNldERpcmVjdEFjY2Vzcyh0aGlzLmluaXRpYWxSb3V0ZSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5vcGVuRmVhdHVyZXNGcm9tVVJMKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICB9XG5cbiAgY3VycmVudFBhdGgoKTogc3RyaW5nIHsgcmV0dXJuICdtaWFtL3JlY2lwZXMnOyB9XG5cbiAgb3BlbkZlYXR1cmVzRnJvbVVSTCgpIHtcbiAgICBjb25zdCBwYXJhbXNBcnJheSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgaWYgKHBhcmFtc0FycmF5LmdldCgnb3BlbkJhc2tldCcpID09PSAndHJ1ZScpIHtcbiAgICAgIHRoaXMudG9nZ2xlTXlNZWFsRHJhd2VyKCk7XG4gICAgfVxuICAgIGlmIChwYXJhbXNBcnJheS5nZXQoJ3BlcnNvbmFsQ2F0YWxvZycpID09PSAndHJ1ZScpIHtcbiAgICAgIHRoaXMuc2V0UGVyc29uYWxGaWx0ZXIoKTtcbiAgICB9XG4gICAgY29uc3QgY29zdCA9IHBhcmFtc0FycmF5LmdldCgnY29zdCcpPy5zcGxpdCgnLCcpO1xuICAgIGlmIChjb3N0Py5sZW5ndGggPT09IDIpIHtcbiAgICAgIHRoaXMuc2V0UHJpY2VGaWx0ZXJzKGNvc3QpO1xuICAgIH1cbiAgfVxuXG4gIGRpc3BsYXlIb21lUGFnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJzLmlzRW1wdHkoKTtcbiAgfVxuXG4gIC8vIGluaXQgdGhlIHZhbHVlIG9mIHRoZSBpbWFnZSBhbmQgdGhlIHRleHQgZm9yIHRoZSBjYXRhbG9nIGhlYWRlciwgdXNpbmcgdGhlIGNhdGFsb2cgc2V0dGluZyBvZiB0aGUgc3VwcGxpZXJcbiAgaW5pdENhdGFsb2dIZWFkZXIoc3VwcGxpZXI6IFN1cHBsaWVyKSB7XG4gICAgaWYgKHN1cHBsaWVyLnJlbGF0aW9uc2hpcHNbJ2NhdGFsb2ctc2V0dGluZyddPy5kYXRhKSB7XG4gICAgICBjb25zdCBpZCA9IHN1cHBsaWVyLnJlbGF0aW9uc2hpcHNbJ2NhdGFsb2ctc2V0dGluZyddPy5kYXRhPy5pZDtcbiAgICAgIHRoaXMuY2F0YWxvZ1NldHRpbmdTZXJ2aWNlLmdldChpZCkucGlwZShcbiAgICAgICAgc2tpcFdoaWxlKGMgPT4gYy5pc19sb2FkaW5nKSxcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgdGFwKGNhdGFsb2cgPT4ge1xuICAgICAgICAgIHRoaXMuY2F0YWxvZ1NldHRpbmcgPSBjYXRhbG9nO1xuICAgICAgICAgIHRoaXMuY2F0YWxvZ1NldHRpbmdIYXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSlcbiAgICAgICkuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVXNlZCBvbiBsb2FkIHRvIGJ1aWxkIHRoZSBmaWx0ZXJzIGF0dHJpYnV0ZSwgYW5kIG9uIGNsaWNrIG9uIHRoZSBsaW5rIHRvIHJlc2V0IHRoZSBmaWx0ZXJzXG4gIGluaXRGaWx0ZXJzKCkge1xuICAgIHRoaXMuZmlsdGVycyA9IG5ldyBSZWNpcGVGaWx0ZXJzKFxuICAgICAge1xuICAgICAgICBkaWZmaWN1bHR5OiB0aGlzLnJlY2lwZXNTZXJ2aWNlLmRpZmZpY3VsdHlMZXZlbHMubWFwKGYgPT4ge1xuICAgICAgICAgIHJldHVybiB7IG5hbWU6IGYudmFsdWUudG9TdHJpbmcoKSwgdGV4dDogZi5sYWJlbCwgdmFsdWU6IGZhbHNlIH07XG4gICAgICAgIH0pLFxuICAgICAgICBjb3N0OiBbXG4gICAgICAgICAge25hbWU6ICcwLTUnLCB2YWx1ZTogZmFsc2V9LFxuICAgICAgICAgIHtuYW1lOiAnNS0xMCcsIHZhbHVlOiBmYWxzZX0sXG4gICAgICAgICAge25hbWU6ICcxMC0xMDAwJywgdmFsdWU6IGZhbHNlfVxuICAgICAgICAgIC8vIHdlIHNldCBhIGxpbWl0IGF0IDEwMDDigqwgbWF4LCBpZiBhIHJlY2lwZSBjb3N0IG1vcmUgc2hvdWxkIGJlIG5vbiBzZW5zZSBhbnl3YXlcbiAgICAgICAgXSxcbiAgICAgICAgdGltZTogW1xuICAgICAgICAgIHtuYW1lOiAnMTUnLCB2YWx1ZTogZmFsc2V9LFxuICAgICAgICAgIHtuYW1lOiAnMzAnLCB2YWx1ZTogZmFsc2V9LFxuICAgICAgICAgIHtuYW1lOiAnNjAnLCB2YWx1ZTogZmFsc2V9LFxuICAgICAgICAgIHtuYW1lOiAnMTIwJywgdmFsdWU6IGZhbHNlfVxuXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICApO1xuICAgIGlmICh0aGlzLmN1c3RvbUZpbHRlcnMpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5maWx0ZXJzLCB0aGlzLmN1c3RvbUZpbHRlcnMpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jYXRhbG9nSGVhZGVyKSB7IHRoaXMuY2F0YWxvZ0hlYWRlci5yZXNldFNlYXJjaFN0cmluZygpOyB9XG4gICAgdGhpcy5maWx0ZXJzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMuZmlsdGVycy5hZGRpdGlvbmFsRmlsdGVycyA9IG51bGw7XG4gIH1cblxuICB1cGRhdGVGaWx0ZXJzKGZpbHRlcnM6IFJlY2lwZUZpbHRlcnMpIHtcbiAgICB0aGlzLmZpbHRlcnMgPSBmaWx0ZXJzLmNvcHkoKTsgLy8gbmVjZXNzYXJ5IHRvIHRyaWdnZXIgY2hpbGQgY29tcG9uZW50IGNoYW5nZVxuICAgIHRoaXMuZmlsdGVyVG9SZW1vdmUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5yZXR1cm5Ub1RvcCgpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHVwZGF0ZVNlYXJjaChzZWFyY2g6IHN0cmluZykge1xuICAgIGlmIChzZWFyY2ggIT09IHRoaXMuZmlsdGVycy5zZWFyY2gpIHtcbiAgICAgIGNvbnN0IGZpbHRlcnMgPSBPYmplY3QuYXNzaWduKHRoaXMuZmlsdGVycywgeyBzZWFyY2ggfSk7XG4gICAgICB0aGlzLnVwZGF0ZUZpbHRlcnMoZmlsdGVycyk7XG4gICAgfVxuICB9XG5cbiAgY2F0ZWdvcnlUaXRsZUNsaWNrZWQoZXZlbnQ6IHt0aXRsZTogc3RyaW5nLCBmaWx0ZXJzOiBhbnl9KSB7XG4gICAgY29uc3QgZmlsdGVycyA9IE9iamVjdC5hc3NpZ24odGhpcy5maWx0ZXJzLCB7XG4gICAgICBhZGRpdGlvbmFsRmlsdGVyczogeyBmaWx0ZXJzOiBldmVudC5maWx0ZXJzLCB0aXRsZTogZXZlbnQudGl0bGUgfVxuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlRmlsdGVycyhmaWx0ZXJzKTtcbiAgfVxuXG4gIHNldEZhdm9yaXRlc0ZpbHRlcigpOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXJzID0gT2JqZWN0LmFzc2lnbih0aGlzLmZpbHRlcnMsIHtcbiAgICAgIGFkZGl0aW9uYWxGaWx0ZXJzOiB7XG4gICAgICAgIGZpbHRlcnM6IHsgbGlrZWQ6IHRydWUgfSxcbiAgICAgICAgdGl0bGU6ICdNZXMgaWTDqWVzIHJlcGFzJ1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlRmlsdGVycyhmaWx0ZXJzKTtcbiAgfVxuXG4gIHNldFBlcnNvbmFsRmlsdGVyKCk6IHZvaWQge1xuICAgIGNvbnN0IGZpbHRlcnMgPSBPYmplY3QuYXNzaWduKHRoaXMuZmlsdGVycywge1xuICAgICAgYWRkaXRpb25hbEZpbHRlcnM6IHtcbiAgICAgICAgZmlsdGVyczogeyBwZXJzb25hbDogdHJ1ZSwgYWN0aXZlOiAndHJ1ZSxmYWxzZScgfSxcbiAgICAgICAgdGl0bGU6ICdNb24gY2FybmV0IHBlcnNvJ1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlRmlsdGVycyhmaWx0ZXJzKTtcbiAgfVxuXG4gIHNldFByaWNlRmlsdGVycyhjb3N0OiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGNvbnN0IGZpbHRlcnMgPSBPYmplY3QuYXNzaWduKHRoaXMuZmlsdGVycywge1xuICAgICAgYWRkaXRpb25hbEZpbHRlcnM6IHtcbiAgICAgICAgZmlsdGVyczogeyBjb21wdXRlZF9jb3N0OiBjb3N0WzBdICsgJyxndCwnICsgY29zdFsxXSArICcsbHQnLCByZWNpcGVfdHlwZV9pZDogJ21haW4tZGlzaCcgfSxcbiAgICAgICAgdGl0bGU6IGBSZWNldHRlcyDDoCBtb2lucyBkZSAke2Nvc3RbMV194oKsYFxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlRmlsdGVycyhmaWx0ZXJzKTtcbiAgfVxuXG4gIHJlbW92ZUZpbHRlcihmaWx0ZXJUZXh0OiBzdHJpbmcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgZnVuY3Rpb24gaXMgYnJva2VuLCB1c2UgaGFzIGJlZW4gY29tbWVudGF0ZWQsIHJlcGFpciBpdCBpZiB5b3Ugd2FudCB0byB1c2UgaXQgYWdhaW4nKTtcbiAgICB0aGlzLmZpbHRlclRvUmVtb3ZlID0gZmlsdGVyVGV4dDtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICByZXR1cm5Ub1RvcCgpIHtcbiAgICBpZiAodGhpcy50b3BBbmNob3IpIHtcbiAgICAgIHRoaXMudG9wQW5jaG9yLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm5Ub0hvbWVQYWdlKCkge1xuICAgIHRoaXMucGFnZXZpZXcoKTtcbiAgICAvLyBlaXRoZXIgeW91IGhhdmUgZmlsdGVycyBlaXRoZXIgeW91IGFyZSBvbiBob21lIHBhZ2UuIFRoYXQgbWVhbiBpZiB5b3UgZ28gb24gaG9tZSBwYWdlIHlvdSBkb24ndCB3YW50IEFOWSBmaWx0ZXJcbiAgICB0aGlzLmluaXRGaWx0ZXJzKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgb25GaWx0ZXJDb2xsYXBzZWQoKSB7XG4gICAgdGhpcy5pc0ZpbHRlckNvbGxhcHNlZCA9ICF0aGlzLmlzRmlsdGVyQ29sbGFwc2VkO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAvLyB0byB0cmlnZ2VyIGFmdGVyIHRoZSBkZXRlY3RDaGFuZ2VzIGJlY2F1c2Ugd2UgbmVlZCB0byBhbHJlYWQgaGF2ZSB0aGUgZGlzcGxheSBjaGFuZ2UgdG8gdXBkYXRlIGNhcmRzXG4gICAgdGhpcy5jYXRlZ29yaWVzQ29tcC5mb3JFYWNoKCBjYXQgPT4ge1xuICAgICAgY2F0LnVwZGF0ZVdpZHRoKCk7XG4gICAgfSk7XG4gIH1cblxuICBnb1RvQ3JlYXRlUGFnZShyZWNpcGUgPSBudWxsKSB7XG4gICAgdGhpcy5jcmVhdGluZ1JlY2lwZSA9IHRydWU7XG4gICAgdGhpcy5yZWNpcGVUb1VwZGF0ZSA9IHJlY2lwZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5yZXR1cm5Ub1RvcCgpO1xuICB9XG5cbiAgbGVhdmVDcmVhdGVQYWdlKCkge1xuICAgIHRoaXMuY3JlYXRpbmdSZWNpcGUgPSBmYWxzZTtcbiAgICB0aGlzLnJldHVyblRvVG9wKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgbWFuYWdlUmVjaXBlQWN0aW9uKGV2ZW50OiB7YWN0aW9uOiBzdHJpbmcsIHJlY2lwZTogUmVjaXBlfSkge1xuICAgIHN3aXRjaCAoZXZlbnQuYWN0aW9uKSB7XG4gICAgICBjYXNlICdDUkVBVEUnOiB7XG4gICAgICAgIHRoaXMuZ29Ub0NyZWF0ZVBhZ2UoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ0VESVQnOiB7XG4gICAgICAgIHRoaXMuZ29Ub0NyZWF0ZVBhZ2UoZXZlbnQucmVjaXBlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ0RFTEVURSc6IHtcbiAgICAgICAgaWYgKGV2ZW50LnJlY2lwZT8uaWQgJiYgZXZlbnQucmVjaXBlLnJlbGF0aW9uc2hpcHNbJ3JlY2lwZS1wcm92aWRlciddPy5kYXRhLmlkID09PSAncGVyc29uYWwnKSB7XG4gICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICB0aGlzLnJlY2lwZXNTZXJ2aWNlLmRlbGV0ZShldmVudC5yZWNpcGUuaWQpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5wcm9wcygpLCB7IHJlY2lwZUlkOiBldmVudC5yZWNpcGUuaWQgfSk7XG4gICAgICAgICAgICAgIHRoaXMuc2VuZEV2ZW50KHRoaXMuYW5hbHl0aWNzU2VydmljZS5FVkVOVF9QRVJTT05BTF9SRUNJUEVfREVMRVRFKTtcbiAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlbG9hZFBhY2thZ2VzKCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5sb2FkUGFja2FnZXMoKS5zdWJzY3JpYmUoKVxuICAgICk7XG4gIH1cblxuICBpc1NlYXJjaFBhZ2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmRpc3BsYXlIb21lUGFnZSgpICYmIHRoaXMuZmlsdGVycy5zZWFyY2ggJiYgdGhpcy5maWx0ZXJzLnNlYXJjaC5sZW5ndGggPiAwO1xuICB9XG5cbiAgaXNGYXZvcml0ZXNQYWdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5kaXNwbGF5SG9tZVBhZ2UoKSAmJiAhdGhpcy5pc1NlYXJjaFBhZ2UoKSAmJiB0aGlzLmZpbHRlcnM/LmFkZGl0aW9uYWxGaWx0ZXJzPy50aXRsZSA9PT0gJ01lcyBpZMOpZXMgcmVwYXMnO1xuICB9XG5cbiAgaXNQZXJzb25hbFBhZ2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmRpc3BsYXlIb21lUGFnZSgpICYmICF0aGlzLmlzU2VhcmNoUGFnZSgpICYmIHRoaXMuZmlsdGVycz8uYWRkaXRpb25hbEZpbHRlcnM/LnRpdGxlID09PSAnTW9uIGNhcm5ldCBwZXJzbyc7XG4gIH1cblxuICBpc0NhdGVnb3J5UGFnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuZGlzcGxheUhvbWVQYWdlKCkgJiYgIXRoaXMuaXNTZWFyY2hQYWdlKCkgJiYgIXRoaXMuaXNGYXZvcml0ZXNQYWdlKCkgJiYgIXRoaXMuaXNQZXJzb25hbFBhZ2UoKSAmJlxuICAgICAgdGhpcy5maWx0ZXJzPy5hZGRpdGlvbmFsRmlsdGVycz8udGl0bGU/Lmxlbmd0aCA+IDA7XG4gIH1cblxuICBpc0RlZmF1bHRQYWdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5kaXNwbGF5SG9tZVBhZ2UoKSAmJiAhdGhpcy5pc1NlYXJjaFBhZ2UoKSAmJiAhdGhpcy5pc0Zhdm9yaXRlc1BhZ2UoKSAmJiAhdGhpcy5pc1BlcnNvbmFsUGFnZSgpICYmICF0aGlzLmlzQ2F0ZWdvcnlQYWdlKCk7XG4gIH1cblxuICBjYW5EaXNwbGF5Q3JlYXRpb25CdXR0b24oKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMudXNlcnNTZXJ2aWNlLmlzTG9nZ2VkJC5hc09ic2VydmFibGUoKS5waXBlKFxuICAgICAgbWFwKGlzTG9nZ2VkID0+IGlzTG9nZ2VkICYmIHRoaXMuaXNQZXJzb25hbFBhZ2UoKSlcbiAgICApO1xuICB9XG5cbiAgdG9nZ2xlTXlNZWFsRHJhd2VyKCk6IHZvaWQge1xuICAgIHRoaXMucmVjaXBlc1NlcnZpY2Uub3BlbkJhc2tldCh0aGlzLmV2ZW50VHJhY2UoKSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRQYWNrYWdlcygpOiBPYnNlcnZhYmxlPERvY3VtZW50Q29sbGVjdGlvbjxQYWNrYWdlPj4ge1xuICAgIHJldHVybiB0aGlzLnBhY2thZ2VTZXJ2aWNlLmNhdGVnb3JpZXNfZm9yKFt0aGlzLnN1cHBsaWVySWRdKS5waXBlKFxuICAgICAgc2tpcFdoaWxlKHBhY2thZ2VzID0+IHBhY2thZ2VzLmlzX2xvYWRpbmcpLFxuICAgICAgdGFwKChwYWNrYWdlczogRG9jdW1lbnRDb2xsZWN0aW9uPFBhY2thZ2U+KSA9PiB7XG4gICAgICAgIHRoaXMuaW5pdENhdGVnb3JpZXMocGFja2FnZXMpO1xuICAgICAgICB0aGlzLnNlbGVjdENhdGVnb3J5RnJvbVVybCgpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGluaXRDYXRlZ29yaWVzKHBhY2thZ2VzOiBEb2N1bWVudENvbGxlY3Rpb248UGFja2FnZT4pOiB2b2lkIHtcbiAgICB0aGlzLmNhdGVnb3JpZXMgPSBwYWNrYWdlcy5kYXRhLm1hcChjYXRlZ29yeVBhY2thZ2UgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiBjYXRlZ29yeVBhY2thZ2UudGl0bGUudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXpBLVowLTkgLV0vLCAnJykucmVwbGFjZSgvXFxzL2csICctJyksXG4gICAgICAgIHRpdGxlOiBjYXRlZ29yeVBhY2thZ2UudGl0bGUsXG4gICAgICAgIHN1YnRpdGxlOiBjYXRlZ29yeVBhY2thZ2Uuc3VidGl0bGUsXG4gICAgICAgIGZpbHRlcnM6IHsgYWRkaXRpb25hbEZpbHRlcnM6IHsgZmlsdGVyczogeyBwYWNrYWdlczogY2F0ZWdvcnlQYWNrYWdlLmlkIH0sIHRpdGxlOiAnJyB9IH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdENhdGVnb3J5RnJvbVVybCgpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbXNBcnJheSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgaWYgKHBhcmFtc0FycmF5LmdldCgnY2F0YWxvZ0NhdGVnb3J5JykgPT09ICdmYXZvcml0ZXMnKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXRGYXZvcml0ZXNGaWx0ZXIoKTtcbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0ZWRDYXRlZ29yeSA9IHRoaXMuY2F0ZWdvcmllcy5maW5kKChjYXQpID0+IGNhdC5rZXkgPT09IHBhcmFtc0FycmF5LmdldCgnY2F0YWxvZ0NhdGVnb3J5JykpO1xuICAgIGlmIChzZWxlY3RlZENhdGVnb3J5KSB7XG4gICAgICByZXR1cm4gdGhpcy5jYXRlZ29yeVRpdGxlQ2xpY2tlZCh7IHRpdGxlOiBzZWxlY3RlZENhdGVnb3J5LnRpdGxlLCBmaWx0ZXJzOiBzZWxlY3RlZENhdGVnb3J5LmZpbHRlcnMuYWRkaXRpb25hbEZpbHRlcnMuZmlsdGVycyB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBTaG93IGZlZWRiYWNrIGJsb2NrIG9ubHkgaWYgdXNlciBpcyBsb2dnZWQgYW5kIHRoZSBjaGlsZHJlbiBwcmVmZXJlbmNlIGlzIHVua25vd25cbiAgcHJpdmF0ZSBhc3Nlc3NTaG93VXNlckZlZWRiYWNrKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy51c2Vyc1NlcnZpY2UuaXNMb2dnZWQkLFxuICAgICAgdGhpcy51c2Vyc1NlcnZpY2UucHJlZmVyZW5jZURlZmluZWQoJ2hhc19jaGlsZHJlbicpLFxuICAgICAgdGhpcy51c2Vyc1NlcnZpY2UucHJlZmVyZW5jZXNBY3RpdmF0ZWQkXG4gICAgXSkuc3Vic2NyaWJlKHJlc3VsdHMgPT4ge1xuICAgICAgY29uc3QgbG9nZ2VkID0gcmVzdWx0c1swXTtcbiAgICAgIGNvbnN0IHByZWZlcmVuY2VEZWZpbmVkID0gcmVzdWx0c1sxXTtcbiAgICAgIGNvbnN0IHByZWZlcmVuY2VzQWN0aXZhdGVkID0gcmVzdWx0c1syXTtcbiAgICAgIHRoaXMuc2hvd1VzZXJGZWVkYmFjayA9IGxvZ2dlZCAmJiAhcHJlZmVyZW5jZURlZmluZWQgJiYgcHJlZmVyZW5jZXNBY3RpdmF0ZWQ7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldERpcmVjdEFjY2Vzcyhyb3V0ZTogc3RyaW5nKXtcbiAgICBpZiAodGhpcy5pbml0aWFsUm91dGUgIT09ICcnKXtcbiAgICAgIHN3aXRjaCAodGhpcy5pbml0aWFsUm91dGUpe1xuICAgICAgICBjYXNlICdtZXMtcmVwYXMnOlxuICAgICAgICAgIHRoaXMudG9nZ2xlTXlNZWFsRHJhd2VyKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ21lcy1yZWNldHRlcy1wZXJzb25uZWxsZXMnOlxuICAgICAgICAgIHRoaXMuc2V0UGVyc29uYWxGaWx0ZXIoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncmVjZXR0ZXMtZmF2b3JpdGVzJzpcbiAgICAgICAgICB0aGlzLnNldEZhdm9yaXRlc0ZpbHRlcigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFVudXNlZCBmb3Igbm93Li4uXG4gIC8vIHNldFVzZXJQcmVmZXJlbmNlKHByZWYsIHN0YXRlKSB7XG4gIC8vICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gIC8vICAgICB0aGlzLnVzZXJzU2VydmljZS5zZXRQcmVmZXJlbmNlKHByZWYsIHN0YXRlKS5waXBlKFxuICAvLyAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5sb2FkUGFja2FnZXMoKSlcbiAgLy8gICAgICkuc3Vic2NyaWJlKClcbiAgLy8gICApO1xuICAvLyAgIHRoaXMuY2xvc2VNb2RhbCgpO1xuICAvLyB9XG5cbiAgLy8gcHJpdmF0ZSBjbG9zZU1vZGFsKCkge1xuICAvLyAgIHRoaXMuc2hvd1VzZXJGZWVkYmFjayA9ICF0aGlzLnNob3dVc2VyRmVlZGJhY2s7XG4gIC8vICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAvLyB9XG59XG4iLCI8ZGl2ICNtaWFtQ2F0YWxvZ1RvcEFuY2hvciBjbGFzcz1cIm1pYW0tY2F0YWxvZy1hbmNob3JcIj48L2Rpdj5cbjxkaXYgKm5nSWY9XCIhY3JlYXRpbmdSZWNpcGUgJiYgY2F0YWxvZ1NldHRpbmdIYXNMb2FkZWQgZWxzZSBjcmVhdGlvblBhZ2VcIiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dcIj5cbiAgPGRpdiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2NvbnRlbnRcIj5cbiAgICA8bmctbWlhbS1jYXRhbG9nLWhlYWRlciBcbiAgICAgIFtob21lXT1cImRpc3BsYXlIb21lUGFnZVwiXG4gICAgICBbc2VhcmNoVGVybV09XCJmaWx0ZXJzPy5zZWFyY2hcIlxuICAgICAgW2FkZGl0aW9uYWxGaWx0ZXJzVGl0bGVdPVwiZmlsdGVycz8uYWRkaXRpb25hbEZpbHRlcnM/LnRpdGxlXCJcbiAgICAgIFtob21lTGFiZWxdPVwiaG9tZUxhYmVsXCJcbiAgICAgIFtwaWN0dXJlVXJsXT1cImRpc3BsYXlIb21lUGFnZSgpID8gaGVhZGVyUGljdHVyZVVybCA6IG51bGxcIlxuICAgICAgW2NhdGFsb2dTZXR0aW5nXT1cImNhdGFsb2dTZXR0aW5nXCJcbiAgICAgIFtmYXZvcml0ZXNCdXR0b25IaWRkZW5dPVwiaXNGYXZvcml0ZXNQYWdlKClcIlxuICAgICAgW3BlcnNvbmFsQnV0dG9uSGlkZGVuXT1cIiEoY29udGV4dFNlcnZpY2UuZW5hYmxlUGVyc29uYWxSZWNpcGVzJCB8IGFzeW5jKVwiXG4gICAgICBbZmlsdGVyQmFkZ2VDb3VudF09XCJmaWx0ZXJzLnNlbGVjdGFibGVGaWx0ZXJzQ291bnQoKVwiXG4gICAgICAocmV0dXJuQnV0dG9uUHJlc3NlZCk9XCJyZXR1cm5Ub0hvbWVQYWdlKClcIlxuICAgICAgKGZpbHRlckJ1dHRvblByZXNzZWQpPVwib25GaWx0ZXJDb2xsYXBzZWQoKVwiXG4gICAgICAoc2VhcmNoU3RyaW5nQ2hhbmdlZCk9XCJ1cGRhdGVTZWFyY2goJGV2ZW50KVwiXG4gICAgICAocGVyc29uYWxCdXR0b25QcmVzc2VkKT1cInNldFBlcnNvbmFsRmlsdGVyKClcIlxuICAgICAgKGZhdm9yaXRlc0J1dHRvblByZXNzZWQpPVwic2V0RmF2b3JpdGVzRmlsdGVyKClcIj5cbiAgICA8L25nLW1pYW0tY2F0YWxvZy1oZWFkZXI+XG4gICAgPGRpdiAqbmdJZj1cInJlY2lwZUNvdW50ID4gMFwiIGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fY29udGVudF9fbXlNZWFsX19idXR0b25cIiAoY2xpY2spPVwidG9nZ2xlTXlNZWFsRHJhd2VyKClcIiA+XG4gICAgICA8bmctbWlhbS1pY29uIFtpY29uTmFtZV09XCJpY29uLkNhcnRcIiBwcmltYXJ5Q29sb3I9J3ZhcigtLW0tY29sb3Itd2hpdGUpJyBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX215TWVhbF9fZmlyc3RfX2ljb25cIiA+PC9uZy1taWFtLWljb24+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX215TWVhbF9fYnV0dG9uX190ZXh0XCI+XG4gICAgICAgIDxzcGFuPnt7cmVjaXBlQ291bnR9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gaTE4bj4gcmVwYXM8L3NwYW4+XG4gICAgICA8L3NwYW4+XG4gICAgICA8bmctbWlhbS1pY29uICBbaWNvbk5hbWVdPVwiaWNvbi5DaGV2cm9uRG93blwiIHByaW1hcnlDb2xvcj0ndmFyKC0tbS1jb2xvci13aGl0ZSknIGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fbXlNZWFsX19zZWNvbmRfX2ljb25cIj48L25nLW1pYW0taWNvbj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gVXNlciBmZWVkYmFjayBiYW5uZXIgKHVudXNlZCBmb3Igbm93IC8gbWF5YmUgcmVhY3RpdmF0ZWQgbGF0ZXIpIC0tPlxuICAgIDwhLS0gPGRpdiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2NvbnRlbnRfX3VzZXItZmVlZGJhY2tfX21vZGFsXCIgKm5nSWY9XCJzaG93VXNlckZlZWRiYWNrXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fY29udGVudF9fdXNlci1mZWVkYmFja1wiPlxuICAgICAgICA8bmctbWlhbS1pY29uIGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fY29udGVudF9fdXNlci1mZWVkYmFja19faWNvbi1jcm9zc1wiIChjbGljayk9XCJjbG9zZU1vZGFsKClcIiBbaWNvbk5hbWVdPVwiaWNvbi5Dcm9zc1wiIFt3aWR0aF09XCIzMFwiIFtoZWlnaHRdPVwiMzBcIiBwcmltYXJ5Q29sb3I9XCJub25lXCI+PC9uZy1taWFtLWljb24+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19jb250ZW50X191c2VyLWZlZWRiYWNrX190aXRsZVwiPlxuICAgICAgICAgICAgPHNwYW4+UG91ciBtaWV1eCB2b3VzIGNvbm5hw650cmU8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fY29udGVudF9fdXNlci1mZWVkYmFja19fcXVlc3Rpb25cIj5cbiAgICAgICAgICAgIDxzcGFuPkF2ZXotdm91cyBsJ2hhYml0dWRlIGRlIGN1aXNpbmVyIHBvdXIgb3UgYXZlYyBkZXMgZW5mYW50cyA/PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2NvbnRlbnRfX3VzZXItZmVlZGJhY2tfX2FjdGlvbnNcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibS1mZWVkYmFjay1idXR0b25cIiAoY2xpY2spPVwic2V0VXNlclByZWZlcmVuY2UoJ2hhc19jaGlsZHJlbicsIGZhbHNlKVwiPk5vbjwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtLWZlZWRiYWNrLWJ1dHRvblwiIChjbGljayk9XCJzZXRVc2VyUHJlZmVyZW5jZSgnaGFzX2NoaWxkcmVuJywgdHJ1ZSlcIj5PdWk8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gLS0+XG5cbiAgICA8IS0tIENhdGFsb2cgcGFnZSBjb250ZW50IHdoZW4gZmlsdGVycyBhcHBsaWVkIC0tPlxuICAgIDxkaXYgKm5nSWY9XCIhZGlzcGxheUhvbWVQYWdlKCkgZWxzZSBjYXRlZ29yaWVzQ29tcG9uZW50c1wiIGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fbGlzdFwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2NvbnRlbnRfX3RpdGxlXCI+XG4gICAgICAgIDxuZy1taWFtLWljb24gW2ljb25OYW1lXT1cImljb24uQXJyb3dEb3duXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgKGNsaWNrKT1cInJldHVyblRvSG9tZVBhZ2UoKVwiPjwvbmctbWlhbS1pY29uPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImlzU2VhcmNoUGFnZSgpXCIgaTE4bj5Wb3RyZSByZWNoZXJjaGUgOiA8L3NwYW4+PHNwYW4gKm5nSWY9XCJpc1NlYXJjaFBhZ2UoKVwiPnt7IGZpbHRlcnMuc2VhcmNoIH19PC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImlzRmF2b3JpdGVzUGFnZSgpXCIgaTE4bj5NZXMgaWTDqWVzIHJlcGFzPC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImlzUGVyc29uYWxQYWdlKClcIiBpMThuPk1vbiBjYXJuZXQgcGVyc288L3NwYW4+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaXNDYXRlZ29yeVBhZ2UoKVwiPnt7IGZpbHRlcnMuYWRkaXRpb25hbEZpbHRlcnMudGl0bGUgfX08L3NwYW4+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaXNEZWZhdWx0UGFnZSgpXCIgaTE4bj5Wb3RyZSBzw6lsZWN0aW9uPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fbGlzdF9fY3JlYXRlX19fYnV0dG9uXCIgKm5nSWY9XCJjYW5EaXNwbGF5Q3JlYXRpb25CdXR0b24oKSB8IGFzeW5jXCIgXG4gICAgICAoY2xpY2spPVwibWFuYWdlUmVjaXBlQWN0aW9uKHthY3Rpb246ICdDUkVBVEUnLCByZWNpcGU6IG51bGx9KVwiPlxuICAgICAgICA8bmctbWlhbS1pY29uIFtpY29uTmFtZV09XCJpY29uLlBsdXNcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiBwcmltYXJ5Q29sb3I9XCJ2YXIoLS1tLWNvbG9yLXByaW1hcnkpXCI+PC9uZy1taWFtLWljb24+XG4gICAgICAgIDxzcGFuIGkxOG4+QWpvdXRlciB1bmUgaWTDqWUgcmVwYXM8L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPG5nLW1pYW0tY2F0YWxvZy1saXN0XG4gICAgICAgIFtmaWx0ZXJzXT1cImZpbHRlcnNcIlxuICAgICAgICBbb3JpZ2luVHJhY2VdPVwiZXZlbnRUcmFjZSgpXCJcbiAgICAgICAgW2Rpc3BsYXlQcmljaW5nXT1cImRpc3BsYXlQcmljaW5nXCJcbiAgICAgICAgKGZpbHRlclJlbW92ZWQpPVwicmVtb3ZlRmlsdGVyKCRldmVudClcIlxuICAgICAgICAocmVjaXBlQWN0aW9uVHJpZ2dlcmVkKT1cIm1hbmFnZVJlY2lwZUFjdGlvbigkZXZlbnQpXCI+XG4gICAgICA8L25nLW1pYW0tY2F0YWxvZy1saXN0PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8bmctbWlhbS1yZWNpcGUtZmlsdGVyc1xuICAgIFtmaWx0ZXJzXT1cImZpbHRlcnNcIlxuICAgIFtpc0ZpbHRlckNvbGxhcHNlZF09XCJpc0ZpbHRlckNvbGxhcHNlZFwiXG4gICAgW2ZpbHRlclRvUmVtb3ZlXT1cImZpbHRlclRvUmVtb3ZlXCJcbiAgICBbcG9zaXRpb25dPVwiZmlsdGVyc1Bvc2l0aW9uXCJcbiAgICBbb3JpZ2luVHJhY2VdPVwiZXZlbnRUcmFjZSgpXCJcbiAgICAoZmlsdGVyQ2hhbmdlZCk9XCJ1cGRhdGVGaWx0ZXJzKCRldmVudClcIlxuICAgIChmaWx0ZXJDb2xsYXBzZWQpPVwib25GaWx0ZXJDb2xsYXBzZWQoKVwiXG4gICAgKHByZWZlcmVuY2VzQ2hhbmdlZCk9XCJyZWxvYWRQYWNrYWdlcygpXCJcbiAgPlxuICA8L25nLW1pYW0tcmVjaXBlLWZpbHRlcnM+XG4gIDwhLS0gQ2F0YWxvZyBob21lIHBhZ2UgY29udGVudCAtLT5cbiAgPG5nLXRlbXBsYXRlICNjYXRlZ29yaWVzQ29tcG9uZW50cz5cbiAgICA8ZGl2ICpuZ0lmPVwiY2F0ZWdvcmllcy5sZW5ndGggPiAwXCIgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19jYXRlZ29yaWVzXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjYXRlZ29yeSBvZiBjYXRlZ29yaWVzIGxldCBpID0gaW5kZXhcIiA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpICE9PSAwIGVsc2UgZmlyc3RDYXRlZ29yeVwiPlxuICAgICAgICAgIDxuZy1taWFtLWNhdGFsb2ctY2F0ZWdvcnkgXG4gICAgICAgICAgICBbdGl0bGVdPVwiY2F0ZWdvcnkudGl0bGVcIlxuICAgICAgICAgICAgW3N1YnRpdGxlXT1cImNhdGVnb3J5LnN1YnRpdGxlXCJcbiAgICAgICAgICAgIFtmaWx0ZXJzXT1cImNhdGVnb3J5LmZpbHRlcnNcIlxuICAgICAgICAgICAgW2Rpc3BsYXlQcmljaW5nXT1cImRpc3BsYXlQcmljaW5nXCJcbiAgICAgICAgICAgIFtvcmlnaW5UcmFjZV09XCJldmVudFRyYWNlKClcIlxuICAgICAgICAgICAgKGRpc3BsYXlMaXN0KT1cImNhdGVnb3J5VGl0bGVDbGlja2VkKCRldmVudClcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L25nLW1pYW0tY2F0YWxvZy1jYXRlZ29yeT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZmlyc3RDYXRlZ29yeT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fZmlyc3QtY2F0ZWdvcnlcIj5cbiAgICAgICAgICAgIDxuZy1taWFtLW1lYWxzLXBsYW5uZXItbGluayAqbmdJZj1cImNvbnRleHRTZXJ2aWNlLmVuYWJsZU1lYWxzUGxhbm5lciQgfCBhc3luY1wiPjwvbmctbWlhbS1tZWFscy1wbGFubmVyLWxpbms+XG4gICAgICAgICAgICA8bmctbWlhbS1jYXRhbG9nLWNhdGVnb3J5IFxuICAgICAgICAgICAgICBbdGl0bGVdPVwiY2F0ZWdvcnkudGl0bGVcIlxuICAgICAgICAgICAgICBbc3VidGl0bGVdPVwiY2F0ZWdvcnkuc3VidGl0bGVcIlxuICAgICAgICAgICAgICBbZmlsdGVyc109XCJjYXRlZ29yeS5maWx0ZXJzXCJcbiAgICAgICAgICAgICAgW2Rpc3BsYXlQcmljaW5nXT1cImRpc3BsYXlQcmljaW5nXCJcbiAgICAgICAgICAgICAgW29yaWdpblRyYWNlXT1cImV2ZW50VHJhY2UoKVwiXG4gICAgICAgICAgICAgIChkaXNwbGF5TGlzdCk9XCJjYXRlZ29yeVRpdGxlQ2xpY2tlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvbmctbWlhbS1jYXRhbG9nLWNhdGVnb3J5PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgIGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fZXhwbGFpbl9iYW5uZXJcIj5cbiAgICAgICAgICAgIDxuZy1taWFtLWV4cGxhaW4tYmFubmVyIFtjYXRhbG9nU2V0dGluZ109XCJjYXRhbG9nU2V0dGluZ1wiPjwvbmctbWlhbS1leHBsYWluLWJhbm5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjY3JlYXRpb25QYWdlPlxuICA8bmctbWlhbS1yZWNpcGUtc3RlcHBlclxuICAgICpuZ0lmPVwiY2F0YWxvZ1NldHRpbmdIYXNMb2FkZWRcIlxuICAgIFtyZWNpcGVUb1VwZGF0ZV09XCJyZWNpcGVUb1VwZGF0ZVwiXG4gICAgW29yaWdpblRyYWNlXT1cImV2ZW50VHJhY2UoKVwiXG4gICAgKHJlY2lwZUNoYW5nZSk9XCJsZWF2ZUNyZWF0ZVBhZ2UoKVwiXG4gICAgKGNhbmNlbGVkKT1cImxlYXZlQ3JlYXRlUGFnZSgpXCI+XG4gIDwvbmctbWlhbS1yZWNpcGUtc3RlcHBlcj5cbjwvbmctdGVtcGxhdGU+Il19