@bnsights/bbsf-controls 1.0.194-beta.9 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/fesm2022/bnsights-bbsf-controls.mjs +375 -345
- package/fesm2022/bnsights-bbsf-controls.mjs.map +1 -1
- package/lib/Shared/Models/DropdownOptions.d.ts +3 -0
- package/lib/Shared/Models/RepeaterOptions.d.ts +2 -0
- package/lib/controls/ConfirmationModal/ConfirmationModal.component.d.ts +0 -1
- package/lib/controls/MapAutoComplete/MapAutoComplete.component.d.ts +0 -1
- package/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.d.ts +1 -1
- package/lib/controls/Repeater/repeater/repeater.component.d.ts +7 -0
- package/lib/controls/Repeater/repeater-table/repeater-table.component.d.ts +7 -0
- package/lib/modules/bbsf-editors.module.d.ts +6 -7
- package/package.json +33 -36
- package/src/lib/assets/Style.scss +2 -0
- package/src/lib/assets/ace-builds/ace.js +1 -1
- package/src/lib/assets/ace-builds/mode-markdown.js +1 -1
- package/esm2022/bnsights-bbsf-controls.mjs +0 -5
- package/esm2022/lib/Shared/Components/app-base-component.mjs +0 -226
- package/esm2022/lib/Shared/Components/ng-tag-input.mjs +0 -336
- package/esm2022/lib/Shared/Directives/appPreventDoubleClick.directive.mjs +0 -39
- package/esm2022/lib/Shared/Directives/template-name.directive.mjs +0 -19
- package/esm2022/lib/Shared/Enums/CalendarView.mjs +0 -8
- package/esm2022/lib/Shared/Enums/ControlLayout.mjs +0 -6
- package/esm2022/lib/Shared/Enums/Countries.mjs +0 -247
- package/esm2022/lib/Shared/Enums/Enums.mjs +0 -36
- package/esm2022/lib/Shared/Enums/FileType.mjs +0 -29
- package/esm2022/lib/Shared/Enums/FilterType.mjs +0 -11
- package/esm2022/lib/Shared/Enums/FontSize.mjs +0 -7
- package/esm2022/lib/Shared/Enums/ForceDirection.mjs +0 -6
- package/esm2022/lib/Shared/Enums/IconPosition.mjs +0 -6
- package/esm2022/lib/Shared/Enums/ImageType.mjs +0 -10
- package/esm2022/lib/Shared/Enums/InputType.mjs +0 -10
- package/esm2022/lib/Shared/Enums/Insert.mjs +0 -9
- package/esm2022/lib/Shared/Enums/LanguageMode.mjs +0 -11
- package/esm2022/lib/Shared/Enums/LanguageValidation.mjs +0 -6
- package/esm2022/lib/Shared/Enums/Markdown.mjs +0 -20
- package/esm2022/lib/Shared/Enums/Misc.mjs +0 -7
- package/esm2022/lib/Shared/Enums/PagingActionMode.mjs +0 -6
- package/esm2022/lib/Shared/Enums/Para.mjs +0 -9
- package/esm2022/lib/Shared/Enums/PickerType.mjs +0 -7
- package/esm2022/lib/Shared/Enums/SelectMode.mjs +0 -6
- package/esm2022/lib/Shared/Enums/StartView.mjs +0 -7
- package/esm2022/lib/Shared/Enums/Style.mjs +0 -8
- package/esm2022/lib/Shared/Enums/StyleConfirmationMode.mjs +0 -7
- package/esm2022/lib/Shared/Enums/TagInputView.mjs +0 -7
- package/esm2022/lib/Shared/Enums/ToolbarButtons.mjs +0 -33
- package/esm2022/lib/Shared/Enums/map-enums.mjs +0 -15
- package/esm2022/lib/Shared/Enums/menu-list-enum.mjs +0 -6
- package/esm2022/lib/Shared/Models/Attribute.mjs +0 -3
- package/esm2022/lib/Shared/Models/AutocompleteDTO.mjs +0 -8
- package/esm2022/lib/Shared/Models/AutocompleteOptions.mjs +0 -39
- package/esm2022/lib/Shared/Models/CalendarDTO.mjs +0 -3
- package/esm2022/lib/Shared/Models/CalendarEventDTO.mjs +0 -3
- package/esm2022/lib/Shared/Models/CalendarOptions.mjs +0 -19
- package/esm2022/lib/Shared/Models/CancelDTO.mjs +0 -7
- package/esm2022/lib/Shared/Models/CaptchaStyle.mjs +0 -3
- package/esm2022/lib/Shared/Models/CheckBoxOptions.mjs +0 -11
- package/esm2022/lib/Shared/Models/ConfirmationModalOptions.mjs +0 -39
- package/esm2022/lib/Shared/Models/ControlOptionsBase.mjs +0 -17
- package/esm2022/lib/Shared/Models/CustomValidation.mjs +0 -14
- package/esm2022/lib/Shared/Models/DatePickerOptions.mjs +0 -40
- package/esm2022/lib/Shared/Models/DropdownListItem.mjs +0 -3
- package/esm2022/lib/Shared/Models/DropdownOptions.mjs +0 -38
- package/esm2022/lib/Shared/Models/EditPersonalImage.mjs +0 -7
- package/esm2022/lib/Shared/Models/EnglishArabicDTO.mjs +0 -10
- package/esm2022/lib/Shared/Models/FileDTO.mjs +0 -24
- package/esm2022/lib/Shared/Models/FileOptions.mjs +0 -15
- package/esm2022/lib/Shared/Models/FileUploadModel.mjs +0 -3
- package/esm2022/lib/Shared/Models/FileUploadOptions.mjs +0 -13
- package/esm2022/lib/Shared/Models/FilterItem.mjs +0 -8
- package/esm2022/lib/Shared/Models/FormOptions.mjs +0 -32
- package/esm2022/lib/Shared/Models/HtmlEditorOptions.mjs +0 -12
- package/esm2022/lib/Shared/Models/ImageUploadOptions.mjs +0 -14
- package/esm2022/lib/Shared/Models/MapAutoCompleteOptions.mjs +0 -12
- package/esm2022/lib/Shared/Models/MapAutocompleteDTO.mjs +0 -6
- package/esm2022/lib/Shared/Models/MarkdownEditorOptions.mjs +0 -24
- package/esm2022/lib/Shared/Models/MultiLingualHtmlEditorOptions.mjs +0 -9
- package/esm2022/lib/Shared/Models/MultiLingualTextAreaOptions.mjs +0 -9
- package/esm2022/lib/Shared/Models/MultiLingualTextBoxOptions.mjs +0 -17
- package/esm2022/lib/Shared/Models/MultilingualControlOptionsBase.mjs +0 -21
- package/esm2022/lib/Shared/Models/MultipleFileUploadModel.mjs +0 -9
- package/esm2022/lib/Shared/Models/PagingDTO.mjs +0 -13
- package/esm2022/lib/Shared/Models/PagingOptions.mjs +0 -49
- package/esm2022/lib/Shared/Models/PagingPayload.mjs +0 -3
- package/esm2022/lib/Shared/Models/PhoneOptions.mjs +0 -16
- package/esm2022/lib/Shared/Models/ProfileImageUploadOptions.mjs +0 -11
- package/esm2022/lib/Shared/Models/ProfilePictureDTO.mjs +0 -3
- package/esm2022/lib/Shared/Models/RadioButtonItem.mjs +0 -3
- package/esm2022/lib/Shared/Models/RadioButtonOptions.mjs +0 -7
- package/esm2022/lib/Shared/Models/RangeNumber.mjs +0 -3
- package/esm2022/lib/Shared/Models/Recaptcha.mjs +0 -6
- package/esm2022/lib/Shared/Models/RecaptchaOptions.mjs +0 -22
- package/esm2022/lib/Shared/Models/RepeaterField.mjs +0 -3
- package/esm2022/lib/Shared/Models/RepeaterOptions.mjs +0 -14
- package/esm2022/lib/Shared/Models/SaveDTO.mjs +0 -7
- package/esm2022/lib/Shared/Models/TagsInputDTO.mjs +0 -3
- package/esm2022/lib/Shared/Models/TagsInputOptions.mjs +0 -56
- package/esm2022/lib/Shared/Models/TextAreaOptions.mjs +0 -19
- package/esm2022/lib/Shared/Models/TextBoxOptions.mjs +0 -27
- package/esm2022/lib/Shared/Models/ToggleSlideOptions.mjs +0 -9
- package/esm2022/lib/Shared/Models/UploadPersonalImage.mjs +0 -7
- package/esm2022/lib/Shared/Models/bread-crumb.mjs +0 -8
- package/esm2022/lib/Shared/Models/control-filter-Item.mjs +0 -6
- package/esm2022/lib/Shared/Models/filter-options.mjs +0 -9
- package/esm2022/lib/Shared/Models/index.mjs +0 -58
- package/esm2022/lib/Shared/Models/page-header-options.mjs +0 -78
- package/esm2022/lib/Shared/Pipes/bbsf-date-time.pipe.mjs +0 -22
- package/esm2022/lib/Shared/Pipes/bbsf-date.pipe.mjs +0 -22
- package/esm2022/lib/Shared/config/environment.mjs +0 -12
- package/esm2022/lib/Shared/default_intl.mjs +0 -29
- package/esm2022/lib/Shared/services/ControlUtility.mjs +0 -162
- package/esm2022/lib/Shared/services/GlobalSettings.service.mjs +0 -30
- package/esm2022/lib/Shared/services/OnPagingFiltersChange.service.mjs +0 -24
- package/esm2022/lib/Shared/services/file-upload.service.mjs +0 -29
- package/esm2022/lib/Shared/services/index.mjs +0 -7
- package/esm2022/lib/Shared/services/render-component-service.service.mjs +0 -32
- package/esm2022/lib/Shared/services/validationErrorMassage.service.mjs +0 -125
- package/esm2022/lib/Shared/utils/date-formatter.mjs +0 -48
- package/esm2022/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.mjs +0 -299
- package/esm2022/lib/controls/Calendar/Calendar.component.mjs +0 -179
- package/esm2022/lib/controls/CheckBox/CheckBox.component.mjs +0 -121
- package/esm2022/lib/controls/ConfirmationModal/ConfirmationModal.component.mjs +0 -143
- package/esm2022/lib/controls/DateTimePicker/DateTimePicker.component.mjs +0 -240
- package/esm2022/lib/controls/DropdownList/DropdownList.component.mjs +0 -296
- package/esm2022/lib/controls/FileUpload/FileUpload.component.mjs +0 -741
- package/esm2022/lib/controls/Form/Form.component.mjs +0 -117
- package/esm2022/lib/controls/HtmlEditor/HtmlEditor.component.mjs +0 -185
- package/esm2022/lib/controls/ImageUpload/ImageUpload.component.mjs +0 -360
- package/esm2022/lib/controls/MapAutoComplete/MapAutoComplete.component.mjs +0 -502
- package/esm2022/lib/controls/MarkdownEditor/markdown-editor.component.mjs +0 -243
- package/esm2022/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.mjs +0 -456
- package/esm2022/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.mjs +0 -441
- package/esm2022/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.mjs +0 -500
- package/esm2022/lib/controls/Paging/JwPagination.component.mjs +0 -160
- package/esm2022/lib/controls/Paging/Paging.component.mjs +0 -626
- package/esm2022/lib/controls/Phone/Phone.component.mjs +0 -134
- package/esm2022/lib/controls/ProfileImageUploader/ProfileImageUploader.component.mjs +0 -390
- package/esm2022/lib/controls/RadioButton/RadioButton.component.mjs +0 -113
- package/esm2022/lib/controls/Recaptcha/Recaptcha.component.mjs +0 -134
- package/esm2022/lib/controls/Repeater/repeater/repeater.component.mjs +0 -135
- package/esm2022/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.mjs +0 -1291
- package/esm2022/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.mjs +0 -22
- package/esm2022/lib/controls/Repeater/repeater-table/repeater-table.component.mjs +0 -118
- package/esm2022/lib/controls/TagsInput/TagsInput.component.mjs +0 -308
- package/esm2022/lib/controls/TextArea/TextArea.component.mjs +0 -581
- package/esm2022/lib/controls/TextBox/TextBox.component.mjs +0 -357
- package/esm2022/lib/controls/Toggleslide/Toggleslide.component.mjs +0 -96
- package/esm2022/lib/controls/bbsf-controls.module.mjs +0 -92
- package/esm2022/lib/controls/page-header-component/page-header-component.component.mjs +0 -42
- package/esm2022/lib/modules/bbsf-core.module.mjs +0 -210
- package/esm2022/lib/modules/bbsf-datetime.module.mjs +0 -90
- package/esm2022/lib/modules/bbsf-dropdown.module.mjs +0 -57
- package/esm2022/lib/modules/bbsf-editors.module.mjs +0 -97
- package/esm2022/lib/modules/bbsf-forms-basic.module.mjs +0 -79
- package/esm2022/lib/modules/bbsf-multilingual.module.mjs +0 -60
- package/esm2022/lib/modules/bbsf-phone.module.mjs +0 -57
- package/esm2022/lib/modules/bbsf-specialized.module.mjs +0 -160
- package/esm2022/lib/modules/bbsf-uploads.module.mjs +0 -106
- package/esm2022/lib/modules/bbsf-utility.module.mjs +0 -103
- package/esm2022/public-api.mjs +0 -169
package/esm2022/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.mjs
DELETED
|
@@ -1,1291 +0,0 @@
|
|
|
1
|
-
import { Component, Input, ViewChild, ViewContainerRef, CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA } from '@angular/core';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
4
|
-
import { DataType } from '../../../Shared/Enums/Enums';
|
|
5
|
-
import { InputType } from '../../../Shared/Enums/InputType';
|
|
6
|
-
import { PickerType } from '../../../Shared/Enums/PickerType';
|
|
7
|
-
import { SelectMode } from '../../../Shared/Enums/SelectMode';
|
|
8
|
-
import { StartView } from '../../../Shared/Enums/StartView';
|
|
9
|
-
import { DatePickerOptions } from '../../../Shared/Models/DatePickerOptions';
|
|
10
|
-
import { DropdownOptions } from '../../../Shared/Models/DropdownOptions';
|
|
11
|
-
import { FileUploadOptions } from '../../../Shared/Models/FileUploadOptions';
|
|
12
|
-
import { HtmlEditorOptions } from '../../../Shared/Models/HtmlEditorOptions';
|
|
13
|
-
import { ImageUploadOptions } from '../../../Shared/Models/ImageUploadOptions';
|
|
14
|
-
import { MapAutoCompleteOptions } from '../../../Shared/Models/MapAutoCompleteOptions';
|
|
15
|
-
import { PhoneOptions } from '../../../Shared/Models/PhoneOptions';
|
|
16
|
-
import { RangeNumber } from '../../../Shared/Models/RangeNumber';
|
|
17
|
-
import { TextAreaOptions } from '../../../Shared/Models/TextAreaOptions';
|
|
18
|
-
import { TextBoxOptions } from '../../../Shared/Models/TextBoxOptions';
|
|
19
|
-
import { ToggleSlideOptions } from '../../../Shared/Models/ToggleSlideOptions';
|
|
20
|
-
import { DateInputComponent } from '../../DateTimePicker/DateTimePicker.component';
|
|
21
|
-
import { DropdownListComponent } from '../../DropdownList/DropdownList.component';
|
|
22
|
-
import { FileUploadComponent } from '../../FileUpload/FileUpload.component';
|
|
23
|
-
import { HtmlEditorComponent } from '../../HtmlEditor/HtmlEditor.component';
|
|
24
|
-
import { ImageUploaderComponent } from '../../ImageUpload/ImageUpload.component';
|
|
25
|
-
import { MapAutoCompleteComponent } from '../../MapAutoComplete/MapAutoComplete.component';
|
|
26
|
-
import { PhoneComponent } from '../../Phone/Phone.component';
|
|
27
|
-
import { TextAreaComponent } from '../../TextArea/TextArea.component';
|
|
28
|
-
import { TextboxComponent } from '../../TextBox/TextBox.component';
|
|
29
|
-
import { ToggleslideComponent } from '../../Toggleslide/Toggleslide.component';
|
|
30
|
-
import { CheckBoxOptions } from '../../../Shared/Models/CheckBoxOptions';
|
|
31
|
-
import { CheckBoxComponent } from '../../CheckBox/CheckBox.component';
|
|
32
|
-
import * as i0 from "@angular/core";
|
|
33
|
-
import * as i1 from "../../../Shared/services/render-component-service.service";
|
|
34
|
-
import * as i2 from "@angular/forms";
|
|
35
|
-
export class RepeaterFieldBuilderComponent {
|
|
36
|
-
constructor(renderComponentService, textControlHost) {
|
|
37
|
-
this.renderComponentService = renderComponentService;
|
|
38
|
-
this.textControlHost = textControlHost;
|
|
39
|
-
this.itemsValue = [];
|
|
40
|
-
this.itemValue = null;
|
|
41
|
-
}
|
|
42
|
-
ngOnInit() { }
|
|
43
|
-
ngAfterViewInit() {
|
|
44
|
-
setTimeout(() => {
|
|
45
|
-
if (this.itemsValue.length > 0)
|
|
46
|
-
this.itemValue = this.itemsValue[this.itemNumber];
|
|
47
|
-
if (this.itemValue) {
|
|
48
|
-
for (const key in this.itemValue) {
|
|
49
|
-
if (Object.prototype.hasOwnProperty.call(this.itemValue, key) &&
|
|
50
|
-
key == this.repeaterField.controlOptions.name) {
|
|
51
|
-
const element = this.itemValue[key];
|
|
52
|
-
this.value = element;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
this.item.clear();
|
|
57
|
-
switch (this.repeaterField?.controlType) {
|
|
58
|
-
//#region TextBox
|
|
59
|
-
case DataType.Text:
|
|
60
|
-
let Text = new TextBoxOptions();
|
|
61
|
-
Text.name =
|
|
62
|
-
this.repeaterField.controlOptions.name +
|
|
63
|
-
'.' +
|
|
64
|
-
this.itemNumber.toString() +
|
|
65
|
-
'.' +
|
|
66
|
-
this.controlNumber.toString();
|
|
67
|
-
Text.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
68
|
-
Text.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
69
|
-
Text.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
70
|
-
Text.viewType = this.repeaterField.controlOptions.viewType;
|
|
71
|
-
Text.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
72
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
73
|
-
: '';
|
|
74
|
-
Text.type = InputType.Text;
|
|
75
|
-
Text.languageValidation = this.repeaterField.controlOptions.languageValidation;
|
|
76
|
-
if (this.repeaterField.controlOptions.maxLength)
|
|
77
|
-
Text.maxLength = this.repeaterField.controlOptions.maxLength;
|
|
78
|
-
if (this.repeaterField.controlOptions.minLength)
|
|
79
|
-
Text.minLength = this.repeaterField.controlOptions.minLength;
|
|
80
|
-
Text.value = this.value;
|
|
81
|
-
Text.isReadonly = this.repeaterField.controlOptions.isReadonly;
|
|
82
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
83
|
-
Text.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
84
|
-
}
|
|
85
|
-
this.renderComponentService.renderDynamicComponent(this.item, TextboxComponent, this.group, Text);
|
|
86
|
-
break;
|
|
87
|
-
case DataType.Name:
|
|
88
|
-
let name = new TextBoxOptions();
|
|
89
|
-
name.name =
|
|
90
|
-
this.repeaterField.controlOptions.name +
|
|
91
|
-
'.' +
|
|
92
|
-
this.itemNumber.toString() +
|
|
93
|
-
'.' +
|
|
94
|
-
this.controlNumber.toString();
|
|
95
|
-
name.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
96
|
-
name.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
97
|
-
name.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
98
|
-
name.viewType = this.repeaterField.controlOptions.viewType;
|
|
99
|
-
name.languageValidation = this.repeaterField.controlOptions.languageValidation;
|
|
100
|
-
name.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
101
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
102
|
-
: '';
|
|
103
|
-
if (this.repeaterField.controlOptions.maxLength)
|
|
104
|
-
name.maxLength = this.repeaterField.controlOptions.maxLength;
|
|
105
|
-
if (this.repeaterField.controlOptions.minLength)
|
|
106
|
-
name.minLength = this.repeaterField.controlOptions.minLength;
|
|
107
|
-
name.type = InputType.Text;
|
|
108
|
-
name.value = this.value;
|
|
109
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
110
|
-
name.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
111
|
-
}
|
|
112
|
-
this.renderComponentService.renderDynamicComponent(this.item, TextboxComponent, this.group, name);
|
|
113
|
-
break;
|
|
114
|
-
case DataType.Email:
|
|
115
|
-
let email = new TextBoxOptions();
|
|
116
|
-
email.name =
|
|
117
|
-
this.repeaterField.controlOptions.name +
|
|
118
|
-
'.' +
|
|
119
|
-
this.itemNumber.toString() +
|
|
120
|
-
'.' +
|
|
121
|
-
this.controlNumber.toString();
|
|
122
|
-
email.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
123
|
-
email.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
124
|
-
email.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
125
|
-
email.viewType = this.repeaterField.controlOptions.viewType;
|
|
126
|
-
email.languageValidation = this.repeaterField.controlOptions.languageValidation;
|
|
127
|
-
email.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
128
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
129
|
-
: '';
|
|
130
|
-
email.type = InputType.Email;
|
|
131
|
-
email.value = this.value;
|
|
132
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
133
|
-
email.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
134
|
-
}
|
|
135
|
-
this.renderComponentService.renderDynamicComponent(this.item, TextboxComponent, this.group, email);
|
|
136
|
-
break;
|
|
137
|
-
case DataType.Number:
|
|
138
|
-
let number = new TextBoxOptions();
|
|
139
|
-
number.name =
|
|
140
|
-
this.repeaterField.controlOptions.name +
|
|
141
|
-
'.' +
|
|
142
|
-
this.itemNumber.toString() +
|
|
143
|
-
'.' +
|
|
144
|
-
this.controlNumber.toString();
|
|
145
|
-
number.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
146
|
-
number.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
147
|
-
number.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
148
|
-
number.viewType = this.repeaterField.controlOptions.viewType;
|
|
149
|
-
number.languageValidation = this.repeaterField.controlOptions.languageValidation;
|
|
150
|
-
number.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
151
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
152
|
-
: '';
|
|
153
|
-
number.type = InputType.Number;
|
|
154
|
-
let rangeNumber = new RangeNumber();
|
|
155
|
-
if (this.repeaterField.controlOptions.numberRange) {
|
|
156
|
-
rangeNumber.to = this.repeaterField.controlOptions.numberRange.to;
|
|
157
|
-
rangeNumber.from = this.repeaterField.controlOptions.numberRange.from;
|
|
158
|
-
}
|
|
159
|
-
number.numberRange = rangeNumber;
|
|
160
|
-
number.value = this.value;
|
|
161
|
-
number.isReadonly = this.repeaterField.controlOptions.isReadonly;
|
|
162
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
163
|
-
number.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
164
|
-
}
|
|
165
|
-
this.renderComponentService.renderDynamicComponent(this.item, TextboxComponent, this.group, number);
|
|
166
|
-
break;
|
|
167
|
-
case DataType.URL:
|
|
168
|
-
let url = new TextBoxOptions();
|
|
169
|
-
url.name = `${this.repeaterField.controlOptions.name}.${this.itemNumber}.${this.controlNumber}`;
|
|
170
|
-
url.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
171
|
-
url.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
172
|
-
url.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
173
|
-
url.viewType = this.repeaterField.controlOptions.viewType;
|
|
174
|
-
url.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : '';
|
|
175
|
-
url.type = InputType.URL;
|
|
176
|
-
url.value = this.value;
|
|
177
|
-
this.renderComponentService.renderDynamicComponent(this.item, TextboxComponent, this.group, url);
|
|
178
|
-
break;
|
|
179
|
-
//#endregion
|
|
180
|
-
//#region DateTime
|
|
181
|
-
case DataType.Date:
|
|
182
|
-
let date = new DatePickerOptions();
|
|
183
|
-
date.name =
|
|
184
|
-
this.repeaterField.controlOptions.name +
|
|
185
|
-
'.' +
|
|
186
|
-
this.itemNumber.toString() +
|
|
187
|
-
'.' +
|
|
188
|
-
this.controlNumber.toString();
|
|
189
|
-
date.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
190
|
-
date.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
191
|
-
date.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
192
|
-
date.viewType = this.repeaterField.controlOptions.viewType;
|
|
193
|
-
date.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
194
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
195
|
-
: '';
|
|
196
|
-
date.pickerType = PickerType.Calendar;
|
|
197
|
-
date.selectMode = SelectMode.Single;
|
|
198
|
-
date.startView = StartView.Month;
|
|
199
|
-
date.value = this.value;
|
|
200
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
201
|
-
date.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
202
|
-
}
|
|
203
|
-
this.renderComponentService.renderDynamicComponent(this.item, DateInputComponent, this.group, date);
|
|
204
|
-
break;
|
|
205
|
-
case DataType.DateTime:
|
|
206
|
-
let dateTime = new DatePickerOptions();
|
|
207
|
-
dateTime.name =
|
|
208
|
-
this.repeaterField.controlOptions.name +
|
|
209
|
-
'.' +
|
|
210
|
-
this.itemNumber.toString() +
|
|
211
|
-
'.' +
|
|
212
|
-
this.controlNumber.toString();
|
|
213
|
-
dateTime.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
214
|
-
dateTime.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
215
|
-
dateTime.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
216
|
-
dateTime.viewType = this.repeaterField.controlOptions.viewType;
|
|
217
|
-
dateTime.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
218
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
219
|
-
: '';
|
|
220
|
-
dateTime.pickerType = PickerType.Both;
|
|
221
|
-
dateTime.selectMode = SelectMode.Single;
|
|
222
|
-
dateTime.startView = StartView.Month;
|
|
223
|
-
dateTime.value = this.value;
|
|
224
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
225
|
-
dateTime.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
226
|
-
}
|
|
227
|
-
this.renderComponentService.renderDynamicComponent(this.item, DateInputComponent, this.group, dateTime);
|
|
228
|
-
break;
|
|
229
|
-
case DataType.Time:
|
|
230
|
-
let time = new DatePickerOptions();
|
|
231
|
-
time.name =
|
|
232
|
-
this.repeaterField.controlOptions.name +
|
|
233
|
-
'.' +
|
|
234
|
-
this.itemNumber.toString() +
|
|
235
|
-
'.' +
|
|
236
|
-
this.controlNumber.toString();
|
|
237
|
-
time.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
238
|
-
time.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
239
|
-
time.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
240
|
-
time.viewType = this.repeaterField.controlOptions.viewType;
|
|
241
|
-
time.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
242
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
243
|
-
: '';
|
|
244
|
-
time.pickerType = PickerType.Timer;
|
|
245
|
-
time.selectMode = SelectMode.Single;
|
|
246
|
-
time.startView = StartView.Month;
|
|
247
|
-
time.value = this.value;
|
|
248
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
249
|
-
time.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
250
|
-
}
|
|
251
|
-
this.renderComponentService.renderDynamicComponent(this.item, DateInputComponent, this.group, time);
|
|
252
|
-
break;
|
|
253
|
-
//#endregion
|
|
254
|
-
//#region Dropdown
|
|
255
|
-
case DataType.SingleSelect:
|
|
256
|
-
let singleSelect = new DropdownOptions();
|
|
257
|
-
singleSelect.name =
|
|
258
|
-
this.repeaterField.controlOptions.name +
|
|
259
|
-
'.' +
|
|
260
|
-
this.itemNumber.toString() +
|
|
261
|
-
'.' +
|
|
262
|
-
this.controlNumber.toString();
|
|
263
|
-
singleSelect.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
264
|
-
singleSelect.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
265
|
-
singleSelect.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
266
|
-
singleSelect.viewType = this.repeaterField.controlOptions.viewType;
|
|
267
|
-
singleSelect.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
268
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
269
|
-
: '';
|
|
270
|
-
singleSelect.dataSource = this.repeaterField.controlOptions.dataSource;
|
|
271
|
-
singleSelect.singleSelection = true;
|
|
272
|
-
singleSelect.showCheckbox = false;
|
|
273
|
-
singleSelect.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
|
|
274
|
-
singleSelect.selectedItems = this.value;
|
|
275
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
276
|
-
singleSelect.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
277
|
-
}
|
|
278
|
-
this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, singleSelect);
|
|
279
|
-
break;
|
|
280
|
-
case DataType.MulipleSelect:
|
|
281
|
-
let mulipleSelect = new DropdownOptions();
|
|
282
|
-
mulipleSelect.name =
|
|
283
|
-
this.repeaterField.controlOptions.name +
|
|
284
|
-
'.' +
|
|
285
|
-
this.itemNumber.toString() +
|
|
286
|
-
'.' +
|
|
287
|
-
this.controlNumber.toString();
|
|
288
|
-
mulipleSelect.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
289
|
-
mulipleSelect.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
290
|
-
mulipleSelect.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
291
|
-
mulipleSelect.viewType = this.repeaterField.controlOptions.viewType;
|
|
292
|
-
mulipleSelect.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
293
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
294
|
-
: '';
|
|
295
|
-
mulipleSelect.dataSource = this.repeaterField.controlOptions.dataSource;
|
|
296
|
-
mulipleSelect.singleSelection = false;
|
|
297
|
-
mulipleSelect.showCheckbox = false;
|
|
298
|
-
mulipleSelect.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
|
|
299
|
-
mulipleSelect.selectedItems = this.value;
|
|
300
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
301
|
-
mulipleSelect.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
302
|
-
}
|
|
303
|
-
this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, mulipleSelect);
|
|
304
|
-
break;
|
|
305
|
-
case DataType.Goal:
|
|
306
|
-
let goal = new DropdownOptions();
|
|
307
|
-
goal.name =
|
|
308
|
-
this.repeaterField.controlOptions.name +
|
|
309
|
-
'.' +
|
|
310
|
-
this.itemNumber.toString() +
|
|
311
|
-
'.' +
|
|
312
|
-
this.controlNumber.toString();
|
|
313
|
-
goal.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
314
|
-
goal.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
315
|
-
goal.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
316
|
-
goal.viewType = this.repeaterField.controlOptions.viewType;
|
|
317
|
-
goal.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
318
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
319
|
-
: '';
|
|
320
|
-
goal.dataSource = this.repeaterField.controlOptions.dataSource;
|
|
321
|
-
goal.singleSelection = !this.repeaterField.controlOptions.isMultiple;
|
|
322
|
-
goal.showCheckbox = false;
|
|
323
|
-
goal.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
|
|
324
|
-
goal.selectedItems = this.value;
|
|
325
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
326
|
-
goal.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
327
|
-
}
|
|
328
|
-
this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, goal);
|
|
329
|
-
break;
|
|
330
|
-
case DataType.Challenge:
|
|
331
|
-
let challenge = new DropdownOptions();
|
|
332
|
-
challenge.name =
|
|
333
|
-
this.repeaterField.controlOptions.name +
|
|
334
|
-
'.' +
|
|
335
|
-
this.itemNumber.toString() +
|
|
336
|
-
'.' +
|
|
337
|
-
this.controlNumber.toString();
|
|
338
|
-
challenge.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
339
|
-
challenge.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
340
|
-
challenge.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
341
|
-
challenge.viewType = this.repeaterField.controlOptions.viewType;
|
|
342
|
-
challenge.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
343
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
344
|
-
: '';
|
|
345
|
-
challenge.dataSource = this.repeaterField.controlOptions.dataSource;
|
|
346
|
-
challenge.dataSource = this.repeaterField.controlOptions.dataSource;
|
|
347
|
-
challenge.singleSelection = !this.repeaterField.controlOptions.isMultiple;
|
|
348
|
-
challenge.showCheckbox = false;
|
|
349
|
-
challenge.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
|
|
350
|
-
challenge.selectedItems = this.value;
|
|
351
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
352
|
-
challenge.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
353
|
-
}
|
|
354
|
-
this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, challenge);
|
|
355
|
-
break;
|
|
356
|
-
case DataType.InnovationLab:
|
|
357
|
-
let innovationLab = new DropdownOptions();
|
|
358
|
-
innovationLab.name =
|
|
359
|
-
this.repeaterField.controlOptions.name +
|
|
360
|
-
'.' +
|
|
361
|
-
this.itemNumber.toString() +
|
|
362
|
-
'.' +
|
|
363
|
-
this.controlNumber.toString();
|
|
364
|
-
innovationLab.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
365
|
-
innovationLab.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
366
|
-
innovationLab.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
367
|
-
innovationLab.viewType = this.repeaterField.controlOptions.viewType;
|
|
368
|
-
innovationLab.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
369
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
370
|
-
: '';
|
|
371
|
-
innovationLab.dataSource = this.repeaterField.controlOptions.dataSource;
|
|
372
|
-
innovationLab.singleSelection = !this.repeaterField.controlOptions.isMultiple;
|
|
373
|
-
innovationLab.showCheckbox = false;
|
|
374
|
-
innovationLab.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
|
|
375
|
-
innovationLab.selectedItems = this.value;
|
|
376
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
377
|
-
innovationLab.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
378
|
-
}
|
|
379
|
-
this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, innovationLab);
|
|
380
|
-
break;
|
|
381
|
-
case DataType.Country:
|
|
382
|
-
let country = new DropdownOptions();
|
|
383
|
-
country.name =
|
|
384
|
-
this.repeaterField.controlOptions.name +
|
|
385
|
-
'.' +
|
|
386
|
-
this.itemNumber.toString() +
|
|
387
|
-
'.' +
|
|
388
|
-
this.controlNumber.toString();
|
|
389
|
-
country.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
390
|
-
country.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
391
|
-
country.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
392
|
-
country.viewType = this.repeaterField.controlOptions.viewType;
|
|
393
|
-
country.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
394
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
395
|
-
: '';
|
|
396
|
-
country.dataSource = this.repeaterField.controlOptions.dataSource;
|
|
397
|
-
country.singleSelection = !this.repeaterField.controlOptions.isMultiple;
|
|
398
|
-
country.showCheckbox = false;
|
|
399
|
-
country.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
|
|
400
|
-
country.selectedItems = this.value;
|
|
401
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
402
|
-
country.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
403
|
-
}
|
|
404
|
-
this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, country);
|
|
405
|
-
break;
|
|
406
|
-
//#endregion
|
|
407
|
-
//#region FileUpload
|
|
408
|
-
case DataType.File:
|
|
409
|
-
let file = new FileUploadOptions();
|
|
410
|
-
file.name =
|
|
411
|
-
this.repeaterField.controlOptions.name +
|
|
412
|
-
'.' +
|
|
413
|
-
this.itemNumber.toString() +
|
|
414
|
-
'.' +
|
|
415
|
-
this.controlNumber.toString();
|
|
416
|
-
file.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
417
|
-
file.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
418
|
-
file.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
419
|
-
file.viewType = this.repeaterField.controlOptions.viewType;
|
|
420
|
-
file.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
421
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
422
|
-
: '';
|
|
423
|
-
file.fileMaxSizeInMB = this.repeaterField.controlOptions.maxFileSizeInMB;
|
|
424
|
-
file.value = this.value;
|
|
425
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
426
|
-
file.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
427
|
-
}
|
|
428
|
-
this.renderComponentService.renderDynamicComponent(this.item, FileUploadComponent, this.group, file);
|
|
429
|
-
break;
|
|
430
|
-
case DataType.MultiFile:
|
|
431
|
-
let multiFile = new FileUploadOptions();
|
|
432
|
-
file.name =
|
|
433
|
-
this.repeaterField.controlOptions.name +
|
|
434
|
-
'.' +
|
|
435
|
-
this.itemNumber.toString() +
|
|
436
|
-
'.' +
|
|
437
|
-
this.controlNumber.toString();
|
|
438
|
-
file.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
439
|
-
file.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
440
|
-
file.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
441
|
-
file.viewType = this.repeaterField.controlOptions.viewType;
|
|
442
|
-
file.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
443
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
444
|
-
: '';
|
|
445
|
-
multiFile.maxSizeForAllFilesInMB = this.repeaterField.controlOptions.maxFileSizeInMB;
|
|
446
|
-
multiFile.maxNoOfFiles = this.repeaterField.controlOptions.maxFileCount;
|
|
447
|
-
multiFile.isMultipleFile = true;
|
|
448
|
-
multiFile.value = this.value;
|
|
449
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
450
|
-
multiFile.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
451
|
-
}
|
|
452
|
-
this.renderComponentService.renderDynamicComponent(this.item, FileUploadComponent, this.group, multiFile);
|
|
453
|
-
break;
|
|
454
|
-
//#endregion
|
|
455
|
-
//#region ImageUpload
|
|
456
|
-
case DataType.Image:
|
|
457
|
-
let image = new ImageUploadOptions();
|
|
458
|
-
image.name =
|
|
459
|
-
this.repeaterField.controlOptions.name +
|
|
460
|
-
'.' +
|
|
461
|
-
this.itemNumber.toString() +
|
|
462
|
-
'.' +
|
|
463
|
-
this.controlNumber.toString();
|
|
464
|
-
image.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
465
|
-
image.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
466
|
-
image.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
467
|
-
image.viewType = this.repeaterField.controlOptions.viewType;
|
|
468
|
-
image.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
469
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
470
|
-
: '';
|
|
471
|
-
if (this.repeaterField.controlOptions.maxFileSizeInMB)
|
|
472
|
-
image.fileMaxSizeInMB = this.repeaterField.controlOptions.maxFileSizeInMB;
|
|
473
|
-
image.value = this.value;
|
|
474
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
475
|
-
image.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
476
|
-
}
|
|
477
|
-
this.renderComponentService.renderDynamicComponent(this.item, ImageUploaderComponent, this.group, image);
|
|
478
|
-
break;
|
|
479
|
-
case DataType.CoverPhoto:
|
|
480
|
-
let coverPhoto = new ImageUploadOptions();
|
|
481
|
-
coverPhoto.name =
|
|
482
|
-
this.repeaterField.controlOptions.name +
|
|
483
|
-
'.' +
|
|
484
|
-
this.itemNumber.toString() +
|
|
485
|
-
'.' +
|
|
486
|
-
this.controlNumber.toString();
|
|
487
|
-
coverPhoto.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
488
|
-
coverPhoto.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
489
|
-
coverPhoto.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
490
|
-
coverPhoto.viewType = this.repeaterField.controlOptions.viewType;
|
|
491
|
-
coverPhoto.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
492
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
493
|
-
: '';
|
|
494
|
-
if (this.repeaterField.controlOptions.maxFileSizeInMB)
|
|
495
|
-
coverPhoto.fileMaxSizeInMB = this.repeaterField.controlOptions.maxFileSizeInMB;
|
|
496
|
-
coverPhoto.value = this.value;
|
|
497
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
498
|
-
coverPhoto.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
499
|
-
}
|
|
500
|
-
this.renderComponentService.renderDynamicComponent(this.item, ImageUploaderComponent, this.group, coverPhoto);
|
|
501
|
-
break;
|
|
502
|
-
//#endregion
|
|
503
|
-
//#region Mobile
|
|
504
|
-
case DataType.Mobile:
|
|
505
|
-
let mobile = new PhoneOptions();
|
|
506
|
-
mobile.name =
|
|
507
|
-
this.repeaterField.controlOptions.name +
|
|
508
|
-
'.' +
|
|
509
|
-
this.itemNumber.toString() +
|
|
510
|
-
'.' +
|
|
511
|
-
this.controlNumber.toString();
|
|
512
|
-
mobile.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
513
|
-
mobile.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
514
|
-
mobile.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
515
|
-
mobile.viewType = this.repeaterField.controlOptions.viewType;
|
|
516
|
-
mobile.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
517
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
518
|
-
: '';
|
|
519
|
-
mobile.allowSearch = true;
|
|
520
|
-
mobile.phoneValidation = true;
|
|
521
|
-
mobile.selectFirstCountry = true;
|
|
522
|
-
mobile.enablePlaceholder = true;
|
|
523
|
-
mobile.value = this.value;
|
|
524
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
525
|
-
mobile.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
526
|
-
}
|
|
527
|
-
this.renderComponentService.renderDynamicComponent(this.item, PhoneComponent, this.group, mobile);
|
|
528
|
-
break;
|
|
529
|
-
//#endregion
|
|
530
|
-
//#region MultilineText
|
|
531
|
-
case DataType.MultilineText:
|
|
532
|
-
let multilineText = new TextAreaOptions();
|
|
533
|
-
multilineText.name =
|
|
534
|
-
this.repeaterField.controlOptions.name +
|
|
535
|
-
'.' +
|
|
536
|
-
this.itemNumber.toString() +
|
|
537
|
-
'.' +
|
|
538
|
-
this.controlNumber.toString();
|
|
539
|
-
multilineText.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
540
|
-
multilineText.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
541
|
-
multilineText.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
542
|
-
multilineText.viewType = this.repeaterField.controlOptions.viewType;
|
|
543
|
-
multilineText.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
544
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
545
|
-
: '';
|
|
546
|
-
if (this.repeaterField.controlOptions.maxLength)
|
|
547
|
-
multilineText.maxLength = this.repeaterField.controlOptions.maxLength;
|
|
548
|
-
if (this.repeaterField.controlOptions.minLength)
|
|
549
|
-
multilineText.minLength = this.repeaterField.controlOptions.minLength;
|
|
550
|
-
multilineText.rows = this.repeaterField.controlOptions.rows;
|
|
551
|
-
multilineText.forceDirection = this.repeaterField.controlOptions.forceDirection;
|
|
552
|
-
multilineText.value = this.value;
|
|
553
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
554
|
-
multilineText.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
555
|
-
}
|
|
556
|
-
this.renderComponentService.renderDynamicComponent(this.item, TextAreaComponent, this.group, multilineText);
|
|
557
|
-
break;
|
|
558
|
-
//#endregion
|
|
559
|
-
//#region HTML
|
|
560
|
-
case DataType.HTML:
|
|
561
|
-
let html = new HtmlEditorOptions();
|
|
562
|
-
html.name =
|
|
563
|
-
this.repeaterField.controlOptions.name +
|
|
564
|
-
'.' +
|
|
565
|
-
this.itemNumber.toString() +
|
|
566
|
-
'.' +
|
|
567
|
-
this.controlNumber.toString();
|
|
568
|
-
html.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
569
|
-
html.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
570
|
-
html.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
571
|
-
html.viewType = this.repeaterField.controlOptions.viewType;
|
|
572
|
-
html.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
573
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
574
|
-
: '';
|
|
575
|
-
if (this.repeaterField.controlOptions.maxLength)
|
|
576
|
-
html.maxLength = this.repeaterField.controlOptions.maxLength;
|
|
577
|
-
if (this.repeaterField.controlOptions.minLength)
|
|
578
|
-
html.minLength = this.repeaterField.controlOptions.minLength;
|
|
579
|
-
html.height = this.repeaterField.controlOptions.rows;
|
|
580
|
-
html.forceDirection = this.repeaterField.controlOptions.forceDirection;
|
|
581
|
-
html.value = this.value;
|
|
582
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
583
|
-
html.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
584
|
-
}
|
|
585
|
-
this.renderComponentService.renderDynamicComponent(this.item, HtmlEditorComponent, this.group, html);
|
|
586
|
-
break;
|
|
587
|
-
//#endregion
|
|
588
|
-
//#region Boolean
|
|
589
|
-
case DataType.Boolean:
|
|
590
|
-
let boolean = new ToggleSlideOptions();
|
|
591
|
-
boolean.name =
|
|
592
|
-
this.repeaterField.controlOptions.name +
|
|
593
|
-
'.' +
|
|
594
|
-
this.itemNumber.toString() +
|
|
595
|
-
'.' +
|
|
596
|
-
this.controlNumber.toString();
|
|
597
|
-
boolean.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
598
|
-
boolean.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
599
|
-
boolean.viewType = this.repeaterField.controlOptions.viewType;
|
|
600
|
-
boolean.value = this.value;
|
|
601
|
-
boolean.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
602
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
603
|
-
: '';
|
|
604
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
605
|
-
boolean.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
606
|
-
}
|
|
607
|
-
this.renderComponentService.renderDynamicComponent(this.item, ToggleslideComponent, this.group, boolean);
|
|
608
|
-
break;
|
|
609
|
-
//#endregion
|
|
610
|
-
//#region Location
|
|
611
|
-
case DataType.Location:
|
|
612
|
-
let location = new MapAutoCompleteOptions();
|
|
613
|
-
location.name =
|
|
614
|
-
this.repeaterField.controlOptions.name +
|
|
615
|
-
'.' +
|
|
616
|
-
this.itemNumber.toString() +
|
|
617
|
-
'.' +
|
|
618
|
-
this.controlNumber.toString();
|
|
619
|
-
location.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
620
|
-
location.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
621
|
-
location.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
622
|
-
location.viewType = this.repeaterField.controlOptions.viewType;
|
|
623
|
-
location.value = this.value;
|
|
624
|
-
location.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
625
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
626
|
-
: '';
|
|
627
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
628
|
-
location.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
629
|
-
}
|
|
630
|
-
this.renderComponentService.renderDynamicComponent(this.item, MapAutoCompleteComponent, this.group, location);
|
|
631
|
-
break;
|
|
632
|
-
//#endregion
|
|
633
|
-
//#region CheckBox
|
|
634
|
-
case DataType.CheckBox:
|
|
635
|
-
let checkBox = new CheckBoxOptions();
|
|
636
|
-
checkBox.name =
|
|
637
|
-
this.repeaterField.controlOptions.name +
|
|
638
|
-
'.' +
|
|
639
|
-
this.itemNumber.toString() +
|
|
640
|
-
'.' +
|
|
641
|
-
this.controlNumber.toString();
|
|
642
|
-
checkBox.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
643
|
-
checkBox.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
644
|
-
checkBox.viewType = this.repeaterField.controlOptions.viewType;
|
|
645
|
-
checkBox.outputFunction = this.repeaterField.controlOptions.outputFunction;
|
|
646
|
-
checkBox.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
647
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
648
|
-
: '';
|
|
649
|
-
checkBox.value = this.value;
|
|
650
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
651
|
-
checkBox.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
652
|
-
}
|
|
653
|
-
this.renderComponentService.renderDynamicComponent(this.item, CheckBoxComponent, this.group, checkBox);
|
|
654
|
-
break;
|
|
655
|
-
//#endregion
|
|
656
|
-
default:
|
|
657
|
-
break;
|
|
658
|
-
}
|
|
659
|
-
}, 0);
|
|
660
|
-
}
|
|
661
|
-
ngOnChanges(changes) {
|
|
662
|
-
if (changes.itemNumber)
|
|
663
|
-
if (changes.itemNumber.previousValue) {
|
|
664
|
-
let name = this.repeaterField.controlOptions.name +
|
|
665
|
-
'.' +
|
|
666
|
-
changes.itemNumber.previousValue.toString() +
|
|
667
|
-
'.' +
|
|
668
|
-
this.controlNumber.toString();
|
|
669
|
-
let value = this.group.controls[name].value;
|
|
670
|
-
this.item.clear();
|
|
671
|
-
this.group.removeControl(name);
|
|
672
|
-
switch (this.repeaterField.controlType) {
|
|
673
|
-
//#region TextBox
|
|
674
|
-
case DataType.Text:
|
|
675
|
-
let text = new TextBoxOptions();
|
|
676
|
-
text.name =
|
|
677
|
-
this.repeaterField.controlOptions.name +
|
|
678
|
-
'.' +
|
|
679
|
-
changes.itemNumber.currentValue +
|
|
680
|
-
'.' +
|
|
681
|
-
this.controlNumber.toString();
|
|
682
|
-
text.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
683
|
-
text.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
684
|
-
text.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
685
|
-
text.viewType = this.repeaterField.controlOptions.viewType;
|
|
686
|
-
text.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
687
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
688
|
-
: '';
|
|
689
|
-
text.type = InputType.Text;
|
|
690
|
-
if (this.repeaterField.controlOptions.maxLength)
|
|
691
|
-
text.maxLength = this.repeaterField.controlOptions.maxLength;
|
|
692
|
-
if (this.repeaterField.controlOptions.minLength)
|
|
693
|
-
text.minLength = this.repeaterField.controlOptions.minLength;
|
|
694
|
-
text.value = value;
|
|
695
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
696
|
-
text.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
697
|
-
}
|
|
698
|
-
this.renderComponentService.renderDynamicComponent(this.item, TextboxComponent, this.group, text);
|
|
699
|
-
break;
|
|
700
|
-
case DataType.Name:
|
|
701
|
-
let name = new TextBoxOptions();
|
|
702
|
-
name.name =
|
|
703
|
-
this.repeaterField.controlOptions.name +
|
|
704
|
-
'.' +
|
|
705
|
-
changes.itemNumber.currentValue +
|
|
706
|
-
'.' +
|
|
707
|
-
this.controlNumber.toString();
|
|
708
|
-
name.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
709
|
-
name.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
710
|
-
name.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
711
|
-
name.viewType = this.repeaterField.controlOptions.viewType;
|
|
712
|
-
name.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
713
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
714
|
-
: '';
|
|
715
|
-
if (this.repeaterField.controlOptions.maxLength)
|
|
716
|
-
name.maxLength = this.repeaterField.controlOptions.maxLength;
|
|
717
|
-
if (this.repeaterField.controlOptions.minLength)
|
|
718
|
-
name.minLength = this.repeaterField.controlOptions.minLength;
|
|
719
|
-
name.type = InputType.Text;
|
|
720
|
-
name.value = value;
|
|
721
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
722
|
-
name.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
723
|
-
}
|
|
724
|
-
this.renderComponentService.renderDynamicComponent(this.item, TextboxComponent, this.group, name);
|
|
725
|
-
break;
|
|
726
|
-
case DataType.Email:
|
|
727
|
-
let email = new TextBoxOptions();
|
|
728
|
-
email.name =
|
|
729
|
-
this.repeaterField.controlOptions.name +
|
|
730
|
-
'.' +
|
|
731
|
-
changes.itemNumber.currentValue +
|
|
732
|
-
'.' +
|
|
733
|
-
this.controlNumber.toString();
|
|
734
|
-
email.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
735
|
-
email.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
736
|
-
email.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
737
|
-
email.viewType = this.repeaterField.controlOptions.viewType;
|
|
738
|
-
email.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
739
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
740
|
-
: '';
|
|
741
|
-
email.type = InputType.Email;
|
|
742
|
-
email.value = value;
|
|
743
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
744
|
-
email.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
745
|
-
}
|
|
746
|
-
this.renderComponentService.renderDynamicComponent(this.item, TextboxComponent, this.group, email);
|
|
747
|
-
break;
|
|
748
|
-
case DataType.Number:
|
|
749
|
-
let number = new TextBoxOptions();
|
|
750
|
-
number.name =
|
|
751
|
-
this.repeaterField.controlOptions.name +
|
|
752
|
-
'.' +
|
|
753
|
-
changes.itemNumber.currentValue +
|
|
754
|
-
'.' +
|
|
755
|
-
this.controlNumber.toString();
|
|
756
|
-
number.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
757
|
-
number.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
758
|
-
number.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
759
|
-
number.viewType = this.repeaterField.controlOptions.viewType;
|
|
760
|
-
number.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
761
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
762
|
-
: '';
|
|
763
|
-
number.type = InputType.Number;
|
|
764
|
-
let rangeNumber = new RangeNumber();
|
|
765
|
-
rangeNumber.to = this.repeaterField.controlOptions.maxLength;
|
|
766
|
-
rangeNumber.from = this.repeaterField.controlOptions.minLength;
|
|
767
|
-
number.numberRange = rangeNumber;
|
|
768
|
-
number.value = value;
|
|
769
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
770
|
-
number.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
771
|
-
}
|
|
772
|
-
this.renderComponentService.renderDynamicComponent(this.item, TextboxComponent, this.group, number);
|
|
773
|
-
break;
|
|
774
|
-
case DataType.URL:
|
|
775
|
-
let url = new TextBoxOptions();
|
|
776
|
-
url.name = `${this.repeaterField.controlOptions.name}.${changes.itemNumber.currentValue}.${this.controlNumber}`;
|
|
777
|
-
url.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
778
|
-
url.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
779
|
-
url.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
780
|
-
url.viewType = this.repeaterField.controlOptions.viewType;
|
|
781
|
-
url.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : '';
|
|
782
|
-
url.type = InputType.URL;
|
|
783
|
-
url.value = value;
|
|
784
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
785
|
-
url.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
786
|
-
}
|
|
787
|
-
this.renderComponentService.renderDynamicComponent(this.item, TextboxComponent, this.group, url);
|
|
788
|
-
break;
|
|
789
|
-
//#endregion
|
|
790
|
-
//#region DateTime
|
|
791
|
-
case DataType.Date:
|
|
792
|
-
let date = new DatePickerOptions();
|
|
793
|
-
date.name =
|
|
794
|
-
this.repeaterField.controlOptions.name +
|
|
795
|
-
'.' +
|
|
796
|
-
changes.itemNumber.currentValue +
|
|
797
|
-
'.' +
|
|
798
|
-
this.controlNumber.toString();
|
|
799
|
-
date.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
800
|
-
date.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
801
|
-
date.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
802
|
-
date.viewType = this.repeaterField.controlOptions.viewType;
|
|
803
|
-
date.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
804
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
805
|
-
: '';
|
|
806
|
-
date.pickerType = PickerType.Calendar;
|
|
807
|
-
date.selectMode = SelectMode.Single;
|
|
808
|
-
date.startView = StartView.Month;
|
|
809
|
-
date.value = value;
|
|
810
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
811
|
-
date.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
812
|
-
}
|
|
813
|
-
this.renderComponentService.renderDynamicComponent(this.item, DateInputComponent, this.group, date);
|
|
814
|
-
break;
|
|
815
|
-
case DataType.DateTime:
|
|
816
|
-
let dateTime = new DatePickerOptions();
|
|
817
|
-
dateTime.name =
|
|
818
|
-
this.repeaterField.controlOptions.name +
|
|
819
|
-
'.' +
|
|
820
|
-
changes.itemNumber.currentValue +
|
|
821
|
-
'.' +
|
|
822
|
-
this.controlNumber.toString();
|
|
823
|
-
dateTime.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
824
|
-
dateTime.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
825
|
-
dateTime.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
826
|
-
dateTime.viewType = this.repeaterField.controlOptions.viewType;
|
|
827
|
-
dateTime.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
828
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
829
|
-
: '';
|
|
830
|
-
dateTime.pickerType = PickerType.Both;
|
|
831
|
-
dateTime.selectMode = SelectMode.Single;
|
|
832
|
-
dateTime.startView = StartView.Month;
|
|
833
|
-
dateTime.value = value;
|
|
834
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
835
|
-
dateTime.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
836
|
-
}
|
|
837
|
-
this.renderComponentService.renderDynamicComponent(this.item, DateInputComponent, this.group, dateTime);
|
|
838
|
-
break;
|
|
839
|
-
case DataType.Time:
|
|
840
|
-
let time = new DatePickerOptions();
|
|
841
|
-
time.name =
|
|
842
|
-
this.repeaterField.controlOptions.name +
|
|
843
|
-
'.' +
|
|
844
|
-
changes.itemNumber.currentValue +
|
|
845
|
-
'.' +
|
|
846
|
-
this.controlNumber.toString();
|
|
847
|
-
time.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
848
|
-
time.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
849
|
-
time.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
850
|
-
time.viewType = this.repeaterField.controlOptions.viewType;
|
|
851
|
-
time.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
852
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
853
|
-
: '';
|
|
854
|
-
time.pickerType = PickerType.Timer;
|
|
855
|
-
time.selectMode = SelectMode.Single;
|
|
856
|
-
time.startView = StartView.Month;
|
|
857
|
-
time.value = value;
|
|
858
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
859
|
-
time.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
860
|
-
}
|
|
861
|
-
this.renderComponentService.renderDynamicComponent(this.item, DateInputComponent, this.group, time);
|
|
862
|
-
break;
|
|
863
|
-
//#endregion
|
|
864
|
-
//#region Dropdown
|
|
865
|
-
case DataType.SingleSelect:
|
|
866
|
-
let singleSelect = new DropdownOptions();
|
|
867
|
-
singleSelect.name =
|
|
868
|
-
this.repeaterField.controlOptions.name +
|
|
869
|
-
'.' +
|
|
870
|
-
changes.itemNumber.currentValue +
|
|
871
|
-
'.' +
|
|
872
|
-
this.controlNumber.toString();
|
|
873
|
-
singleSelect.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
874
|
-
singleSelect.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
875
|
-
singleSelect.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
876
|
-
singleSelect.viewType = this.repeaterField.controlOptions.viewType;
|
|
877
|
-
singleSelect.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
878
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
879
|
-
: '';
|
|
880
|
-
singleSelect.dataSource = this.repeaterField.controlOptions.dataSource;
|
|
881
|
-
singleSelect.singleSelection = true;
|
|
882
|
-
singleSelect.showCheckbox = false;
|
|
883
|
-
singleSelect.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
|
|
884
|
-
singleSelect.selectedItems = value;
|
|
885
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
886
|
-
singleSelect.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
887
|
-
}
|
|
888
|
-
this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, singleSelect);
|
|
889
|
-
break;
|
|
890
|
-
case DataType.MulipleSelect:
|
|
891
|
-
let mulipleSelect = new DropdownOptions();
|
|
892
|
-
mulipleSelect.name =
|
|
893
|
-
this.repeaterField.controlOptions.name +
|
|
894
|
-
'.' +
|
|
895
|
-
changes.itemNumber.currentValue +
|
|
896
|
-
'.' +
|
|
897
|
-
this.controlNumber.toString();
|
|
898
|
-
mulipleSelect.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
899
|
-
mulipleSelect.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
900
|
-
mulipleSelect.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
901
|
-
mulipleSelect.viewType = this.repeaterField.controlOptions.viewType;
|
|
902
|
-
mulipleSelect.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
903
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
904
|
-
: '';
|
|
905
|
-
mulipleSelect.dataSource = this.repeaterField.controlOptions.dataSource;
|
|
906
|
-
mulipleSelect.singleSelection = false;
|
|
907
|
-
mulipleSelect.showCheckbox = false;
|
|
908
|
-
mulipleSelect.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
|
|
909
|
-
mulipleSelect.selectedItems = value;
|
|
910
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
911
|
-
mulipleSelect.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
912
|
-
}
|
|
913
|
-
this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, mulipleSelect);
|
|
914
|
-
break;
|
|
915
|
-
case DataType.Goal:
|
|
916
|
-
let goal = new DropdownOptions();
|
|
917
|
-
goal.name =
|
|
918
|
-
this.repeaterField.controlOptions.name +
|
|
919
|
-
'.' +
|
|
920
|
-
changes.itemNumber.currentValue +
|
|
921
|
-
'.' +
|
|
922
|
-
this.controlNumber.toString();
|
|
923
|
-
goal.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
924
|
-
goal.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
925
|
-
goal.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
926
|
-
goal.viewType = this.repeaterField.controlOptions.viewType;
|
|
927
|
-
goal.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
928
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
929
|
-
: '';
|
|
930
|
-
goal.dataSource = this.repeaterField.controlOptions.dataSource;
|
|
931
|
-
goal.singleSelection = !this.repeaterField.controlOptions.isMultiple;
|
|
932
|
-
goal.showCheckbox = false;
|
|
933
|
-
goal.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
|
|
934
|
-
goal.selectedItems = value;
|
|
935
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
936
|
-
goal.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
937
|
-
}
|
|
938
|
-
this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, goal);
|
|
939
|
-
break;
|
|
940
|
-
case DataType.Challenge:
|
|
941
|
-
let challenge = new DropdownOptions();
|
|
942
|
-
challenge.name =
|
|
943
|
-
this.repeaterField.controlOptions.name +
|
|
944
|
-
'.' +
|
|
945
|
-
changes.itemNumber.currentValue +
|
|
946
|
-
'.' +
|
|
947
|
-
this.controlNumber.toString();
|
|
948
|
-
challenge.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
949
|
-
challenge.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
950
|
-
challenge.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
951
|
-
challenge.viewType = this.repeaterField.controlOptions.viewType;
|
|
952
|
-
challenge.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
953
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
954
|
-
: '';
|
|
955
|
-
challenge.dataSource = this.repeaterField.controlOptions.dataSource;
|
|
956
|
-
challenge.dataSource = this.repeaterField.controlOptions.dataSource;
|
|
957
|
-
challenge.singleSelection = !this.repeaterField.controlOptions.isMultiple;
|
|
958
|
-
challenge.showCheckbox = false;
|
|
959
|
-
challenge.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
|
|
960
|
-
challenge.selectedItems = value;
|
|
961
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
962
|
-
challenge.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
963
|
-
}
|
|
964
|
-
this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, challenge);
|
|
965
|
-
break;
|
|
966
|
-
case DataType.InnovationLab:
|
|
967
|
-
let innovationLab = new DropdownOptions();
|
|
968
|
-
innovationLab.name =
|
|
969
|
-
this.repeaterField.controlOptions.name +
|
|
970
|
-
'.' +
|
|
971
|
-
changes.itemNumber.currentValue +
|
|
972
|
-
'.' +
|
|
973
|
-
this.controlNumber.toString();
|
|
974
|
-
innovationLab.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
975
|
-
innovationLab.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
976
|
-
innovationLab.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
977
|
-
innovationLab.viewType = this.repeaterField.controlOptions.viewType;
|
|
978
|
-
innovationLab.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
979
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
980
|
-
: '';
|
|
981
|
-
innovationLab.dataSource = this.repeaterField.controlOptions.dataSource;
|
|
982
|
-
innovationLab.singleSelection = !this.repeaterField.controlOptions.isMultiple;
|
|
983
|
-
innovationLab.showCheckbox = false;
|
|
984
|
-
innovationLab.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
|
|
985
|
-
innovationLab.selectedItems = value;
|
|
986
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
987
|
-
innovationLab.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
988
|
-
}
|
|
989
|
-
this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, innovationLab);
|
|
990
|
-
break;
|
|
991
|
-
case DataType.Country:
|
|
992
|
-
let country = new DropdownOptions();
|
|
993
|
-
country.name =
|
|
994
|
-
this.repeaterField.controlOptions.name +
|
|
995
|
-
'.' +
|
|
996
|
-
changes.itemNumber.currentValue +
|
|
997
|
-
'.' +
|
|
998
|
-
this.controlNumber.toString();
|
|
999
|
-
country.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
1000
|
-
country.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
1001
|
-
country.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
1002
|
-
country.viewType = this.repeaterField.controlOptions.viewType;
|
|
1003
|
-
country.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
1004
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
1005
|
-
: '';
|
|
1006
|
-
country.dataSource = this.repeaterField.controlOptions.dataSource;
|
|
1007
|
-
country.singleSelection = !this.repeaterField.controlOptions.isMultiple;
|
|
1008
|
-
country.showCheckbox = false;
|
|
1009
|
-
country.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
|
|
1010
|
-
country.selectedItems = value;
|
|
1011
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
1012
|
-
country.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
1013
|
-
}
|
|
1014
|
-
this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, country);
|
|
1015
|
-
break;
|
|
1016
|
-
//#endregion
|
|
1017
|
-
//#region FileUpload
|
|
1018
|
-
case DataType.File:
|
|
1019
|
-
let file = new FileUploadOptions();
|
|
1020
|
-
file.name =
|
|
1021
|
-
this.repeaterField.controlOptions.name +
|
|
1022
|
-
'.' +
|
|
1023
|
-
changes.itemNumber.currentValue +
|
|
1024
|
-
'.' +
|
|
1025
|
-
this.controlNumber.toString();
|
|
1026
|
-
file.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
1027
|
-
file.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
1028
|
-
file.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
1029
|
-
file.viewType = this.repeaterField.controlOptions.viewType;
|
|
1030
|
-
file.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
1031
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
1032
|
-
: '';
|
|
1033
|
-
file.fileMaxSizeInMB = this.repeaterField.controlOptions.maxFileSizeInMB;
|
|
1034
|
-
file.value = value;
|
|
1035
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
1036
|
-
file.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
1037
|
-
}
|
|
1038
|
-
this.renderComponentService.renderDynamicComponent(this.item, FileUploadComponent, this.group, file);
|
|
1039
|
-
break;
|
|
1040
|
-
case DataType.MultiFile:
|
|
1041
|
-
let multiFile = new FileUploadOptions();
|
|
1042
|
-
file.name =
|
|
1043
|
-
this.repeaterField.controlOptions.name +
|
|
1044
|
-
'.' +
|
|
1045
|
-
changes.itemNumber.currentValue +
|
|
1046
|
-
'.' +
|
|
1047
|
-
this.controlNumber.toString();
|
|
1048
|
-
file.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
1049
|
-
file.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
1050
|
-
file.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
1051
|
-
file.viewType = this.repeaterField.controlOptions.viewType;
|
|
1052
|
-
file.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
1053
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
1054
|
-
: '';
|
|
1055
|
-
multiFile.maxSizeForAllFilesInMB = this.repeaterField.controlOptions.maxFileSizeInMB;
|
|
1056
|
-
multiFile.maxNoOfFiles = this.repeaterField.controlOptions.maxFileCount;
|
|
1057
|
-
multiFile.isMultipleFile = true;
|
|
1058
|
-
multiFile.value = value;
|
|
1059
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
1060
|
-
multiFile.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
1061
|
-
}
|
|
1062
|
-
this.renderComponentService.renderDynamicComponent(this.item, FileUploadComponent, this.group, multiFile);
|
|
1063
|
-
break;
|
|
1064
|
-
//#endregion
|
|
1065
|
-
//#region ImageUpload
|
|
1066
|
-
case DataType.Image:
|
|
1067
|
-
let image = new ImageUploadOptions();
|
|
1068
|
-
image.name =
|
|
1069
|
-
this.repeaterField.controlOptions.name +
|
|
1070
|
-
'.' +
|
|
1071
|
-
changes.itemNumber.currentValue +
|
|
1072
|
-
'.' +
|
|
1073
|
-
this.controlNumber.toString();
|
|
1074
|
-
image.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
1075
|
-
image.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
1076
|
-
image.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
1077
|
-
image.viewType = this.repeaterField.controlOptions.viewType;
|
|
1078
|
-
image.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
1079
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
1080
|
-
: '';
|
|
1081
|
-
if (this.repeaterField.controlOptions.maxFileSizeInMB)
|
|
1082
|
-
image.fileMaxSizeInMB = this.repeaterField.controlOptions.maxFileSizeInMB;
|
|
1083
|
-
image.value = value;
|
|
1084
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
1085
|
-
image.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
1086
|
-
}
|
|
1087
|
-
this.renderComponentService.renderDynamicComponent(this.item, ImageUploaderComponent, this.group, image);
|
|
1088
|
-
break;
|
|
1089
|
-
case DataType.CoverPhoto:
|
|
1090
|
-
let coverPhoto = new ImageUploadOptions();
|
|
1091
|
-
coverPhoto.name =
|
|
1092
|
-
this.repeaterField.controlOptions.name +
|
|
1093
|
-
'.' +
|
|
1094
|
-
changes.itemNumber.currentValue +
|
|
1095
|
-
'.' +
|
|
1096
|
-
this.controlNumber.toString();
|
|
1097
|
-
coverPhoto.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
1098
|
-
coverPhoto.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
1099
|
-
coverPhoto.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
1100
|
-
coverPhoto.viewType = this.repeaterField.controlOptions.viewType;
|
|
1101
|
-
coverPhoto.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
1102
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
1103
|
-
: '';
|
|
1104
|
-
if (this.repeaterField.controlOptions.maxFileSizeInMB)
|
|
1105
|
-
coverPhoto.fileMaxSizeInMB = this.repeaterField.controlOptions.maxFileSizeInMB;
|
|
1106
|
-
coverPhoto.value = value;
|
|
1107
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
1108
|
-
coverPhoto.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
1109
|
-
}
|
|
1110
|
-
this.renderComponentService.renderDynamicComponent(this.item, ImageUploaderComponent, this.group, coverPhoto);
|
|
1111
|
-
break;
|
|
1112
|
-
//#endregion
|
|
1113
|
-
//#region Mobile
|
|
1114
|
-
case DataType.Mobile:
|
|
1115
|
-
let mobile = new PhoneOptions();
|
|
1116
|
-
mobile.name =
|
|
1117
|
-
this.repeaterField.controlOptions.name +
|
|
1118
|
-
'.' +
|
|
1119
|
-
changes.itemNumber.currentValue +
|
|
1120
|
-
'.' +
|
|
1121
|
-
this.controlNumber.toString();
|
|
1122
|
-
mobile.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
1123
|
-
mobile.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
1124
|
-
mobile.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
1125
|
-
mobile.viewType = this.repeaterField.controlOptions.viewType;
|
|
1126
|
-
mobile.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
1127
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
1128
|
-
: '';
|
|
1129
|
-
mobile.allowSearch = true;
|
|
1130
|
-
mobile.phoneValidation = true;
|
|
1131
|
-
mobile.selectFirstCountry = true;
|
|
1132
|
-
mobile.enablePlaceholder = true;
|
|
1133
|
-
mobile.value = value;
|
|
1134
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
1135
|
-
mobile.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
1136
|
-
}
|
|
1137
|
-
this.renderComponentService.renderDynamicComponent(this.item, PhoneComponent, this.group, mobile);
|
|
1138
|
-
break;
|
|
1139
|
-
//#endregion
|
|
1140
|
-
//#region MultilineText
|
|
1141
|
-
case DataType.MultilineText:
|
|
1142
|
-
let multilineText = new TextAreaOptions();
|
|
1143
|
-
multilineText.name =
|
|
1144
|
-
this.repeaterField.controlOptions.name +
|
|
1145
|
-
'.' +
|
|
1146
|
-
changes.itemNumber.currentValue +
|
|
1147
|
-
'.' +
|
|
1148
|
-
this.controlNumber.toString();
|
|
1149
|
-
multilineText.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
1150
|
-
multilineText.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
1151
|
-
multilineText.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
1152
|
-
multilineText.viewType = this.repeaterField.controlOptions.viewType;
|
|
1153
|
-
multilineText.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
1154
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
1155
|
-
: '';
|
|
1156
|
-
if (this.repeaterField.controlOptions.maxLength)
|
|
1157
|
-
multilineText.maxLength = this.repeaterField.controlOptions.maxLength;
|
|
1158
|
-
if (this.repeaterField.controlOptions.minLength)
|
|
1159
|
-
multilineText.minLength = this.repeaterField.controlOptions.minLength;
|
|
1160
|
-
multilineText.rows = this.repeaterField.controlOptions.rows;
|
|
1161
|
-
multilineText.forceDirection = this.repeaterField.controlOptions.forceDirection;
|
|
1162
|
-
multilineText.value = value;
|
|
1163
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
1164
|
-
multilineText.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
1165
|
-
}
|
|
1166
|
-
this.renderComponentService.renderDynamicComponent(this.item, TextAreaComponent, this.group, multilineText);
|
|
1167
|
-
break;
|
|
1168
|
-
//#endregion
|
|
1169
|
-
//#region HTML
|
|
1170
|
-
case DataType.HTML:
|
|
1171
|
-
let html = new HtmlEditorOptions();
|
|
1172
|
-
html.name =
|
|
1173
|
-
this.repeaterField.controlOptions.name +
|
|
1174
|
-
'.' +
|
|
1175
|
-
changes.itemNumber.currentValue +
|
|
1176
|
-
'.' +
|
|
1177
|
-
this.controlNumber.toString();
|
|
1178
|
-
html.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
1179
|
-
html.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
1180
|
-
html.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
1181
|
-
html.viewType = this.repeaterField.controlOptions.viewType;
|
|
1182
|
-
html.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
1183
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
1184
|
-
: '';
|
|
1185
|
-
if (this.repeaterField.controlOptions.maxLength)
|
|
1186
|
-
html.maxLength = this.repeaterField.controlOptions.maxLength;
|
|
1187
|
-
if (this.repeaterField.controlOptions.minLength)
|
|
1188
|
-
html.minLength = this.repeaterField.controlOptions.minLength;
|
|
1189
|
-
html.height = this.repeaterField.controlOptions.rows;
|
|
1190
|
-
html.forceDirection = this.repeaterField.controlOptions.forceDirection;
|
|
1191
|
-
html.value = value;
|
|
1192
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
1193
|
-
html.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
1194
|
-
}
|
|
1195
|
-
this.renderComponentService.renderDynamicComponent(this.item, HtmlEditorComponent, this.group, html);
|
|
1196
|
-
break;
|
|
1197
|
-
//#endregion
|
|
1198
|
-
//#region Boolean
|
|
1199
|
-
case DataType.Boolean:
|
|
1200
|
-
let boolean = new ToggleSlideOptions();
|
|
1201
|
-
boolean.name =
|
|
1202
|
-
this.repeaterField.controlOptions.name +
|
|
1203
|
-
'.' +
|
|
1204
|
-
changes.itemNumber.currentValue +
|
|
1205
|
-
'.' +
|
|
1206
|
-
this.controlNumber.toString();
|
|
1207
|
-
boolean.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
1208
|
-
boolean.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
1209
|
-
boolean.viewType = this.repeaterField.controlOptions.viewType;
|
|
1210
|
-
boolean.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
1211
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
1212
|
-
: '';
|
|
1213
|
-
boolean.value = value;
|
|
1214
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
1215
|
-
boolean.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
1216
|
-
}
|
|
1217
|
-
this.renderComponentService.renderDynamicComponent(this.item, ToggleslideComponent, this.group, boolean);
|
|
1218
|
-
break;
|
|
1219
|
-
//#endregion
|
|
1220
|
-
//#region Location
|
|
1221
|
-
case DataType.Location:
|
|
1222
|
-
let location = new MapAutoCompleteOptions();
|
|
1223
|
-
location.name =
|
|
1224
|
-
this.repeaterField.controlOptions.name +
|
|
1225
|
-
'.' +
|
|
1226
|
-
changes.itemNumber.currentValue +
|
|
1227
|
-
'.' +
|
|
1228
|
-
this.controlNumber.toString();
|
|
1229
|
-
location.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
1230
|
-
location.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
1231
|
-
location.isRequired = this.repeaterField.controlOptions.isRequired;
|
|
1232
|
-
location.viewType = this.repeaterField.controlOptions.viewType;
|
|
1233
|
-
location.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
1234
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
1235
|
-
: '';
|
|
1236
|
-
location.value = value;
|
|
1237
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
1238
|
-
location.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
1239
|
-
}
|
|
1240
|
-
this.renderComponentService.renderDynamicComponent(this.item, MapAutoCompleteComponent, this.group, location);
|
|
1241
|
-
break;
|
|
1242
|
-
//#endregion
|
|
1243
|
-
//#region CheckBox
|
|
1244
|
-
case DataType.CheckBox:
|
|
1245
|
-
let checkBox = new CheckBoxOptions();
|
|
1246
|
-
checkBox.name =
|
|
1247
|
-
this.repeaterField.controlOptions.name +
|
|
1248
|
-
'.' +
|
|
1249
|
-
changes.itemNumber.currentValue +
|
|
1250
|
-
'.' +
|
|
1251
|
-
this.controlNumber.toString();
|
|
1252
|
-
checkBox.hideLabel = this.repeaterField.controlOptions.hideLabel;
|
|
1253
|
-
checkBox.labelKey = this.repeaterField.controlOptions.labelKey;
|
|
1254
|
-
checkBox.viewType = this.repeaterField.controlOptions.viewType;
|
|
1255
|
-
checkBox.labelDescription = this.repeaterField.controlOptions.labelDescription
|
|
1256
|
-
? this.repeaterField.controlOptions.labelDescription
|
|
1257
|
-
: '';
|
|
1258
|
-
checkBox.outputFunction = this.repeaterField.controlOptions.outputFunction;
|
|
1259
|
-
checkBox.value = value;
|
|
1260
|
-
if (this.repeaterField.controlOptions.customValidation.length > 0) {
|
|
1261
|
-
checkBox.customValidation = this.repeaterField.controlOptions.customValidation;
|
|
1262
|
-
}
|
|
1263
|
-
this.renderComponentService.renderDynamicComponent(this.item, CheckBoxComponent, this.group, checkBox);
|
|
1264
|
-
break;
|
|
1265
|
-
//#endregion
|
|
1266
|
-
default:
|
|
1267
|
-
break;
|
|
1268
|
-
}
|
|
1269
|
-
}
|
|
1270
|
-
}
|
|
1271
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: RepeaterFieldBuilderComponent, deps: [{ token: i1.RenderComponentService }, { token: i2.FormGroupDirective }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1272
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: RepeaterFieldBuilderComponent, isStandalone: true, selector: "repeater-field-builder", inputs: { group: "group", itemNumber: "itemNumber", controlNumber: "controlNumber", repeaterField: "repeaterField", itemsValue: "itemsValue" }, viewQueries: [{ propertyName: "item", first: true, predicate: ["Item"], descendants: true, read: ViewContainerRef }], usesOnChanges: true, ngImport: i0, template: "<ng-container #Item></ng-container>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ReactiveFormsModule }] }); }
|
|
1273
|
-
}
|
|
1274
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: RepeaterFieldBuilderComponent, decorators: [{
|
|
1275
|
-
type: Component,
|
|
1276
|
-
args: [{ selector: 'repeater-field-builder', standalone: true, imports: [CommonModule, FormsModule, ReactiveFormsModule], schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA], template: "<ng-container #Item></ng-container>\r\n" }]
|
|
1277
|
-
}], ctorParameters: () => [{ type: i1.RenderComponentService }, { type: i2.FormGroupDirective }], propDecorators: { item: [{
|
|
1278
|
-
type: ViewChild,
|
|
1279
|
-
args: ['Item', { read: ViewContainerRef }]
|
|
1280
|
-
}], group: [{
|
|
1281
|
-
type: Input
|
|
1282
|
-
}], itemNumber: [{
|
|
1283
|
-
type: Input
|
|
1284
|
-
}], controlNumber: [{
|
|
1285
|
-
type: Input
|
|
1286
|
-
}], repeaterField: [{
|
|
1287
|
-
type: Input
|
|
1288
|
-
}], itemsValue: [{
|
|
1289
|
-
type: Input
|
|
1290
|
-
}] } });
|
|
1291
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0ZXItZmllbGQtYnVpbGRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWNvbnRyb2xzL3NyYy9saWIvY29udHJvbHMvUmVwZWF0ZXIvcmVwZWF0ZXItZmllbGQtYnVpbGRlci9yZXBlYXRlci1maWVsZC1idWlsZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9SZXBlYXRlci9yZXBlYXRlci1maWVsZC1idWlsZGVyL3JlcGVhdGVyLWZpZWxkLWJ1aWxkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxLQUFLLEVBR0wsU0FBUyxFQUNULGdCQUFnQixFQUNoQixzQkFBc0IsRUFDdEIsZ0JBQWdCLEVBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQWlDLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDNUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUUvRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNuRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNsRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUMzRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOzs7O0FBU3RFLE1BQU0sT0FBTyw2QkFBNkI7SUFVeEMsWUFDVSxzQkFBOEMsRUFDL0MsZUFBbUM7UUFEbEMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUMvQyxvQkFBZSxHQUFmLGVBQWUsQ0FBb0I7UUFObkMsZUFBVSxHQUFVLEVBQUUsQ0FBQztRQUNoQyxjQUFTLEdBQVEsSUFBSSxDQUFDO0lBTWxCLENBQUM7SUFFTCxRQUFRLEtBQVcsQ0FBQztJQUNwQixlQUFlO1FBQ2IsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xGLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDbEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO29CQUNoQyxJQUNFLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQzt3QkFDekQsR0FBRyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLElBQUksRUFDN0M7d0JBQ0EsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDcEMsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUM7cUJBQ3RCO2lCQUNGO2FBQ0Y7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2xCLFFBQVEsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUU7Z0JBQ3ZDLGlCQUFpQjtnQkFDakIsS0FBSyxRQUFRLENBQUMsSUFBSTtvQkFDaEIsSUFBSSxJQUFJLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztvQkFDaEMsSUFBSSxDQUFDLElBQUk7d0JBQ1AsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSTs0QkFDdEMsR0FBRzs0QkFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRTs0QkFDMUIsR0FBRzs0QkFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNoQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQztvQkFDN0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7b0JBQzNELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO29CQUMvRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztvQkFDM0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQjt3QkFDeEUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQjt3QkFDcEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDUCxJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7b0JBQzNCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQztvQkFDL0UsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTO3dCQUM3QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQztvQkFDL0QsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTO3dCQUM3QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQztvQkFDL0QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO29CQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQztvQkFDL0QsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO3dCQUNqRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUM7cUJBQzVFO29CQUNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FDaEQsSUFBSSxDQUFDLElBQUksRUFDVCxnQkFBZ0IsRUFDaEIsSUFBSSxDQUFDLEtBQUssRUFDVixJQUFJLENBQ0wsQ0FBQztvQkFDRixNQUFNO2dCQUNSLEtBQUssUUFBUSxDQUFDLElBQUk7b0JBQ2hCLElBQUksSUFBSSxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7b0JBQ2hDLElBQUksQ0FBQyxJQUFJO3dCQUNQLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLElBQUk7NEJBQ3RDLEdBQUc7NEJBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7NEJBQzFCLEdBQUc7NEJBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7b0JBQzdELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO29CQUMzRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQztvQkFDL0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7b0JBQzNELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQztvQkFDL0UsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQjt3QkFDeEUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQjt3QkFDcEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDUCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVM7d0JBQzdDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO29CQUMvRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVM7d0JBQzdDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO29CQUMvRCxJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7b0JBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztvQkFDeEIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO3dCQUNqRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUM7cUJBQzVFO29CQUNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FDaEQsSUFBSSxDQUFDLElBQUksRUFDVCxnQkFBZ0IsRUFDaEIsSUFBSSxDQUFDLEtBQUssRUFDVixJQUFJLENBQ0wsQ0FBQztvQkFDRixNQUFNO2dCQUNSLEtBQUssUUFBUSxDQUFDLEtBQUs7b0JBQ2pCLElBQUksS0FBSyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7b0JBQ2pDLEtBQUssQ0FBQyxJQUFJO3dCQUNSLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLElBQUk7NEJBQ3RDLEdBQUc7NEJBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7NEJBQzFCLEdBQUc7NEJBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDaEMsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7b0JBQzlELEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO29CQUM1RCxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQztvQkFDaEUsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7b0JBQzVELEtBQUssQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQztvQkFDaEYsS0FBSyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQjt3QkFDekUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQjt3QkFDcEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDUCxLQUFLLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7b0JBQzdCLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztvQkFDekIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO3dCQUNqRSxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUM7cUJBQzdFO29CQUNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FDaEQsSUFBSSxDQUFDLElBQUksRUFDVCxnQkFBZ0IsRUFDaEIsSUFBSSxDQUFDLEtBQUssRUFDVixLQUFLLENBQ04sQ0FBQztvQkFDRixNQUFNO2dCQUNSLEtBQUssUUFBUSxDQUFDLE1BQU07b0JBQ2xCLElBQUksTUFBTSxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7b0JBQ2xDLE1BQU0sQ0FBQyxJQUFJO3dCQUNULElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLElBQUk7NEJBQ3RDLEdBQUc7NEJBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7NEJBQzFCLEdBQUc7NEJBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDaEMsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7b0JBQy9ELE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO29CQUM3RCxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQztvQkFDakUsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7b0JBQzdELE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQztvQkFDakYsTUFBTSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQjt3QkFDMUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQjt3QkFDcEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDUCxNQUFNLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7b0JBQy9CLElBQUksV0FBVyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7b0JBQ3BDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFO3dCQUNqRCxXQUFXLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7d0JBQ2xFLFdBQVcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztxQkFDdkU7b0JBQ0QsTUFBTSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7b0JBQ2pDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztvQkFDMUIsTUFBTSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7b0JBQ2pFLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFDakUsTUFBTSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDO3FCQUM5RTtvQkFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsc0JBQXNCLENBQ2hELElBQUksQ0FBQyxJQUFJLEVBQ1QsZ0JBQWdCLEVBQ2hCLElBQUksQ0FBQyxLQUFLLEVBQ1YsTUFBTSxDQUNQLENBQUM7b0JBQ0YsTUFBTTtnQkFDUixLQUFLLFFBQVEsQ0FBQyxHQUFHO29CQUNmLElBQUksR0FBRyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7b0JBQy9CLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQ2hHLEdBQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO29CQUM1RCxHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztvQkFDMUQsR0FBRyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7b0JBQzlELEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO29CQUMxRCxHQUFHLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ3BJLEdBQUcsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQztvQkFDekIsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO29CQUN2QixJQUFJLENBQUMsc0JBQXNCLENBQUMsc0JBQXNCLENBQ2hELElBQUksQ0FBQyxJQUFJLEVBQ1QsZ0JBQWdCLEVBQ2hCLElBQUksQ0FBQyxLQUFLLEVBQ1YsR0FBRyxDQUNKLENBQUM7b0JBQ0YsTUFBTTtnQkFFUixZQUFZO2dCQUVaLG1CQUFtQjtnQkFDbkIsS0FBSyxRQUFRLENBQUMsSUFBSTtvQkFDaEIsSUFBSSxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO29CQUNuQyxJQUFJLENBQUMsSUFBSTt3QkFDUCxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJOzRCQUN0QyxHQUFHOzRCQUNILElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFOzRCQUMxQixHQUFHOzRCQUNILElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO29CQUM3RCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztvQkFDM0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7b0JBQy9ELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO29CQUMzRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCO3dCQUN4RSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCO3dCQUNwRCxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNQLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO29CQUNwQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7b0JBQ2pDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztvQkFDeEIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO3dCQUNqRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUM7cUJBQzVFO29CQUNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FDaEQsSUFBSSxDQUFDLElBQUksRUFDVCxrQkFBa0IsRUFDbEIsSUFBSSxDQUFDLEtBQUssRUFDVixJQUFJLENBQ0wsQ0FBQztvQkFDRixNQUFNO2dCQUNSLEtBQUssUUFBUSxDQUFDLFFBQVE7b0JBQ3BCLElBQUksUUFBUSxHQUFHLElBQUksaUJBQWlCLEVBQUUsQ0FBQztvQkFDdkMsUUFBUSxDQUFDLElBQUk7d0JBQ1gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSTs0QkFDdEMsR0FBRzs0QkFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRTs0QkFDMUIsR0FBRzs0QkFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNoQyxRQUFRLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQztvQkFDakUsUUFBUSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7b0JBQy9ELFFBQVEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO29CQUNuRSxRQUFRLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztvQkFDL0QsUUFBUSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQjt3QkFDNUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQjt3QkFDcEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDUCxRQUFRLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7b0JBQ3RDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztvQkFDeEMsUUFBUSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO29CQUNyQyxRQUFRLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7b0JBQzVCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFDakUsUUFBUSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDO3FCQUNoRjtvQkFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsc0JBQXNCLENBQ2hELElBQUksQ0FBQyxJQUFJLEVBQ1Qsa0JBQWtCLEVBQ2xCLElBQUksQ0FBQyxLQUFLLEVBQ1YsUUFBUSxDQUNULENBQUM7b0JBQ0YsTUFBTTtnQkFDUixLQUFLLFFBQVEsQ0FBQyxJQUFJO29CQUNoQixJQUFJLElBQUksR0FBRyxJQUFJLGlCQUFpQixFQUFFLENBQUM7b0JBQ25DLElBQUksQ0FBQyxJQUFJO3dCQUNQLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLElBQUk7NEJBQ3RDLEdBQUc7NEJBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7NEJBQzFCLEdBQUc7NEJBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7b0JBQzdELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO29CQUMzRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQztvQkFDL0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7b0JBQzNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7d0JBQ3hFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7d0JBQ3BELENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ1AsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO29CQUNuQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7b0JBQ3BDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztvQkFDakMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO29CQUN4QixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ2pFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQztxQkFDNUU7b0JBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHNCQUFzQixDQUNoRCxJQUFJLENBQUMsSUFBSSxFQUNULGtCQUFrQixFQUNsQixJQUFJLENBQUMsS0FBSyxFQUNWLElBQUksQ0FDTCxDQUFDO29CQUNGLE1BQU07Z0JBQ1IsWUFBWTtnQkFFWixrQkFBa0I7Z0JBQ2xCLEtBQUssUUFBUSxDQUFDLFlBQVk7b0JBQ3hCLElBQUksWUFBWSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7b0JBQ3pDLFlBQVksQ0FBQyxJQUFJO3dCQUNmLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLElBQUk7NEJBQ3RDLEdBQUc7NEJBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7NEJBQzFCLEdBQUc7NEJBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDaEMsWUFBWSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7b0JBQ3JFLFlBQVksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO29CQUNuRSxZQUFZLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQztvQkFDdkUsWUFBWSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7b0JBQ25FLFlBQVksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7d0JBQ2hGLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7d0JBQ3BELENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ1AsWUFBWSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7b0JBQ3ZFLFlBQVksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO29CQUNwQyxZQUFZLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztvQkFDbEMsWUFBWSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQztvQkFDN0UsWUFBWSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO29CQUN4QyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ2pFLFlBQVksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQztxQkFDcEY7b0JBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHNCQUFzQixDQUNoRCxJQUFJLENBQUMsSUFBSSxFQUNULHFCQUFxQixFQUNyQixJQUFJLENBQUMsS0FBSyxFQUNWLFlBQVksQ0FDYixDQUFDO29CQUNGLE1BQU07Z0JBQ1IsS0FBSyxRQUFRLENBQUMsYUFBYTtvQkFDekIsSUFBSSxhQUFhLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztvQkFDMUMsYUFBYSxDQUFDLElBQUk7d0JBQ2hCLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLElBQUk7NEJBQ3RDLEdBQUc7NEJBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7NEJBQzFCLEdBQUc7NEJBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDaEMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7b0JBQ3RFLGFBQWEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO29CQUNwRSxhQUFhLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQztvQkFDeEUsYUFBYSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7b0JBQ3BFLGFBQWEsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7d0JBQ2pGLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7d0JBQ3BELENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ1AsYUFBYSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7b0JBQ3hFLGFBQWEsQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO29CQUN0QyxhQUFhLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztvQkFDbkMsYUFBYSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQztvQkFDOUUsYUFBYSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO29CQUN6QyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ2pFLGFBQWEsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQztxQkFDckY7b0JBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHNCQUFzQixDQUNoRCxJQUFJLENBQUMsSUFBSSxFQUNULHFCQUFxQixFQUNyQixJQUFJLENBQUMsS0FBSyxFQUNWLGFBQWEsQ0FDZCxDQUFDO29CQUNGLE1BQU07Z0JBQ1IsS0FBSyxRQUFRLENBQUMsSUFBSTtvQkFDaEIsSUFBSSxJQUFJLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztvQkFDakMsSUFBSSxDQUFDLElBQUk7d0JBQ1AsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSTs0QkFDdEMsR0FBRzs0QkFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRTs0QkFDMUIsR0FBRzs0QkFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNoQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQztvQkFDN0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7b0JBQzNELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO29CQUMvRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztvQkFDM0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQjt3QkFDeEUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQjt3QkFDcEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDUCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQztvQkFDL0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQztvQkFDckUsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7b0JBQzFCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7b0JBQ3JFLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztvQkFDaEMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO3dCQUNqRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUM7cUJBQzVFO29CQUNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FDaEQsSUFBSSxDQUFDLElBQUksRUFDVCxxQkFBcUIsRUFDckIsSUFBSSxDQUFDLEtBQUssRUFDVixJQUFJLENBQ0wsQ0FBQztvQkFDRixNQUFNO2dCQUNSLEtBQUssUUFBUSxDQUFDLFNBQVM7b0JBQ3JCLElBQUksU0FBUyxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7b0JBQ3RDLFNBQVMsQ0FBQyxJQUFJO3dCQUNaLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLElBQUk7NEJBQ3RDLEdBQUc7NEJBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7NEJBQzFCLEdBQUc7NEJBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDaEMsU0FBUyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7b0JBQ2xFLFNBQVMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO29CQUNoRSxTQUFTLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQztvQkFDcEUsU0FBUyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7b0JBQ2hFLFNBQVMsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7d0JBQzdFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7d0JBQ3BELENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ1AsU0FBUyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7b0JBQ3BFLFNBQVMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO29CQUNwRSxTQUFTLENBQUMsZUFBZSxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO29CQUMxRSxTQUFTLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztvQkFDL0IsU0FBUyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQztvQkFDMUUsU0FBUyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO29CQUNyQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ2pFLFNBQVMsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQztxQkFDakY7b0JBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHNCQUFzQixDQUNoRCxJQUFJLENBQUMsSUFBSSxFQUNULHFCQUFxQixFQUNyQixJQUFJLENBQUMsS0FBSyxFQUNWLFNBQVMsQ0FDVixDQUFDO29CQUNGLE1BQU07Z0JBQ1IsS0FBSyxRQUFRLENBQUMsYUFBYTtvQkFDekIsSUFBSSxhQUFhLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztvQkFDMUMsYUFBYSxDQUFDLElBQUk7d0JBQ2hCLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLElBQUk7NEJBQ3RDLEdBQUc7NEJBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7NEJBQzFCLEdBQUc7NEJBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDaEMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7b0JBQ3RFLGFBQWEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO29CQUNwRSxhQUFhLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQztvQkFDeEUsYUFBYSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7b0JBQ3BFLGFBQWEsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7d0JBQ2pGLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7d0JBQ3BELENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ1AsYUFBYSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7b0JBQ3hFLGFBQWEsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7b0JBQzlFLGFBQWEsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO29CQUNuQyxhQUFhLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO29CQUM5RSxhQUFhLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7b0JBQ3pDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFDakUsYUFBYSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDO3FCQUNyRjtvQkFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsc0JBQXNCLENBQ2hELElBQUksQ0FBQyxJQUFJLEVBQ1QscUJBQXFCLEVBQ3JCLElBQUksQ0FBQyxLQUFLLEVBQ1YsYUFBYSxDQUNkLENBQUM7b0JBQ0YsTUFBTTtnQkFDUixLQUFLLFFBQVEsQ0FBQyxPQUFPO29CQUNuQixJQUFJLE9BQU8sR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO29CQUNwQyxPQUFPLENBQUMsSUFBSTt3QkFDVixJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJOzRCQUN0QyxHQUFHOzRCQUNILElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFOzRCQUMxQixHQUFHOzRCQUNILElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2hDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO29CQUNoRSxPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztvQkFDOUQsT0FBTyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7b0JBQ2xFLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO29CQUM5RCxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCO3dCQUMzRSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCO3dCQUNwRCxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNQLE9BQU8sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO29CQUNsRSxPQUFPLENBQUMsZUFBZSxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO29CQUN4RSxPQUFPLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztvQkFDN0IsT0FBTyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQztvQkFDeEUsT0FBTyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO29CQUNuQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ2pFLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQztxQkFDL0U7b0JBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHNCQUFzQixDQUNoRCxJQUFJLENBQUMsSUFBSSxFQUNULHFCQUFxQixFQUNyQixJQUFJLENBQUMsS0FBSyxFQUNWLE9BQU8sQ0FDUixDQUFDO29CQUNGLE1BQU07Z0JBQ1IsWUFBWTtnQkFFWixvQkFBb0I7Z0JBQ3BCLEtBQUssUUFBUSxDQUFDLElBQUk7b0JBQ2hCLElBQUksSUFBSSxHQUFHLElBQUksaUJBQWlCLEVBQUUsQ0FBQztvQkFDbkMsSUFBSSxDQUFDLElBQUk7d0JBQ1AsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSTs0QkFDdEMsR0FBRzs0QkFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRTs0QkFDMUIsR0FBRzs0QkFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNoQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQztvQkFDN0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7b0JBQzNELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO29CQUMvRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztvQkFDM0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQjt3QkFDeEUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQjt3QkFDcEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDUCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQztvQkFDekUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO29CQUN4QixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ2pFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQztxQkFDNUU7b0JBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHNCQUFzQixDQUNoRCxJQUFJLENBQUMsSUFBSSxFQUNULG1CQUFtQixFQUNuQixJQUFJLENBQUMsS0FBSyxFQUNWLElBQUksQ0FDTCxDQUFDO29CQUNGLE1BQU07Z0JBQ1IsS0FBSyxRQUFRLENBQUMsU0FBUztvQkFDckIsSUFBSSxTQUFTLEdBQUcsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO29CQUN4QyxJQUFJLENBQUMsSUFBSTt3QkFDUCxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJOzRCQUN0QyxHQUFHOzRCQUNILElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFOzRCQUMxQixHQUFHOzRCQUNILElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO29CQUM3RCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztvQkFDM0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7b0JBQy9ELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO29CQUMzRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCO3dCQUN4RSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCO3dCQUNwRCxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNQLFNBQVMsQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUM7b0JBQ3JGLFNBQVMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDO29CQUN4RSxTQUFTLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztvQkFDaEMsU0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO29CQUM3QixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ2pFLFNBQVMsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQztxQkFDakY7b0JBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHNCQUFzQixDQUNoRCxJQUFJLENBQUMsSUFBSSxFQUNULG1CQUFtQixFQUNuQixJQUFJLENBQUMsS0FBSyxFQUNWLFNBQVMsQ0FDVixDQUFDO29CQUNGLE1BQU07Z0JBQ1IsWUFBWTtnQkFFWixxQkFBcUI7Z0JBQ3JCLEtBQUssUUFBUSxDQUFDLEtBQUs7b0JBQ2pCLElBQUksS0FBSyxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztvQkFDckMsS0FBSyxDQUFDLElBQUk7d0JBQ1IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSTs0QkFDdEMsR0FBRzs0QkFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRTs0QkFDMUIsR0FBRzs0QkFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNoQyxLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQztvQkFDOUQsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7b0JBQzVELEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO29CQUNoRSxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztvQkFDNUQsS0FBSyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQjt3QkFDekUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQjt3QkFDcEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDUCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGVBQWU7d0JBQ25ELEtBQUssQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDO29CQUM1RSxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7b0JBQ3pCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFDakUsS0FBSyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDO3FCQUM3RTtvQkFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsc0JBQXNCLENBQ2hELElBQUksQ0FBQyxJQUFJLEVBQ1Qsc0JBQXNCLEVBQ3RCLElBQUksQ0FBQyxLQUFLLEVBQ1YsS0FBSyxDQUNOLENBQUM7b0JBQ0YsTUFBTTtnQkFDUixLQUFLLFFBQVEsQ0FBQyxVQUFVO29CQUN0QixJQUFJLFVBQVUsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7b0JBQzFDLFVBQVUsQ0FBQyxJQUFJO3dCQUNiLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLElBQUk7NEJBQ3RDLEdBQUc7NEJBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7NEJBQzFCLEdBQUc7NEJBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDaEMsVUFBVSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7b0JBQ25FLFVBQVUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO29CQUNqRSxVQUFVLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQztvQkFDckUsVUFBVSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7b0JBQ2pFLFVBQVUsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7d0JBQzlFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7d0JBQ3BELENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ1AsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxlQUFlO3dCQUNuRCxVQUFVLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQztvQkFDakYsVUFBVSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO29CQUM5QixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ2pFLFVBQVUsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQztxQkFDbEY7b0JBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHNCQUFzQixDQUNoRCxJQUFJLENBQUMsSUFBSSxFQUNULHNCQUFzQixFQUN0QixJQUFJLENBQUMsS0FBSyxFQUNWLFVBQVUsQ0FDWCxDQUFDO29CQUNGLE1BQU07Z0JBQ1IsWUFBWTtnQkFFWixnQkFBZ0I7Z0JBQ2hCLEtBQUssUUFBUSxDQUFDLE1BQU07b0JBQ2xCLElBQUksTUFBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7b0JBQ2hDLE1BQU0sQ0FBQyxJQUFJO3dCQUNULElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLElBQUk7NEJBQ3RDLEdBQUc7NEJBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7NEJBQzFCLEdBQUc7NEJBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDaEMsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7b0JBQy9ELE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO29CQUM3RCxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQztvQkFDakUsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7b0JBQzdELE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7d0JBQzFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7d0JBQ3BELENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ1AsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7b0JBQzFCLE1BQU0sQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO29CQUM5QixNQUFNLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO29CQUNqQyxNQUFNLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO29CQUNoQyxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7b0JBQzFCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFDakUsTUFBTSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDO3FCQUM5RTtvQkFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsc0JBQXNCLENBQ2hELElBQUksQ0FBQyxJQUFJLEVBQ1QsY0FBYyxFQUNkLElBQUksQ0FBQyxLQUFLLEVBQ1YsTUFBTSxDQUNQLENBQUM7b0JBQ0YsTUFBTTtnQkFDUixZQUFZO2dCQUVaLHVCQUF1QjtnQkFDdkIsS0FBSyxRQUFRLENBQUMsYUFBYTtvQkFDekIsSUFBSSxhQUFhLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztvQkFDMUMsYUFBYSxDQUFDLElBQUk7d0JBQ2hCLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLElBQUk7NEJBQ3RDLEdBQUc7NEJBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7NEJBQzFCLEdBQUc7NEJBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDaEMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7b0JBQ3RFLGFBQWEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO29CQUNwRSxhQUFhLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQztvQkFDeEUsYUFBYSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7b0JBQ3BFLGFBQWEsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7d0JBQ2pGLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7d0JBQ3BELENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ1AsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTO3dCQUM3QyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQztvQkFDeEUsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTO3dCQUM3QyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQztvQkFDeEUsYUFBYSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7b0JBQzVELGFBQWEsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDO29CQUNoRixhQUFhLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7b0JBQ2pDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFDakUsYUFBYSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDO3FCQUNyRjtvQkFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsc0JBQXNCLENBQ2hELElBQUksQ0FBQyxJQUFJLEVBQ1QsaUJBQWlCLEVBQ2pCLElBQUksQ0FBQyxLQUFLLEVBQ1YsYUFBYSxDQUNkLENBQUM7b0JBQ0YsTUFBTTtnQkFDUixZQUFZO2dCQUVaLGNBQWM7Z0JBQ2QsS0FBSyxRQUFRLENBQUMsSUFBSTtvQkFDaEIsSUFBSSxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO29CQUNuQyxJQUFJLENBQUMsSUFBSTt3QkFDUCxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJOzRCQUN0QyxHQUFHOzRCQUNILElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFOzRCQUMxQixHQUFHOzRCQUNILElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO29CQUM3RCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztvQkFDM0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7b0JBQy9ELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO29CQUMzRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCO3dCQUN4RSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCO3dCQUNwRCxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNQLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsU0FBUzt3QkFDN0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7b0JBQy9ELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsU0FBUzt3QkFDN0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7b0JBQy9ELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO29CQUNyRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQztvQkFDdkUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO29CQUN4QixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ2pFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQztxQkFDNUU7b0JBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHNCQUFzQixDQUNoRCxJQUFJLENBQUMsSUFBSSxFQUNULG1CQUFtQixFQUNuQixJQUFJLENBQUMsS0FBSyxFQUNWLElBQUksQ0FDTCxDQUFDO29CQUNGLE1BQU07Z0JBQ1IsWUFBWTtnQkFFWixpQkFBaUI7Z0JBQ2pCLEtBQUssUUFBUSxDQUFDLE9BQU87b0JBQ25CLElBQUksT0FBTyxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztvQkFDdkMsT0FBTyxDQUFDLElBQUk7d0JBQ1YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSTs0QkFDdEMsR0FBRzs0QkFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRTs0QkFDMUIsR0FBRzs0QkFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNoQyxPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQztvQkFDaEUsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7b0JBQzlELE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO29CQUM5RCxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7b0JBQzNCLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7d0JBQzNFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7d0JBQ3BELENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ1AsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO3dCQUNqRSxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUM7cUJBQy9FO29CQUNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FDaEQsSUFBSSxDQUFDLElBQUksRUFDVCxvQkFBb0IsRUFDcEIsSUFBSSxDQUFDLEtBQUssRUFDVixPQUFPLENBQ1IsQ0FBQztvQkFDRixNQUFNO2dCQUNSLFlBQVk7Z0JBRVosa0JBQWtCO2dCQUNsQixLQUFLLFFBQVEsQ0FBQyxRQUFRO29CQUNwQixJQUFJLFFBQVEsR0FBRyxJQUFJLHNCQUFzQixFQUFFLENBQUM7b0JBQzVDLFFBQVEsQ0FBQyxJQUFJO3dCQUNYLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLElBQUk7NEJBQ3RDLEdBQUc7NEJBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7NEJBQzFCLEdBQUc7NEJBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDaEMsUUFBUSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7b0JBQ2pFLFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO29CQUMvRCxRQUFRLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQztvQkFDbkUsUUFBUSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7b0JBQy9ELFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztvQkFDNUIsUUFBUSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQjt3QkFDNUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQjt3QkFDcEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDUCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ2pFLFFBQVEsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQztxQkFDaEY7b0JBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHNCQUFzQixDQUNoRCxJQUFJLENBQUMsSUFBSSxFQUNULHdCQUF3QixFQUN4QixJQUFJLENBQUMsS0FBSyxFQUNWLFFBQVEsQ0FDVCxDQUFDO29CQUNGLE1BQU07Z0JBQ1IsWUFBWTtnQkFFWixrQkFBa0I7Z0JBQ2xCLEtBQUssUUFBUSxDQUFDLFFBQVE7b0JBQ3BCLElBQUksUUFBUSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7b0JBQ3JDLFFBQVEsQ0FBQyxJQUFJO3dCQUNYLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLElBQUk7NEJBQ3RDLEdBQUc7NEJBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7NEJBQzFCLEdBQUc7NEJBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDaEMsUUFBUSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7b0JBQ2pFLFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO29CQUMvRCxRQUFRLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztvQkFDL0QsUUFBUSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUM7b0JBQzNFLFFBQVEsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7d0JBQzVFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7d0JBQ3BELENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ1AsUUFBUSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO29CQUM1QixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ2pFLFFBQVEsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQztxQkFDaEY7b0JBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHNCQUFzQixDQUNoRCxJQUFJLENBQUMsSUFBSSxFQUNULGlCQUFpQixFQUNqQixJQUFJLENBQUMsS0FBSyxFQUNWLFFBQVEsQ0FDVCxDQUFDO29CQUNGLE1BQU07Z0JBQ1IsWUFBWTtnQkFFWjtvQkFDRSxNQUFNO2FBQ1Q7UUFDSCxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBQ0QsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLFVBQVU7WUFDcEIsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRTtnQkFDcEMsSUFBSSxJQUFJLEdBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSTtvQkFDdEMsR0FBRztvQkFDSCxPQUFPLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUU7b0JBQzNDLEdBQUc7b0JBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0IsUUFBUSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRTtvQkFDdEMsaUJBQWlCO29CQUNqQixLQUFLLFFBQVEsQ0FBQyxJQUFJO3dCQUNoQixJQUFJLElBQUksR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO3dCQUNoQyxJQUFJLENBQUMsSUFBSTs0QkFDUCxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJO2dDQUN0QyxHQUFHO2dDQUNILE9BQU8sQ0FBQyxVQUFVLENBQUMsWUFBWTtnQ0FDL0IsR0FBRztnQ0FDSCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUNoQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQzt3QkFDN0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7d0JBQzNELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO3dCQUMvRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQzt3QkFDM0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQjs0QkFDeEUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQjs0QkFDcEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDUCxJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7d0JBQzNCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsU0FBUzs0QkFDN0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7d0JBQy9ELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsU0FBUzs0QkFDN0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7d0JBQy9ELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO3dCQUNuQixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7NEJBQ2pFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQzt5QkFDNUU7d0JBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHNCQUFzQixDQUNoRCxJQUFJLENBQUMsSUFBSSxFQUNULGdCQUFnQixFQUNoQixJQUFJLENBQUMsS0FBSyxFQUNWLElBQUksQ0FDTCxDQUFDO3dCQUNGLE1BQU07b0JBQ1IsS0FBSyxRQUFRLENBQUMsSUFBSTt3QkFDaEIsSUFBSSxJQUFJLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQzt3QkFDaEMsSUFBSSxDQUFDLElBQUk7NEJBQ1AsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSTtnQ0FDdEMsR0FBRztnQ0FDSCxPQUFPLENBQUMsVUFBVSxDQUFDLFlBQVk7Z0NBQy9CLEdBQUc7Z0NBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7d0JBQzdELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO3dCQUMzRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQzt3QkFDL0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7d0JBQzNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7NEJBQ3hFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7NEJBQ3BELENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ1AsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTOzRCQUM3QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQzt3QkFDL0QsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTOzRCQUM3QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQzt3QkFDL0QsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO3dCQUMzQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQzt3QkFDbkIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOzRCQUNqRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUM7eUJBQzVFO3dCQUNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FDaEQsSUFBSSxDQUFDLElBQUksRUFDVCxnQkFBZ0IsRUFDaEIsSUFBSSxDQUFDLEtBQUssRUFDVixJQUFJLENBQ0wsQ0FBQzt3QkFDRixNQUFNO29CQUNSLEtBQUssUUFBUSxDQUFDLEtBQUs7d0JBQ2pCLElBQUksS0FBSyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7d0JBQ2pDLEtBQUssQ0FBQyxJQUFJOzRCQUNSLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLElBQUk7Z0NBQ3RDLEdBQUc7Z0NBQ0gsT0FBTyxDQUFDLFVBQVUsQ0FBQyxZQUFZO2dDQUMvQixHQUFHO2dDQUNILElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ2hDLEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO3dCQUM5RCxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQzt3QkFDNUQsS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7d0JBQ2hFLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO3dCQUM1RCxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCOzRCQUN6RSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCOzRCQUNwRCxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUNQLEtBQUssQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQzt3QkFDN0IsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7d0JBQ3BCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs0QkFDakUsS0FBSyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDO3lCQUM3RTt3QkFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsc0JBQXNCLENBQ2hELElBQUksQ0FBQyxJQUFJLEVBQ1QsZ0JBQWdCLEVBQ2hCLElBQUksQ0FBQyxLQUFLLEVBQ1YsS0FBSyxDQUNOLENBQUM7d0JBQ0YsTUFBTTtvQkFDUixLQUFLLFFBQVEsQ0FBQyxNQUFNO3dCQUNsQixJQUFJLE1BQU0sR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO3dCQUNsQyxNQUFNLENBQUMsSUFBSTs0QkFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJO2dDQUN0QyxHQUFHO2dDQUNILE9BQU8sQ0FBQyxVQUFVLENBQUMsWUFBWTtnQ0FDL0IsR0FBRztnQ0FDSCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUNoQyxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQzt3QkFDL0QsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7d0JBQzdELE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO3dCQUNqRSxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQzt3QkFDN0QsTUFBTSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQjs0QkFDMUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQjs0QkFDcEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDUCxNQUFNLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7d0JBQy9CLElBQUksV0FBVyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7d0JBQ3BDLFdBQVcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO3dCQUM3RCxXQUFXLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQzt3QkFDL0QsTUFBTSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7d0JBQ2pDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO3dCQUNyQixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7NEJBQ2pFLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQzt5QkFDOUU7d0JBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHNCQUFzQixDQUNoRCxJQUFJLENBQUMsSUFBSSxFQUNULGdCQUFnQixFQUNoQixJQUFJLENBQUMsS0FBSyxFQUNWLE1BQU0sQ0FDUCxDQUFDO3dCQUNGLE1BQU07b0JBQ1IsS0FBSyxRQUFRLENBQUMsR0FBRzt3QkFDZixJQUFJLEdBQUcsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO3dCQUMvQixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQzt3QkFDaEgsR0FBRyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7d0JBQzVELEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO3dCQUMxRCxHQUFHLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQzt3QkFDOUQsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7d0JBQzFELEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDcEksR0FBRyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDO3dCQUN6QixHQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQzt3QkFDbEIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOzRCQUNqRSxHQUFHLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUM7eUJBQzNFO3dCQUNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FDaEQsSUFBSSxDQUFDLElBQUksRUFDVCxnQkFBZ0IsRUFDaEIsSUFBSSxDQUFDLEtBQUssRUFDVixHQUFHLENBQ0osQ0FBQzt3QkFDRixNQUFNO29CQUNSLFlBQVk7b0JBSVosa0JBQWtCO29CQUNsQixLQUFLLFFBQVEsQ0FBQyxJQUFJO3dCQUNoQixJQUFJLElBQUksR0FBRyxJQUFJLGlCQUFpQixFQUFFLENBQUM7d0JBQ25DLElBQUksQ0FBQyxJQUFJOzRCQUNQLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLElBQUk7Z0NBQ3RDLEdBQUc7Z0NBQ0gsT0FBTyxDQUFDLFVBQVUsQ0FBQyxZQUFZO2dDQUMvQixHQUFHO2dDQUNILElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO3dCQUM3RCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQzt3QkFDM0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7d0JBQy9ELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO3dCQUMzRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCOzRCQUN4RSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCOzRCQUNwRCxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUNQLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQzt3QkFDdEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO3dCQUNwQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7d0JBQ2pDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO3dCQUNuQixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7NEJBQ2pFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQzt5QkFDNUU7d0JBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHNCQUFzQixDQUNoRCxJQUFJLENBQUMsSUFBSSxFQUNULGtCQUFrQixFQUNsQixJQUFJLENBQUMsS0FBSyxFQUNWLElBQUksQ0FDTCxDQUFDO3dCQUNGLE1BQU07b0JBRVIsS0FBSyxRQUFRLENBQUMsUUFBUTt3QkFDcEIsSUFBSSxRQUFRLEdBQUcsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO3dCQUN2QyxRQUFRLENBQUMsSUFBSTs0QkFDWCxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJO2dDQUN0QyxHQUFHO2dDQUNILE9BQU8sQ0FBQyxVQUFVLENBQUMsWUFBWTtnQ0FDL0IsR0FBRztnQ0FDSCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUNoQyxRQUFRLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQzt3QkFDakUsUUFBUSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7d0JBQy9ELFFBQVEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO3dCQUNuRSxRQUFRLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQzt3QkFDL0QsUUFBUSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQjs0QkFDNUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQjs0QkFDcEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDUCxRQUFRLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7d0JBQ3RDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQzt3QkFDeEMsUUFBUSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO3dCQUNyQyxRQUFRLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQzt3QkFDdkIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOzRCQUNqRSxRQUFRLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUM7eUJBQ2hGO3dCQUNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FDaEQsSUFBSSxDQUFDLElBQUksRUFDVCxrQkFBa0IsRUFDbEIsSUFBSSxDQUFDLEtBQUssRUFDVixRQUFRLENBQ1QsQ0FBQzt3QkFDRixNQUFNO29CQUVSLEtBQUssUUFBUSxDQUFDLElBQUk7d0JBQ2hCLElBQUksSUFBSSxHQUFHLElBQUksaUJBQWlCLEVBQUUsQ0FBQzt3QkFDbkMsSUFBSSxDQUFDLElBQUk7NEJBQ1AsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSTtnQ0FDdEMsR0FBRztnQ0FDSCxPQUFPLENBQUMsVUFBVSxDQUFDLFlBQVk7Z0NBQy9CLEdBQUc7Z0NBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7d0JBQzdELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO3dCQUMzRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQzt3QkFDL0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7d0JBQzNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7NEJBQ3hFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7NEJBQ3BELENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ1AsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO3dCQUNuQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7d0JBQ3BDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQzt3QkFDakMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7d0JBQ25CLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs0QkFDakUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDO3lCQUM1RTt3QkFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsc0JBQXNCLENBQ2hELElBQUksQ0FBQyxJQUFJLEVBQ1Qsa0JBQWtCLEVBQ2xCLElBQUksQ0FBQyxLQUFLLEVBQ1YsSUFBSSxDQUNMLENBQUM7d0JBQ0YsTUFBTTtvQkFDUixZQUFZO29CQUVaLGtCQUFrQjtvQkFDbEIsS0FBSyxRQUFRLENBQUMsWUFBWTt3QkFDeEIsSUFBSSxZQUFZLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQzt3QkFDekMsWUFBWSxDQUFDLElBQUk7NEJBQ2YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSTtnQ0FDdEMsR0FBRztnQ0FDSCxPQUFPLENBQUMsVUFBVSxDQUFDLFlBQVk7Z0NBQy9CLEdBQUc7Z0NBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDaEMsWUFBWSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7d0JBQ3JFLFlBQVksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO3dCQUNuRSxZQUFZLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQzt3QkFDdkUsWUFBWSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7d0JBQ25FLFlBQVksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7NEJBQ2hGLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7NEJBQ3BELENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ1AsWUFBWSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7d0JBQ3ZFLFlBQVksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO3dCQUNwQyxZQUFZLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQzt3QkFDbEMsWUFBWSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQzt3QkFDN0UsWUFBWSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7d0JBQ25DLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs0QkFDakUsWUFBWSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDO3lCQUNwRjt3QkFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsc0JBQXNCLENBQ2hELElBQUksQ0FBQyxJQUFJLEVBQ1QscUJBQXFCLEVBQ3JCLElBQUksQ0FBQyxLQUFLLEVBQ1YsWUFBWSxDQUNiLENBQUM7d0JBQ0YsTUFBTTtvQkFDUixLQUFLLFFBQVEsQ0FBQyxhQUFhO3dCQUN6QixJQUFJLGFBQWEsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO3dCQUMxQyxhQUFhLENBQUMsSUFBSTs0QkFDaEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSTtnQ0FDdEMsR0FBRztnQ0FDSCxPQUFPLENBQUMsVUFBVSxDQUFDLFlBQVk7Z0NBQy9CLEdBQUc7Z0NBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDaEMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7d0JBQ3RFLGFBQWEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO3dCQUNwRSxhQUFhLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQzt3QkFDeEUsYUFBYSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7d0JBQ3BFLGFBQWEsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7NEJBQ2pGLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7NEJBQ3BELENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ1AsYUFBYSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7d0JBQ3hFLGFBQWEsQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO3dCQUN0QyxhQUFhLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQzt3QkFDbkMsYUFBYSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQzt3QkFDOUUsYUFBYSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7d0JBQ3BDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs0QkFDakUsYUFBYSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDO3lCQUNyRjt3QkFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsc0JBQXNCLENBQ2hELElBQUksQ0FBQyxJQUFJLEVBQ1QscUJBQXFCLEVBQ3JCLElBQUksQ0FBQyxLQUFLLEVBQ1YsYUFBYSxDQUNkLENBQUM7d0JBQ0YsTUFBTTtvQkFDUixLQUFLLFFBQVEsQ0FBQyxJQUFJO3dCQUNoQixJQUFJLElBQUksR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO3dCQUNqQyxJQUFJLENBQUMsSUFBSTs0QkFDUCxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJO2dDQUN0QyxHQUFHO2dDQUNILE9BQU8sQ0FBQyxVQUFVLENBQUMsWUFBWTtnQ0FDL0IsR0FBRztnQ0FDSCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUNoQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQzt3QkFDN0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7d0JBQzNELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO3dCQUMvRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQzt3QkFDM0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQjs0QkFDeEUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQjs0QkFDcEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDUCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQzt3QkFDL0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQzt3QkFDckUsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7d0JBQzFCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7d0JBQ3JFLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO3dCQUMzQixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7NEJBQ2pFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQzt5QkFDNUU7d0JBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHNCQUFzQixDQUNoRCxJQUFJLENBQUMsSUFBSSxFQUNULHFCQUFxQixFQUNyQixJQUFJLENBQUMsS0FBSyxFQUNWLElBQUksQ0FDTCxDQUFDO3dCQUNGLE1BQU07b0JBQ1IsS0FBSyxRQUFRLENBQUMsU0FBUzt3QkFDckIsSUFBSSxTQUFTLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQzt3QkFDdEMsU0FBUyxDQUFDLElBQUk7NEJBQ1osSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSTtnQ0FDdEMsR0FBRztnQ0FDSCxPQUFPLENBQUMsVUFBVSxDQUFDLFlBQVk7Z0NBQy9CLEdBQUc7Z0NBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDaEMsU0FBUyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7d0JBQ2xFLFNBQVMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO3dCQUNoRSxTQUFTLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQzt3QkFDcEUsU0FBUyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7d0JBQ2hFLFNBQVMsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7NEJBQzdFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7NEJBQ3BELENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ1AsU0FBUyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7d0JBQ3BFLFNBQVMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO3dCQUNwRSxTQUFTLENBQUMsZUFBZSxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO3dCQUMxRSxTQUFTLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQzt3QkFDL0IsU0FBUyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQzt3QkFDMUUsU0FBUyxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7d0JBQ2hDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs0QkFDakUsU0FBUyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDO3lCQUNqRjt3QkFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsc0JBQXNCLENBQ2hELElBQUksQ0FBQyxJQUFJLEVBQ1QscUJBQXFCLEVBQ3JCLElBQUksQ0FBQyxLQUFLLEVBQ1YsU0FBUyxDQUNWLENBQUM7d0JBQ0YsTUFBTTtvQkFDUixLQUFLLFFBQVEsQ0FBQyxhQUFhO3dCQUN6QixJQUFJLGFBQWEsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO3dCQUMxQyxhQUFhLENBQUMsSUFBSTs0QkFDaEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSTtnQ0FDdEMsR0FBRztnQ0FDSCxPQUFPLENBQUMsVUFBVSxDQUFDLFlBQVk7Z0NBQy9CLEdBQUc7Z0NBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDaEMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7d0JBQ3RFLGFBQWEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO3dCQUNwRSxhQUFhLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQzt3QkFDeEUsYUFBYSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7d0JBQ3BFLGFBQWEsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7NEJBQ2pGLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7NEJBQ3BELENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ1AsYUFBYSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7d0JBQ3hFLGFBQWEsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7d0JBQzlFLGFBQWEsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO3dCQUNuQyxhQUFhLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO3dCQUM5RSxhQUFhLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQzt3QkFDcEMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOzRCQUNqRSxhQUFhLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUM7eUJBQ3JGO3dCQUNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FDaEQsSUFBSSxDQUFDLElBQUksRUFDVCxxQkFBcUIsRUFDckIsSUFBSSxDQUFDLEtBQUssRUFDVixhQUFhLENBQ2QsQ0FBQzt3QkFDRixNQUFNO29CQUNSLEtBQUssUUFBUSxDQUFDLE9BQU87d0JBQ25CLElBQUksT0FBTyxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7d0JBQ3BDLE9BQU8sQ0FBQyxJQUFJOzRCQUNWLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLElBQUk7Z0NBQ3RDLEdBQUc7Z0NBQ0gsT0FBTyxDQUFDLFVBQVUsQ0FBQyxZQUFZO2dDQUMvQixHQUFHO2dDQUNILElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ2hDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO3dCQUNoRSxPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQzt3QkFDOUQsT0FBTyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7d0JBQ2xFLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO3dCQUM5RCxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCOzRCQUMzRSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCOzRCQUNwRCxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUNQLE9BQU8sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO3dCQUNsRSxPQUFPLENBQUMsZUFBZSxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO3dCQUN4RSxPQUFPLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQzt3QkFDN0IsT0FBTyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQzt3QkFDeEUsT0FBTyxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7d0JBQzlCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs0QkFDakUsT0FBTyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDO3lCQUMvRTt3QkFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsc0JBQXNCLENBQ2hELElBQUksQ0FBQyxJQUFJLEVBQ1QscUJBQXFCLEVBQ3JCLElBQUksQ0FBQyxLQUFLLEVBQ1YsT0FBTyxDQUNSLENBQUM7d0JBQ0YsTUFBTTtvQkFDUixZQUFZO29CQUVaLG9CQUFvQjtvQkFDcEIsS0FBSyxRQUFRLENBQUMsSUFBSTt3QkFDaEIsSUFBSSxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO3dCQUNuQyxJQUFJLENBQUMsSUFBSTs0QkFDUCxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJO2dDQUN0QyxHQUFHO2dDQUNILE9BQU8sQ0FBQyxVQUFVLENBQUMsWUFBWTtnQ0FDL0IsR0FBRztnQ0FDSCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUNoQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQzt3QkFDN0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7d0JBQzNELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO3dCQUMvRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQzt3QkFDM0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQjs0QkFDeEUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQjs0QkFDcEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDUCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQzt3QkFDekUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7d0JBQ25CLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs0QkFDakUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDO3lCQUM1RTt3QkFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsc0JBQXNCLENBQ2hELElBQUksQ0FBQyxJQUFJLEVBQ1QsbUJBQW1CLEVBQ25CLElBQUksQ0FBQyxLQUFLLEVBQ1YsSUFBSSxDQUNMLENBQUM7d0JBQ0YsTUFBTTtvQkFDUixLQUFLLFFBQVEsQ0FBQyxTQUFTO3dCQUNyQixJQUFJLFNBQVMsR0FBRyxJQUFJLGlCQUFpQixFQUFFLENBQUM7d0JBQ3hDLElBQUksQ0FBQyxJQUFJOzRCQUNQLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLElBQUk7Z0NBQ3RDLEdBQUc7Z0NBQ0gsT0FBTyxDQUFDLFVBQVUsQ0FBQyxZQUFZO2dDQUMvQixHQUFHO2dDQUNILElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO3dCQUM3RCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQzt3QkFDM0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7d0JBQy9ELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO3dCQUMzRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCOzRCQUN4RSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCOzRCQUNwRCxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUNQLFNBQVMsQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUM7d0JBQ3JGLFNBQVMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDO3dCQUN4RSxTQUFTLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQzt3QkFDaEMsU0FBUyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7d0JBQ3hCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs0QkFDakUsU0FBUyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDO3lCQUNqRjt3QkFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsc0JBQXNCLENBQ2hELElBQUksQ0FBQyxJQUFJLEVBQ1QsbUJBQW1CLEVBQ25CLElBQUksQ0FBQyxLQUFLLEVBQ1YsU0FBUyxDQUNWLENBQUM7d0JBQ0YsTUFBTTtvQkFDUixZQUFZO29CQUVaLHFCQUFxQjtvQkFDckIsS0FBSyxRQUFRLENBQUMsS0FBSzt3QkFDakIsSUFBSSxLQUFLLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO3dCQUNyQyxLQUFLLENBQUMsSUFBSTs0QkFDUixJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJO2dDQUN0QyxHQUFHO2dDQUNILE9BQU8sQ0FBQyxVQUFVLENBQUMsWUFBWTtnQ0FDL0IsR0FBRztnQ0FDSCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUNoQyxLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQzt3QkFDOUQsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7d0JBQzVELEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO3dCQUNoRSxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQzt3QkFDNUQsS0FBSyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQjs0QkFDekUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQjs0QkFDcEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDUCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGVBQWU7NEJBQ25ELEtBQUssQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDO3dCQUM1RSxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQzt3QkFDcEIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOzRCQUNqRSxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUM7eUJBQzdFO3dCQUNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FDaEQsSUFBSSxDQUFDLElBQUksRUFDVCxzQkFBc0IsRUFDdEIsSUFBSSxDQUFDLEtBQUssRUFDVixLQUFLLENBQ04sQ0FBQzt3QkFDRixNQUFNO29CQUNSLEtBQUssUUFBUSxDQUFDLFVBQVU7d0JBQ3RCLElBQUksVUFBVSxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQzt3QkFDMUMsVUFBVSxDQUFDLElBQUk7NEJBQ2IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSTtnQ0FDdEMsR0FBRztnQ0FDSCxPQUFPLENBQUMsVUFBVSxDQUFDLFlBQVk7Z0NBQy9CLEdBQUc7Z0NBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDaEMsVUFBVSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7d0JBQ25FLFVBQVUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO3dCQUNqRSxVQUFVLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQzt3QkFDckUsVUFBVSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7d0JBQ2pFLFVBQVUsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7NEJBQzlFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7NEJBQ3BELENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ1AsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxlQUFlOzRCQUNuRCxVQUFVLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQzt3QkFDakYsVUFBVSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7d0JBQ3pCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs0QkFDakUsVUFBVSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDO3lCQUNsRjt3QkFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsc0JBQXNCLENBQ2hELElBQUksQ0FBQyxJQUFJLEVBQ1Qsc0JBQXNCLEVBQ3RCLElBQUksQ0FBQyxLQUFLLEVBQ1YsVUFBVSxDQUNYLENBQUM7d0JBQ0YsTUFBTTtvQkFDUixZQUFZO29CQUNaLGdCQUFnQjtvQkFDaEIsS0FBSyxRQUFRLENBQUMsTUFBTTt3QkFDbEIsSUFBSSxNQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQzt3QkFDaEMsTUFBTSxDQUFDLElBQUk7NEJBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSTtnQ0FDdEMsR0FBRztnQ0FDSCxPQUFPLENBQUMsVUFBVSxDQUFDLFlBQVk7Z0NBQy9CLEdBQUc7Z0NBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDaEMsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7d0JBQy9ELE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO3dCQUM3RCxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQzt3QkFDakUsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7d0JBQzdELE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7NEJBQzFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7NEJBQ3BELENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ1AsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7d0JBQzFCLE1BQU0sQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO3dCQUM5QixNQUFNLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO3dCQUNqQyxNQUFNLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO3dCQUNoQyxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQzt3QkFDckIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOzRCQUNqRSxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUM7eUJBQzlFO3dCQUNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FDaEQsSUFBSSxDQUFDLElBQUksRUFDVCxjQUFjLEVBQ2QsSUFBSSxDQUFDLEtBQUssRUFDVixNQUFNLENBQ1AsQ0FBQzt3QkFDRixNQUFNO29CQUNSLFlBQVk7b0JBRVosdUJBQXVCO29CQUN2QixLQUFLLFFBQVEsQ0FBQyxhQUFhO3dCQUN6QixJQUFJLGFBQWEsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO3dCQUMxQyxhQUFhLENBQUMsSUFBSTs0QkFDaEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSTtnQ0FDdEMsR0FBRztnQ0FDSCxPQUFPLENBQUMsVUFBVSxDQUFDLFlBQVk7Z0NBQy9CLEdBQUc7Z0NBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDaEMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7d0JBQ3RFLGFBQWEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO3dCQUNwRSxhQUFhLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQzt3QkFDeEUsYUFBYSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7d0JBQ3BFLGFBQWEsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7NEJBQ2pGLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7NEJBQ3BELENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ1AsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTOzRCQUM3QyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQzt3QkFDeEUsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTOzRCQUM3QyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQzt3QkFDeEUsYUFBYSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7d0JBQzVELGFBQWEsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDO3dCQUNoRixhQUFhLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQzt3QkFDNUIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOzRCQUNqRSxhQUFhLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUM7eUJBQ3JGO3dCQUNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FDaEQsSUFBSSxDQUFDLElBQUksRUFDVCxpQkFBaUIsRUFDakIsSUFBSSxDQUFDLEtBQUssRUFDVixhQUFhLENBQ2QsQ0FBQzt3QkFDRixNQUFNO29CQUNSLFlBQVk7b0JBRVosY0FBYztvQkFDZCxLQUFLLFFBQVEsQ0FBQyxJQUFJO3dCQUNoQixJQUFJLElBQUksR0FBRyxJQUFJLGlCQUFpQixFQUFFLENBQUM7d0JBQ25DLElBQUksQ0FBQyxJQUFJOzRCQUNQLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLElBQUk7Z0NBQ3RDLEdBQUc7Z0NBQ0gsT0FBTyxDQUFDLFVBQVUsQ0FBQyxZQUFZO2dDQUMvQixHQUFHO2dDQUNILElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO3dCQUM3RCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQzt3QkFDM0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7d0JBQy9ELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO3dCQUMzRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCOzRCQUN4RSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCOzRCQUNwRCxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUNQLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsU0FBUzs0QkFDN0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7d0JBQy9ELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsU0FBUzs0QkFDN0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7d0JBQy9ELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO3dCQUNyRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQzt3QkFDdkUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7d0JBQ25CLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs0QkFDakUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDO3lCQUM1RTt3QkFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsc0JBQXNCLENBQ2hELElBQUksQ0FBQyxJQUFJLEVBQ1QsbUJBQW1CLEVBQ25CLElBQUksQ0FBQyxLQUFLLEVBQ1YsSUFBSSxDQUNMLENBQUM7d0JBQ0YsTUFBTTtvQkFDUixZQUFZO29CQUVaLGlCQUFpQjtvQkFDakIsS0FBSyxRQUFRLENBQUMsT0FBTzt3QkFDbkIsSUFBSSxPQUFPLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO3dCQUN2QyxPQUFPLENBQUMsSUFBSTs0QkFDVixJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJO2dDQUN0QyxHQUFHO2dDQUNILE9BQU8sQ0FBQyxVQUFVLENBQUMsWUFBWTtnQ0FDL0IsR0FBRztnQ0FDSCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUNoQyxPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQzt3QkFDaEUsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7d0JBQzlELE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO3dCQUM5RCxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCOzRCQUMzRSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCOzRCQUNwRCxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUNQLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO3dCQUN0QixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7NEJBQ2pFLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQzt5QkFDL0U7d0JBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHNCQUFzQixDQUNoRCxJQUFJLENBQUMsSUFBSSxFQUNULG9CQUFvQixFQUNwQixJQUFJLENBQUMsS0FBSyxFQUNWLE9BQU8sQ0FDUixDQUFDO3dCQUNGLE1BQU07b0JBQ1IsWUFBWTtvQkFFWixrQkFBa0I7b0JBQ2xCLEtBQUssUUFBUSxDQUFDLFFBQVE7d0JBQ3BCLElBQUksUUFBUSxHQUFHLElBQUksc0JBQXNCLEVBQUUsQ0FBQzt3QkFDNUMsUUFBUSxDQUFDLElBQUk7NEJBQ1gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSTtnQ0FDdEMsR0FBRztnQ0FDSCxPQUFPLENBQUMsVUFBVSxDQUFDLFlBQVk7Z0NBQy9CLEdBQUc7Z0NBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDaEMsUUFBUSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7d0JBQ2pFLFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO3dCQUMvRCxRQUFRLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQzt3QkFDbkUsUUFBUSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7d0JBQy9ELFFBQVEsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7NEJBQzVFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7NEJBQ3BELENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ1AsUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7d0JBQ3ZCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs0QkFDakUsUUFBUSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDO3lCQUNoRjt3QkFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsc0JBQXNCLENBQ2hELElBQUksQ0FBQyxJQUFJLEVBQ1Qsd0JBQXdCLEVBQ3hCLElBQUksQ0FBQyxLQUFLLEVBQ1YsUUFBUSxDQUNULENBQUM7d0JBQ0YsTUFBTTtvQkFDUixZQUFZO29CQUVaLGtCQUFrQjtvQkFDbEIsS0FBSyxRQUFRLENBQUMsUUFBUTt3QkFDcEIsSUFBSSxRQUFRLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQzt3QkFDckMsUUFBUSxDQUFDLElBQUk7NEJBQ1gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSTtnQ0FDdEMsR0FBRztnQ0FDSCxPQUFPLENBQUMsVUFBVSxDQUFDLFlBQVk7Z0NBQy9CLEdBQUc7Z0NBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDaEMsUUFBUSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7d0JBQ2pFLFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO3dCQUMvRCxRQUFRLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQzt3QkFDL0QsUUFBUSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQjs0QkFDNUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQjs0QkFDcEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDUCxRQUFRLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQzt3QkFDM0UsUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7d0JBQ3ZCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs0QkFDakUsUUFBUSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDO3lCQUNoRjt3QkFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsc0JBQXNCLENBQ2hELElBQUksQ0FBQyxJQUFJLEVBQ1QsaUJBQWlCLEVBQ2pCLElBQUksQ0FBQyxLQUFLLEVBQ1YsUUFBUSxDQUNULENBQUM7d0JBQ0YsTUFBTTtvQkFDUixZQUFZO29CQUVaO3dCQUNFLE1BQU07aUJBQ1Q7YUFDRjtJQUNMLENBQUM7K0dBditDVSw2QkFBNkI7bUdBQTdCLDZCQUE2QiwyU0FDYixnQkFBZ0Isa0RDcEQ3Qyx5Q0FDQSwyQ0QrQ1ksWUFBWSw4QkFBRSxXQUFXLDhCQUFFLG1CQUFtQjs7NEZBRzdDLDZCQUE2QjtrQkFQekMsU0FBUzsrQkFDRSx3QkFBd0IsY0FFdEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxXQUNoRCxDQUFDLHNCQUFzQixFQUFFLGdCQUFnQixDQUFDOzRIQUdKLElBQUk7c0JBQWxELFNBQVM7dUJBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQUNwQyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDb250YWluZXJSZWYsXHJcbiAgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcclxuICBOT19FUlJPUlNfU0NIRU1BXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUdyb3VwRGlyZWN0aXZlLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRGF0YVR5cGUgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvRW51bXMvRW51bXMnO1xyXG5pbXBvcnQgeyBJbnB1dFR5cGUgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvRW51bXMvSW5wdXRUeXBlJztcclxuaW1wb3J0IHsgUGlja2VyVHlwZSB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9FbnVtcy9QaWNrZXJUeXBlJztcclxuaW1wb3J0IHsgU2VsZWN0TW9kZSB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9FbnVtcy9TZWxlY3RNb2RlJztcclxuaW1wb3J0IHsgU3RhcnRWaWV3IH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL0VudW1zL1N0YXJ0Vmlldyc7XHJcbmltcG9ydCB7IERhdGVQaWNrZXJPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL01vZGVscy9EYXRlUGlja2VyT3B0aW9ucyc7XHJcbmltcG9ydCB7IERyb3Bkb3duT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9Nb2RlbHMvRHJvcGRvd25PcHRpb25zJztcclxuaW1wb3J0IHsgRmlsZVVwbG9hZE9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvTW9kZWxzL0ZpbGVVcGxvYWRPcHRpb25zJztcclxuaW1wb3J0IHsgSHRtbEVkaXRvck9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvTW9kZWxzL0h0bWxFZGl0b3JPcHRpb25zJztcclxuaW1wb3J0IHsgSW1hZ2VVcGxvYWRPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL01vZGVscy9JbWFnZVVwbG9hZE9wdGlvbnMnO1xyXG5pbXBvcnQgeyBNYXBBdXRvQ29tcGxldGVPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL01vZGVscy9NYXBBdXRvQ29tcGxldGVPcHRpb25zJztcclxuaW1wb3J0IHsgUGhvbmVPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL01vZGVscy9QaG9uZU9wdGlvbnMnO1xyXG5pbXBvcnQgeyBSYW5nZU51bWJlciB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9Nb2RlbHMvUmFuZ2VOdW1iZXInO1xyXG5pbXBvcnQgeyBSZXBlYXRlckZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL01vZGVscy9SZXBlYXRlckZpZWxkJztcclxuaW1wb3J0IHsgVGV4dEFyZWFPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL01vZGVscy9UZXh0QXJlYU9wdGlvbnMnO1xyXG5pbXBvcnQgeyBUZXh0Qm94T3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9Nb2RlbHMvVGV4dEJveE9wdGlvbnMnO1xyXG5pbXBvcnQgeyBUb2dnbGVTbGlkZU9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvTW9kZWxzL1RvZ2dsZVNsaWRlT3B0aW9ucyc7XHJcbmltcG9ydCB7IFJlbmRlckNvbXBvbmVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvc2VydmljZXMvcmVuZGVyLWNvbXBvbmVudC1zZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEYXRlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9EYXRlVGltZVBpY2tlci9EYXRlVGltZVBpY2tlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEcm9wZG93bkxpc3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9Ecm9wZG93bkxpc3QvRHJvcGRvd25MaXN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZpbGVVcGxvYWRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9GaWxlVXBsb2FkL0ZpbGVVcGxvYWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSHRtbEVkaXRvckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL0h0bWxFZGl0b3IvSHRtbEVkaXRvci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJbWFnZVVwbG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vSW1hZ2VVcGxvYWQvSW1hZ2VVcGxvYWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWFwQXV0b0NvbXBsZXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vTWFwQXV0b0NvbXBsZXRlL01hcEF1dG9Db21wbGV0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQaG9uZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL1Bob25lL1Bob25lLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRleHRBcmVhQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vVGV4dEFyZWEvVGV4dEFyZWEuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGV4dGJveENvbXBvbmVudCB9IGZyb20gJy4uLy4uL1RleHRCb3gvVGV4dEJveC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUb2dnbGVzbGlkZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL1RvZ2dsZXNsaWRlL1RvZ2dsZXNsaWRlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENoZWNrQm94T3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9Nb2RlbHMvQ2hlY2tCb3hPcHRpb25zJztcclxuaW1wb3J0IHsgQ2hlY2tCb3hDb21wb25lbnQgfSBmcm9tICcuLi8uLi9DaGVja0JveC9DaGVja0JveC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdyZXBlYXRlci1maWVsZC1idWlsZGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVwZWF0ZXItZmllbGQtYnVpbGRlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZV0sXHJcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5PX0VSUk9SU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXBlYXRlckZpZWxkQnVpbGRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgnSXRlbScsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBpdGVtOiBWaWV3Q29udGFpbmVyUmVmO1xyXG4gIEBJbnB1dCgpIGdyb3VwOiBGb3JtR3JvdXA7XHJcbiAgQElucHV0KCkgaXRlbU51bWJlcjogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGNvbnRyb2xOdW1iZXI6IG51bWJlcjtcclxuICBASW5wdXQoKSByZXBlYXRlckZpZWxkOiBSZXBlYXRlckZpZWxkO1xyXG4gIEBJbnB1dCgpIGl0ZW1zVmFsdWU6IGFueVtdID0gW107XHJcbiAgaXRlbVZhbHVlOiBhbnkgPSBudWxsO1xyXG4gIHZhbHVlOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZW5kZXJDb21wb25lbnRTZXJ2aWNlOiBSZW5kZXJDb21wb25lbnRTZXJ2aWNlLFxyXG4gICAgcHVibGljIHRleHRDb250cm9sSG9zdDogRm9ybUdyb3VwRGlyZWN0aXZlXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7IH1cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuaXRlbXNWYWx1ZS5sZW5ndGggPiAwKSB0aGlzLml0ZW1WYWx1ZSA9IHRoaXMuaXRlbXNWYWx1ZVt0aGlzLml0ZW1OdW1iZXJdO1xyXG4gICAgICBpZiAodGhpcy5pdGVtVmFsdWUpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLml0ZW1WYWx1ZSkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5pdGVtVmFsdWUsIGtleSkgJiZcclxuICAgICAgICAgICAga2V5ID09IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuaXRlbVZhbHVlW2tleV07XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBlbGVtZW50O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLml0ZW0uY2xlYXIoKTtcclxuICAgICAgc3dpdGNoICh0aGlzLnJlcGVhdGVyRmllbGQ/LmNvbnRyb2xUeXBlKSB7XHJcbiAgICAgICAgLy8jcmVnaW9uIFRleHRCb3hcclxuICAgICAgICBjYXNlIERhdGFUeXBlLlRleHQ6XHJcbiAgICAgICAgICBsZXQgVGV4dCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgVGV4dC5uYW1lID1cclxuICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgVGV4dC5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgVGV4dC5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIFRleHQuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgVGV4dC52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIFRleHQubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgIFRleHQudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICAgICAgVGV4dC5sYW5ndWFnZVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFuZ3VhZ2VWYWxpZGF0aW9uO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhMZW5ndGgpXHJcbiAgICAgICAgICAgIFRleHQubWF4TGVuZ3RoID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heExlbmd0aDtcclxuICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWluTGVuZ3RoKVxyXG4gICAgICAgICAgICBUZXh0Lm1pbkxlbmd0aCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5taW5MZW5ndGg7XHJcbiAgICAgICAgICBUZXh0LnZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgIFRleHQuaXNSZWFkb25seSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlYWRvbmx5O1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgVGV4dC5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxUZXh0Ym94Q29tcG9uZW50PihcclxuICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICBUZXh0Ym94Q29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICBUZXh0XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5OYW1lOlxyXG4gICAgICAgICAgbGV0IG5hbWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICAgIG5hbWUubmFtZSA9XHJcbiAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5pdGVtTnVtYmVyLnRvU3RyaW5nKCkgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgIG5hbWUuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIG5hbWUubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICBuYW1lLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIG5hbWUudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBuYW1lLmxhbmd1YWdlVmFsaWRhdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYW5ndWFnZVZhbGlkYXRpb247XHJcbiAgICAgICAgICBuYW1lLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heExlbmd0aClcclxuICAgICAgICAgICAgbmFtZS5tYXhMZW5ndGggPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4TGVuZ3RoO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5taW5MZW5ndGgpXHJcbiAgICAgICAgICAgIG5hbWUubWluTGVuZ3RoID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1pbkxlbmd0aDtcclxuICAgICAgICAgIG5hbWUudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICAgICAgbmFtZS52YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBuYW1lLmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFRleHRib3hDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgIFRleHRib3hDb21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgIG5hbWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIERhdGFUeXBlLkVtYWlsOlxyXG4gICAgICAgICAgbGV0IGVtYWlsID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgICBlbWFpbC5uYW1lID1cclxuICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgZW1haWwuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIGVtYWlsLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgZW1haWwuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgZW1haWwudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBlbWFpbC5sYW5ndWFnZVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFuZ3VhZ2VWYWxpZGF0aW9uO1xyXG4gICAgICAgICAgZW1haWwubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgIGVtYWlsLnR5cGUgPSBJbnB1dFR5cGUuRW1haWw7XHJcbiAgICAgICAgICBlbWFpbC52YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBlbWFpbC5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxUZXh0Ym94Q29tcG9uZW50PihcclxuICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICBUZXh0Ym94Q29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICBlbWFpbFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuTnVtYmVyOlxyXG4gICAgICAgICAgbGV0IG51bWJlciA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgbnVtYmVyLm5hbWUgPVxyXG4gICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbU51bWJlci50b1N0cmluZygpICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBudW1iZXIuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIG51bWJlci5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIG51bWJlci5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBudW1iZXIudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBudW1iZXIubGFuZ3VhZ2VWYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhbmd1YWdlVmFsaWRhdGlvbjtcclxuICAgICAgICAgIG51bWJlci5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgbnVtYmVyLnR5cGUgPSBJbnB1dFR5cGUuTnVtYmVyO1xyXG4gICAgICAgICAgbGV0IHJhbmdlTnVtYmVyID0gbmV3IFJhbmdlTnVtYmVyKCk7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm51bWJlclJhbmdlKSB7XHJcbiAgICAgICAgICAgIHJhbmdlTnVtYmVyLnRvID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm51bWJlclJhbmdlLnRvO1xyXG4gICAgICAgICAgICByYW5nZU51bWJlci5mcm9tID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm51bWJlclJhbmdlLmZyb207XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBudW1iZXIubnVtYmVyUmFuZ2UgPSByYW5nZU51bWJlcjtcclxuICAgICAgICAgIG51bWJlci52YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICBudW1iZXIuaXNSZWFkb25seSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlYWRvbmx5O1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgbnVtYmVyLmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFRleHRib3hDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgIFRleHRib3hDb21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgIG51bWJlclxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuVVJMOlxyXG4gICAgICAgICAgbGV0IHVybCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgdXJsLm5hbWUgPSBgJHt0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZX0uJHt0aGlzLml0ZW1OdW1iZXJ9LiR7dGhpcy5jb250cm9sTnVtYmVyfWA7XHJcbiAgICAgICAgICB1cmwuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIHVybC5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIHVybC5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICB1cmwudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICB1cmwubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gOiAnJztcclxuICAgICAgICAgIHVybC50eXBlID0gSW5wdXRUeXBlLlVSTDtcclxuICAgICAgICAgIHVybC52YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxUZXh0Ym94Q29tcG9uZW50PihcclxuICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICBUZXh0Ym94Q29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICB1cmxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgIC8vI3JlZ2lvbiAgRGF0ZVRpbWVcclxuICAgICAgICBjYXNlIERhdGFUeXBlLkRhdGU6XHJcbiAgICAgICAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlUGlja2VyT3B0aW9ucygpO1xyXG4gICAgICAgICAgZGF0ZS5uYW1lID1cclxuICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgZGF0ZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgZGF0ZS5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIGRhdGUuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgZGF0ZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIGRhdGUubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgIGRhdGUucGlja2VyVHlwZSA9IFBpY2tlclR5cGUuQ2FsZW5kYXI7XHJcbiAgICAgICAgICBkYXRlLnNlbGVjdE1vZGUgPSBTZWxlY3RNb2RlLlNpbmdsZTtcclxuICAgICAgICAgIGRhdGUuc3RhcnRWaWV3ID0gU3RhcnRWaWV3Lk1vbnRoO1xyXG4gICAgICAgICAgZGF0ZS52YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBkYXRlLmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PERhdGVJbnB1dENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgRGF0ZUlucHV0Q29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICBkYXRlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5EYXRlVGltZTpcclxuICAgICAgICAgIGxldCBkYXRlVGltZSA9IG5ldyBEYXRlUGlja2VyT3B0aW9ucygpO1xyXG4gICAgICAgICAgZGF0ZVRpbWUubmFtZSA9XHJcbiAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5pdGVtTnVtYmVyLnRvU3RyaW5nKCkgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgIGRhdGVUaW1lLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICBkYXRlVGltZS5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIGRhdGVUaW1lLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIGRhdGVUaW1lLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgZGF0ZVRpbWUubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgIGRhdGVUaW1lLnBpY2tlclR5cGUgPSBQaWNrZXJUeXBlLkJvdGg7XHJcbiAgICAgICAgICBkYXRlVGltZS5zZWxlY3RNb2RlID0gU2VsZWN0TW9kZS5TaW5nbGU7XHJcbiAgICAgICAgICBkYXRlVGltZS5zdGFydFZpZXcgPSBTdGFydFZpZXcuTW9udGg7XHJcbiAgICAgICAgICBkYXRlVGltZS52YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBkYXRlVGltZS5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxEYXRlSW5wdXRDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgIERhdGVJbnB1dENvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgZGF0ZVRpbWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIERhdGFUeXBlLlRpbWU6XHJcbiAgICAgICAgICBsZXQgdGltZSA9IG5ldyBEYXRlUGlja2VyT3B0aW9ucygpO1xyXG4gICAgICAgICAgdGltZS5uYW1lID1cclxuICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgdGltZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgdGltZS5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIHRpbWUuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgdGltZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIHRpbWUubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgIHRpbWUucGlja2VyVHlwZSA9IFBpY2tlclR5cGUuVGltZXI7XHJcbiAgICAgICAgICB0aW1lLnNlbGVjdE1vZGUgPSBTZWxlY3RNb2RlLlNpbmdsZTtcclxuICAgICAgICAgIHRpbWUuc3RhcnRWaWV3ID0gU3RhcnRWaWV3Lk1vbnRoO1xyXG4gICAgICAgICAgdGltZS52YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aW1lLmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PERhdGVJbnB1dENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgRGF0ZUlucHV0Q29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICB0aW1lXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgIC8vI3JlZ2lvbiBEcm9wZG93blxyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuU2luZ2xlU2VsZWN0OlxyXG4gICAgICAgICAgbGV0IHNpbmdsZVNlbGVjdCA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgIHNpbmdsZVNlbGVjdC5uYW1lID1cclxuICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgc2luZ2xlU2VsZWN0LmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICBzaW5nbGVTZWxlY3QubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICBzaW5nbGVTZWxlY3QuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgc2luZ2xlU2VsZWN0LnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgc2luZ2xlU2VsZWN0LmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICBzaW5nbGVTZWxlY3QuZGF0YVNvdXJjZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5kYXRhU291cmNlO1xyXG4gICAgICAgICAgc2luZ2xlU2VsZWN0LnNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICBzaW5nbGVTZWxlY3Quc2hvd0NoZWNrYm94ID0gZmFsc2U7XHJcbiAgICAgICAgICBzaW5nbGVTZWxlY3QuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGFzU2VhcmNoO1xyXG4gICAgICAgICAgc2luZ2xlU2VsZWN0LnNlbGVjdGVkSXRlbXMgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgc2luZ2xlU2VsZWN0LmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PERyb3Bkb3duTGlzdENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgRHJvcGRvd25MaXN0Q29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICBzaW5nbGVTZWxlY3RcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIERhdGFUeXBlLk11bGlwbGVTZWxlY3Q6XHJcbiAgICAgICAgICBsZXQgbXVsaXBsZVNlbGVjdCA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgIG11bGlwbGVTZWxlY3QubmFtZSA9XHJcbiAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5pdGVtTnVtYmVyLnRvU3RyaW5nKCkgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgIG11bGlwbGVTZWxlY3QuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIG11bGlwbGVTZWxlY3QubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICBtdWxpcGxlU2VsZWN0LmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIG11bGlwbGVTZWxlY3Qudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBtdWxpcGxlU2VsZWN0LmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICBtdWxpcGxlU2VsZWN0LmRhdGFTb3VyY2UgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgIG11bGlwbGVTZWxlY3Quc2luZ2xlU2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICBtdWxpcGxlU2VsZWN0LnNob3dDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgICAgICAgbXVsaXBsZVNlbGVjdC5hbGxvd1NlYXJjaEZpbHRlciA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oYXNTZWFyY2g7XHJcbiAgICAgICAgICBtdWxpcGxlU2VsZWN0LnNlbGVjdGVkSXRlbXMgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgbXVsaXBsZVNlbGVjdC5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxEcm9wZG93bkxpc3RDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgIERyb3Bkb3duTGlzdENvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgbXVsaXBsZVNlbGVjdFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuR29hbDpcclxuICAgICAgICAgIGxldCBnb2FsID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgZ29hbC5uYW1lID1cclxuICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgZ29hbC5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgZ29hbC5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIGdvYWwuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgZ29hbC52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIGdvYWwubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgIGdvYWwuZGF0YVNvdXJjZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5kYXRhU291cmNlO1xyXG4gICAgICAgICAgZ29hbC5zaW5nbGVTZWxlY3Rpb24gPSAhdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzTXVsdGlwbGU7XHJcbiAgICAgICAgICBnb2FsLnNob3dDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgICAgICAgZ29hbC5hbGxvd1NlYXJjaEZpbHRlciA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oYXNTZWFyY2g7XHJcbiAgICAgICAgICBnb2FsLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZ29hbC5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxEcm9wZG93bkxpc3RDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgIERyb3Bkb3duTGlzdENvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgZ29hbFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuQ2hhbGxlbmdlOlxyXG4gICAgICAgICAgbGV0IGNoYWxsZW5nZSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgIGNoYWxsZW5nZS5uYW1lID1cclxuICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgY2hhbGxlbmdlLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICBjaGFsbGVuZ2UubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICBjaGFsbGVuZ2UuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgY2hhbGxlbmdlLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgY2hhbGxlbmdlLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICBjaGFsbGVuZ2UuZGF0YVNvdXJjZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5kYXRhU291cmNlO1xyXG4gICAgICAgICAgY2hhbGxlbmdlLmRhdGFTb3VyY2UgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgIGNoYWxsZW5nZS5zaW5nbGVTZWxlY3Rpb24gPSAhdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzTXVsdGlwbGU7XHJcbiAgICAgICAgICBjaGFsbGVuZ2Uuc2hvd0NoZWNrYm94ID0gZmFsc2U7XHJcbiAgICAgICAgICBjaGFsbGVuZ2UuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGFzU2VhcmNoO1xyXG4gICAgICAgICAgY2hhbGxlbmdlLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY2hhbGxlbmdlLmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PERyb3Bkb3duTGlzdENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgRHJvcGRvd25MaXN0Q29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICBjaGFsbGVuZ2VcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIERhdGFUeXBlLklubm92YXRpb25MYWI6XHJcbiAgICAgICAgICBsZXQgaW5ub3ZhdGlvbkxhYiA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgIGlubm92YXRpb25MYWIubmFtZSA9XHJcbiAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5pdGVtTnVtYmVyLnRvU3RyaW5nKCkgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgIGlubm92YXRpb25MYWIuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIGlubm92YXRpb25MYWIubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICBpbm5vdmF0aW9uTGFiLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIGlubm92YXRpb25MYWIudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBpbm5vdmF0aW9uTGFiLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICBpbm5vdmF0aW9uTGFiLmRhdGFTb3VyY2UgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgIGlubm92YXRpb25MYWIuc2luZ2xlU2VsZWN0aW9uID0gIXRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc011bHRpcGxlO1xyXG4gICAgICAgICAgaW5ub3ZhdGlvbkxhYi5zaG93Q2hlY2tib3ggPSBmYWxzZTtcclxuICAgICAgICAgIGlubm92YXRpb25MYWIuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGFzU2VhcmNoO1xyXG4gICAgICAgICAgaW5ub3ZhdGlvbkxhYi5zZWxlY3RlZEl0ZW1zID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGlubm92YXRpb25MYWIuY3VzdG9tVmFsaWRhdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8RHJvcGRvd25MaXN0Q29tcG9uZW50PihcclxuICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICBEcm9wZG93bkxpc3RDb21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgIGlubm92YXRpb25MYWJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIERhdGFUeXBlLkNvdW50cnk6XHJcbiAgICAgICAgICBsZXQgY291bnRyeSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgIGNvdW50cnkubmFtZSA9XHJcbiAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5pdGVtTnVtYmVyLnRvU3RyaW5nKCkgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgIGNvdW50cnkuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIGNvdW50cnkubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICBjb3VudHJ5LmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIGNvdW50cnkudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBjb3VudHJ5LmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICBjb3VudHJ5LmRhdGFTb3VyY2UgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgIGNvdW50cnkuc2luZ2xlU2VsZWN0aW9uID0gIXRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc011bHRpcGxlO1xyXG4gICAgICAgICAgY291bnRyeS5zaG93Q2hlY2tib3ggPSBmYWxzZTtcclxuICAgICAgICAgIGNvdW50cnkuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGFzU2VhcmNoO1xyXG4gICAgICAgICAgY291bnRyeS5zZWxlY3RlZEl0ZW1zID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvdW50cnkuY3VzdG9tVmFsaWRhdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8RHJvcGRvd25MaXN0Q29tcG9uZW50PihcclxuICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICBEcm9wZG93bkxpc3RDb21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgIGNvdW50cnlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAgICAgLy8jcmVnaW9uIEZpbGVVcGxvYWRcclxuICAgICAgICBjYXNlIERhdGFUeXBlLkZpbGU6XHJcbiAgICAgICAgICBsZXQgZmlsZSA9IG5ldyBGaWxlVXBsb2FkT3B0aW9ucygpO1xyXG4gICAgICAgICAgZmlsZS5uYW1lID1cclxuICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgZmlsZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgZmlsZS5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIGZpbGUuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgZmlsZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIGZpbGUubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgIGZpbGUuZmlsZU1heFNpemVJbk1CID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heEZpbGVTaXplSW5NQjtcclxuICAgICAgICAgIGZpbGUudmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZmlsZS5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxGaWxlVXBsb2FkQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICBGaWxlVXBsb2FkQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICBmaWxlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5NdWx0aUZpbGU6XHJcbiAgICAgICAgICBsZXQgbXVsdGlGaWxlID0gbmV3IEZpbGVVcGxvYWRPcHRpb25zKCk7XHJcbiAgICAgICAgICBmaWxlLm5hbWUgPVxyXG4gICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbU51bWJlci50b1N0cmluZygpICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBmaWxlLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICBmaWxlLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgZmlsZS5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBmaWxlLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgZmlsZS5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgbXVsdGlGaWxlLm1heFNpemVGb3JBbGxGaWxlc0luTUIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4RmlsZVNpemVJbk1CO1xyXG4gICAgICAgICAgbXVsdGlGaWxlLm1heE5vT2ZGaWxlcyA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhGaWxlQ291bnQ7XHJcbiAgICAgICAgICBtdWx0aUZpbGUuaXNNdWx0aXBsZUZpbGUgPSB0cnVlO1xyXG4gICAgICAgICAgbXVsdGlGaWxlLnZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIG11bHRpRmlsZS5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxGaWxlVXBsb2FkQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICBGaWxlVXBsb2FkQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICBtdWx0aUZpbGVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAgICAgLy8jcmVnaW9uIEltYWdlVXBsb2FkXHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5JbWFnZTpcclxuICAgICAgICAgIGxldCBpbWFnZSA9IG5ldyBJbWFnZVVwbG9hZE9wdGlvbnMoKTtcclxuICAgICAgICAgIGltYWdlLm5hbWUgPVxyXG4gICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbU51bWJlci50b1N0cmluZygpICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBpbWFnZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgaW1hZ2UubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICBpbWFnZS5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBpbWFnZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIGltYWdlLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heEZpbGVTaXplSW5NQilcclxuICAgICAgICAgICAgaW1hZ2UuZmlsZU1heFNpemVJbk1CID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heEZpbGVTaXplSW5NQjtcclxuICAgICAgICAgIGltYWdlLnZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGltYWdlLmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PEltYWdlVXBsb2FkZXJDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgIEltYWdlVXBsb2FkZXJDb21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgIGltYWdlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5Db3ZlclBob3RvOlxyXG4gICAgICAgICAgbGV0IGNvdmVyUGhvdG8gPSBuZXcgSW1hZ2VVcGxvYWRPcHRpb25zKCk7XHJcbiAgICAgICAgICBjb3ZlclBob3RvLm5hbWUgPVxyXG4gICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbU51bWJlci50b1N0cmluZygpICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBjb3ZlclBob3RvLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICBjb3ZlclBob3RvLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgY292ZXJQaG90by5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBjb3ZlclBob3RvLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgY292ZXJQaG90by5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhGaWxlU2l6ZUluTUIpXHJcbiAgICAgICAgICAgIGNvdmVyUGhvdG8uZmlsZU1heFNpemVJbk1CID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heEZpbGVTaXplSW5NQjtcclxuICAgICAgICAgIGNvdmVyUGhvdG8udmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY292ZXJQaG90by5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxJbWFnZVVwbG9hZGVyQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICBJbWFnZVVwbG9hZGVyQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICBjb3ZlclBob3RvXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgIC8vI3JlZ2lvbiBNb2JpbGVcclxuICAgICAgICBjYXNlIERhdGFUeXBlLk1vYmlsZTpcclxuICAgICAgICAgIGxldCBtb2JpbGUgPSBuZXcgUGhvbmVPcHRpb25zKCk7XHJcbiAgICAgICAgICBtb2JpbGUubmFtZSA9XHJcbiAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5pdGVtTnVtYmVyLnRvU3RyaW5nKCkgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgIG1vYmlsZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgbW9iaWxlLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgbW9iaWxlLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIG1vYmlsZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIG1vYmlsZS5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgbW9iaWxlLmFsbG93U2VhcmNoID0gdHJ1ZTtcclxuICAgICAgICAgIG1vYmlsZS5waG9uZVZhbGlkYXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgbW9iaWxlLnNlbGVjdEZpcnN0Q291bnRyeSA9IHRydWU7XHJcbiAgICAgICAgICBtb2JpbGUuZW5hYmxlUGxhY2Vob2xkZXIgPSB0cnVlO1xyXG4gICAgICAgICAgbW9iaWxlLnZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIG1vYmlsZS5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxQaG9uZUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgUGhvbmVDb21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgIG1vYmlsZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgICAgICAvLyNyZWdpb24gTXVsdGlsaW5lVGV4dFxyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuTXVsdGlsaW5lVGV4dDpcclxuICAgICAgICAgIGxldCBtdWx0aWxpbmVUZXh0ID0gbmV3IFRleHRBcmVhT3B0aW9ucygpO1xyXG4gICAgICAgICAgbXVsdGlsaW5lVGV4dC5uYW1lID1cclxuICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgbXVsdGlsaW5lVGV4dC5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgbXVsdGlsaW5lVGV4dC5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIG11bHRpbGluZVRleHQuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgbXVsdGlsaW5lVGV4dC52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIG11bHRpbGluZVRleHQubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4TGVuZ3RoKVxyXG4gICAgICAgICAgICBtdWx0aWxpbmVUZXh0Lm1heExlbmd0aCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhMZW5ndGg7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1pbkxlbmd0aClcclxuICAgICAgICAgICAgbXVsdGlsaW5lVGV4dC5taW5MZW5ndGggPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWluTGVuZ3RoO1xyXG4gICAgICAgICAgbXVsdGlsaW5lVGV4dC5yb3dzID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnJvd3M7XHJcbiAgICAgICAgICBtdWx0aWxpbmVUZXh0LmZvcmNlRGlyZWN0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmZvcmNlRGlyZWN0aW9uO1xyXG4gICAgICAgICAgbXVsdGlsaW5lVGV4dC52YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBtdWx0aWxpbmVUZXh0LmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFRleHRBcmVhQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICBUZXh0QXJlYUNvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgbXVsdGlsaW5lVGV4dFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgICAgICAvLyNyZWdpb24gSFRNTFxyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuSFRNTDpcclxuICAgICAgICAgIGxldCBodG1sID0gbmV3IEh0bWxFZGl0b3JPcHRpb25zKCk7XHJcbiAgICAgICAgICBodG1sLm5hbWUgPVxyXG4gICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbU51bWJlci50b1N0cmluZygpICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBodG1sLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICBodG1sLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgaHRtbC5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBodG1sLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgaHRtbC5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhMZW5ndGgpXHJcbiAgICAgICAgICAgIGh0bWwubWF4TGVuZ3RoID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heExlbmd0aDtcclxuICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWluTGVuZ3RoKVxyXG4gICAgICAgICAgICBodG1sLm1pbkxlbmd0aCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5taW5MZW5ndGg7XHJcbiAgICAgICAgICBodG1sLmhlaWdodCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5yb3dzO1xyXG4gICAgICAgICAgaHRtbC5mb3JjZURpcmVjdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5mb3JjZURpcmVjdGlvbjtcclxuICAgICAgICAgIGh0bWwudmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgaHRtbC5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxIdG1sRWRpdG9yQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICBIdG1sRWRpdG9yQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICBodG1sXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgIC8vI3JlZ2lvbiBCb29sZWFuXHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5Cb29sZWFuOlxyXG4gICAgICAgICAgbGV0IGJvb2xlYW4gPSBuZXcgVG9nZ2xlU2xpZGVPcHRpb25zKCk7XHJcbiAgICAgICAgICBib29sZWFuLm5hbWUgPVxyXG4gICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbU51bWJlci50b1N0cmluZygpICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBib29sZWFuLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICBib29sZWFuLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgYm9vbGVhbi52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIGJvb2xlYW4udmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgYm9vbGVhbi5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgYm9vbGVhbi5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxUb2dnbGVzbGlkZUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgVG9nZ2xlc2xpZGVDb21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgIGJvb2xlYW5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAgICAgLy8jcmVnaW9uIExvY2F0aW9uXHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5Mb2NhdGlvbjpcclxuICAgICAgICAgIGxldCBsb2NhdGlvbiA9IG5ldyBNYXBBdXRvQ29tcGxldGVPcHRpb25zKCk7XHJcbiAgICAgICAgICBsb2NhdGlvbi5uYW1lID1cclxuICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgbG9jYXRpb24uaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIGxvY2F0aW9uLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgbG9jYXRpb24uaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgbG9jYXRpb24udmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBsb2NhdGlvbi52YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICBsb2NhdGlvbi5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgbG9jYXRpb24uY3VzdG9tVmFsaWRhdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8TWFwQXV0b0NvbXBsZXRlQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICBNYXBBdXRvQ29tcGxldGVDb21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgIGxvY2F0aW9uXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgIC8vI3JlZ2lvbiBDaGVja0JveFxyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuQ2hlY2tCb3g6XHJcbiAgICAgICAgICBsZXQgY2hlY2tCb3ggPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgICBjaGVja0JveC5uYW1lID1cclxuICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgY2hlY2tCb3guaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIGNoZWNrQm94LmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgY2hlY2tCb3gudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBjaGVja0JveC5vdXRwdXRGdW5jdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5vdXRwdXRGdW5jdGlvbjtcclxuICAgICAgICAgIGNoZWNrQm94LmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICBjaGVja0JveC52YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjaGVja0JveC5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxDaGVja0JveENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgQ2hlY2tCb3hDb21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgIGNoZWNrQm94XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfSwgMCk7XHJcbiAgfVxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzLml0ZW1OdW1iZXIpXHJcbiAgICAgIGlmIChjaGFuZ2VzLml0ZW1OdW1iZXIucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICAgIGxldCBuYW1lID1cclxuICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICBjaGFuZ2VzLml0ZW1OdW1iZXIucHJldmlvdXNWYWx1ZS50b1N0cmluZygpICtcclxuICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLmdyb3VwLmNvbnRyb2xzW25hbWVdLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuaXRlbS5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMuZ3JvdXAucmVtb3ZlQ29udHJvbChuYW1lKTtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sVHlwZSkge1xyXG4gICAgICAgICAgLy8jcmVnaW9uIFRleHRCb3hcclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuVGV4dDpcclxuICAgICAgICAgICAgbGV0IHRleHQgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICAgICAgdGV4dC5uYW1lID1cclxuICAgICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICBjaGFuZ2VzLml0ZW1OdW1iZXIuY3VycmVudFZhbHVlICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICB0ZXh0LmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICAgIHRleHQubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICAgIHRleHQuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgICB0ZXh0LnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICB0ZXh0LmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgICB0ZXh0LnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhMZW5ndGgpXHJcbiAgICAgICAgICAgICAgdGV4dC5tYXhMZW5ndGggPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4TGVuZ3RoO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1pbkxlbmd0aClcclxuICAgICAgICAgICAgICB0ZXh0Lm1pbkxlbmd0aCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5taW5MZW5ndGg7XHJcbiAgICAgICAgICAgIHRleHQudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICB0ZXh0LmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxUZXh0Ym94Q29tcG9uZW50PihcclxuICAgICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgICAgVGV4dGJveENvbXBvbmVudCxcclxuICAgICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICAgIHRleHRcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLk5hbWU6XHJcbiAgICAgICAgICAgIGxldCBuYW1lID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgICAgIG5hbWUubmFtZSA9XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgY2hhbmdlcy5pdGVtTnVtYmVyLmN1cnJlbnRWYWx1ZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgbmFtZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICBuYW1lLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBuYW1lLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgbmFtZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgbmFtZS5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhMZW5ndGgpXHJcbiAgICAgICAgICAgICAgbmFtZS5tYXhMZW5ndGggPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4TGVuZ3RoO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1pbkxlbmd0aClcclxuICAgICAgICAgICAgICBuYW1lLm1pbkxlbmd0aCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5taW5MZW5ndGg7XHJcbiAgICAgICAgICAgIG5hbWUudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICAgICAgICBuYW1lLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgbmFtZS5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8VGV4dGJveENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICAgIFRleHRib3hDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgICBuYW1lXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBEYXRhVHlwZS5FbWFpbDpcclxuICAgICAgICAgICAgbGV0IGVtYWlsID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgICAgIGVtYWlsLm5hbWUgPVxyXG4gICAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIGNoYW5nZXMuaXRlbU51bWJlci5jdXJyZW50VmFsdWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGVtYWlsLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICAgIGVtYWlsLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBlbWFpbC5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICAgIGVtYWlsLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICBlbWFpbC5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgICAgZW1haWwudHlwZSA9IElucHV0VHlwZS5FbWFpbDtcclxuICAgICAgICAgICAgZW1haWwudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBlbWFpbC5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8VGV4dGJveENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICAgIFRleHRib3hDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgICBlbWFpbFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuTnVtYmVyOlxyXG4gICAgICAgICAgICBsZXQgbnVtYmVyID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgICAgIG51bWJlci5uYW1lID1cclxuICAgICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICBjaGFuZ2VzLml0ZW1OdW1iZXIuY3VycmVudFZhbHVlICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBudW1iZXIuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgICAgbnVtYmVyLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBudW1iZXIuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgICBudW1iZXIudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICAgIG51bWJlci5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgICAgbnVtYmVyLnR5cGUgPSBJbnB1dFR5cGUuTnVtYmVyO1xyXG4gICAgICAgICAgICBsZXQgcmFuZ2VOdW1iZXIgPSBuZXcgUmFuZ2VOdW1iZXIoKTtcclxuICAgICAgICAgICAgcmFuZ2VOdW1iZXIudG8gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4TGVuZ3RoO1xyXG4gICAgICAgICAgICByYW5nZU51bWJlci5mcm9tID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1pbkxlbmd0aDtcclxuICAgICAgICAgICAgbnVtYmVyLm51bWJlclJhbmdlID0gcmFuZ2VOdW1iZXI7XHJcbiAgICAgICAgICAgIG51bWJlci52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIG51bWJlci5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8VGV4dGJveENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICAgIFRleHRib3hDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgICBudW1iZXJcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLlVSTDpcclxuICAgICAgICAgICAgbGV0IHVybCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgICB1cmwubmFtZSA9IGAke3RoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lfS4ke2NoYW5nZXMuaXRlbU51bWJlci5jdXJyZW50VmFsdWV9LiR7dGhpcy5jb250cm9sTnVtYmVyfWA7XHJcbiAgICAgICAgICAgIHVybC5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICB1cmwubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICAgIHVybC5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICAgIHVybC52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgdXJsLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uIDogJyc7XHJcbiAgICAgICAgICAgIHVybC50eXBlID0gSW5wdXRUeXBlLlVSTDtcclxuICAgICAgICAgICAgdXJsLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgdXJsLmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxUZXh0Ym94Q29tcG9uZW50PihcclxuICAgICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgICAgVGV4dGJveENvbXBvbmVudCxcclxuICAgICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICAgIHVybFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuXHJcblxyXG4gICAgICAgICAgLy8jcmVnaW9uIERhdGVUaW1lXHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLkRhdGU6XHJcbiAgICAgICAgICAgIGxldCBkYXRlID0gbmV3IERhdGVQaWNrZXJPcHRpb25zKCk7XHJcbiAgICAgICAgICAgIGRhdGUubmFtZSA9XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgY2hhbmdlcy5pdGVtTnVtYmVyLmN1cnJlbnRWYWx1ZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgZGF0ZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICBkYXRlLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBkYXRlLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgZGF0ZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgZGF0ZS5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgICAgZGF0ZS5waWNrZXJUeXBlID0gUGlja2VyVHlwZS5DYWxlbmRhcjtcclxuICAgICAgICAgICAgZGF0ZS5zZWxlY3RNb2RlID0gU2VsZWN0TW9kZS5TaW5nbGU7XHJcbiAgICAgICAgICAgIGRhdGUuc3RhcnRWaWV3ID0gU3RhcnRWaWV3Lk1vbnRoO1xyXG4gICAgICAgICAgICBkYXRlLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgZGF0ZS5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8RGF0ZUlucHV0Q29tcG9uZW50PihcclxuICAgICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgICAgRGF0ZUlucHV0Q29tcG9uZW50LFxyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgICAgZGF0ZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLkRhdGVUaW1lOlxyXG4gICAgICAgICAgICBsZXQgZGF0ZVRpbWUgPSBuZXcgRGF0ZVBpY2tlck9wdGlvbnMoKTtcclxuICAgICAgICAgICAgZGF0ZVRpbWUubmFtZSA9XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgY2hhbmdlcy5pdGVtTnVtYmVyLmN1cnJlbnRWYWx1ZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgZGF0ZVRpbWUuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgICAgZGF0ZVRpbWUubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICAgIGRhdGVUaW1lLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgZGF0ZVRpbWUudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICAgIGRhdGVUaW1lLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgICBkYXRlVGltZS5waWNrZXJUeXBlID0gUGlja2VyVHlwZS5Cb3RoO1xyXG4gICAgICAgICAgICBkYXRlVGltZS5zZWxlY3RNb2RlID0gU2VsZWN0TW9kZS5TaW5nbGU7XHJcbiAgICAgICAgICAgIGRhdGVUaW1lLnN0YXJ0VmlldyA9IFN0YXJ0Vmlldy5Nb250aDtcclxuICAgICAgICAgICAgZGF0ZVRpbWUudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBkYXRlVGltZS5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8RGF0ZUlucHV0Q29tcG9uZW50PihcclxuICAgICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgICAgRGF0ZUlucHV0Q29tcG9uZW50LFxyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgICAgZGF0ZVRpbWVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBEYXRhVHlwZS5UaW1lOlxyXG4gICAgICAgICAgICBsZXQgdGltZSA9IG5ldyBEYXRlUGlja2VyT3B0aW9ucygpO1xyXG4gICAgICAgICAgICB0aW1lLm5hbWUgPVxyXG4gICAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIGNoYW5nZXMuaXRlbU51bWJlci5jdXJyZW50VmFsdWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIHRpbWUuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgICAgdGltZS5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgICAgdGltZS5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICAgIHRpbWUudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICAgIHRpbWUubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICAgIHRpbWUucGlja2VyVHlwZSA9IFBpY2tlclR5cGUuVGltZXI7XHJcbiAgICAgICAgICAgIHRpbWUuc2VsZWN0TW9kZSA9IFNlbGVjdE1vZGUuU2luZ2xlO1xyXG4gICAgICAgICAgICB0aW1lLnN0YXJ0VmlldyA9IFN0YXJ0Vmlldy5Nb250aDtcclxuICAgICAgICAgICAgdGltZS52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIHRpbWUuY3VzdG9tVmFsaWRhdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PERhdGVJbnB1dENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICAgIERhdGVJbnB1dENvbXBvbmVudCxcclxuICAgICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICAgIHRpbWVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAgICAgICAvLyNyZWdpb24gRHJvcGRvd25cclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuU2luZ2xlU2VsZWN0OlxyXG4gICAgICAgICAgICBsZXQgc2luZ2xlU2VsZWN0ID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgICBzaW5nbGVTZWxlY3QubmFtZSA9XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgY2hhbmdlcy5pdGVtTnVtYmVyLmN1cnJlbnRWYWx1ZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgc2luZ2xlU2VsZWN0LmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICAgIHNpbmdsZVNlbGVjdC5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgICAgc2luZ2xlU2VsZWN0LmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgc2luZ2xlU2VsZWN0LnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICBzaW5nbGVTZWxlY3QubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICAgIHNpbmdsZVNlbGVjdC5kYXRhU291cmNlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmRhdGFTb3VyY2U7XHJcbiAgICAgICAgICAgIHNpbmdsZVNlbGVjdC5zaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICBzaW5nbGVTZWxlY3Quc2hvd0NoZWNrYm94ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHNpbmdsZVNlbGVjdC5hbGxvd1NlYXJjaEZpbHRlciA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oYXNTZWFyY2g7XHJcbiAgICAgICAgICAgIHNpbmdsZVNlbGVjdC5zZWxlY3RlZEl0ZW1zID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgc2luZ2xlU2VsZWN0LmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxEcm9wZG93bkxpc3RDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgICBEcm9wZG93bkxpc3RDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgICBzaW5nbGVTZWxlY3RcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLk11bGlwbGVTZWxlY3Q6XHJcbiAgICAgICAgICAgIGxldCBtdWxpcGxlU2VsZWN0ID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgICBtdWxpcGxlU2VsZWN0Lm5hbWUgPVxyXG4gICAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIGNoYW5nZXMuaXRlbU51bWJlci5jdXJyZW50VmFsdWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIG11bGlwbGVTZWxlY3QuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgICAgbXVsaXBsZVNlbGVjdC5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgICAgbXVsaXBsZVNlbGVjdC5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICAgIG11bGlwbGVTZWxlY3Qudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICAgIG11bGlwbGVTZWxlY3QubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICAgIG11bGlwbGVTZWxlY3QuZGF0YVNvdXJjZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5kYXRhU291cmNlO1xyXG4gICAgICAgICAgICBtdWxpcGxlU2VsZWN0LnNpbmdsZVNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBtdWxpcGxlU2VsZWN0LnNob3dDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBtdWxpcGxlU2VsZWN0LmFsbG93U2VhcmNoRmlsdGVyID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhhc1NlYXJjaDtcclxuICAgICAgICAgICAgbXVsaXBsZVNlbGVjdC5zZWxlY3RlZEl0ZW1zID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgbXVsaXBsZVNlbGVjdC5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8RHJvcGRvd25MaXN0Q29tcG9uZW50PihcclxuICAgICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgICAgRHJvcGRvd25MaXN0Q29tcG9uZW50LFxyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgICAgbXVsaXBsZVNlbGVjdFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuR29hbDpcclxuICAgICAgICAgICAgbGV0IGdvYWwgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICAgIGdvYWwubmFtZSA9XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgY2hhbmdlcy5pdGVtTnVtYmVyLmN1cnJlbnRWYWx1ZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgZ29hbC5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICBnb2FsLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBnb2FsLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgZ29hbC52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgZ29hbC5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgICAgZ29hbC5kYXRhU291cmNlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmRhdGFTb3VyY2U7XHJcbiAgICAgICAgICAgIGdvYWwuc2luZ2xlU2VsZWN0aW9uID0gIXRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc011bHRpcGxlO1xyXG4gICAgICAgICAgICBnb2FsLnNob3dDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBnb2FsLmFsbG93U2VhcmNoRmlsdGVyID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhhc1NlYXJjaDtcclxuICAgICAgICAgICAgZ29hbC5zZWxlY3RlZEl0ZW1zID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgZ29hbC5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8RHJvcGRvd25MaXN0Q29tcG9uZW50PihcclxuICAgICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgICAgRHJvcGRvd25MaXN0Q29tcG9uZW50LFxyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgICAgZ29hbFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuQ2hhbGxlbmdlOlxyXG4gICAgICAgICAgICBsZXQgY2hhbGxlbmdlID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgICBjaGFsbGVuZ2UubmFtZSA9XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgY2hhbmdlcy5pdGVtTnVtYmVyLmN1cnJlbnRWYWx1ZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgY2hhbGxlbmdlLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICAgIGNoYWxsZW5nZS5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgICAgY2hhbGxlbmdlLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgY2hhbGxlbmdlLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICBjaGFsbGVuZ2UubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICAgIGNoYWxsZW5nZS5kYXRhU291cmNlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmRhdGFTb3VyY2U7XHJcbiAgICAgICAgICAgIGNoYWxsZW5nZS5kYXRhU291cmNlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmRhdGFTb3VyY2U7XHJcbiAgICAgICAgICAgIGNoYWxsZW5nZS5zaW5nbGVTZWxlY3Rpb24gPSAhdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzTXVsdGlwbGU7XHJcbiAgICAgICAgICAgIGNoYWxsZW5nZS5zaG93Q2hlY2tib3ggPSBmYWxzZTtcclxuICAgICAgICAgICAgY2hhbGxlbmdlLmFsbG93U2VhcmNoRmlsdGVyID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhhc1NlYXJjaDtcclxuICAgICAgICAgICAgY2hhbGxlbmdlLnNlbGVjdGVkSXRlbXMgPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBjaGFsbGVuZ2UuY3VzdG9tVmFsaWRhdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PERyb3Bkb3duTGlzdENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICAgIERyb3Bkb3duTGlzdENvbXBvbmVudCxcclxuICAgICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICAgIGNoYWxsZW5nZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuSW5ub3ZhdGlvbkxhYjpcclxuICAgICAgICAgICAgbGV0IGlubm92YXRpb25MYWIgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICAgIGlubm92YXRpb25MYWIubmFtZSA9XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgY2hhbmdlcy5pdGVtTnVtYmVyLmN1cnJlbnRWYWx1ZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgaW5ub3ZhdGlvbkxhYi5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICBpbm5vdmF0aW9uTGFiLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBpbm5vdmF0aW9uTGFiLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgaW5ub3ZhdGlvbkxhYi52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgaW5ub3ZhdGlvbkxhYi5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgICAgaW5ub3ZhdGlvbkxhYi5kYXRhU291cmNlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmRhdGFTb3VyY2U7XHJcbiAgICAgICAgICAgIGlubm92YXRpb25MYWIuc2luZ2xlU2VsZWN0aW9uID0gIXRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc011bHRpcGxlO1xyXG4gICAgICAgICAgICBpbm5vdmF0aW9uTGFiLnNob3dDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpbm5vdmF0aW9uTGFiLmFsbG93U2VhcmNoRmlsdGVyID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhhc1NlYXJjaDtcclxuICAgICAgICAgICAgaW5ub3ZhdGlvbkxhYi5zZWxlY3RlZEl0ZW1zID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgaW5ub3ZhdGlvbkxhYi5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8RHJvcGRvd25MaXN0Q29tcG9uZW50PihcclxuICAgICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgICAgRHJvcGRvd25MaXN0Q29tcG9uZW50LFxyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgICAgaW5ub3ZhdGlvbkxhYlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuQ291bnRyeTpcclxuICAgICAgICAgICAgbGV0IGNvdW50cnkgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICAgIGNvdW50cnkubmFtZSA9XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgY2hhbmdlcy5pdGVtTnVtYmVyLmN1cnJlbnRWYWx1ZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgY291bnRyeS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICBjb3VudHJ5LmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBjb3VudHJ5LmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgY291bnRyeS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgY291bnRyeS5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgICAgY291bnRyeS5kYXRhU291cmNlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmRhdGFTb3VyY2U7XHJcbiAgICAgICAgICAgIGNvdW50cnkuc2luZ2xlU2VsZWN0aW9uID0gIXRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc011bHRpcGxlO1xyXG4gICAgICAgICAgICBjb3VudHJ5LnNob3dDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb3VudHJ5LmFsbG93U2VhcmNoRmlsdGVyID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhhc1NlYXJjaDtcclxuICAgICAgICAgICAgY291bnRyeS5zZWxlY3RlZEl0ZW1zID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgY291bnRyeS5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8RHJvcGRvd25MaXN0Q29tcG9uZW50PihcclxuICAgICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgICAgRHJvcGRvd25MaXN0Q29tcG9uZW50LFxyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgICAgY291bnRyeVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgICAgICAgIC8vI3JlZ2lvbiBGaWxlVXBsb2FkXHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLkZpbGU6XHJcbiAgICAgICAgICAgIGxldCBmaWxlID0gbmV3IEZpbGVVcGxvYWRPcHRpb25zKCk7XHJcbiAgICAgICAgICAgIGZpbGUubmFtZSA9XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgY2hhbmdlcy5pdGVtTnVtYmVyLmN1cnJlbnRWYWx1ZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgZmlsZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICBmaWxlLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBmaWxlLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgZmlsZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgZmlsZS5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgICAgZmlsZS5maWxlTWF4U2l6ZUluTUIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4RmlsZVNpemVJbk1CO1xyXG4gICAgICAgICAgICBmaWxlLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgZmlsZS5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8RmlsZVVwbG9hZENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICAgIEZpbGVVcGxvYWRDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgICBmaWxlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBEYXRhVHlwZS5NdWx0aUZpbGU6XHJcbiAgICAgICAgICAgIGxldCBtdWx0aUZpbGUgPSBuZXcgRmlsZVVwbG9hZE9wdGlvbnMoKTtcclxuICAgICAgICAgICAgZmlsZS5uYW1lID1cclxuICAgICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICBjaGFuZ2VzLml0ZW1OdW1iZXIuY3VycmVudFZhbHVlICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBmaWxlLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICAgIGZpbGUubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICAgIGZpbGUuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgICBmaWxlLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICBmaWxlLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgICBtdWx0aUZpbGUubWF4U2l6ZUZvckFsbEZpbGVzSW5NQiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhGaWxlU2l6ZUluTUI7XHJcbiAgICAgICAgICAgIG11bHRpRmlsZS5tYXhOb09mRmlsZXMgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4RmlsZUNvdW50O1xyXG4gICAgICAgICAgICBtdWx0aUZpbGUuaXNNdWx0aXBsZUZpbGUgPSB0cnVlO1xyXG4gICAgICAgICAgICBtdWx0aUZpbGUudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBtdWx0aUZpbGUuY3VzdG9tVmFsaWRhdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PEZpbGVVcGxvYWRDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgICBGaWxlVXBsb2FkQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgICAgbXVsdGlGaWxlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgICAgLy8jcmVnaW9uIEltYWdlVXBsb2FkXHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLkltYWdlOlxyXG4gICAgICAgICAgICBsZXQgaW1hZ2UgPSBuZXcgSW1hZ2VVcGxvYWRPcHRpb25zKCk7XHJcbiAgICAgICAgICAgIGltYWdlLm5hbWUgPVxyXG4gICAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIGNoYW5nZXMuaXRlbU51bWJlci5jdXJyZW50VmFsdWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGltYWdlLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICAgIGltYWdlLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBpbWFnZS5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICAgIGltYWdlLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICBpbWFnZS5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhGaWxlU2l6ZUluTUIpXHJcbiAgICAgICAgICAgICAgaW1hZ2UuZmlsZU1heFNpemVJbk1CID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heEZpbGVTaXplSW5NQjtcclxuICAgICAgICAgICAgaW1hZ2UudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBpbWFnZS5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8SW1hZ2VVcGxvYWRlckNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICAgIEltYWdlVXBsb2FkZXJDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgICBpbWFnZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuQ292ZXJQaG90bzpcclxuICAgICAgICAgICAgbGV0IGNvdmVyUGhvdG8gPSBuZXcgSW1hZ2VVcGxvYWRPcHRpb25zKCk7XHJcbiAgICAgICAgICAgIGNvdmVyUGhvdG8ubmFtZSA9XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgY2hhbmdlcy5pdGVtTnVtYmVyLmN1cnJlbnRWYWx1ZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgY292ZXJQaG90by5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICBjb3ZlclBob3RvLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBjb3ZlclBob3RvLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgY292ZXJQaG90by52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgY292ZXJQaG90by5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhGaWxlU2l6ZUluTUIpXHJcbiAgICAgICAgICAgICAgY292ZXJQaG90by5maWxlTWF4U2l6ZUluTUIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4RmlsZVNpemVJbk1CO1xyXG4gICAgICAgICAgICBjb3ZlclBob3RvLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgY292ZXJQaG90by5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8SW1hZ2VVcGxvYWRlckNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICAgIEltYWdlVXBsb2FkZXJDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgICBjb3ZlclBob3RvXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgLy8jZW5kcmVnaW9uXHJcbiAgICAgICAgICAvLyNyZWdpb24gTW9iaWxlXHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLk1vYmlsZTpcclxuICAgICAgICAgICAgbGV0IG1vYmlsZSA9IG5ldyBQaG9uZU9wdGlvbnMoKTtcclxuICAgICAgICAgICAgbW9iaWxlLm5hbWUgPVxyXG4gICAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIGNoYW5nZXMuaXRlbU51bWJlci5jdXJyZW50VmFsdWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIG1vYmlsZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICBtb2JpbGUubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICAgIG1vYmlsZS5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICAgIG1vYmlsZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgbW9iaWxlLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgICBtb2JpbGUuYWxsb3dTZWFyY2ggPSB0cnVlO1xyXG4gICAgICAgICAgICBtb2JpbGUucGhvbmVWYWxpZGF0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgbW9iaWxlLnNlbGVjdEZpcnN0Q291bnRyeSA9IHRydWU7XHJcbiAgICAgICAgICAgIG1vYmlsZS5lbmFibGVQbGFjZWhvbGRlciA9IHRydWU7XHJcbiAgICAgICAgICAgIG1vYmlsZS52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIG1vYmlsZS5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8UGhvbmVDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgICBQaG9uZUNvbXBvbmVudCxcclxuICAgICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICAgIG1vYmlsZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgICAgICAgIC8vI3JlZ2lvbiBNdWx0aWxpbmVUZXh0XHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLk11bHRpbGluZVRleHQ6XHJcbiAgICAgICAgICAgIGxldCBtdWx0aWxpbmVUZXh0ID0gbmV3IFRleHRBcmVhT3B0aW9ucygpO1xyXG4gICAgICAgICAgICBtdWx0aWxpbmVUZXh0Lm5hbWUgPVxyXG4gICAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIGNoYW5nZXMuaXRlbU51bWJlci5jdXJyZW50VmFsdWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIG11bHRpbGluZVRleHQuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgICAgbXVsdGlsaW5lVGV4dC5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgICAgbXVsdGlsaW5lVGV4dC5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICAgIG11bHRpbGluZVRleHQudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICAgIG11bHRpbGluZVRleHQubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4TGVuZ3RoKVxyXG4gICAgICAgICAgICAgIG11bHRpbGluZVRleHQubWF4TGVuZ3RoID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heExlbmd0aDtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5taW5MZW5ndGgpXHJcbiAgICAgICAgICAgICAgbXVsdGlsaW5lVGV4dC5taW5MZW5ndGggPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWluTGVuZ3RoO1xyXG4gICAgICAgICAgICBtdWx0aWxpbmVUZXh0LnJvd3MgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMucm93cztcclxuICAgICAgICAgICAgbXVsdGlsaW5lVGV4dC5mb3JjZURpcmVjdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5mb3JjZURpcmVjdGlvbjtcclxuICAgICAgICAgICAgbXVsdGlsaW5lVGV4dC52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIG11bHRpbGluZVRleHQuY3VzdG9tVmFsaWRhdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFRleHRBcmVhQ29tcG9uZW50PihcclxuICAgICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgICAgVGV4dEFyZWFDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgICBtdWx0aWxpbmVUZXh0XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgICAgLy8jcmVnaW9uIEhUTUxcclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuSFRNTDpcclxuICAgICAgICAgICAgbGV0IGh0bWwgPSBuZXcgSHRtbEVkaXRvck9wdGlvbnMoKTtcclxuICAgICAgICAgICAgaHRtbC5uYW1lID1cclxuICAgICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICBjaGFuZ2VzLml0ZW1OdW1iZXIuY3VycmVudFZhbHVlICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBodG1sLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICAgIGh0bWwubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICAgIGh0bWwuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgICBodG1sLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICBodG1sLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heExlbmd0aClcclxuICAgICAgICAgICAgICBodG1sLm1heExlbmd0aCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhMZW5ndGg7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWluTGVuZ3RoKVxyXG4gICAgICAgICAgICAgIGh0bWwubWluTGVuZ3RoID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1pbkxlbmd0aDtcclxuICAgICAgICAgICAgaHRtbC5oZWlnaHQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMucm93cztcclxuICAgICAgICAgICAgaHRtbC5mb3JjZURpcmVjdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5mb3JjZURpcmVjdGlvbjtcclxuICAgICAgICAgICAgaHRtbC52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIGh0bWwuY3VzdG9tVmFsaWRhdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PEh0bWxFZGl0b3JDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgICBIdG1sRWRpdG9yQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgICAgaHRtbFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgICAgICAgIC8vI3JlZ2lvbiBCb29sZWFuXHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLkJvb2xlYW46XHJcbiAgICAgICAgICAgIGxldCBib29sZWFuID0gbmV3IFRvZ2dsZVNsaWRlT3B0aW9ucygpO1xyXG4gICAgICAgICAgICBib29sZWFuLm5hbWUgPVxyXG4gICAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIGNoYW5nZXMuaXRlbU51bWJlci5jdXJyZW50VmFsdWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGJvb2xlYW4uaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgICAgYm9vbGVhbi5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgICAgYm9vbGVhbi52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgYm9vbGVhbi5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgICAgYm9vbGVhbi52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIGJvb2xlYW4uY3VzdG9tVmFsaWRhdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFRvZ2dsZXNsaWRlQ29tcG9uZW50PihcclxuICAgICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgICAgVG9nZ2xlc2xpZGVDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgICBib29sZWFuXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgICAgLy8jcmVnaW9uIExvY2F0aW9uXHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLkxvY2F0aW9uOlxyXG4gICAgICAgICAgICBsZXQgbG9jYXRpb24gPSBuZXcgTWFwQXV0b0NvbXBsZXRlT3B0aW9ucygpO1xyXG4gICAgICAgICAgICBsb2NhdGlvbi5uYW1lID1cclxuICAgICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICBjaGFuZ2VzLml0ZW1OdW1iZXIuY3VycmVudFZhbHVlICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBsb2NhdGlvbi5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICBsb2NhdGlvbi5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgICAgbG9jYXRpb24uaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgICBsb2NhdGlvbi52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgbG9jYXRpb24ubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICAgIGxvY2F0aW9uLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgbG9jYXRpb24uY3VzdG9tVmFsaWRhdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PE1hcEF1dG9Db21wbGV0ZUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICAgIE1hcEF1dG9Db21wbGV0ZUNvbXBvbmVudCxcclxuICAgICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICAgIGxvY2F0aW9uXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgICAgLy8jcmVnaW9uIENoZWNrQm94XHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLkNoZWNrQm94OlxyXG4gICAgICAgICAgICBsZXQgY2hlY2tCb3ggPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgICAgIGNoZWNrQm94Lm5hbWUgPVxyXG4gICAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIGNoYW5nZXMuaXRlbU51bWJlci5jdXJyZW50VmFsdWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGNoZWNrQm94LmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICAgIGNoZWNrQm94LmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBjaGVja0JveC52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgY2hlY2tCb3gubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICAgIGNoZWNrQm94Lm91dHB1dEZ1bmN0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm91dHB1dEZ1bmN0aW9uO1xyXG4gICAgICAgICAgICBjaGVja0JveC52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIGNoZWNrQm94LmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxDaGVja0JveENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICAgIENoZWNrQm94Q29tcG9uZW50LFxyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgICAgY2hlY2tCb3hcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICB9XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAjSXRlbT48L25nLWNvbnRhaW5lcj5cclxuIl19
|