master-control 0.4.60 → 0.4.61

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.
@@ -1,5 +1,5 @@
1
1
  import { GoogleMapsModule } from '@angular/google-maps';
2
- import { Component, Input, ViewChild, input, Output, EventEmitter } from '@angular/core';
2
+ import { Component, Input, ViewChild, input, Output, EventEmitter, } from '@angular/core';
3
3
  import { CommonModule } from '@angular/common';
4
4
  import { FormsModule, ReactiveFormsModule } from '@angular/forms';
5
5
  import { TextboxComponent } from '../textbox/textbox.component';
@@ -26,7 +26,7 @@ export class MedialQuestionsComponent {
26
26
  personUWOpenQuoteResponse = input();
27
27
  defaultValues = input();
28
28
  personType = input();
29
- personUwId = "";
29
+ personUwId = '';
30
30
  isMedicalSubQuestionsAvailable = null;
31
31
  medicalSubQuestionsResponse = {};
32
32
  addressInput;
@@ -68,81 +68,81 @@ export class MedialQuestionsComponent {
68
68
  hoveredIndex = -1;
69
69
  searchTimeout;
70
70
  horizontalLineObj = {
71
- "controlStyle": {
72
- "controlType": null,
73
- "borderColor": null,
74
- "borderWidth": null,
75
- "borderRadius": null,
76
- "fontSize": null,
77
- "fontWeight": null,
78
- "fontFamily": null,
79
- "color": null,
80
- "background": null,
81
- "caretColor": null,
82
- "nudgeDisplayImage": null,
83
- "dropdownOptionBgColor": null,
84
- "dropdownOptionColor": null,
85
- "dropdownOptionFontWeight": null,
86
- "width": null,
87
- "focusBorderWidth": null,
88
- "focusBorderColor": null,
89
- "focusBackground": null,
90
- "focusColor": null,
91
- "focusDropdownOptionBgColor": null,
92
- "focusDropdownOptionColor": null,
93
- "focusDropdownOptionFontWeight": null,
94
- "focusDropdownOptionBorderLeft": null,
95
- "focusDropdownOptionBorderRadius": null,
96
- "hoverBorderColor": null,
97
- "hoverBorderWidth": null,
98
- "hoverColor": null,
99
- "disableColor": null,
100
- "disableBackground": null,
101
- "errorBorderColor": null,
102
- "errorBorderWidth": null,
103
- "errorColor": null,
104
- "createdDate": null,
105
- "padding": null,
106
- "margin": null,
107
- "isMasterCss": null,
108
- "controlMetaId": "LI_COM_GEN_CTRL_hrLine_hrLine_V1",
109
- "borderStyle": "solid",
110
- "height": null,
111
- "minHeight": null,
112
- "maxHeight": null,
113
- "minWidth": null,
114
- "maxWidth": null,
115
- "cssClass": null
71
+ controlStyle: {
72
+ controlType: null,
73
+ borderColor: null,
74
+ borderWidth: null,
75
+ borderRadius: null,
76
+ fontSize: null,
77
+ fontWeight: null,
78
+ fontFamily: null,
79
+ color: null,
80
+ background: null,
81
+ caretColor: null,
82
+ nudgeDisplayImage: null,
83
+ dropdownOptionBgColor: null,
84
+ dropdownOptionColor: null,
85
+ dropdownOptionFontWeight: null,
86
+ width: null,
87
+ focusBorderWidth: null,
88
+ focusBorderColor: null,
89
+ focusBackground: null,
90
+ focusColor: null,
91
+ focusDropdownOptionBgColor: null,
92
+ focusDropdownOptionColor: null,
93
+ focusDropdownOptionFontWeight: null,
94
+ focusDropdownOptionBorderLeft: null,
95
+ focusDropdownOptionBorderRadius: null,
96
+ hoverBorderColor: null,
97
+ hoverBorderWidth: null,
98
+ hoverColor: null,
99
+ disableColor: null,
100
+ disableBackground: null,
101
+ errorBorderColor: null,
102
+ errorBorderWidth: null,
103
+ errorColor: null,
104
+ createdDate: null,
105
+ padding: null,
106
+ margin: null,
107
+ isMasterCss: null,
108
+ controlMetaId: 'LI_COM_GEN_CTRL_hrLine_hrLine_V1',
109
+ borderStyle: 'solid',
110
+ height: null,
111
+ minHeight: null,
112
+ maxHeight: null,
113
+ minWidth: null,
114
+ maxWidth: null,
115
+ cssClass: null,
116
116
  },
117
- "fieldName": "hrLine",
118
- "label": "solid line",
119
- "placeHolder": null,
120
- "metaId": "LI_COM_GEN_CTRL_hrLine_hrLine_V1",
121
- "isVisible": true,
122
- "isDisable": false,
123
- "defaultValue": null,
124
- "validators": {
125
- "isRequired": false,
126
- "requiredMessage": "This field cannot be empty",
127
- "minLength": null,
128
- "minLengthMessage": null,
129
- "maxLength": null,
130
- "maxLengthMessage": null,
131
- "pattern": null,
132
- "patternMessage": ""
117
+ fieldName: 'hrLine',
118
+ label: 'solid line',
119
+ placeHolder: null,
120
+ metaId: 'LI_COM_GEN_CTRL_hrLine_hrLine_V1',
121
+ isVisible: true,
122
+ isDisable: false,
123
+ defaultValue: null,
124
+ validators: {
125
+ isRequired: false,
126
+ requiredMessage: 'This field cannot be empty',
127
+ minLength: null,
128
+ minLengthMessage: null,
129
+ maxLength: null,
130
+ maxLengthMessage: null,
131
+ pattern: null,
132
+ patternMessage: '',
133
133
  },
134
- "options": [],
135
- "cssClass": "col-12",
136
- "value": null,
137
- "style": null,
138
- "imageUrl": null,
139
- "configData": {
140
- "hrText": ""
134
+ options: [],
135
+ cssClass: 'col-12',
136
+ value: null,
137
+ style: null,
138
+ imageUrl: null,
139
+ configData: {
140
+ hrText: '',
141
141
  },
142
- "metaDataObj": null,
143
- "isShowLabel": true,
144
- "isMasterControl": false,
145
- "controlType": "hrLine"
142
+ metaDataObj: null,
143
+ isShowLabel: true,
144
+ isMasterControl: false,
145
+ controlType: 'hrLine',
146
146
  };
147
147
  previewFile = null;
148
148
  // Validation state tracking
@@ -162,8 +162,10 @@ export class MedialQuestionsComponent {
162
162
  }
163
163
  }
164
164
  ngOnChanges(changes) {
165
- if (((changes['medialQuestionResponse']) && !this.checkIfValueIsEmpty(changes['medialQuestionResponse'].currentValue)) ||
166
- ((changes['preparePersonUwQuestionsObj']) && !this.checkIfValueIsEmpty(changes['preparePersonUwQuestionsObj'].currentValue))) {
165
+ if ((changes['medialQuestionResponse'] &&
166
+ !this.checkIfValueIsEmpty(changes['medialQuestionResponse'].currentValue)) ||
167
+ (changes['preparePersonUwQuestionsObj'] &&
168
+ !this.checkIfValueIsEmpty(changes['preparePersonUwQuestionsObj'].currentValue))) {
167
169
  if ('geolocation' in navigator) {
168
170
  navigator.geolocation.getCurrentPosition((position) => {
169
171
  this.latitude = position.coords.latitude;
@@ -178,9 +180,13 @@ export class MedialQuestionsComponent {
178
180
  }
179
181
  this.preparePersonUwQuestionsObj();
180
182
  }
181
- if (((changes['defaultValues']) && !this.checkIfValueIsEmpty(changes['defaultValues'].currentValue))) {
183
+ if (changes['defaultValues'] &&
184
+ !this.checkIfValueIsEmpty(changes['defaultValues'].currentValue)) {
182
185
  if (typeof this.defaultValues() === 'object') {
183
- this.personUwAnswers = { ...this.personUwAnswers, ...this.defaultValues() };
186
+ this.personUwAnswers = {
187
+ ...this.personUwAnswers,
188
+ ...this.defaultValues(),
189
+ };
184
190
  this.removeSubQuestionValues();
185
191
  }
186
192
  }
@@ -364,23 +370,33 @@ export class MedialQuestionsComponent {
364
370
  }, 200);
365
371
  }
366
372
  findMedicalQuestionsInOpenQuote(arrayOfObj) {
367
- if (arrayOfObj['cammundaQuestionCode'] === 'MediCndtn' || arrayOfObj['cammundaQuestionCode'] === 'LifeMediCndtn') {
373
+ if (arrayOfObj['cammundaQuestionCode'] === 'MediCndtn' ||
374
+ arrayOfObj['cammundaQuestionCode'] === 'LifeMediCndtn') {
368
375
  this.isMedicalSubQuestionsAvailable = arrayOfObj;
369
376
  }
370
- if (this.checkIfValueIsEmpty(this.isMedicalSubQuestionsAvailable) && !this.checkIfValueIsEmpty(arrayOfObj['personUWActivityResponseEntity'])) {
377
+ if (this.checkIfValueIsEmpty(this.isMedicalSubQuestionsAvailable) &&
378
+ !this.checkIfValueIsEmpty(arrayOfObj['personUWActivityResponseEntity'])) {
371
379
  arrayOfObj['personUWActivityResponseEntity'].forEach((singleSubArray) => {
372
380
  this.findMedicalQuestionsInOpenQuote(singleSubArray);
373
381
  });
374
382
  }
375
383
  }
376
384
  mapAnswersForOpenQuote() {
377
- if (!this.checkIfValueIsEmpty(this.personUWOpenQuoteResponse()) && !this.checkIfValueIsEmpty(this.personUWOpenQuoteResponse()[0]) && !this.checkIfValueIsEmpty(this.personUWOpenQuoteResponse()[0]?.questionList) && !this.checkIfValueIsEmpty(this.personUWOpenQuoteResponse()[0]?.questionList[0]?.personUWdetailsList)) {
378
- let arrayOfKeys = Object.keys(this.personUWOpenQuoteResponse()[0]?.questionList[0]?.personUWdetailsList);
385
+ if (!this.checkIfValueIsEmpty(this.personUWOpenQuoteResponse()) &&
386
+ !this.checkIfValueIsEmpty(this.personUWOpenQuoteResponse()[0]) &&
387
+ !this.checkIfValueIsEmpty(this.personUWOpenQuoteResponse()[0]?.questionList) &&
388
+ !this.checkIfValueIsEmpty(this.personUWOpenQuoteResponse()[0]?.questionList[0]
389
+ ?.personUWdetailsList)) {
390
+ let arrayOfKeys = Object.keys(this.personUWOpenQuoteResponse()[0]?.questionList[0]
391
+ ?.personUWdetailsList);
379
392
  arrayOfKeys.forEach((singleKey, singleKeyLength) => {
380
393
  if (!this.checkIfValueIsEmpty(this.personUWOpenQuoteResponse()[0]['questionList'][0]['personUWdetailsList'][singleKey])) {
381
394
  this.personUWOpenQuoteResponse()[0]['questionList'][0]['personUWdetailsList'][singleKey].forEach((singleAnswerObj, singleAnswerObjLength) => {
382
395
  this.updatePersonUwAnswers(singleAnswerObj);
383
- if (singleKeyLength === (arrayOfKeys.length - 1) && singleAnswerObjLength === (this.personUWOpenQuoteResponse()[0]['questionList'][0]['personUWdetailsList'][singleKey].length - 1)) {
396
+ if (singleKeyLength === arrayOfKeys.length - 1 &&
397
+ singleAnswerObjLength ===
398
+ this.personUWOpenQuoteResponse()[0]['questionList'][0]['personUWdetailsList'][singleKey].length -
399
+ 1) {
384
400
  this.removeSubQuestionValues();
385
401
  }
386
402
  });
@@ -626,7 +642,8 @@ export class MedialQuestionsComponent {
626
642
  question['questionType'] = 'HARD COPY';
627
643
  }
628
644
  });
629
- singlePersonObject['questionList'].sort((a, b) => a['step'] - b['step'] || a['displayOrder'] - b['displayOrder']);
645
+ singlePersonObject['questionList'].sort((a, b) => a['step'] - b['step'] ||
646
+ a['displayOrder'] - b['displayOrder']);
630
647
  }
631
648
  let questionsListForLA = [];
632
649
  distinctSteps.forEach((steps) => {
@@ -692,10 +709,15 @@ export class MedialQuestionsComponent {
692
709
  this.personUwResponseObj = data['questionsResponse'];
693
710
  }
694
711
  }
695
- if (!this.checkIfValueIsEmpty(this.personUWOpenQuoteResponse()) && !this.checkIfValueIsEmpty(this.personUWOpenQuoteResponse()[0]) && !this.checkIfValueIsEmpty(this.personUWOpenQuoteResponse()[0]?.questionList) && !this.checkIfValueIsEmpty(this.personUWOpenQuoteResponse()[0]?.questionList[0]?.personUWdetailsList)) {
712
+ if (!this.checkIfValueIsEmpty(this.personUWOpenQuoteResponse()) &&
713
+ !this.checkIfValueIsEmpty(this.personUWOpenQuoteResponse()[0]) &&
714
+ !this.checkIfValueIsEmpty(this.personUWOpenQuoteResponse()[0]?.questionList) &&
715
+ !this.checkIfValueIsEmpty(this.personUWOpenQuoteResponse()[0]?.questionList[0]
716
+ ?.personUWdetailsList)) {
696
717
  let isSubQuestionExists = false;
697
718
  this.isMedicalSubQuestionsAvailable = null;
698
- let arrayOfKeys = Object.keys(this.personUWOpenQuoteResponse()[0]?.questionList[0]?.personUWdetailsList);
719
+ let arrayOfKeys = Object.keys(this.personUWOpenQuoteResponse()[0]?.questionList[0]
720
+ ?.personUWdetailsList);
699
721
  arrayOfKeys.forEach((singleKey) => {
700
722
  if (!this.checkIfValueIsEmpty(this.personUWOpenQuoteResponse()[0]['questionList'][0]['personUWdetailsList'][singleKey])) {
701
723
  this.personUWOpenQuoteResponse()[0]['questionList'][0]['personUWdetailsList'][singleKey].forEach((singleAnswerObj) => {
@@ -991,7 +1013,8 @@ export class MedialQuestionsComponent {
991
1013
  }
992
1014
  if (answerObj['cammundaQuestionCode'] === 'QHTF') {
993
1015
  let feetAnswer = answerObj['answer'].split('.');
994
- if (!this.checkIfValueIsEmpty(answerObj['answer']) && answerObj['answer'].includes('.')) {
1016
+ if (!this.checkIfValueIsEmpty(answerObj['answer']) &&
1017
+ answerObj['answer'].includes('.')) {
995
1018
  this.personUwAnswers['medicalQuestionFeetInput'] = feetAnswer[0];
996
1019
  this.personUwAnswers['medicalQuestionsInchesInput'] = feetAnswer[1];
997
1020
  }
@@ -1001,9 +1024,11 @@ export class MedialQuestionsComponent {
1001
1024
  }
1002
1025
  }
1003
1026
  let filteredQuestion = this.medialQuestionResponse()['questionsResponse'][0]['questionList'].filter((singleQuestion) => singleQuestion['questionId'] === answerObj['questionId']);
1004
- if (!this.checkIfValueIsEmpty(filteredQuestion) && !this.checkIfValueIsEmpty(filteredQuestion[0])) {
1027
+ if (!this.checkIfValueIsEmpty(filteredQuestion) &&
1028
+ !this.checkIfValueIsEmpty(filteredQuestion[0])) {
1005
1029
  if (filteredQuestion[0]['questionType'] === 'CHECKBOX') {
1006
- this.personUwAnswers[answerObj.questionId] = answerObj.answer.split(',');
1030
+ this.personUwAnswers[answerObj.questionId] =
1031
+ answerObj.answer.split(',');
1007
1032
  }
1008
1033
  else {
1009
1034
  this.personUwAnswers[answerObj.questionId] = answerObj.answer;
@@ -1060,7 +1085,8 @@ export class MedialQuestionsComponent {
1060
1085
  }
1061
1086
  else {
1062
1087
  // For other types, compare string length
1063
- if (value.toString().length < minVal || value.toString().length > maxVal) {
1088
+ if (value.toString().length < minVal ||
1089
+ value.toString().length > maxVal) {
1064
1090
  this.fieldErrors[questionId]['range'] = true;
1065
1091
  }
1066
1092
  }
@@ -1068,9 +1094,9 @@ export class MedialQuestionsComponent {
1068
1094
  console.log('Validation errors for', questionId, this.fieldErrors[questionId]);
1069
1095
  }
1070
1096
  hasAnyFieldError(questionId) {
1071
- return this.fieldTouched[questionId] &&
1097
+ return (this.fieldTouched[questionId] &&
1072
1098
  this.fieldErrors[questionId] &&
1073
- Object.keys(this.fieldErrors[questionId]).length > 0;
1099
+ Object.keys(this.fieldErrors[questionId]).length > 0);
1074
1100
  }
1075
1101
  getFieldErrorMessage(questionId, question) {
1076
1102
  if (!this.fieldTouched[questionId] || !this.fieldErrors[questionId])
@@ -1079,7 +1105,8 @@ export class MedialQuestionsComponent {
1079
1105
  const errors = this.fieldErrors[questionId];
1080
1106
  const validators = question?.field?.validators;
1081
1107
  if (errors['required']) {
1082
- if (question?.field?.controlType === 'radio' || question?.field?.controlType === 'checkbox') {
1108
+ if (question?.field?.controlType === 'radio' ||
1109
+ question?.field?.controlType === 'checkbox') {
1083
1110
  return validators?.requiredMessage || `Please select any one option`;
1084
1111
  }
1085
1112
  const cleanText = question?.questionText?.replace(/\(ft\)|\(kg\)/gi, '').trim() ||
@@ -1154,52 +1181,53 @@ export class MedialQuestionsComponent {
1154
1181
  if (!this.checkIfValueIsEmpty(questionObj['configData'])) {
1155
1182
  configData = { ...configData, ...questionObj['configData'] };
1156
1183
  }
1157
- if (questionObj['questionType'] === 'RADIO BUTTON' || questionObj['questionType'] === 'ADDMORE') {
1184
+ if (questionObj['questionType'] === 'RADIO BUTTON' ||
1185
+ questionObj['questionType'] === 'ADDMORE') {
1158
1186
  controlStyle = {
1159
- "controlType": "radio",
1160
- "borderColor": "#DADADA",
1161
- "borderWidth": "1px",
1162
- "borderRadius": null,
1163
- "fontSize": "12px",
1164
- "fontWeight": "400",
1165
- "fontFamily": "Mulish",
1166
- "color": "#444444",
1167
- "background": "#FFFFFF",
1168
- "caretColor": null,
1169
- "nudgeDisplayImage": null,
1170
- "dropdownOptionBgColor": null,
1171
- "dropdownOptionColor": null,
1172
- "dropdownOptionFontWeight": null,
1173
- "width": null,
1174
- "focusBorderWidth": "1px",
1175
- "focusBorderColor": "#ffbb00",
1176
- "focusBackground": null,
1177
- "focusColor": "#444444",
1178
- "focusDropdownOptionBgColor": null,
1179
- "focusDropdownOptionColor": null,
1180
- "focusDropdownOptionFontWeight": null,
1181
- "focusDropdownOptionBorderLeft": null,
1182
- "focusDropdownOptionBorderRadius": null,
1183
- "hoverBorderColor": "#DADADA",
1184
- "hoverBorderWidth": "1px",
1185
- "hoverColor": "#444444",
1186
- "disableColor": "#ECECEC",
1187
- "disableBackground": "#ECECEC",
1188
- "errorBorderColor": "#DADADA",
1189
- "errorBorderWidth": "1px",
1190
- "errorColor": "#444444",
1191
- "createdDate": null,
1192
- "padding": null,
1193
- "margin": null,
1194
- "isMasterCss": null,
1195
- "controlMetaId": "ALL_COM_GEN_CTRL_radio_nomineeGender_V1",
1196
- "borderStyle": null,
1197
- "height": null,
1198
- "minHeight": null,
1199
- "maxHeight": null,
1200
- "minWidth": null,
1201
- "maxWidth": null,
1202
- "cssClass": null
1187
+ controlType: 'radio',
1188
+ borderColor: '#DADADA',
1189
+ borderWidth: '1px',
1190
+ borderRadius: null,
1191
+ fontSize: '12px',
1192
+ fontWeight: '400',
1193
+ fontFamily: 'Mulish',
1194
+ color: '#444444',
1195
+ background: '#FFFFFF',
1196
+ caretColor: null,
1197
+ nudgeDisplayImage: null,
1198
+ dropdownOptionBgColor: null,
1199
+ dropdownOptionColor: null,
1200
+ dropdownOptionFontWeight: null,
1201
+ width: null,
1202
+ focusBorderWidth: '1px',
1203
+ focusBorderColor: '#ffbb00',
1204
+ focusBackground: null,
1205
+ focusColor: '#444444',
1206
+ focusDropdownOptionBgColor: null,
1207
+ focusDropdownOptionColor: null,
1208
+ focusDropdownOptionFontWeight: null,
1209
+ focusDropdownOptionBorderLeft: null,
1210
+ focusDropdownOptionBorderRadius: null,
1211
+ hoverBorderColor: '#DADADA',
1212
+ hoverBorderWidth: '1px',
1213
+ hoverColor: '#444444',
1214
+ disableColor: '#ECECEC',
1215
+ disableBackground: '#ECECEC',
1216
+ errorBorderColor: '#DADADA',
1217
+ errorBorderWidth: '1px',
1218
+ errorColor: '#444444',
1219
+ createdDate: null,
1220
+ padding: null,
1221
+ margin: null,
1222
+ isMasterCss: null,
1223
+ controlMetaId: 'ALL_COM_GEN_CTRL_radio_nomineeGender_V1',
1224
+ borderStyle: null,
1225
+ height: null,
1226
+ minHeight: null,
1227
+ maxHeight: null,
1228
+ minWidth: null,
1229
+ maxWidth: null,
1230
+ cssClass: null,
1203
1231
  };
1204
1232
  }
1205
1233
  if (!this.checkIfValueIsEmpty(questionObj['validations'])) {
@@ -1259,7 +1287,7 @@ export class MedialQuestionsComponent {
1259
1287
  pattern,
1260
1288
  patternMessage,
1261
1289
  },
1262
- cssClass: "mb-2",
1290
+ cssClass: 'mb-2',
1263
1291
  isVisible: true,
1264
1292
  options: optionsObj,
1265
1293
  isShowLabel: true,
@@ -1282,13 +1310,18 @@ export class MedialQuestionsComponent {
1282
1310
  singleQuestion['isShowQuestionInUI'] = true;
1283
1311
  }
1284
1312
  // Disable the question if it has a default value
1285
- let isEnableDefaultQuestions = this.defaultValues()['isEnableDefaultQuestions'] ? true : false;
1313
+ let isEnableDefaultQuestions = this.defaultValues()['isEnableDefaultQuestions']
1314
+ ? true
1315
+ : false;
1286
1316
  const questionId = singleQuestion['questionId']?.toString();
1287
- const hasDefaultValue = !this.checkIfValueIsEmpty(this.defaultValues()) && Object.keys(this.defaultValues()).includes(questionId);
1288
- if (hasDefaultValue && singleQuestion['field'] && !isEnableDefaultQuestions) {
1317
+ const hasDefaultValue = !this.checkIfValueIsEmpty(this.defaultValues()) &&
1318
+ Object.keys(this.defaultValues()).includes(questionId);
1319
+ if (hasDefaultValue &&
1320
+ singleQuestion['field'] &&
1321
+ !isEnableDefaultQuestions) {
1289
1322
  singleQuestion['field'] = {
1290
1323
  ...singleQuestion['field'],
1291
- isDisable: true
1324
+ isDisable: true,
1292
1325
  };
1293
1326
  }
1294
1327
  if (singleQuestion['questionType'] === 'CHECKBOX') {
@@ -1394,13 +1427,13 @@ export class MedialQuestionsComponent {
1394
1427
  .split('!')[1]) ||
1395
1428
  (singleQuestion['questionType'] === 'CHECKBOX' &&
1396
1429
  !this.checkIfValueIsEmpty(this.personUwAnswers[singleQuestion['questionId']]) &&
1397
- this.personUwAnswers[singleQuestion['questionId']]?.includes(singleSubQuestion['parentQuestionValue'])
1398
- // this.personUwAnswers[singleQuestion['questionId']]?.filter(
1399
- // (singleObj: any) =>
1400
- // singleObj ===
1401
- // singleSubQuestion['parentQuestionValue']
1402
- // ).length > 0
1403
- )) {
1430
+ this.personUwAnswers[singleQuestion['questionId']]?.includes(singleSubQuestion['parentQuestionValue']))
1431
+ // this.personUwAnswers[singleQuestion['questionId']]?.filter(
1432
+ // (singleObj: any) =>
1433
+ // singleObj ===
1434
+ // singleSubQuestion['parentQuestionValue']
1435
+ // ).length > 0
1436
+ ) {
1404
1437
  showQuestion = true;
1405
1438
  }
1406
1439
  });
@@ -1804,19 +1837,26 @@ export class MedialQuestionsComponent {
1804
1837
  // 'BASIC_DETAILS')
1805
1838
  // ) {
1806
1839
  // validation for height in cm
1807
- let heightInCentimeterObj = singleSection['questions'].filter((obj) => obj['cammundaQuestionCode'] === 'QHT' || obj['questionId'] === this.personUwAnswers['medicalQuestionsHeightInput']);
1808
- let heightInInchesObj = singleSection['questions'].filter((obj) => obj['cammundaQuestionCode'] === 'QHTI' || obj['questionId'] === this.personUwAnswers['medicalQuestionsInchesInput']);
1809
- let heightInFeetObj = singleSection['questions'].filter((obj) => obj['cammundaQuestionCode'] === 'QHTF' || obj['questionId'] === this.personUwAnswers['medicalQuestionFeetInput']);
1840
+ let heightInCentimeterObj = singleSection['questions'].filter((obj) => obj['cammundaQuestionCode'] === 'QHT' ||
1841
+ obj['questionId'] ===
1842
+ this.personUwAnswers['medicalQuestionsHeightInput']);
1843
+ let heightInInchesObj = singleSection['questions'].filter((obj) => obj['cammundaQuestionCode'] === 'QHTI' ||
1844
+ obj['questionId'] ===
1845
+ this.personUwAnswers['medicalQuestionsInchesInput']);
1846
+ let heightInFeetObj = singleSection['questions'].filter((obj) => obj['cammundaQuestionCode'] === 'QHTF' ||
1847
+ obj['questionId'] ===
1848
+ this.personUwAnswers['medicalQuestionFeetInput']);
1810
1849
  if (this.personUwAnswers['medicalQuestionsHeightUnit'] === 'CM' &&
1811
1850
  !this.checkIfValueIsEmpty(heightInCentimeterObj) &&
1812
1851
  !this.checkIfValueIsEmpty(heightInCentimeterObj) &&
1813
- !this.checkIfValueIsEmpty(this.personUwAnswers['medicalQuestionsHeightInput']) && !this.checkIfValueIsEmpty(this.personUwAnswers['medicalQuestionsInchesInput']) && !this.checkIfValueIsEmpty(this.personUwAnswers['medicalQuestionFeetInput'])) {
1852
+ !this.checkIfValueIsEmpty(this.personUwAnswers['medicalQuestionsHeightInput']) &&
1853
+ !this.checkIfValueIsEmpty(this.personUwAnswers['medicalQuestionsInchesInput']) &&
1854
+ !this.checkIfValueIsEmpty(this.personUwAnswers['medicalQuestionFeetInput'])) {
1814
1855
  // pass height in cm obj
1815
1856
  let cmObjInAnswersindex = mainRequestForBothPersons.findIndex((obj) => obj.questionId === heightInCentimeterObj[0]['questionId'] &&
1816
1857
  obj['personUWId'] === singleSection['personUWId']);
1817
1858
  if (cmObjInAnswersindex !== -1) {
1818
- mainRequestForBothPersons[cmObjInAnswersindex]['answer'] =
1819
- parseInt(this.personUwAnswers['medicalQuestionsHeightInput']).toString();
1859
+ mainRequestForBothPersons[cmObjInAnswersindex]['answer'] = parseInt(this.personUwAnswers['medicalQuestionsHeightInput']).toString();
1820
1860
  }
1821
1861
  else {
1822
1862
  mainRequestForBothPersons.push({
@@ -1951,8 +1991,7 @@ export class MedialQuestionsComponent {
1951
1991
  }
1952
1992
  if (!this.checkIfValueIsEmpty(heightInFeetObj) &&
1953
1993
  !this.checkIfValueIsEmpty(heightInFeetObj[0]['questionId'])) {
1954
- let heightInFeetAnswerObject = mainRequestForBothPersons.filter((singleQuestion) => singleQuestion['questionId'] ===
1955
- heightInFeetObj[0]['questionId']);
1994
+ let heightInFeetAnswerObject = mainRequestForBothPersons.filter((singleQuestion) => singleQuestion['questionId'] === heightInFeetObj[0]['questionId']);
1956
1995
  if (!this.checkIfValueIsEmpty(heightInFeetAnswerObject) &&
1957
1996
  !this.checkIfValueIsEmpty(heightInFeetAnswerObject[0]['answer'])) {
1958
1997
  this.personUwAnswers[heightInFeetObj[0]['questionId']] =
@@ -1985,8 +2024,8 @@ export class MedialQuestionsComponent {
1985
2024
  });
1986
2025
  }
1987
2026
  if (singleQuestion['isShowQuestionInUI'] &&
1988
- singleQuestion['questionType'] === 'CHECKBOX'
1989
- && !this.checkIfValueIsEmpty(this.personUwAnswers[singleQuestion['questionId']])) {
2027
+ singleQuestion['questionType'] === 'CHECKBOX' &&
2028
+ !this.checkIfValueIsEmpty(this.personUwAnswers[singleQuestion['questionId']])) {
1990
2029
  // for checkbox question
1991
2030
  let questionIndexInMainRequest = mainRequestForBothPersons.findIndex((singleAnswerObj) => singleAnswerObj['questionId'] ===
1992
2031
  singleQuestion['questionId'] &&
@@ -2001,11 +2040,13 @@ export class MedialQuestionsComponent {
2001
2040
  createdUser: this.getCookieValue('userId'),
2002
2041
  clusterId: singleQuestion['clusterId'],
2003
2042
  };
2004
- obj['answer'] = this.personUwAnswers[singleQuestion['questionId']].toString();
2043
+ obj['answer'] =
2044
+ this.personUwAnswers[singleQuestion['questionId']].toString();
2005
2045
  mainRequestForBothPersons.push(obj);
2006
2046
  }
2007
2047
  else {
2008
- mainRequestForBothPersons[questionIndexInMainRequest]['answer'] = this.personUwAnswers[singleQuestion['questionId']].toString();
2048
+ mainRequestForBothPersons[questionIndexInMainRequest]['answer'] =
2049
+ this.personUwAnswers[singleQuestion['questionId']].toString();
2009
2050
  }
2010
2051
  }
2011
2052
  else if (singleQuestion['isShowQuestionInUI'] &&
@@ -2107,7 +2148,8 @@ export class MedialQuestionsComponent {
2107
2148
  }
2108
2149
  }
2109
2150
  let saveRequestsArray = [];
2110
- if (!this.checkIfValueIsEmpty(mainRequestForLa) && this.personType() !== 'PH') {
2151
+ if (!this.checkIfValueIsEmpty(mainRequestForLa) &&
2152
+ this.personType() !== 'PH') {
2111
2153
  this.saveQuestionRequestLa = mainRequestForLa;
2112
2154
  sessionStorage.setItem('saveQuestionRequestLa', JSON.stringify(mainRequestForLa));
2113
2155
  if (!this.checkIfValueIsEmpty(this.clusterId())) {
@@ -2116,7 +2158,8 @@ export class MedialQuestionsComponent {
2116
2158
  // saveRequestsArray.push(this.commonService.saveAnswers(mainRequestForLa, !calledFromConfirmation));
2117
2159
  // saveRequestsArray.push(this.commonService.saveAnswers(mainRequestForLa, (!this.checkIfValueIsEmpty(this.sharedService.openQuoteResponse) && !this.checkIfValueIsEmpty(this.sharedService.openQuoteResponse.isEditAllowedForAgent) && this.sharedService.openQuoteResponse.isEditAllowedForAgent && this.sharedService.openQuoteResponse.isEditAllowedForAgent.toLowerCase() === 'true') ? true : !calledFromConfirmation));
2118
2160
  }
2119
- if (!this.checkIfValueIsEmpty(mainRequestForLa) && this.personType() === 'PH') {
2161
+ if (!this.checkIfValueIsEmpty(mainRequestForLa) &&
2162
+ this.personType() === 'PH') {
2120
2163
  this.saveQuestionRequestPh = mainRequestForLa;
2121
2164
  sessionStorage.setItem('saveQuestionRequestPh', JSON.stringify(mainRequestForLa));
2122
2165
  if (!this.checkIfValueIsEmpty(this.clusterId())) {
@@ -2356,7 +2399,8 @@ export class MedialQuestionsComponent {
2356
2399
  // }
2357
2400
  }
2358
2401
  });
2359
- if (!this.checkIfValueIsEmpty(this.personType()) && this.personType === 'PH') {
2402
+ if (!this.checkIfValueIsEmpty(this.personType()) &&
2403
+ this.personType() === 'PH') {
2360
2404
  sessionStorage.setItem('isMedicalQuestionsValidForPH', isValid);
2361
2405
  sessionStorage.setItem('validationMessageForMedicalQuestionsForPH', validationMessage);
2362
2406
  if (!this.checkIfValueIsEmpty(this.clusterId())) {
@@ -2372,7 +2416,8 @@ export class MedialQuestionsComponent {
2372
2416
  }
2373
2417
  }
2374
2418
  valueChangeForMultiselect(question) {
2375
- if (question['cammundaQuestionCode'] === 'LifeMediCndtn' || question['cammundaQuestionCode'] === 'MediCndtn') {
2419
+ if (question['cammundaQuestionCode'] === 'LifeMediCndtn' ||
2420
+ question['cammundaQuestionCode'] === 'MediCndtn') {
2376
2421
  this.personUwAnswers[question['questionId']].length > 0;
2377
2422
  // if none is selected then remove all and call API
2378
2423
  let isNoneSelected = this.personUwAnswers[question['questionId']].findIndex((singleObj) => singleObj === 'NoMedHistry');
@@ -2381,7 +2426,9 @@ export class MedialQuestionsComponent {
2381
2426
  }
2382
2427
  this.medicalSubQuestionsResponse = [];
2383
2428
  if (!this.checkIfValueIsEmpty(this.questionList)) {
2384
- this.questionList = this.questionList.filter((singleSection) => ((this.checkIfValueIsEmpty(singleSection['isMedicalSubQuestion']) || (!this.checkIfValueIsEmpty(singleSection['isMedicalSubQuestion']) && !singleSection['isMedicalSubQuestion']))));
2429
+ this.questionList = this.questionList.filter((singleSection) => this.checkIfValueIsEmpty(singleSection['isMedicalSubQuestion']) ||
2430
+ (!this.checkIfValueIsEmpty(singleSection['isMedicalSubQuestion']) &&
2431
+ !singleSection['isMedicalSubQuestion']));
2385
2432
  }
2386
2433
  // let currentSectionIndex: any = this.sharedService.personUwResponseObj['questionsResponse'].findIndex(
2387
2434
  // (singlePersonObj: any) =>
@@ -2443,19 +2490,27 @@ export class MedialQuestionsComponent {
2443
2490
  // ].toString()
2444
2491
  // )
2445
2492
  // );
2446
- if (question['field']['configData'].hasOwnProperty('apiUrl') && question['field']['configData'].hasOwnProperty('urlParamForDisease') && question['field']['configData'].hasOwnProperty('urlParamForPersonUwId') && !this.checkIfValueIsEmpty(question['field']['configData']['apiUrl']) && !this.checkIfValueIsEmpty(question['field']['configData']['urlParamForDisease']) && !this.checkIfValueIsEmpty(question['field']['configData']['urlParamForPersonUwId'])) {
2447
- this.masterService.getSubQuestions(question['field']['configData'], selectedDiseases, this.personUwId).subscribe((data) => {
2493
+ if (question['field']['configData'].hasOwnProperty('apiUrl') &&
2494
+ question['field']['configData'].hasOwnProperty('urlParamForDisease') &&
2495
+ question['field']['configData'].hasOwnProperty('urlParamForPersonUwId') &&
2496
+ !this.checkIfValueIsEmpty(question['field']['configData']['apiUrl']) &&
2497
+ !this.checkIfValueIsEmpty(question['field']['configData']['urlParamForDisease']) &&
2498
+ !this.checkIfValueIsEmpty(question['field']['configData']['urlParamForPersonUwId'])) {
2499
+ this.masterService
2500
+ .getSubQuestions(question['field']['configData'], selectedDiseases, this.personUwId)
2501
+ .subscribe((data) => {
2448
2502
  // this.loader.display(false);
2449
2503
  let distinctSteps = [];
2450
2504
  if (!this.checkIfValueIsEmpty(data)) {
2451
2505
  data.forEach((subQuestion) => {
2452
- subQuestion['domainValues'] = this.medialQuestionResponse()['domainValues'][subQuestion['domainName']];
2506
+ subQuestion['domainValues'] =
2507
+ this.medialQuestionResponse()['domainValues'][subQuestion['domainName']];
2453
2508
  subQuestion['isShowQuestionInUI'] = false;
2454
2509
  subQuestion['isMedicalSubQuestion'] = true;
2455
2510
  if (!this.checkIfValueIsEmpty(subQuestion['questionRelation']) &&
2456
2511
  !Array.isArray(subQuestion['questionRelation'])) {
2457
2512
  subQuestion['questionRelation'] = [
2458
- subQuestion['questionRelation']
2513
+ subQuestion['questionRelation'],
2459
2514
  ];
2460
2515
  }
2461
2516
  if (subQuestion['questionType'] === 'CHECKBOX' &&
@@ -2485,7 +2540,8 @@ export class MedialQuestionsComponent {
2485
2540
  }
2486
2541
  subQuestion['field'] = this.getField(subQuestion);
2487
2542
  });
2488
- data.sort((a, b) => a['step'] - b['step'] || a['displayOrder'] - b['displayOrder']);
2543
+ data.sort((a, b) => a['step'] - b['step'] ||
2544
+ a['displayOrder'] - b['displayOrder']);
2489
2545
  distinctSteps.forEach((steps, ind) => {
2490
2546
  let filteredObj = data.filter((singleQuestion) => singleQuestion['clusterId'] === steps);
2491
2547
  let obj = {
@@ -2498,14 +2554,15 @@ export class MedialQuestionsComponent {
2498
2554
  : '',
2499
2555
  personUWId: this.personUwId,
2500
2556
  isMedicalSubQuestion: true,
2501
- showSection: true
2557
+ showSection: true,
2502
2558
  };
2503
2559
  this.questionList.push(obj);
2504
2560
  });
2505
2561
  this.medicalSubQuestionsResponse = data;
2506
2562
  // merge medical sub questions into person uw main questions response (required for show question function to work)
2507
2563
  // clearing on top before api call
2508
- this.personUwResponseObj[0]['questionList'] = this.personUwResponseObj[0]['questionList'].concat(this.medicalSubQuestionsResponse);
2564
+ this.personUwResponseObj[0]['questionList'] =
2565
+ this.personUwResponseObj[0]['questionList'].concat(this.medicalSubQuestionsResponse);
2509
2566
  }
2510
2567
  this.removeSubQuestionValues();
2511
2568
  }, (err) => {
@@ -2525,24 +2582,22 @@ export class MedialQuestionsComponent {
2525
2582
  checkAndUpdateHeightUnit() {
2526
2583
  if (this.personUwAnswers['medicalQuestionsHeightUnit'] === 'FEET' &&
2527
2584
  !this.checkIfValueIsEmpty(this.personUwAnswers['medicalQuestionsHeightInput'])) {
2528
- let heightInInches = (parseFloat(this.personUwAnswers['medicalQuestionsHeightInput']) * 0.393701).toFixed(2);
2529
- let heightInFeet = parseFloat((heightInInches / 12)
2530
- .toString()
2531
- .split('.')[1]) > 12
2585
+ let heightInInches = (parseFloat(this.personUwAnswers['medicalQuestionsHeightInput']) *
2586
+ 0.393701).toFixed(2);
2587
+ let heightInFeet = parseFloat((heightInInches / 12).toString().split('.')[1]) > 12
2532
2588
  ? (heightInInches / 12).toFixed(1)
2533
2589
  : (heightInInches / 12).toFixed(2);
2534
2590
  if (!this.checkIfValueIsEmpty(heightInFeet.toString().split('.')[0])) {
2535
- this.personUwAnswers['medicalQuestionFeetInput'] = heightInFeet.toString().split('.')[0];
2591
+ this.personUwAnswers['medicalQuestionFeetInput'] = heightInFeet
2592
+ .toString()
2593
+ .split('.')[0];
2536
2594
  }
2537
2595
  if (!this.checkIfValueIsEmpty(heightInFeet.toString().split('.')[1])) {
2538
2596
  this.personUwAnswers['medicalQuestionsInchesInput'] =
2539
2597
  heightInFeet.toString().split('.')[1] !== '11' &&
2540
2598
  heightInFeet.toString().split('.')[1] !== '12' &&
2541
2599
  heightInFeet.toString().split('.')[1] !== '13'
2542
- ? heightInFeet
2543
- .toString()
2544
- .split('.')[1]
2545
- .charAt(0)
2600
+ ? heightInFeet.toString().split('.')[1].charAt(0)
2546
2601
  : heightInFeet.toString().split('.')[1];
2547
2602
  }
2548
2603
  }
@@ -2661,7 +2716,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
2661
2716
  MultipleSelectComponent,
2662
2717
  GoogleMapsModule,
2663
2718
  HrLineComponent,
2664
- FilePreviewComponent
2719
+ FilePreviewComponent,
2665
2720
  ], template: "<div *ngFor=\"let section of questionList\">\n <div *ngIf=\"\n !checkIfValueIsEmpty(section['questions']) &&\n section['showSection']\n \" class=\"card p-3 mb-4\" id=\"personUwMedicalQuestions\">\n <h6 class=\"page-title bold-label\">\n {{ getTitleCase(section[\"sectionName\"]) }}\n </h6>\n <lib-hr-line [field]=\"horizontalLineObj\" />\n <div *ngFor=\"let questions of section['questions']\" class=\"row\">\n <!-- <div *ngIf=\"questions['questionType'] === 'IMAGE TEXT'\">\n <img [src]=\"questions['sampleS3Link']\" class=\"d-block mx-auto\" [alt]=\"questions['title']\">\n <h3 [innerHTML]=\"questions['questionText']\"></h3>\n </div> -->\n\n <div [ngClass]=\"questions?.field?.cssClass\" *ngIf=\"\n questions['questionType'] === 'FREE TEXT' &&\n questions['cammundaQuestionCode'] !== 'QHT' &&\n questions['isShowQuestionInUI']\n \">\n <div class=\"col-12 px-0 my-1\">\n <lib-textbox [(ngModel)]=\"personUwAnswers[questions.questionId]\" [field]=\"questions['field']\"\n (blur)=\"validateField(questions.questionId, questions); removeSubQuestionValues()\" />\n <div class=\"error-message text-danger mt-1\" *ngIf=\"hasAnyFieldError(questions.questionId)\">\n {{ getFieldErrorMessage(questions.questionId, questions) }}\n </div>\n </div>\n </div>\n\n <div [ngClass]=\"questions?.field?.cssClass\" *ngIf=\"\n questions['questionType'] === 'HEIGHTINPUT' &&\n questions['cammundaQuestionCode'] === 'QHTF' &&\n questions['isShowQuestionInUI']\n \">\n <label class=\"card-topic d-block field-lable\">Height\n <span style=\"color: #ee0000\">&#42;</span>\n </label>\n <div [class]=\" 'col-auto px-0 my-0 py-0 heightinput medicalQuestionsHeightInput'\"\n id=\"medicalQuestionsHeightInput\" (focusout)=\"validateField(questions.questionId, questions)\">\n <div class=\"row col-12 my-1\" *ngIf=\"personUwAnswers['medicalQuestionsHeightUnit'] === 'CM'\">\n <div class=\"col-7 py-0 heightInputs\">\n <lib-textbox [(ngModel)]=\"personUwAnswers['medicalQuestionsHeightInput']\"\n (blur)=\"validateField(questions.questionId, questions)\" (ngModelChange)=\"removeSubQuestionValues()\"\n [field]=\"medQuestionObj['QHT']['field']\" />\n </div>\n <div class=\"col-5\">\n <lib-select [(ngModel)]=\"personUwAnswers['medicalQuestionsHeightUnit']\"\n [field]=\"medQuestionObj['heightObjectTypes']\" (blur)=\"validateField(questions.questionId, questions)\"\n (ngModelChange)=\"validateField(questions.questionId, questions); checkAndUpdateHeightUnit()\" />\n </div>\n </div>\n <div class=\"row\" *ngIf=\"\n personUwAnswers[\n 'medicalQuestionsHeightUnit'\n ] === 'FEET'\n \">\n <div class=\"col-4 py-0 my-1\">\n <lib-select [(ngModel)]=\"personUwAnswers['medicalQuestionFeetInput']\"\n (blur)=\"validateField(questions.questionId, questions)\" (ngModelChange)=\"removeSubQuestionValues()\"\n [field]=\"medQuestionObj['QHTF']['field']\" />\n </div>\n <div class=\"col-4 py-0 my-1\">\n <lib-select [(ngModel)]=\"personUwAnswers['medicalQuestionsInchesInput']\"\n (blur)=\"validateField(questions.questionId, questions)\" (ngModelChange)=\"removeSubQuestionValues()\"\n [field]=\"medQuestionObj['QHTI']['field']\" />\n </div>\n <div class=\"col-4 py-0 my-1\">\n <lib-select [(ngModel)]=\"personUwAnswers['medicalQuestionsHeightUnit']\"\n [field]=\"medQuestionObj['heightObjectTypes']\" (blur)=\"validateField(questions.questionId, questions)\"\n (ngModelChange)=\"checkAndUpdateHeightUnit()\" />\n </div>\n </div>\n\n </div>\n <div class=\"error-message text-danger mt-1\" *ngIf=\"hasAnyFieldError(questions.questionId)\">\n {{ getFieldErrorMessage(questions.questionId, questions) }}\n </div>\n </div>\n <div class=\"row mt-0 pt-0\" *ngIf=\"\n questions['questionType'] === 'MAP' &&\n questions['isShowQuestionInUI']\n \">\n\n\n <div class=\"map-container\">\n <div class=\"address-search-container mb-3\">\n\n <div class=\"row mb-3\">\n <div class=\"col-6\">\n <label class=\"form-label card-topic\">Longitude</label>\n <input type=\"number\" class=\"form-control\" autocomplete=\"off\" [(ngModel)]=\"longitude\"\n placeholder=\"Enter longitude\" step=\"any\" readonly\n (blur)=\"validateField(questions.questionId, questions)\">\n </div>\n <div class=\"col-6\">\n <label class=\"form-label card-topic\">Latitude</label>\n <input type=\"number\" class=\"form-control\" autocomplete=\"off\" [(ngModel)]=\"latitude\"\n placeholder=\"Enter latitude\" step=\"any\" readonly\n (blur)=\"validateField(questions.questionId, questions)\">\n </div>\n </div>\n\n <input #addressInput type=\"text\" class=\"form-control\" placeholder=\"Search for address\"\n (keyup)=\"onAddressInputKeyup($event)\" (focus)=\"showDropdown = true\" (blur)=\"onInputBlur()\"\n autocomplete=\"off\">\n <div *ngIf=\"showDropdown && addressSuggestions.length > 0\"\n class=\"autocomplete-dropdown position-absolute w-100 mt-1\"\n style=\"z-index: 1000; max-height: 200px; overflow-y: auto; background: white; border: 1px solid #ccc; border-radius: 4px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);\">\n <div *ngFor=\"let suggestion of addressSuggestions; let i = index\" class=\"dropdown-item p-2\"\n style=\"cursor: pointer; border-bottom: 1px solid #eee;\" (mousedown)=\"selectAddress(suggestion)\"\n (mouseenter)=\"hoveredIndex = i\" [class.bg-light]=\"hoveredIndex === i\">\n <div class=\"fw-bold\">{{ suggestion.main_text }}</div>\n <small class=\"text-muted\">{{ suggestion.secondary_text }}</small>\n </div>\n </div>\n <small class=\"text-muted\">Start typing to search for addresses</small>\n </div>\n <google-map [center]=\"center\" [zoom]=\"zoom\">\n <map-marker [position]=\"currentCoordinates\"></map-marker>\n </google-map>\n </div>\n </div>\n\n\n <div [ngClass]=\"questions?.field?.cssClass\" *ngIf=\"\n (questions['questionType'] === 'RADIO BUTTON' ||\n questions['questionType'] === 'ADDMORE') &&\n questions['isShowQuestionInUI']\n \">\n <lib-radio [(ngModel)]=\"personUwAnswers[questions.questionId]\"\n (blur)=\"validateField(questions.questionId, questions)\"\n (ngModelChange)=\"validateField(questions.questionId, questions); removeSubQuestionValues()\"\n [field]=\"questions['field']\" />\n <div class=\"error-message text-danger mt-1\" *ngIf=\"hasAnyFieldError(questions.questionId)\">\n {{ getFieldErrorMessage(questions.questionId, questions) }}\n </div>\n </div>\n\n <div class=\"my-1\" [ngClass]=\"questions?.field?.cssClass\" *ngIf=\"\n questions['questionType'] === 'CHECKBOX' &&\n questions['isShowQuestionInUI']\n \">\n <lib-multiple-select [(ngModel)]=\"personUwAnswers[questions.questionId]\"\n (click)=\"validateField(questions.questionId, questions)\"\n (ngModelChange)=\"\n validateField(questions.questionId, questions);\n valueChangeForMultiselect(questions)\n \"\n [field]=\"questions['field']\"\n />\n <div class=\"error-message text-danger mt-1\" *ngIf=\"hasAnyFieldError(questions.questionId)\">\n {{ getFieldErrorMessage(questions.questionId, questions) }}\n </div>\n </div>\n\n <div class=\"my-1\" [ngClass]=\"questions?.field?.cssClass\" *ngIf=\"\n questions['questionType'] === 'DECLARATION' &&\n questions['isShowQuestionInUI']\n \">\n <lib-checkbox [(ngModel)]=\"personUwAnswers[questions.questionId]\"\n (blur)=\"validateField(questions.questionId, questions)\"\n (ngModelChange)=\"validateField(questions.questionId, questions); removeSubQuestionValues()\"\n [field]=\"questions['field']\" />\n <div class=\"error-message text-danger mt-1\" *ngIf=\"hasAnyFieldError(questions.questionId)\">\n {{ getFieldErrorMessage(questions.questionId, questions) }}\n </div>\n </div>\n\n <div class=\"my-1\" [ngClass]=\"questions?.field?.cssClass\" *ngIf=\"\n questions['questionType'] === 'DROPDOWN' &&\n questions['isShowQuestionInUI']\n \" (focusout)=\"validateField(questions.questionId, questions)\">\n <lib-select [(ngModel)]=\"personUwAnswers[questions.questionId]\" [field]=\"questions['field']\"\n (blur)=\"validateField(questions.questionId, questions)\"\n (ngModelChange)=\"validateField(questions.questionId, questions); removeSubQuestionValues()\" />\n <div class=\"error-message text-danger mt-1\" *ngIf=\"hasAnyFieldError(questions.questionId)\">\n {{ getFieldErrorMessage(questions.questionId, questions) }}\n </div>\n </div>\n\n <div class=\"my-1\" [ngClass]=\"questions?.field?.cssClass\" *ngIf=\"\n questions['questionType'] === 'CALENDAR' &&\n questions['isShowQuestionInUI']\n \">\n <lib-dob [(ngModel)]=\"personUwAnswers[questions.questionId]\" [field]=\"questions['field']\"\n (blur)=\"validateField(questions.questionId, questions)\" (ngModelChange)=\"removeSubQuestionValues()\" />\n <div class=\"error-message text-danger mt-1\" *ngIf=\"hasAnyFieldError(questions.questionId)\">\n {{ getFieldErrorMessage(questions.questionId, questions) }}\n </div>\n </div>\n\n <!-- <div\n class=\"\"\n *ngIf=\"\n questions['questionType'] === 'HEIGHTINPUT' &&\n questions['cammundaQuestionCode'] === 'QHTF' &&\n questions['isShowQuestionInUI']\n \"\n >\n </div> -->\n <div class=\"my-1\" [ngClass]=\"questions?.field?.cssClass\" *ngIf=\"\n questions['questionType'] === 'DOCUPLOAD' &&\n questions['isShowQuestionInUI']\n \">\n <lib-upload [field]=\"questions['field']\" (filePreview)=\"onDocumentFilePreview($event)\"\n (blur)=\"validateField(questions.questionId, questions);\" />\n <lib-file-preview *ngIf=\" previewFile\" [field]=\"questions['field']\" [file]=\"previewFile\"\n (closed)=\"closeFilePreview()\">\n </lib-file-preview>\n </div>\n\n\n <div [ngClass]=\"questions?.field?.cssClass\" *ngIf=\"\n questions['questionType'] === 'PASSPORT_UPLOAD' &&\n questions['isShowQuestionInUI']\n \">\n <!-- pending -->\n </div>\n </div>\n </div>\n</div>", styles: [".map-container{width:100%;position:relative}.address-search-container{position:relative}.address-search-container input{width:100%;padding:10px;border:1px solid #ddd;border-radius:4px;box-sizing:border-box}.address-search-container input:focus{outline:none;border-color:#4285f4;box-shadow:0 0 0 2px #4285f433}.pac-container{z-index:10000!important;border-radius:4px;border:1px solid #ddd;box-shadow:0 2px 6px #0000004d}.pac-item{padding:10px;border-bottom:1px solid #eee;cursor:pointer}.pac-item:hover{background-color:#f5f5f5}.selected-address{padding:8px;background-color:#f8f9fa;border-radius:4px;border-left:3px solid #28a745}.map-container ::ng-deep google-map>div{height:400px!important;width:auto!important}.medicalQues{font-size:12px;font-style:normal;font-weight:400;line-height:normal}.heightinput{border:2px solid #fb0;padding:10px;border-radius:4px;width:fit-content}.heightInputs{display:flex;align-items:center;gap:10px}.blink_me{animation:blinker 1s linear infinite}.invalid-field-one-ui{border:2px solid #dc3545!important;box-shadow:0 0 0 3px #dc354526!important}.invalid-field-one-ui:focus{border-color:#dc3545!important;box-shadow:0 0 0 3px #dc354540!important}@keyframes blinker{50%{opacity:0}}.error-message{font-size:12px;color:#dc3545;margin-top:4px;font-weight:400}.text-danger{color:#dc3545!important}\n"] }]
2666
2721
  }], ctorParameters: () => [{ type: i0.NgZone }, { type: i1.MasterService }], propDecorators: { questionsValueChange: [{
2667
2722
  type: Output
@@ -2671,4 +2726,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
2671
2726
  type: ViewChild,
2672
2727
  args: ['addressInput']
2673
2728
  }] } });
2674
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL21lZGlhbC1xdWVzdGlvbnMvbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL21lZGlhbC1xdWVzdGlvbnMvbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBVSxTQUFTLEVBQXlCLEtBQUssRUFBMEMsTUFBTSxFQUFFLFlBQVksRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUVwTCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN2RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHL0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7Ozs7OztBQXlCOUUsTUFBTSxPQUFPLHdCQUF3QjtJQXFJaEI7SUFBdUI7SUFwSWhDLG9CQUFvQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDekQsU0FBUyxHQUFTLEtBQUssRUFBTyxDQUFDLENBQUMsMkJBQTJCO0lBQ2xELGlCQUFpQixDQUFpQjtJQUMzQyxzQkFBc0IsR0FBRyxLQUFLLEVBQU8sQ0FBQztJQUN0Qyx5QkFBeUIsR0FBUyxLQUFLLEVBQU8sQ0FBQztJQUMvQyxhQUFhLEdBQVMsS0FBSyxFQUFPLENBQUM7SUFDbkMsVUFBVSxHQUFRLEtBQUssRUFBTyxDQUFDO0lBQy9CLFVBQVUsR0FBUyxFQUFFLENBQUM7SUFDdEIsOEJBQThCLEdBQVMsSUFBSSxDQUFDO0lBQzVDLDJCQUEyQixHQUFTLEVBQUUsQ0FBQztJQUNaLFlBQVksQ0FBZ0M7SUFDL0QsWUFBWSxDQUFtQztJQUN2RCxxQkFBcUIsR0FBUSxFQUFFLENBQUM7SUFDaEMscUJBQXFCLEdBQVEsRUFBRSxDQUFDO0lBQ2hDLEtBQUssR0FBUSxLQUFLLENBQUMsUUFBUSxFQUFPLENBQUM7SUFDbkMsWUFBWSxHQUFRLEVBQUUsQ0FBQztJQUN2QixrQkFBa0IsR0FBUSxFQUFFLENBQUM7SUFDN0IsbUJBQW1CLEdBQVEsRUFBRSxDQUFDO0lBQzlCLE1BQU0sR0FBOEIsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3ZFLFFBQVEsQ0FBTTtJQUNkLFNBQVMsQ0FBTTtJQUNmLElBQUksQ0FBTTtJQUNWLE1BQU0sR0FBUSxFQUFFLENBQUM7SUFHakIsZUFBZSxHQUFRO1FBQ3JCLDBCQUEwQixFQUFFLE1BQU07UUFDbEMsd0JBQXdCLEVBQUUsQ0FBQztRQUMzQiwyQkFBMkIsRUFBRSxDQUFDO1FBQzlCLDJCQUEyQixFQUFFLENBQUM7S0FDL0IsQ0FBQztJQUNGLGNBQWMsR0FBUSxFQUFFLENBQUM7SUFDekIsNkJBQTZCLEdBQVEsRUFBRSxDQUFDO0lBQ3hDLHdCQUF3QixHQUFRLEVBQUUsQ0FBQztJQUNuQywwQkFBMEIsR0FBUSxFQUFFLENBQUM7SUFDckMsY0FBYyxHQUFRLENBQUMsYUFBYSxFQUFFLGNBQWMsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNyRSwrQkFBK0IsR0FBUTtRQUNyQztZQUNFLEtBQUssRUFBRSxJQUFJO1lBQ1gsS0FBSyxFQUFFLElBQUk7U0FDWjtRQUNEO1lBQ0UsS0FBSyxFQUFFLE1BQU07WUFDYixLQUFLLEVBQUUsTUFBTTtTQUNkO0tBQ0YsQ0FBQztJQUNGLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDckIsa0JBQWtCLEdBQVUsRUFBRSxDQUFDO0lBQy9CLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsQixhQUFhLENBQU07SUFDbkIsaUJBQWlCLEdBQVM7UUFDUixjQUFjLEVBQUU7WUFDWixhQUFhLEVBQUUsSUFBSTtZQUNuQixhQUFhLEVBQUUsSUFBSTtZQUNuQixhQUFhLEVBQUUsSUFBSTtZQUNuQixjQUFjLEVBQUUsSUFBSTtZQUNwQixVQUFVLEVBQUUsSUFBSTtZQUNoQixZQUFZLEVBQUUsSUFBSTtZQUNsQixZQUFZLEVBQUUsSUFBSTtZQUNsQixPQUFPLEVBQUUsSUFBSTtZQUNiLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFlBQVksRUFBRSxJQUFJO1lBQ2xCLG1CQUFtQixFQUFFLElBQUk7WUFDekIsdUJBQXVCLEVBQUUsSUFBSTtZQUM3QixxQkFBcUIsRUFBRSxJQUFJO1lBQzNCLDBCQUEwQixFQUFFLElBQUk7WUFDaEMsT0FBTyxFQUFFLElBQUk7WUFDYixrQkFBa0IsRUFBRSxJQUFJO1lBQ3hCLGtCQUFrQixFQUFFLElBQUk7WUFDeEIsaUJBQWlCLEVBQUUsSUFBSTtZQUN2QixZQUFZLEVBQUUsSUFBSTtZQUNsQiw0QkFBNEIsRUFBRSxJQUFJO1lBQ2xDLDBCQUEwQixFQUFFLElBQUk7WUFDaEMsK0JBQStCLEVBQUUsSUFBSTtZQUNyQywrQkFBK0IsRUFBRSxJQUFJO1lBQ3JDLGlDQUFpQyxFQUFFLElBQUk7WUFDdkMsa0JBQWtCLEVBQUUsSUFBSTtZQUN4QixrQkFBa0IsRUFBRSxJQUFJO1lBQ3hCLFlBQVksRUFBRSxJQUFJO1lBQ2xCLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLG1CQUFtQixFQUFFLElBQUk7WUFDekIsa0JBQWtCLEVBQUUsSUFBSTtZQUN4QixrQkFBa0IsRUFBRSxJQUFJO1lBQ3hCLFlBQVksRUFBRSxJQUFJO1lBQ2xCLGFBQWEsRUFBRSxJQUFJO1lBQ25CLFNBQVMsRUFBRSxJQUFJO1lBQ2YsUUFBUSxFQUFFLElBQUk7WUFDZCxhQUFhLEVBQUUsSUFBSTtZQUNuQixlQUFlLEVBQUUsa0NBQWtDO1lBQ25ELGFBQWEsRUFBRSxPQUFPO1lBQ3RCLFFBQVEsRUFBRSxJQUFJO1lBQ2QsV0FBVyxFQUFFLElBQUk7WUFDakIsV0FBVyxFQUFFLElBQUk7WUFDakIsVUFBVSxFQUFFLElBQUk7WUFDaEIsVUFBVSxFQUFFLElBQUk7WUFDaEIsVUFBVSxFQUFFLElBQUk7U0FDbkI7UUFDRCxXQUFXLEVBQUUsUUFBUTtRQUNyQixPQUFPLEVBQUUsWUFBWTtRQUNyQixhQUFhLEVBQUUsSUFBSTtRQUNuQixRQUFRLEVBQUUsa0NBQWtDO1FBQzVDLFdBQVcsRUFBRSxJQUFJO1FBQ2pCLFdBQVcsRUFBRSxLQUFLO1FBQ2xCLGNBQWMsRUFBRSxJQUFJO1FBQ3BCLFlBQVksRUFBRTtZQUNWLFlBQVksRUFBRSxLQUFLO1lBQ25CLGlCQUFpQixFQUFFLDRCQUE0QjtZQUMvQyxXQUFXLEVBQUUsSUFBSTtZQUNqQixrQkFBa0IsRUFBRSxJQUFJO1lBQ3hCLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLGtCQUFrQixFQUFFLElBQUk7WUFDeEIsU0FBUyxFQUFFLElBQUk7WUFDZixnQkFBZ0IsRUFBRSxFQUFFO1NBQ3ZCO1FBQ0QsU0FBUyxFQUFFLEVBQUU7UUFDYixVQUFVLEVBQUUsUUFBUTtRQUNwQixPQUFPLEVBQUUsSUFBSTtRQUNiLE9BQU8sRUFBRSxJQUFJO1FBQ2IsVUFBVSxFQUFFLElBQUk7UUFDaEIsWUFBWSxFQUFFO1lBQ1YsUUFBUSxFQUFFLEVBQUU7U0FDZjtRQUNELGFBQWEsRUFBRSxJQUFJO1FBQ25CLGFBQWEsRUFBRSxJQUFJO1FBQ25CLGlCQUFpQixFQUFFLEtBQUs7UUFDeEIsYUFBYSxFQUFFLFFBQVE7S0FDMUIsQ0FBQztJQUNoQixXQUFXLEdBQWdCLElBQUksQ0FBQztJQUVoQyw0QkFBNEI7SUFDNUIsV0FBVyxHQUF3RCxFQUFFLENBQUM7SUFDdEUsWUFBWSxHQUErQixFQUFFLENBQUM7SUFDOUMsWUFBbUIsTUFBYyxFQUFTLGFBQTZCO1FBQXBELFdBQU0sR0FBTixNQUFNLENBQVE7UUFBUyxrQkFBYSxHQUFiLGFBQWEsQ0FBZ0I7UUFDckUsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsRUFBRSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDcEMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNELENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFDRSxDQUFDLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNsSCxDQUFDLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUM1SCxDQUFDO1lBQ0QsSUFBSSxhQUFhLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQy9CLFNBQVMsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtvQkFDcEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztvQkFDekMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztvQkFDM0MsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7b0JBQ2YsSUFBSSxDQUFDLGtCQUFrQixHQUFHO3dCQUN4QixHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVE7d0JBQ2xCLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUztxQkFDcEIsQ0FBQztvQkFDRixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDL0MsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBQ0QsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDckMsQ0FBQztRQUVELElBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDcEcsSUFBRyxPQUFPLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBQyxDQUFDO2dCQUMxRSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUNqQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVPLHdCQUF3QjtRQUM5QixJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3pELElBQUksQ0FBQyxlQUFlLENBQUMsMEJBQTBCLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUV6RCxnREFBZ0Q7UUFDaEQsaUVBQWlFO1FBQ2pFLHFEQUFxRDtRQUNyRCxpREFBaUQ7UUFDakQsc0JBQXNCO1FBQ3RCLHVGQUF1RjtRQUN2RixtQkFBbUI7UUFDbkIsdUJBQXVCO1FBQ3ZCLG9GQUFvRjtRQUNwRixtQkFBbUI7UUFDbkIsdUJBQXVCO1FBQ3ZCLHVGQUF1RjtRQUN2RixtQkFBbUI7UUFDbkIsVUFBVTtRQUNWLFVBQVU7UUFDVixNQUFNO1FBQ04sTUFBTTtJQUNSLENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FDckQsSUFBSSxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQ2hDO1lBQ0UsS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDO1lBQ2xCLHFCQUFxQixFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRTtZQUN4QyxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQztTQUM5RCxDQUNGLENBQUM7UUFFRixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFO1lBQ2xELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sZUFBZTtRQUNyQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRTNDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoRCxPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1RCxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDWixHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNuQixHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRTtTQUNwQixDQUFDO1FBQ0YsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFFdEMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDakIsQ0FBQztRQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUU7WUFDN0IsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLE9BQU8sRUFBRSxLQUFLLENBQUMsaUJBQWlCO1lBQ2hDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTTtTQUN6QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVPLG9CQUFvQixDQUFDLEtBQXFDO1FBQ2hFLE1BQU0sV0FBVyxHQUFHO1lBQ2xCLE9BQU8sRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN2QixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7WUFDaEIsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtZQUN6QyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDekIsQ0FBQztJQUNKLENBQUM7SUFFRCxhQUFhLENBQUMsT0FBZTtRQUMzQixNQUFNLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFNUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUN6RCxJQUFJLE1BQU0sS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM3QyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO29CQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHO3dCQUNaLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFO3dCQUNuQixHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRTtxQkFDcEIsQ0FBQztvQkFDRixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztvQkFDdEMsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ2pCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxHQUFHLENBQ1QsdURBQXVELEdBQUcsTUFBTSxDQUNqRSxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQVU7UUFDNUIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFFakMseUJBQXlCO1FBQ3pCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUVELDhCQUE4QjtRQUM5QixJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUMxQixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsRUFDckIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQ25DLENBQUM7WUFDRixPQUFPO1FBQ1QsQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4RCxPQUFPO1FBQ1QsQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUNqQyxJQUNFLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQztnQkFDdEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDMUMsQ0FBQztnQkFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUNqRSxDQUFDO1lBQ0QsT0FBTztRQUNULENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDMUIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUMxQixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNuQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBYTtRQUMzQix3REFBd0Q7UUFDeEQsd0NBQXdDO1FBRXhDLE1BQU0sT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUM3RCxPQUFPLENBQUMsbUJBQW1CLENBQ3pCO1lBQ0UsS0FBSyxFQUFFLEtBQUs7WUFDWixLQUFLLEVBQUUsQ0FBQyxTQUFTLENBQUM7U0FDbkIsRUFDRCxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUN0QixJQUNFLE1BQU0sS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO2dCQUNwRCxXQUFXLEVBQ1gsQ0FBQztnQkFDRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDekQsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO29CQUM3QixTQUFTLEVBQUUsVUFBVSxDQUFDLHFCQUFxQixDQUFDLFNBQVM7b0JBQ3JELGNBQWMsRUFBRSxVQUFVLENBQUMscUJBQXFCLENBQUMsY0FBYztvQkFDL0QsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO2lCQUNwQyxDQUFDLENBQUMsQ0FBQztnQkFDSixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN6QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELGFBQWEsQ0FBQyxVQUFlO1FBQzNCLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQ3pDLGVBQWUsQ0FDSSxDQUFDO1FBQ3RCLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsWUFBWSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDO1FBQzlDLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FDbEQsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FDOUIsQ0FBQztRQUNGLE9BQU8sQ0FBQyxVQUFVLENBQ2hCO1lBQ0UsT0FBTyxFQUFFLFVBQVUsQ0FBQyxRQUFRO1lBQzVCLE1BQU0sRUFBRSxDQUFDLFVBQVUsRUFBRSxtQkFBbUIsQ0FBQztTQUMxQyxFQUNELENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ2hCLElBQUksTUFBTSxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDbEUsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQzVDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUU1QyxJQUFJLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUMzQyxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztvQkFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7b0JBRXBCLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7b0JBQzNCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUN4QyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsV0FBVztRQUNULFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUM1QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsK0JBQStCLENBQUMsVUFBZ0I7UUFDOUMsSUFBRyxVQUFVLENBQUMsc0JBQXNCLENBQUMsS0FBSyxXQUFXLElBQUksVUFBVSxDQUFDLHNCQUFzQixDQUFDLEtBQU0sZUFBZSxFQUFFLENBQUM7WUFDakgsSUFBSSxDQUFDLDhCQUE4QixHQUFHLFVBQVUsQ0FBQztRQUNuRCxDQUFDO1FBQ0QsSUFBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLGdDQUFnQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzVJLFVBQVUsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQW9CLEVBQUUsRUFBRTtnQkFDNUUsSUFBSSxDQUFDLCtCQUErQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3ZELENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsSUFBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztZQUN6VCxJQUFJLFdBQVcsR0FBUyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1lBQy9HLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFlLEVBQUUsZUFBd0IsRUFBRSxFQUFFO2dCQUNoRSxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUN4SCxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGVBQXFCLEVBQUUscUJBQThCLEVBQUUsRUFBRTt3QkFDekosSUFBSSxDQUFDLHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxDQUFDO3dCQUM1QyxJQUFHLGVBQWUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUkscUJBQXFCLEtBQUssQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDOzRCQUNuTCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQzt3QkFDakMsQ0FBQztvQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFTCxDQUFDO0lBQ0gsQ0FBQztJQUVELDJCQUEyQjtRQUN6QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLElBQUksR0FBUSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsNkJBQTZCLEdBQUcsRUFBRSxDQUFDO1FBRXhDLElBQUksU0FBUyxHQUFTLEtBQUssQ0FBQztRQUM1QixJQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxFQUFHLENBQUM7WUFDbkYsSUFBSSw2QkFBNkIsR0FBVSxjQUFjLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDL0YsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDdkUsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pELElBQUksZUFBZSxHQUFRLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxpQkFBc0IsRUFBRSxFQUFFO2dCQUMzRCxlQUFlLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDeEQsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQztnQkFDL0IsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsRUFDcEQsQ0FBQztnQkFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDekQsSUFBSSxhQUFhLEdBQVEsRUFBRSxDQUFDO29CQUM1QixJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxrQkFBdUIsRUFBRSxFQUFFO3dCQUM1RCxJQUFJLENBQUMsVUFBVSxHQUFHLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUM5RCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs0QkFDbEUsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUN4QyxDQUFDLGNBQW1CLEVBQUUsRUFBRTtnQ0FDdEIsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLEtBQUssaUJBQWlCLEVBQUUsQ0FBQztvQ0FDbEQsY0FBYyxDQUFDLGNBQWMsQ0FBQyxHQUFHLGNBQWMsQ0FDN0MsY0FBYyxDQUNmLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztnQ0FDMUIsQ0FBQztnQ0FDRCxjQUFjLENBQUMsY0FBYyxDQUFDO29DQUM1QixJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7Z0NBRXJELGNBQWMsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dDQUV4RCxJQUFJLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDO29DQUNyRCxjQUFjLENBQUMsYUFBYSxDQUFDO3dDQUMzQixvSEFBb0gsQ0FBQztnQ0FDekgsQ0FBQztnQ0FDRCxvRUFBb0U7Z0NBQ3BFLDRNQUE0TTtnQ0FDNU0sSUFBSTtnQ0FDSixJQUNFLGNBQWMsQ0FBQyxjQUFjLENBQUMsS0FBSyxVQUFVO29DQUM3QyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsY0FBYyxDQUFDLGtCQUFrQixDQUFDLENBQ25DLEVBQ0QsQ0FBQztvQ0FDRCxjQUFjLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQ3hDLENBQUMseUJBQThCLEVBQUUsRUFBRTt3Q0FDakMsSUFBSSxrQkFBa0IsR0FBUSxrQkFBa0IsQ0FDOUMsY0FBYyxDQUNmLENBQUMsTUFBTSxDQUNOLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FDZCxNQUFNLENBQUMsWUFBWSxDQUFDOzRDQUNwQix5QkFBeUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUM5QyxDQUFDO3dDQUNGLElBQUksa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDOzRDQUNsQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7Z0RBQ3BDLHlCQUF5QixDQUFDLHFCQUFxQixDQUFDLENBQUM7d0NBQ3JELENBQUM7b0NBQ0gsQ0FBQyxDQUNGLENBQUM7Z0NBQ0osQ0FBQztnQ0FFRCxJQUFJLGNBQWMsQ0FBQyxjQUFjLENBQUMsS0FBSyxVQUFVLEVBQUUsQ0FBQztvQ0FDbEQsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7d0NBQ3ZELENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQ25ELEVBQ0QsQ0FBQzt3Q0FDRCxJQUFJLENBQUMsY0FBYyxDQUFDLENBQ2xCLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FDN0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxpQkFBc0IsRUFBRSxFQUFFOzRDQUNuQyxJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUN6QyxFQUNELENBQUM7Z0RBQ0QsSUFBSSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FDckMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsQ0FDekMsQ0FBQzs0Q0FDSixDQUFDO3dDQUNILENBQUMsQ0FBQyxDQUFDO29DQUNMLENBQUM7Z0NBQ0gsQ0FBQztnQ0FFRCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO29DQUNwRCxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dDQUM3QyxDQUFDO2dDQUVELGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLEtBQUssQ0FBQzs0QkFDakQsQ0FBQyxDQUNGLENBQUM7NEJBRUYsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0NBQzNELFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQ0FDdkMsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssWUFBWSxFQUFFLENBQUM7b0NBQzlDLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxRQUFRLENBQ2pDLGNBQWMsQ0FDZixDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0NBQzlCLENBQUM7Z0NBRUQsSUFBSSxRQUFRLENBQUMsc0JBQXNCLENBQUMsS0FBSyxNQUFNLEVBQUUsQ0FBQztvQ0FDaEQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztvQ0FDekQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUM7b0NBQ3ZDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsS0FBSyxDQUFDO29DQUM1RCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHO3dDQUNyRCxXQUFXLEVBQUUsUUFBUTt3Q0FDckIsV0FBVyxFQUFFLFNBQVM7d0NBQ3RCLFdBQVcsRUFBRSxPQUFPO3dDQUNwQixZQUFZLEVBQUUsSUFBSTt3Q0FDbEIsUUFBUSxFQUFFLE1BQU07d0NBQ2hCLFVBQVUsRUFBRSxLQUFLO3dDQUNqQixVQUFVLEVBQUUsUUFBUTt3Q0FDcEIsS0FBSyxFQUFFLFNBQVM7d0NBQ2hCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQixVQUFVLEVBQUUsU0FBUzt3Q0FDckIsaUJBQWlCLEVBQUUsSUFBSTt3Q0FDdkIscUJBQXFCLEVBQUUsU0FBUzt3Q0FDaEMsbUJBQW1CLEVBQUUsU0FBUzt3Q0FDOUIsd0JBQXdCLEVBQUUsS0FBSzt3Q0FDL0IsS0FBSyxFQUFFLElBQUk7d0NBQ1gsZ0JBQWdCLEVBQUUsT0FBTzt3Q0FDekIsZ0JBQWdCLEVBQUUsU0FBUzt3Q0FDM0IsZUFBZSxFQUFFLElBQUk7d0NBQ3JCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQiwwQkFBMEIsRUFBRSxJQUFJO3dDQUNoQyx3QkFBd0IsRUFBRSxJQUFJO3dDQUM5Qiw2QkFBNkIsRUFBRSxJQUFJO3dDQUNuQyw2QkFBNkIsRUFBRSxJQUFJO3dDQUNuQywrQkFBK0IsRUFBRSxJQUFJO3dDQUNyQyxnQkFBZ0IsRUFBRSxTQUFTO3dDQUMzQixnQkFBZ0IsRUFBRSxPQUFPO3dDQUN6QixVQUFVLEVBQUUsU0FBUzt3Q0FDckIsWUFBWSxFQUFFLFNBQVM7d0NBQ3ZCLGlCQUFpQixFQUFFLFNBQVM7d0NBQzVCLGdCQUFnQixFQUFFLFNBQVM7d0NBQzNCLGdCQUFnQixFQUFFLE9BQU87d0NBQ3pCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQixXQUFXLEVBQUUsSUFBSTt3Q0FDakIsT0FBTyxFQUFFLElBQUk7d0NBQ2IsTUFBTSxFQUFFLElBQUk7d0NBQ1osV0FBVyxFQUFFLElBQUk7d0NBQ2pCLGFBQWEsRUFDWCw2Q0FBNkM7d0NBQy9DLFdBQVcsRUFBRSxJQUFJO3dDQUNqQixNQUFNLEVBQUUsSUFBSTt3Q0FDWixTQUFTLEVBQUUsSUFBSTt3Q0FDZixTQUFTLEVBQUUsSUFBSTt3Q0FDZixRQUFRLEVBQUUsSUFBSTt3Q0FDZCxRQUFRLEVBQUUsSUFBSTt3Q0FDZCxRQUFRLEVBQUUsSUFBSTtxQ0FDZixDQUFDO2dDQUNKLENBQUM7Z0NBQ0QsSUFBSSxRQUFRLENBQUMsc0JBQXNCLENBQUMsS0FBSyxNQUFNLEVBQUUsQ0FBQztvQ0FDaEQsSUFBSSxDQUFDLDBCQUEwQixHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztvQ0FDM0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUM7b0NBQ3ZDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsS0FBSyxDQUFDO29DQUM1RCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHO3dDQUNyRCxXQUFXLEVBQUUsUUFBUTt3Q0FDckIsV0FBVyxFQUFFLFNBQVM7d0NBQ3RCLFdBQVcsRUFBRSxPQUFPO3dDQUNwQixZQUFZLEVBQUUsSUFBSTt3Q0FDbEIsUUFBUSxFQUFFLE1BQU07d0NBQ2hCLFVBQVUsRUFBRSxLQUFLO3dDQUNqQixVQUFVLEVBQUUsUUFBUTt3Q0FDcEIsS0FBSyxFQUFFLFNBQVM7d0NBQ2hCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQixVQUFVLEVBQUUsU0FBUzt3Q0FDckIsaUJBQWlCLEVBQUUsSUFBSTt3Q0FDdkIscUJBQXFCLEVBQUUsU0FBUzt3Q0FDaEMsbUJBQW1CLEVBQUUsU0FBUzt3Q0FDOUIsd0JBQXdCLEVBQUUsS0FBSzt3Q0FDL0IsS0FBSyxFQUFFLElBQUk7d0NBQ1gsZ0JBQWdCLEVBQUUsT0FBTzt3Q0FDekIsZ0JBQWdCLEVBQUUsU0FBUzt3Q0FDM0IsZUFBZSxFQUFFLElBQUk7d0NBQ3JCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQiwwQkFBMEIsRUFBRSxJQUFJO3dDQUNoQyx3QkFBd0IsRUFBRSxJQUFJO3dDQUM5Qiw2QkFBNkIsRUFBRSxJQUFJO3dDQUNuQyw2QkFBNkIsRUFBRSxJQUFJO3dDQUNuQywrQkFBK0IsRUFBRSxJQUFJO3dDQUNyQyxnQkFBZ0IsRUFBRSxTQUFTO3dDQUMzQixnQkFBZ0IsRUFBRSxPQUFPO3dDQUN6QixVQUFVLEVBQUUsU0FBUzt3Q0FDckIsWUFBWSxFQUFFLFNBQVM7d0NBQ3ZCLGlCQUFpQixFQUFFLFNBQVM7d0NBQzVCLGdCQUFnQixFQUFFLFNBQVM7d0NBQzNCLGdCQUFnQixFQUFFLE9BQU87d0NBQ3pCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQixXQUFXLEVBQUUsSUFBSTt3Q0FDakIsT0FBTyxFQUFFLElBQUk7d0NBQ2IsTUFBTSxFQUFFLElBQUk7d0NBQ1osV0FBVyxFQUFFLElBQUk7d0NBQ2pCLGFBQWEsRUFDWCw2Q0FBNkM7d0NBQy9DLFdBQVcsRUFBRSxJQUFJO3dDQUNqQixNQUFNLEVBQUUsSUFBSTt3Q0FDWixTQUFTLEVBQUUsSUFBSTt3Q0FDZixTQUFTLEVBQUUsSUFBSTt3Q0FDZixRQUFRLEVBQUUsSUFBSTt3Q0FDZCxRQUFRLEVBQUUsSUFBSTt3Q0FDZCxRQUFRLEVBQUUsSUFBSTtxQ0FDZixDQUFDO2dDQUNKLENBQUM7Z0NBQ0QsSUFBSSxRQUFRLENBQUMsc0JBQXNCLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQztvQ0FDL0MsSUFBSSxDQUFDLDBCQUEwQixHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztvQ0FDM0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUM7b0NBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsS0FBSyxDQUFDO29DQUMzRCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHO3dDQUNwRCxXQUFXLEVBQUUsVUFBVTt3Q0FDdkIsV0FBVyxFQUFFLFNBQVM7d0NBQ3RCLFdBQVcsRUFBRSxPQUFPO3dDQUNwQixZQUFZLEVBQUUsSUFBSTt3Q0FDbEIsUUFBUSxFQUFFLE1BQU07d0NBQ2hCLFVBQVUsRUFBRSxLQUFLO3dDQUNqQixVQUFVLEVBQUUsUUFBUTt3Q0FDcEIsS0FBSyxFQUFFLFNBQVM7d0NBQ2hCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQixVQUFVLEVBQUUsU0FBUzt3Q0FDckIsaUJBQWlCLEVBQUUsSUFBSTt3Q0FDdkIscUJBQXFCLEVBQUUsU0FBUzt3Q0FDaEMsbUJBQW1CLEVBQUUsU0FBUzt3Q0FDOUIsd0JBQXdCLEVBQUUsS0FBSzt3Q0FDL0IsS0FBSyxFQUFFLElBQUk7d0NBQ1gsZ0JBQWdCLEVBQUUsT0FBTzt3Q0FDekIsZ0JBQWdCLEVBQUUsU0FBUzt3Q0FDM0IsZUFBZSxFQUFFLElBQUk7d0NBQ3JCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQiwwQkFBMEIsRUFBRSxJQUFJO3dDQUNoQyx3QkFBd0IsRUFBRSxJQUFJO3dDQUM5Qiw2QkFBNkIsRUFBRSxJQUFJO3dDQUNuQyw2QkFBNkIsRUFBRSxJQUFJO3dDQUNuQywrQkFBK0IsRUFBRSxJQUFJO3dDQUNyQyxnQkFBZ0IsRUFBRSxTQUFTO3dDQUMzQixnQkFBZ0IsRUFBRSxPQUFPO3dDQUN6QixVQUFVLEVBQUUsU0FBUzt3Q0FDckIsWUFBWSxFQUFFLFNBQVM7d0NBQ3ZCLGlCQUFpQixFQUFFLFNBQVM7d0NBQzVCLGdCQUFnQixFQUFFLFNBQVM7d0NBQzNCLGdCQUFnQixFQUFFLE9BQU87d0NBQ3pCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQixXQUFXLEVBQUUsSUFBSTt3Q0FDakIsT0FBTyxFQUFFLElBQUk7d0NBQ2IsTUFBTSxFQUFFLElBQUk7d0NBQ1osV0FBVyxFQUFFLElBQUk7d0NBQ2pCLGFBQWEsRUFDWCw2Q0FBNkM7d0NBQy9DLFdBQVcsRUFBRSxJQUFJO3dDQUNqQixNQUFNLEVBQUUsSUFBSTt3Q0FDWixTQUFTLEVBQUUsSUFBSTt3Q0FDZixTQUFTLEVBQUUsSUFBSTt3Q0FDZixRQUFRLEVBQUUsSUFBSTt3Q0FDZCxRQUFRLEVBQUUsSUFBSTt3Q0FDZCxRQUFRLEVBQUUsSUFBSTtxQ0FDZixDQUFDO2dDQUNKLENBQUM7Z0NBRUQsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssYUFBYSxFQUFFLENBQUM7b0NBQy9DLElBQUksUUFBUSxDQUFDLHNCQUFzQixDQUFDLEtBQUssYUFBYSxFQUFFLENBQUM7d0NBQ3ZELDhEQUE4RDt3Q0FDOUQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3Q0FDOUIsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQzs0Q0FDNUIsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQzs0Q0FDM0MsYUFBYSxFQUFFLEdBQUc7eUNBQ25CLENBQUMsQ0FBQztvQ0FDTCxDQUFDO29DQUNELFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUM7b0NBQzlCLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUM7d0NBQzVCLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUM7d0NBQzNDLGFBQWEsRUFBRSxHQUFHO3FDQUNuQixDQUFDLENBQUM7Z0NBQ0wsQ0FBQztnQ0FFRCxJQUFJLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLGNBQWMsRUFBRSxDQUFDO29DQUN4RCxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsV0FBVyxDQUFDO2dDQUN6QyxDQUFDOzRCQUNILENBQUMsQ0FBQyxDQUFDOzRCQUVILGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FDckMsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFFLEVBQUUsQ0FDakIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUNqRSxDQUFDO3dCQUNKLENBQUM7d0JBRUQsSUFBSSxrQkFBa0IsR0FBUSxFQUFFLENBQUM7d0JBQ2pDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTs0QkFDbkMsSUFBSSxXQUFXLEdBQVEsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxDQUM5RCxDQUFDLGNBQW1CLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLENBQzFELENBQUM7NEJBQ0YsSUFBSSxHQUFHLEdBQVE7Z0NBQ2IsSUFBSSxFQUFFLEtBQUs7Z0NBQ1gsVUFBVSxFQUFFLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDLFFBQVEsRUFBRTtnQ0FDdkQsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztvQ0FDL0MsQ0FBQyxDQUFDLFdBQVc7b0NBQ2IsQ0FBQyxDQUFDLEVBQUU7Z0NBQ04sV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztvQ0FDakQsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7b0NBQ3pCLENBQUMsQ0FBQyxFQUFFO2dDQUNOLG9CQUFvQixFQUFFLEtBQUs7Z0NBQzNCLFdBQVcsRUFBRSxJQUFJOzZCQUNsQixDQUFDOzRCQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQ0FDM0MsNkJBQTZCO2dDQUM3QixJQUFJLHdCQUF3QixHQUFRLFdBQVcsQ0FBQyxNQUFNLENBQ3BELENBQUMsY0FBbUIsRUFBRSxFQUFFLENBQ3RCLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLGFBQWEsQ0FDM0QsQ0FBQztnQ0FDRixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztvQ0FDeEQsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQzt3Q0FDcEIsWUFBWSxFQUFFLEtBQUs7d0NBQ25CLGtCQUFrQixFQUFFLElBQUk7d0NBQ3hCLHNCQUFzQixFQUFFOzRDQUN0QixnQkFBZ0IsRUFDZCx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7NENBQzNDLG9CQUFvQixFQUFFLEdBQUc7eUNBQzFCO3FDQUNGLENBQUMsQ0FBQztnQ0FDTCxDQUFDO2dDQUVELDBDQUEwQztnQ0FDMUMsSUFBSSwyQkFBMkIsR0FBUSxXQUFXLENBQUMsTUFBTSxDQUN2RCxDQUFDLGNBQW1CLEVBQUUsRUFBRSxDQUN0QixjQUFjLENBQUMsc0JBQXNCLENBQUMsS0FBSyxhQUFhLENBQzNELENBQUM7Z0NBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLENBQUM7b0NBQzNELGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQzt3Q0FDdEMsWUFBWSxFQUFFLGlCQUFpQjt3Q0FDL0IsZ0JBQWdCLEVBQUUsR0FBRzt3Q0FDckIsWUFBWSxFQUFFLG1CQUFtQjt3Q0FDakMsa0JBQWtCLEVBQUUsSUFBSTt3Q0FDeEIsc0JBQXNCLEVBQUU7NENBQ3RCLGdCQUFnQixFQUNkLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQzs0Q0FDOUMsb0JBQW9CLEVBQUUsZUFBZTt5Q0FDdEM7cUNBQ0YsQ0FBQyxDQUFDO29DQUNILEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUM7d0NBQ3BCLFlBQVksRUFBRSxpQkFBaUI7d0NBQy9CLGdCQUFnQixFQUFFLEdBQUc7d0NBQ3JCLFlBQVksRUFBRSxtQkFBbUI7d0NBQ2pDLGtCQUFrQixFQUFFLElBQUk7d0NBQ3hCLHNCQUFzQixFQUFFOzRDQUN0QixnQkFBZ0IsRUFDZCwyQkFBMkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7NENBQzlDLG9CQUFvQixFQUFFLGVBQWU7eUNBQ3RDO3FDQUNGLENBQUMsQ0FBQztnQ0FDTCxDQUFDOzRCQUNILENBQUM7NEJBQ0Qsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUMvQixDQUFDLENBQUMsQ0FBQzt3QkFDSCwrSUFBK0k7d0JBQy9JLGdFQUFnRTt3QkFDaEUsSUFBSSxDQUFDLFlBQVksR0FBRyxrQkFBa0IsQ0FBQzt3QkFDdkMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7d0JBQ2hDLElBQUk7b0JBQ04sQ0FBQyxDQUFDLENBQUM7b0JBQ0gsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUN2RCxDQUFDO1lBQ0gsQ0FBQztZQUVDLElBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxFQUFHLENBQUM7Z0JBQzFULElBQUksbUJBQW1CLEdBQVEsS0FBSyxDQUFDO2dCQUNyQyxJQUFJLENBQUMsOEJBQThCLEdBQUcsSUFBSSxDQUFDO2dCQUMzQyxJQUFJLFdBQVcsR0FBUyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO2dCQUMvRyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBZSxFQUFFLEVBQUU7b0JBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ3hILElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsZUFBcUIsRUFBRSxFQUFFOzRCQUN6SCxJQUFJLENBQUMsK0JBQStCLENBQUMsZUFBZSxDQUFDLENBQUM7d0JBQ3hELENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsSUFBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsOEJBQThCLENBQUMsRUFBRSxDQUFDO29CQUNsRSxJQUFJLENBQUMsYUFBYTt5QkFDZixlQUFlLENBQ2QsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFDeEIsSUFBSSxDQUFDLDhCQUE4QixDQUFDLFFBQVEsQ0FBQyxFQUM3QyxJQUFJLENBQUMsOEJBQThCLENBQUMsWUFBWSxDQUFDLENBQ2xEO3lCQUNBLFNBQVMsQ0FDUixDQUFDLG1CQUF3QixFQUFFLEVBQUU7d0JBQzNCLElBQUksYUFBYSxHQUFRLEVBQUUsQ0FBQzt3QkFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUM7NEJBQ25ELG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQWdCLEVBQUUsRUFBRTtnQ0FDL0MsV0FBVyxDQUFDLGNBQWMsQ0FBQztvQ0FDekIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsY0FBYyxDQUFDLENBQzNDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FDMUIsQ0FBQztnQ0FFSixXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQ0FDbEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQ0FDdEQsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztnQ0FDL0MsQ0FBQzs0QkFDSCxDQUFDLENBQUMsQ0FBQzs0QkFFSCxtQkFBbUIsQ0FBQyxJQUFJLENBQ3RCLENBQUMsQ0FBTSxFQUFFLENBQU0sRUFBRSxFQUFFLENBQ2pCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO2dDQUNyQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUN4QyxDQUFDOzRCQUNGLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFVLEVBQUUsR0FBUSxFQUFFLEVBQUU7Z0NBQzdDLElBQUksV0FBVyxHQUFRLG1CQUFtQixDQUFDLE1BQU0sQ0FDL0MsQ0FBQyxjQUFtQixFQUFFLEVBQUUsQ0FDdEIsY0FBYyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEtBQUssQ0FDeEMsQ0FBQztnQ0FDRixJQUFJLEdBQUcsR0FBUTtvQ0FDYixJQUFJLEVBQUUsSUFBSSxHQUFHLEdBQUc7b0NBQ2hCLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUM7d0NBQy9DLENBQUMsQ0FBQyxXQUFXO3dDQUNiLENBQUMsQ0FBQyxFQUFFO29DQUNOLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUM7d0NBQ2pELENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO3dDQUN6QixDQUFDLENBQUMsRUFBRTtvQ0FDTixvQkFBb0IsRUFBRSxJQUFJO29DQUMxQixXQUFXLEVBQUUsSUFBSTtvQ0FDakIsVUFBVSxFQUNSLElBQUksQ0FBQyw4QkFBOEIsQ0FDakMsWUFBWSxDQUNiLENBQUMsUUFBUSxFQUFFO2lDQUNmLENBQUM7Z0NBQ0YsdURBQXVEO2dDQUN2RCw2REFBNkQ7Z0NBQzdELEtBQUs7Z0NBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQzlCLENBQUMsQ0FBQyxDQUFDOzRCQUNILElBQUksQ0FBQywyQkFBMkIsR0FBRyxtQkFBbUIsQ0FBQzs0QkFDdkQsMEpBQTBKOzRCQUMxSixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNuRCxjQUFjLENBQ2YsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN2RCxjQUFjLENBQ2YsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7NEJBRTNDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO3dCQUNoQyxDQUFDOzZCQUFNLENBQUM7NEJBQ04sSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7d0JBQ2hDLENBQUM7b0JBQ0gsQ0FBQyxFQUNELENBQUMsR0FBUSxFQUFFLEVBQUU7d0JBQ1gsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7b0JBQ2hDLENBQUMsQ0FDRixDQUFDO2dCQUNOLENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztnQkFDaEMsQ0FBQztnQkFDRCxvRUFBb0U7Z0JBQ3BFLGlJQUFpSTtnQkFDakksNkZBQTZGO2dCQUM3RixvQ0FBb0M7Z0JBQ3BDLDZDQUE2QztnQkFDN0MsOEdBQThHO2dCQUM5Ryw0R0FBNEc7Z0JBRTVHLDZFQUE2RTtnQkFHN0UsMk1BQTJNO2dCQUMzTSx1SEFBdUg7Z0JBQ3ZILG9FQUFvRTtnQkFDcEUsa0ZBQWtGO2dCQUNsRiw0RUFBNEU7Z0JBQzVFLDJMQUEyTDtnQkFDM0wsK0tBQStLO2dCQUMvSywrRUFBK0U7Z0JBQy9FLDJFQUEyRTtnQkFDM0UsK0VBQStFO2dCQUMvRSxvRkFBb0Y7Z0JBQ3BGLDZCQUE2QjtnQkFDN0IseUJBQXlCO2dCQUN6Qix1QkFBdUI7Z0JBQ3ZCLHVCQUF1QjtnQkFDdkIsMEZBQTBGO2dCQUMxRix1QkFBdUI7Z0JBQ3ZCLDhFQUE4RTtnQkFDOUUsZ0JBQWdCO2dCQUVKLHFEQUFxRDtnQkFDckQsK0VBQStFO2dCQUMvRSxJQUFJO2dCQUNKLHNEQUFzRDtnQkFDdEQscURBQXFEO2dCQUNyRCwrRkFBK0Y7Z0JBQy9GLHdFQUF3RTtnQkFDeEUsMkVBQTJFO2dCQUMzRSxhQUFhO2dCQUNiLHdFQUF3RTtnQkFDeEUsaUVBQWlFO2dCQUNqRSxNQUFNO2dCQUNOLElBQUk7Z0JBQ2hCLGtJQUFrSTtnQkFDbEksdUpBQXVKO2dCQUN2SixvRkFBb0Y7Z0JBQ3BGLHFCQUFxQjtnQkFDckIscUJBQXFCO2dCQUNyQiw4S0FBOEs7Z0JBRTlLLDZIQUE2SDtnQkFDN0gsa0ZBQWtGO2dCQUNsRixtQkFBbUI7Z0JBRW5CLGdJQUFnSTtnQkFDaEksNENBQTRDO2dCQUc1QyxxQkFBcUI7Z0JBQ3JCLDZEQUE2RDtnQkFDN0QsdUhBQXVIO2dCQUN2SCw0REFBNEQ7Z0JBQzVELG9EQUFvRDtnQkFDcEQsMENBQTBDO2dCQUMxQyxxQkFBcUI7Z0JBQ3JCLHNJQUFzSTtnQkFDdEksa0RBQWtEO2dCQUNsRCwwREFBMEQ7Z0JBQzFELGlEQUFpRDtnQkFDakQsMEVBQTBFO2dCQUMxRSwwRUFBMEU7Z0JBQzFFLG9FQUFvRTtnQkFDcEUsbUVBQW1FO2dCQUNuRSw2QkFBNkI7Z0JBQzdCLHdGQUF3RjtnQkFDeEYsMEVBQTBFO2dCQUMxRSw0QkFBNEI7Z0JBQzVCLCtGQUErRjtnQkFDL0YsMEJBQTBCO2dCQUMxQiw2QkFBNkI7Z0JBQzdCLHdFQUF3RTtnQkFDeEUscUZBQXFGO2dCQUNyRiw0QkFBNEI7Z0JBQzVCLHdHQUF3RztnQkFDeEcsc0ZBQXNGO2dCQUN0RixvSEFBb0g7Z0JBQ3BILCtCQUErQjtnQkFDL0IsaUVBQWlFO2dCQUNqRSx5SEFBeUg7Z0JBQ3pILDhCQUE4QjtnQkFDOUIsOEJBQThCO2dCQUM5QiwwQkFBMEI7Z0JBQzFCLHFHQUFxRztnQkFDckcsb0RBQW9EO2dCQUNwRCwyQkFBMkI7Z0JBRTNCLDJFQUEyRTtnQkFFM0UseUZBQXlGO2dCQUN6Rix1RkFBdUY7Z0JBQ3ZGLHdIQUF3SDtnQkFDeEgsaUNBQWlDO2dCQUNqQyw2QkFBNkI7Z0JBQzdCLGlGQUFpRjtnQkFDakYsd0VBQXdFO2dCQUN4RSwwQkFBMEI7Z0JBQzFCLDBCQUEwQjtnQkFDMUIsb0lBQW9JO2dCQUNwSSx3RUFBd0U7Z0JBQ3hFLDJJQUEySTtnQkFDM0kseUNBQXlDO2dCQUN6Qyw0Q0FBNEM7Z0JBQzVDLGdHQUFnRztnQkFDaEcsOEdBQThHO2dCQUM5RyxzREFBc0Q7Z0JBQ3RELDZDQUE2QztnQkFDN0MsMEVBQTBFO2dCQUMxRSwyQkFBMkI7Z0JBQzNCLGdGQUFnRjtnQkFDaEYsc0ZBQXNGO2dCQUN0Riw4QkFBOEI7Z0JBQzlCLHFEQUFxRDtnQkFDckQseUJBQXlCO2dCQUN6Qiw4RUFBOEU7Z0JBQzlFLGlMQUFpTDtnQkFDakwsOE1BQThNO2dCQUM5TSxzQkFBc0I7Z0JBQ3RCLG9EQUFvRDtnQkFDcEQsK0RBQStEO2dCQUMvRCxxQkFBcUI7Z0JBQ3JCLGtDQUFrQztnQkFDbEMsOERBQThEO2dCQUM5RCwwREFBMEQ7Z0JBQzFELG9CQUFvQjtnQkFDcEIsbUJBQW1CO2dCQUNuQixnQkFBZ0I7Z0JBQ2hCLHdCQUF3QjtnQkFDeEIsc0RBQXNEO2dCQUN0RCxtQkFBbUI7Z0JBRW5CLGtIQUFrSDtnQkFDbEgseURBQXlEO2dCQUN6RCw0RUFBNEU7Z0JBQzVFLDREQUE0RDtnQkFDNUQseUJBQXlCO2dCQUN6QixxQkFBcUI7Z0JBQ3JCLGtFQUFrRTtnQkFDbEUsZ0JBQWdCO2dCQUNoQix1REFBdUQ7Z0JBQ3ZELGdCQUFnQjtnQkFDaEIsWUFBWTtnQkFDWixZQUFZO2dCQUNaLFFBQVE7Z0JBQ1IsTUFBTTtnQkFDTixNQUFNO1lBQ1IsQ0FBQztRQUdMLENBQUM7UUFFRCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUUvQixJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLEdBQUc7WUFDekMsWUFBWSxFQUFFO2dCQUNaLFdBQVcsRUFBRSxRQUFRO2dCQUNyQixXQUFXLEVBQUUsU0FBUztnQkFDdEIsV0FBVyxFQUFFLE9BQU87Z0JBQ3BCLFlBQVksRUFBRSxJQUFJO2dCQUNsQixRQUFRLEVBQUUsTUFBTTtnQkFDaEIsVUFBVSxFQUFFLEtBQUs7Z0JBQ2pCLFVBQVUsRUFBRSxRQUFRO2dCQUNwQixLQUFLLEVBQUUsU0FBUztnQkFDaEIsVUFBVSxFQUFFLFNBQVM7Z0JBQ3JCLFVBQVUsRUFBRSxTQUFTO2dCQUNyQixpQkFBaUIsRUFBRSxJQUFJO2dCQUN2QixxQkFBcUIsRUFBRSxTQUFTO2dCQUNoQyxtQkFBbUIsRUFBRSxTQUFTO2dCQUM5Qix3QkFBd0IsRUFBRSxLQUFLO2dCQUMvQixLQUFLLEVBQUUsSUFBSTtnQkFDWCxnQkFBZ0IsRUFBRSxPQUFPO2dCQUN6QixnQkFBZ0IsRUFBRSxTQUFTO2dCQUMzQixlQUFlLEVBQUUsSUFBSTtnQkFDckIsVUFBVSxFQUFFLFNBQVM7Z0JBQ3JCLDBCQUEwQixFQUFFLElBQUk7Z0JBQ2hDLHdCQUF3QixFQUFFLElBQUk7Z0JBQzlCLDZCQUE2QixFQUFFLElBQUk7Z0JBQ25DLDZCQUE2QixFQUFFLElBQUk7Z0JBQ25DLCtCQUErQixFQUFFLElBQUk7Z0JBQ3JDLGdCQUFnQixFQUFFLFNBQVM7Z0JBQzNCLGdCQUFnQixFQUFFLE9BQU87Z0JBQ3pCLFVBQVUsRUFBRSxTQUFTO2dCQUNyQixZQUFZLEVBQUUsU0FBUztnQkFDdkIsaUJBQWlCLEVBQUUsU0FBUztnQkFDNUIsZ0JBQWdCLEVBQUUsU0FBUztnQkFDM0IsZ0JBQWdCLEVBQUUsT0FBTztnQkFDekIsVUFBVSxFQUFFLFNBQVM7Z0JBQ3JCLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixPQUFPLEVBQUUsSUFBSTtnQkFDYixNQUFNLEVBQUUsSUFBSTtnQkFDWixXQUFXLEVBQUUsSUFBSTtnQkFDakIsYUFBYSxFQUFFLDZDQUE2QztnQkFDNUQsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLE1BQU0sRUFBRSxJQUFJO2dCQUNaLFNBQVMsRUFBRSxJQUFJO2dCQUNmLFNBQVMsRUFBRSxJQUFJO2dCQUNmLFFBQVEsRUFBRSxJQUFJO2dCQUNkLFFBQVEsRUFBRSxJQUFJO2dCQUNkLFFBQVEsRUFBRSxJQUFJO2FBQ2Y7WUFDRCxTQUFTLEVBQUUsSUFBSTtZQUNmLEtBQUssRUFBRSxlQUFlO1lBQ3RCLFdBQVcsRUFBRSxFQUFFO1lBQ2YsTUFBTSxFQUFFLEVBQUU7WUFDVixTQUFTLEVBQUUsSUFBSTtZQUNmLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFVBQVUsRUFBRTtnQkFDVixVQUFVLEVBQUUsS0FBSztnQkFDakIsZUFBZSxFQUFFLDRCQUE0QjtnQkFDN0MsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsZ0JBQWdCLEVBQUUsSUFBSTtnQkFDdEIsU0FBUyxFQUFFLEdBQUc7Z0JBQ2QsZ0JBQWdCLEVBQUUsSUFBSTtnQkFDdEIsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsY0FBYyxFQUFFLEVBQUU7YUFDbkI7WUFDRCxPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsS0FBSyxFQUFFLElBQUk7b0JBQ1gsS0FBSyxFQUFFLElBQUk7aUJBQ1o7Z0JBQ0Q7b0JBQ0UsS0FBSyxFQUFFLE1BQU07b0JBQ2IsS0FBSyxFQUFFLE1BQU07aUJBQ2Q7YUFDRjtZQUNELFFBQVEsRUFBRSxJQUFJO1lBQ2QsS0FBSyxFQUFFLElBQUk7WUFDWCxLQUFLLEVBQUUsSUFBSTtZQUNYLFFBQVEsRUFBRSxJQUFJO1lBQ2QsVUFBVSxFQUFFLEVBQUU7WUFDZCxXQUFXLEVBQUUsSUFBSTtZQUNqQixXQUFXLEVBQUUsS0FBSztZQUNsQixlQUFlLEVBQUUsS0FBSztZQUN0QixXQUFXLEVBQUUsUUFBUTtTQUN0QixDQUFDO0lBQ0osQ0FBQztJQUVELHFCQUFxQixDQUFDLFNBQWM7UUFFbEMsSUFBSSxTQUFTLENBQUMsc0JBQXNCLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVFLENBQUM7UUFDRCxJQUFJLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ2pELElBQUksVUFBVSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hGLElBQUksQ0FBQyxlQUFlLENBQUMsMEJBQTBCLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pFLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsMEJBQTBCLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pFLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDNUQsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLGdCQUFnQixHQUFRLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsY0FBbUIsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxLQUFLLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQzVMLElBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakcsSUFBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDdEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFM0UsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFDaEUsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFLENBQUM7WUFDeEUsU0FBUyxDQUFDLDhCQUE4QixDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQWdCLEVBQUUsRUFBRTtnQkFDcEUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzFDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUE7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFFSCxhQUFhLENBQUMsVUFBa0IsRUFBRSxRQUFhO1FBQzNDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBRXJDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsVUFBVSxDQUFDO1FBQ3ZELElBQUksS0FBSyxDQUFDO1FBQ1YsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLDRCQUE0QixDQUFDLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDbEUsS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsMkJBQTJCLENBQUM7UUFDM0QsQ0FBQzthQUFNLENBQUM7WUFDTixLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBRUQsMENBQTBDO1FBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBSWxDLHNCQUFzQjtRQUN0QixJQUNFLFFBQVEsQ0FBQyxZQUFZLEtBQUssVUFBVTtZQUNwQyxVQUFVLEVBQUUsVUFBVTtZQUN0QixJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ2xDLENBQUM7WUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNsRCxDQUFDO2FBQU0sSUFDTCxVQUFVLEVBQUUsVUFBVTtZQUN0QixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssR0FBRyxDQUFDLEVBQ2xELENBQUM7WUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNsRCxDQUFDO1FBRUQsMkNBQTJDO1FBQzNDLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU87UUFFNUMsb0RBQW9EO1FBQ3BELElBQUksVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ3pCLE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztZQUM5QyxDQUFDO1FBRUcsQ0FBQztRQUdILGdDQUFnQztRQUNoQyxJQUFJLFVBQVUsRUFBRSxTQUFTLElBQUksVUFBVSxDQUFDLFNBQVMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUMzRCxNQUFNLE1BQU0sR0FBRSxVQUFVLENBQUMsU0FBUyxDQUFDO1lBQ25DLE1BQU0sTUFBTSxHQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUM7WUFDbkMsSUFBSSxVQUFVLENBQUMsT0FBTyxJQUFFLFVBQVUsRUFBRSxDQUFDO2dCQUNuQyxrQ0FBa0M7Z0JBQ2xDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUM7b0JBQ3pELElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUMvQyxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLHlDQUF5QztnQkFDekMsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxHQUFHLE1BQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDO29CQUN6RSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDL0MsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBRWpGLENBQUM7SUFJRCxnQkFBZ0IsQ0FBQyxVQUFrQjtRQUNqQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDO1lBQzdCLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELG9CQUFvQixDQUFDLFVBQWtCLEVBQUUsUUFBYTtRQUNwRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFFL0UsSUFBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxFQUFDLENBQUM7WUFDOUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMvQyxNQUFNLFVBQVUsR0FBRyxRQUFRLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQztZQUc3QyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUN2QixJQUFJLFFBQVEsRUFBRSxLQUFLLEVBQUUsV0FBVyxLQUFLLE9BQU8sSUFBSSxRQUFRLEVBQUUsS0FBSyxFQUFFLFdBQVcsS0FBSyxVQUFVLEVBQUUsQ0FBQztvQkFDNUYsT0FBTyxVQUFVLEVBQUUsZUFBZSxJQUFJLDhCQUE4QixDQUFDO2dCQUN2RSxDQUFDO2dCQUNELE1BQU0sU0FBUyxHQUNiLFFBQVEsRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRTtvQkFDN0QsWUFBWSxDQUFDO2dCQUNmLE9BQU8sVUFBVSxFQUFFLGVBQWUsSUFBSSxnQkFBZ0IsU0FBUyxFQUFFLENBQUM7WUFDcEUsQ0FBQztZQUNELElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ25CLE9BQU8sVUFBVSxFQUFFLGNBQWMsSUFBSSxvQkFBb0IsQ0FBQztZQUM1RCxDQUFDO1lBQ0QsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxTQUFTLEdBQ2IsUUFBUSxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFO29CQUM3RCxPQUFPLENBQUM7Z0JBQ1YsT0FBTyx3QkFBd0IsU0FBUyxFQUFFLENBQUM7WUFDN0MsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUFVO1FBQzVCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDOUIsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2QixDQUFDO1FBQ0QsT0FBTyxDQUNMLEtBQUssS0FBSyxTQUFTO1lBQ25CLEtBQUssS0FBSyxJQUFJO1lBQ2QsS0FBSyxLQUFLLEVBQUU7WUFDWixDQUFDLEtBQUssWUFBWSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQy9CLENBQUM7SUFDSixDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQVc7UUFDdEIsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUM3RCxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QixPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFLEtBQUssZUFBZSxFQUFFLENBQUM7b0JBQzdDLE9BQU8sTUFBTSxDQUFDO2dCQUNoQixDQUFDO2dCQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsS0FBVTtRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDckMsT0FBTyxLQUFLO2lCQUNULFFBQVEsRUFBRTtpQkFDVixPQUFPLENBQ04sUUFBUSxFQUNSLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FDakUsQ0FBQztRQUNOLENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLFdBQWdCO1FBQ3ZCLElBQUksVUFBVSxHQUFRLEVBQUUsQ0FBQztRQUN6QixJQUFJLFlBQVksR0FBUyxFQUFFLENBQUM7UUFDNUIsSUFBSSxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsaUJBQXNCLEVBQUUsRUFBRTtnQkFDN0QsVUFBVSxDQUFDLElBQUksQ0FBQztvQkFDZCxLQUFLLEVBQUUsaUJBQWlCLENBQUMsZUFBZSxDQUFDO29CQUN6QyxLQUFLLEVBQUUsaUJBQWlCLENBQUMscUJBQXFCLENBQUM7aUJBQ2hELENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksU0FBUyxHQUFTLEtBQUssQ0FBQztRQUM1QixJQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxFQUFHLENBQUM7WUFDbkYsSUFBSSw2QkFBNkIsR0FBVSxjQUFjLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDL0YsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDdkUsQ0FBQztRQUNELElBQUksU0FBUyxHQUFRLElBQUksQ0FBQztRQUMxQixJQUFJLFNBQVMsR0FBUSxHQUFHLENBQUM7UUFDekIsSUFBSSxPQUFPLEdBQVEsSUFBSSxDQUFDO1FBQ3hCLElBQUksY0FBYyxHQUFRLElBQUksQ0FBQztRQUNoQyxJQUFJLFVBQVUsR0FBUSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsVUFBVSxDQUFDO1lBQzFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsVUFBVTtZQUMxQixDQUFDLENBQUMsRUFBRSxDQUFDO1FBRUgsSUFBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3hELFVBQVUsR0FBRyxFQUFDLEdBQUcsVUFBVSxFQUFFLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFDLENBQUM7UUFDN0QsQ0FBQztRQUVELElBQUcsV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFNLGNBQWMsSUFBSSxXQUFXLENBQUMsY0FBYyxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDaEcsWUFBWSxHQUFHO2dCQUNILGFBQWEsRUFBRSxPQUFPO2dCQUN0QixhQUFhLEVBQUUsU0FBUztnQkFDeEIsYUFBYSxFQUFFLEtBQUs7Z0JBQ3BCLGNBQWMsRUFBRSxJQUFJO2dCQUNwQixVQUFVLEVBQUUsTUFBTTtnQkFDbEIsWUFBWSxFQUFFLEtBQUs7Z0JBQ25CLFlBQVksRUFBRSxRQUFRO2dCQUN0QixPQUFPLEVBQUUsU0FBUztnQkFDbEIsWUFBWSxFQUFFLFNBQVM7Z0JBQ3ZCLFlBQVksRUFBRSxJQUFJO2dCQUNsQixtQkFBbUIsRUFBRSxJQUFJO2dCQUN6Qix1QkFBdUIsRUFBRSxJQUFJO2dCQUM3QixxQkFBcUIsRUFBRSxJQUFJO2dCQUMzQiwwQkFBMEIsRUFBRSxJQUFJO2dCQUNoQyxPQUFPLEVBQUUsSUFBSTtnQkFDYixrQkFBa0IsRUFBRSxLQUFLO2dCQUN6QixrQkFBa0IsRUFBRSxTQUFTO2dCQUM3QixpQkFBaUIsRUFBRSxJQUFJO2dCQUN2QixZQUFZLEVBQUUsU0FBUztnQkFDdkIsNEJBQTRCLEVBQUUsSUFBSTtnQkFDbEMsMEJBQTBCLEVBQUUsSUFBSTtnQkFDaEMsK0JBQStCLEVBQUUsSUFBSTtnQkFDckMsK0JBQStCLEVBQUUsSUFBSTtnQkFDckMsaUNBQWlDLEVBQUUsSUFBSTtnQkFDdkMsa0JBQWtCLEVBQUUsU0FBUztnQkFDN0Isa0JBQWtCLEVBQUUsS0FBSztnQkFDekIsWUFBWSxFQUFFLFNBQVM7Z0JBQ3ZCLGNBQWMsRUFBRSxTQUFTO2dCQUN6QixtQkFBbUIsRUFBRSxTQUFTO2dCQUM5QixrQkFBa0IsRUFBRSxTQUFTO2dCQUM3QixrQkFBa0IsRUFBRSxLQUFLO2dCQUN6QixZQUFZLEVBQUUsU0FBUztnQkFDdkIsYUFBYSxFQUFFLElBQUk7Z0JBQ25CLFNBQVMsRUFBRSxJQUFJO2dCQUNmLFFBQVEsRUFBRSxJQUFJO2dCQUNkLGFBQWEsRUFBRSxJQUFJO2dCQUNuQixlQUFlLEVBQUUseUNBQXlDO2dCQUMxRCxhQUFhLEVBQUUsSUFBSTtnQkFDbkIsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixVQUFVLEVBQUUsSUFBSTtnQkFDaEIsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLFVBQVUsRUFBRSxJQUFJO2FBQ2pCLENBQUM7UUFDZCxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzFELElBQUksYUFBYSxHQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN6RCxTQUFTLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3hDLENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pELFNBQVMsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDeEMsQ0FBQztZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDckQsSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQ3hDLE9BQU8sR0FBRyxVQUFVLENBQUM7b0JBQ3JCLGNBQWMsR0FBRywyQkFBMkIsQ0FBQztvQkFDN0MsVUFBVSxDQUFDLDRCQUE0QixDQUFDLEdBQUcsSUFBSSxDQUFDO29CQUNoRCxTQUFTLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztvQkFDMUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFNBQVMsQ0FBQztvQkFDbkMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDN0IsQ0FBQztxQkFBTSxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxjQUFjLEVBQUUsQ0FBQztvQkFDcEQsT0FBTyxHQUFHLG1CQUFtQixDQUFDO29CQUM5QixjQUFjLEdBQUcsdUNBQXVDLENBQUM7b0JBQ3pELFVBQVUsQ0FBQyw0QkFBNEIsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDbkQsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE9BQU8sR0FBRyxJQUFJLENBQUM7b0JBQ2YsY0FBYyxHQUFHLElBQUksQ0FBQztnQkFDeEIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTztZQUNMLFVBQVUsRUFBRSxVQUFVO1lBQ3RCLFlBQVksRUFBRSxZQUFZO1lBQzFCLFdBQVcsRUFDVCxXQUFXLENBQUMsY0FBYyxDQUFDLEtBQUssV0FBVztnQkFDekMsQ0FBQyxDQUFDLE1BQU07Z0JBQ1IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsS0FBSyxjQUFjO29CQUM5QyxXQUFXLENBQUMsY0FBYyxDQUFDLEtBQUssU0FBUztvQkFDM0MsQ0FBQyxDQUFDLE9BQU87b0JBQ1QsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsS0FBSyxVQUFVO3dCQUMxQyxXQUFXLENBQUMsY0FBYyxDQUFDLEtBQUssYUFBYTt3QkFDL0MsQ0FBQyxDQUFDLFVBQVU7d0JBQ1osQ0FBQyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsS0FBSyxVQUFVOzRCQUM1QyxDQUFDLENBQUMsTUFBTTs0QkFDUixDQUFDLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFVBQVU7Z0NBQzVDLENBQUMsQ0FBQyxRQUFRO2dDQUNWLENBQUMsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEtBQUssV0FBVztvQ0FDN0MsQ0FBQyxDQUFDLE1BQU07b0NBQ1IsQ0FBQyxDQUFDLEVBQUU7WUFDUixTQUFTLEVBQUUsV0FBVyxDQUFDLFlBQVksQ0FBQztZQUNwQyxTQUFTO1lBQ1QsS0FBSyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUM7WUFDbEMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUM7WUFDeEMsVUFBVSxFQUFFO2dCQUNWLFVBQVUsRUFBRSxXQUFXLENBQUMsa0JBQWtCLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSztnQkFDbEUsU0FBUztnQkFDVCxTQUFTO2dCQUNULE9BQU87Z0JBQ1AsY0FBYzthQUNmO1lBQ0QsUUFBUSxFQUFFLE1BQU07WUFDaEIsU0FBUyxFQUFFLElBQUk7WUFDZixPQUFPLEVBQUUsVUFBVTtZQUNuQixXQUFXLEVBQUUsSUFBSTtTQUNsQixDQUFDO0lBQ0osQ0FBQztJQUVELHVCQUF1QixDQUFDLFFBQWM7UUFDcEMsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDMUQsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGFBQWtCLEVBQUUsRUFBRTtnQkFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUMxRCxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsY0FBbUIsRUFBRSxFQUFFO3dCQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDOzRCQUN2QyxjQUFjLENBQUMsb0JBQW9CLENBQUMsR0FBRyxLQUFLLENBQUM7NEJBQzdDLElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQ25ELEVBQ0QsQ0FBQztnQ0FDRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7NEJBQzVELENBQUM7NEJBQ0QsSUFBSTt3QkFDTixDQUFDOzZCQUFNLENBQUM7NEJBQ04sY0FBYyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsSUFBSSxDQUFDO3dCQUM5QyxDQUFDO3dCQUVELGlEQUFpRDt3QkFDakQsSUFBSSx3QkFBd0IsR0FBUyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7d0JBQ3JHLE1BQU0sVUFBVSxHQUFHLGNBQWMsQ0FBQyxZQUFZLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQzt3QkFDNUQsTUFBTSxlQUFlLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7d0JBQ2xJLElBQUksZUFBZSxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7NEJBQzVFLGNBQWMsQ0FBQyxPQUFPLENBQUMsR0FBRztnQ0FDeEIsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDO2dDQUMxQixTQUFTLEVBQUUsSUFBSTs2QkFDaEIsQ0FBQzt3QkFDSixDQUFDO3dCQUVELElBQUksY0FBYyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFVBQVUsRUFBRSxDQUFDOzRCQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0NBQzlELElBQUksb0JBQW9CLEdBQVEsY0FBYyxDQUM1QyxjQUFjLENBQ2YsQ0FBQyxNQUFNLENBQ04sQ0FBQyxTQUFjLEVBQUUsRUFBRSxDQUNqQixTQUFTLENBQUMsZUFBZSxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxDQUN0RCxDQUFDO2dDQUNGLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQ3BDLENBQUMsaUJBQXNCLEVBQUUsRUFBRTtvQ0FDekIsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxvQkFBb0IsQ0FBQzt3Q0FDL0MsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQ2xCLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQy9DLENBQ0Y7d0NBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FDL0MsRUFDRCxDQUFDO3dDQUNELG1CQUFtQjt3Q0FDbkIsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FDcEMsQ0FBQyxpQkFBc0IsRUFBRSxFQUFFOzRDQUN6Qix5Q0FBeUM7NENBQ3pDLElBQ0UsaUJBQWlCLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRTtnREFDN0MsTUFBTSxFQUNOLENBQUM7Z0RBQ0QsaUJBQWlCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnREFDcEMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUN6QixpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUN6QyxDQUFDOzRDQUNKLENBQUM7d0NBQ0gsQ0FBQyxDQUNGLENBQUM7b0NBQ0osQ0FBQzt5Q0FBTSxDQUFDO3dDQUNOLGlCQUFpQixDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7b0NBQ3ZDLENBQUM7Z0NBQ0gsQ0FBQyxDQUNGLENBQUM7NEJBQ0osQ0FBQzt3QkFDSCxDQUFDO29CQUNILENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7Z0JBQ0QsMExBQTBMO2dCQUMxTCxhQUFhLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3RELGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQy9CLENBQUMsY0FBbUIsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLENBQzlELENBQ0YsQ0FBQztnQkFDRixpRUFBaUU7Z0JBQ2pFLGdHQUFnRztnQkFDaEcsNENBQTRDO2dCQUM1Qyx1S0FBdUs7Z0JBQ3ZLLGdGQUFnRjtnQkFDaEYsNk5BQTZOO2dCQUM3TiwyREFBMkQ7Z0JBQzNELG9GQUFvRjtnQkFDcEYsVUFBVTtnQkFDVixVQUFVO2dCQUNWLE1BQU07Z0JBQ04sMFBBQTBQO2dCQUMxUCw0Q0FBNEM7Z0JBQzVDLHVLQUF1SztnQkFDdkssZ0ZBQWdGO2dCQUNoRiw2TkFBNk47Z0JBQzdOLDJEQUEyRDtnQkFDM0Qsb0ZBQW9GO2dCQUNwRixVQUFVO2dCQUNWLFVBQVU7Z0JBQ1YsTUFBTTtnQkFDTixJQUFJO2dCQUNKLElBQUksZUFBZSxHQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUNqRCxDQUFDLGdCQUFxQixFQUFFLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUM1RCxDQUFDO2dCQUNGLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7b0JBQzlDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFrQixFQUFFLEVBQUU7d0JBQzdDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQ2hDLENBQUMsMEJBQStCLEVBQUUsRUFBRTs0QkFDbEMsMEJBQTBCLENBQUMsb0JBQW9CLENBQUMsR0FBRyxLQUFLLENBQUM7NEJBQ3pELDJNQUEyTTs0QkFDM00scURBQXFEOzRCQUNyRCx1REFBdUQ7NEJBQ3ZELElBQUk7d0JBQ04sQ0FBQyxDQUNGLENBQUM7b0JBQ0osQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBRWxFLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBR2pELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQWtCLEVBQUUsRUFBRTtnQkFDL0QsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDcEQsSUFBSSxjQUFjLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQzdELElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUN4QyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFJM0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELFlBQVksQ0FBQyxlQUFvQjtRQUMvQixJQUFJLFlBQVksR0FBUSxLQUFLLENBQUM7UUFDOUIsSUFBSSxZQUFZLEdBQVEsRUFBRSxDQUFDO1FBQzNCLG9KQUFvSjtRQUNwSix3RkFBd0Y7UUFFeEYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxjQUFtQixFQUFFLEVBQUU7WUFDdkUsSUFBSSxtQkFBbUIsR0FBUSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xFLG1CQUFtQixHQUFHLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE1BQU0sQ0FDN0QsQ0FBQyxtQkFBd0IsRUFBRSxFQUFFLENBQzNCLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDO29CQUNyQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQ2hDLENBQUM7WUFDSixDQUFDO1lBQ0QsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ25DLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ2xDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLGlCQUFzQixFQUFFLEVBQUU7b0JBQ3JELElBQ0UsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLEtBQUssVUFBVTt3QkFDNUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHO3dCQUM5RCxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQzs0QkFDaEQsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsQ0FBQzt3QkFDN0MsQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUc7NEJBQzdELENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUNuRDs0QkFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQ0FDaEQsaUJBQWlCLENBQUMscUJBQXFCLENBQUM7cUNBQ3JDLFFBQVEsRUFBRTtxQ0FDVixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3JCLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFVBQVU7NEJBQzVDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUNuRDs0QkFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO3dCQUN0Ryw4REFBOEQ7d0JBQzlELHdCQUF3Qjt3QkFDeEIsb0JBQW9CO3dCQUNwQiwrQ0FBK0M7d0JBQy9DLGVBQWU7eUJBQ2hCLEVBQ0QsQ0FBQzt3QkFDRCxZQUFZLEdBQUcsSUFBSSxDQUFDO29CQUN0QixDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFDRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxFQUNuRSxDQUFDO1lBQ0QsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN0QixDQUFDO1FBQ0QsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUNwRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsZUFBZSxDQUFDLHdCQUF3QixDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FDOUQ7WUFDRCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsZUFBZSxDQUFDLHdCQUF3QixDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FDOUQsQ0FDRjtZQUNELElBQUksQ0FBQyxlQUFlLENBQ2xCLGVBQWUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQzlELEtBQUssZUFBZSxDQUFDLHdCQUF3QixDQUFDLENBQUMsc0JBQXNCLENBQUMsRUFDdkUsQ0FBQztZQUNELFlBQVksR0FBRyxJQUFJLENBQUM7UUFDdEIsQ0FBQztRQUNELElBQUksZUFBZSxDQUFDLGNBQWMsQ0FBQyxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ3BELFlBQVksR0FBRyxLQUFLLENBQUM7UUFDdkIsQ0FBQztRQUNELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsa0RBQWtEO1FBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLEVBQUUsQ0FBQztZQUNsRSwrRUFBK0U7WUFDL0Usa0ZBQWtGO1lBQ2xGLHFGQUFxRjtZQUNyRixxRkFBcUY7WUFDckYscURBQXFEO1lBQ3JELGdOQUFnTjtZQUNoTiw2REFBNkQ7WUFDN0QsTUFBTTtZQUNOLE1BQU07WUFDTixrREFBa0Q7WUFDbEQscUxBQXFMO1lBQ3JMLDhEQUE4RDtZQUM5RCxNQUFNO1lBQ04sTUFBTTtZQUNOLG1EQUFtRDtZQUNuRCwwTEFBMEw7WUFDMUwsOERBQThEO1lBQzlELE1BQU07WUFDTixNQUFNO1lBQ04sbURBQW1EO1lBQ25ELDBMQUEwTDtZQUMxTCw4REFBOEQ7WUFDOUQsTUFBTTtZQUNOLE1BQU07UUFDUixDQUFDO1FBQ0QsbUNBQW1DO1FBQ25DLGlDQUFpQztRQUNqQyx1Q0FBdUM7UUFDdkMsSUFBSSxPQUFPLEdBQVEsSUFBSSxDQUFDO1FBQ3hCLHFLQUFxSztRQUNySyxtS0FBbUs7UUFDbkssNkhBQTZIO1FBQzdILDZLQUE2SztRQUM3SywyS0FBMks7UUFDM0ssZ0xBQWdMO1FBQ2hMLE1BQU07UUFDTixJQUFJO1FBRUoscURBQXFEO1FBQ3JELHlKQUF5SjtRQUN6SixxR0FBcUc7UUFDckcsbUZBQW1GO1FBQ25GLHdSQUF3UjtRQUN4UiwwRUFBMEU7UUFDMUUsa0ZBQWtGO1FBQ2xGLHFRQUFxUTtRQUVyUSx1REFBdUQ7UUFDdkQsbUZBQW1GO1FBQ25GLGlJQUFpSTtRQUNqSSwrSEFBK0g7UUFDL0gsbVJBQW1SO1FBQ25SLG1DQUFtQztRQUNuQyx1RkFBdUY7UUFDdkYsOEZBQThGO1FBQzlGLHdGQUF3RjtRQUN4Rix1RkFBdUY7UUFDdkYsb0VBQW9FO1FBQ3BFLHNCQUFzQjtRQUN0Qiw0R0FBNEc7UUFDNUcsbUVBQW1FO1FBQ25FLDhEQUE4RDtRQUM5RCxrRUFBa0U7UUFDbEUseUNBQXlDO1FBQ3pDLHNGQUFzRjtRQUN0RiwwQkFBMEI7UUFDMUIsNkJBQTZCO1FBQzdCLDBIQUEwSDtRQUMxSCx1SkFBdUo7UUFDdkosOENBQThDO1FBQzlDLDJDQUEyQztRQUMzQyx1SUFBdUk7UUFDdkksaUNBQWlDO1FBQ2pDLG1EQUFtRDtRQUNuRCwrSkFBK0o7UUFDL0osdURBQXVEO1FBQ3ZELGdEQUFnRDtRQUNoRCw2Q0FBNkM7UUFDN0MseUlBQXlJO1FBQ3pJLG1DQUFtQztRQUNuQyxxREFBcUQ7UUFDckQsK0RBQStEO1FBQy9ELGdEQUFnRDtRQUNoRCw2Q0FBNkM7UUFDN0MseUlBQXlJO1FBQ3pJLG1DQUFtQztRQUNuQyxxREFBcUQ7UUFDckQsMEJBQTBCO1FBQzFCLG1HQUFtRztRQUNuRyx1REFBdUQ7UUFDdkQsZ0RBQWdEO1FBQ2hELDZDQUE2QztRQUM3Qyx3SUFBd0k7UUFDeEksbUNBQW1DO1FBQ25DLHFEQUFxRDtRQUNyRCw4REFBOEQ7UUFDOUQsZ0RBQWdEO1FBQ2hELDZDQUE2QztRQUM3Qyx3SUFBd0k7UUFDeEksbUNBQW1DO1FBQ25DLHFEQUFxRDtRQUNyRCwwQkFBMEI7UUFDMUIsd0JBQXdCO1FBRXhCLHNCQUFzQjtRQUV0QixrQ0FBa0M7UUFDbEMsb0JBQW9CO1FBQ3BCLGtCQUFrQjtRQUNsQixnQkFBZ0I7UUFDaEIsNkNBQTZDO1FBQzdDLGtJQUFrSTtRQUNsSSxpRkFBaUY7UUFDakYsaUdBQWlHO1FBQ2pHLCtFQUErRTtRQUMvRSxpQ0FBaUM7UUFDakMscUZBQXFGO1FBQ3JGLDRGQUE0RjtRQUM1RixzRkFBc0Y7UUFDdEYscUZBQXFGO1FBQ3JGLGtFQUFrRTtRQUNsRSxvQkFBb0I7UUFDcEIsZ0hBQWdIO1FBQ2hILGlFQUFpRTtRQUNqRSw0REFBNEQ7UUFDNUQsZ0VBQWdFO1FBQ2hFLHVDQUF1QztRQUN2QyxtRUFBbUU7UUFDbkUsd0JBQXdCO1FBQ3hCLDJCQUEyQjtRQUMzQix1R0FBdUc7UUFDdkcscUpBQXFKO1FBQ3JKLDRDQUE0QztRQUM1Qyx5Q0FBeUM7UUFDekMscUlBQXFJO1FBQ3JJLCtCQUErQjtRQUMvQixpREFBaUQ7UUFDakQsNkpBQTZKO1FBQzdKLHFEQUFxRDtRQUNyRCw4Q0FBOEM7UUFDOUMsMkNBQTJDO1FBQzNDLHVJQUF1STtRQUN2SSxpQ0FBaUM7UUFDakMsbURBQW1EO1FBQ25ELDZEQUE2RDtRQUM3RCw4Q0FBOEM7UUFDOUMsMkNBQTJDO1FBQzNDLHVJQUF1STtRQUN2SSxpQ0FBaUM7UUFDakMsbURBQW1EO1FBQ25ELHdCQUF3QjtRQUN4QixpR0FBaUc7UUFDakcscURBQXFEO1FBQ3JELDhDQUE4QztRQUM5QywyQ0FBMkM7UUFDM0Msc0lBQXNJO1FBQ3RJLGlDQUFpQztRQUNqQyxtREFBbUQ7UUFDbkQsNERBQTREO1FBQzVELDhDQUE4QztRQUM5QywyQ0FBMkM7UUFDM0Msc0lBQXNJO1FBQ3RJLGlDQUFpQztRQUNqQyxtREFBbUQ7UUFDbkQsd0JBQXdCO1FBQ3hCLHNCQUFzQjtRQUN0QixvQkFBb0I7UUFFcEIsZ0NBQWdDO1FBQ2hDLGtCQUFrQjtRQUNsQixnQkFBZ0I7UUFFaEIsY0FBYztRQUVkLDZFQUE2RTtRQUM3RSxnREFBZ0Q7UUFDaEQsbUJBQW1CO1FBQ25CLGdFQUFnRTtRQUNoRSxvRkFBb0Y7UUFDcEYsMkRBQTJEO1FBQzNELDJCQUEyQjtRQUMzQixzRUFBc0U7UUFDdEUsdUVBQXVFO1FBQ3ZFLHVFQUF1RTtRQUN2RSxnRkFBZ0Y7UUFDaEYsMkVBQTJFO1FBQzNFLHdFQUF3RTtRQUN4RSx3RUFBd0U7UUFDeEUsNEVBQTRFO1FBQzVFLHNFQUFzRTtRQUN0RSxzR0FBc0c7UUFDdEcsNEpBQTRKO1FBQzVKLGtCQUFrQjtRQUNsQixpQ0FBaUM7UUFDakMscUZBQXFGO1FBQ3JGLHlHQUF5RztRQUN6RyxpRUFBaUU7UUFDakUsNEZBQTRGO1FBQzVGLHNGQUFzRjtRQUN0RixxRkFBcUY7UUFDckYsa0VBQWtFO1FBQ2xFLG9CQUFvQjtRQUNwQiw0REFBNEQ7UUFDNUQsZ0VBQWdFO1FBQ2hFLHVDQUF1QztRQUN2QyxrSEFBa0g7UUFDbEgsd0JBQXdCO1FBQ3hCLDJCQUEyQjtRQUMzQixzSkFBc0o7UUFDdEoscUpBQXFKO1FBQ3JKLDRDQUE0QztRQUM1Qyx5Q0FBeUM7UUFDekMscUlBQXFJO1FBQ3JJLCtCQUErQjtRQUMvQixpREFBaUQ7UUFDakQsNkpBQTZKO1FBQzdKLHFEQUFxRDtRQUNyRCw4Q0FBOEM7UUFDOUMsMkNBQTJDO1FBQzNDLHVJQUF1STtRQUN2SSxpQ0FBaUM7UUFDakMsbURBQW1EO1FBQ25ELDZEQUE2RDtRQUM3RCw4Q0FBOEM7UUFDOUMsMkNBQTJDO1FBQzNDLHVJQUF1STtRQUN2SSxpQ0FBaUM7UUFDakMsbURBQW1EO1FBQ25ELHdCQUF3QjtRQUN4QixpR0FBaUc7UUFDakcsc0RBQXNEO1FBQ3RELHNCQUFzQjtRQUN0QixvQkFBb0I7UUFFcEIsZ0NBQWdDO1FBQ2hDLGtCQUFrQjtRQUNsQixnQkFBZ0I7UUFFaEIsbUJBQW1CO1FBQ25CLDJFQUEyRTtRQUMzRSxpRUFBaUU7UUFDakUsMkRBQTJEO1FBQzNELHVEQUF1RDtRQUN2RCx5QkFBeUI7UUFDekIsa0JBQWtCO1FBQ2xCLDBPQUEwTztRQUMxTyw0RUFBNEU7UUFDNUUsOExBQThMO1FBQzlMLDREQUE0RDtRQUM1RCxnRUFBZ0U7UUFDaEUsdUNBQXVDO1FBQ3ZDLDJIQUEySDtRQUMzSCx3QkFBd0I7UUFDeEIsMkJBQTJCO1FBQzNCLCtKQUErSjtRQUMvSixxSkFBcUo7UUFDckosbUlBQW1JO1FBQ25JLDRDQUE0QztRQUM1QyxpREFBaUQ7UUFDakQsNkpBQTZKO1FBQzdKLHFEQUFxRDtRQUNyRCxxSUFBcUk7UUFDckksOENBQThDO1FBQzlDLG1EQUFtRDtRQUNuRCw2REFBNkQ7UUFDN0QscUlBQXFJO1FBQ3JJLDhDQUE4QztRQUM5QyxtREFBbUQ7UUFDbkQsd0JBQXdCO1FBQ3hCLGlHQUFpRztRQUNqRyxzREFBc0Q7UUFDdEQsc0JBQXNCO1FBQ3RCLG9CQUFvQjtRQUNwQixtQ0FBbUM7UUFDbkMsZ0NBQWdDO1FBQ2hDLGtCQUFrQjtRQUVsQixnQkFBZ0I7UUFDaEIsc0RBQXNEO1FBQ3RELGlGQUFpRjtRQUNqRiwyREFBMkQ7UUFDM0Qsb0ZBQW9GO1FBQ3BGLDhEQUE4RDtRQUM5RCxrQkFBa0I7UUFDbEIsK0JBQStCO1FBQy9CLHFFQUFxRTtRQUNyRSxtRkFBbUY7UUFDbkYsdUZBQXVGO1FBQ3ZGLDhHQUE4RztRQUM5RyxzSUFBc0k7UUFDdEksb1NBQW9TO1FBRXBTLDRGQUE0RjtRQUM1RixzRkFBc0Y7UUFDdEYscUZBQXFGO1FBQ3JGLG9CQUFvQjtRQUNwQixtQ0FBbUM7UUFDbkMsdUZBQXVGO1FBQ3ZGLHdHQUF3RztRQUN4RyxtRUFBbUU7UUFDbkUsOERBQThEO1FBQzlELGtFQUFrRTtRQUNsRSx5Q0FBeUM7UUFDekMscUhBQXFIO1FBQ3JILDBCQUEwQjtRQUMxQixzQkFBc0I7UUFDdEIsa0NBQWtDO1FBQ2xDLG9CQUFvQjtRQUNwQixrQkFBa0I7UUFDbEIsZ0JBQWdCO1FBRWhCLHNEQUFzRDtRQUN0RCxrR0FBa0c7UUFDbEcsK0ZBQStGO1FBQy9GLDBCQUEwQjtRQUMxQix5REFBeUQ7UUFDekQsb0VBQW9FO1FBQ3BFLDBFQUEwRTtRQUMxRSxvRUFBb0U7UUFDcEUsbUhBQW1IO1FBQ25ILDRIQUE0SDtRQUM1SCx5QkFBeUI7UUFDekIsd0NBQXdDO1FBQ3hDLG1GQUFtRjtRQUNuRixxRUFBcUU7UUFDckUsNENBQTRDO1FBQzVDLHlJQUF5STtRQUN6SSw2QkFBNkI7UUFDN0IseUJBQXlCO1FBQ3pCLHVCQUF1QjtRQUN2Qix1QkFBdUI7UUFDdkIsbUJBQW1CO1FBQ25CLGdCQUFnQjtRQUVoQixnREFBZ0Q7UUFDaEQsa0ZBQWtGO1FBQ2xGLDRFQUE0RTtRQUM1RSw4SEFBOEg7UUFDOUgseUZBQXlGO1FBQ3pGLG1FQUFtRTtRQUNuRSxzQkFBc0I7UUFDdEIsb0NBQW9DO1FBQ3BDLDBFQUEwRTtRQUMxRSx3RkFBd0Y7UUFDeEYsNEZBQTRGO1FBQzVGLG9IQUFvSDtRQUNwSCwySUFBMkk7UUFDM0ksdVNBQXVTO1FBRXZTLGlHQUFpRztRQUNqRywyRkFBMkY7UUFDM0YsMEZBQTBGO1FBQzFGLHlCQUF5QjtRQUN6Qix3Q0FBd0M7UUFDeEMsb0ZBQW9GO1FBQ3BGLG1HQUFtRztRQUNuRyxzRUFBc0U7UUFDdEUsaUVBQWlFO1FBQ2pFLHFFQUFxRTtRQUNyRSw0Q0FBNEM7UUFDNUMsd0hBQXdIO1FBQ3hILDZCQUE2QjtRQUM3Qix5QkFBeUI7UUFDekIscUNBQXFDO1FBQ3JDLDBCQUEwQjtRQUMxQix1QkFBdUI7UUFDdkIsbUJBQW1CO1FBQ25CLG1CQUFtQjtRQUNuQixpQkFBaUI7UUFFakIsWUFBWTtRQUNaLFlBQVk7UUFDWixRQUFRO1FBQ1IsUUFBUTtRQUNSLElBQUk7UUFFSix5RUFBeUU7UUFDekUsaUJBQWlCO1FBQ2pCLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixvQ0FBb0M7WUFDcEMseUJBQXlCO1lBQ3pCLElBQUksVUFBVSxHQUFRLEVBQUUsQ0FBQztZQUN6QixJQUFJLHlCQUF5QixHQUFRLEVBQUUsQ0FBQztZQUN4QyxJQUFJLGdCQUFnQixHQUFRLEVBQUUsQ0FBQztZQUMvQixJQUFJLGdCQUFnQixHQUFRLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGFBQWtCLEVBQUUsRUFBRTtnQkFDL0Msb0VBQW9FO2dCQUNwRSxvRUFBb0U7Z0JBQ3BFLE9BQU87Z0JBQ1AsK0RBQStEO2dCQUMvRCx5RUFBeUU7Z0JBQ3pFLHdCQUF3QjtnQkFDeEIsMEVBQTBFO2dCQUMxRSx5QkFBeUI7Z0JBQ3pCLE1BQU07Z0JBQ0osOEJBQThCO2dCQUM5QixJQUFJLHFCQUFxQixHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQzNELENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsQ0FDakksQ0FBQztnQkFDRixJQUFJLGlCQUFpQixHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQ3ZELENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsS0FBSyxNQUFNLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsQ0FDbEksQ0FBQztnQkFDRixJQUFJLGVBQWUsR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUNyRCxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLEtBQUssTUFBTSxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLDBCQUEwQixDQUFDLENBQy9ILENBQUM7Z0JBQ0YsSUFDRSxJQUFJLENBQUMsZUFBZSxDQUFDLDRCQUE0QixDQUFDLEtBQUssSUFBSTtvQkFDM0QsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMscUJBQXFCLENBQUM7b0JBQ2hELENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDO29CQUNoRCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUNwRCxJQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUM3QixJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLENBQ3BELElBQUssQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQzdCLElBQUksQ0FBQyxlQUFlLENBQUMsMEJBQTBCLENBQUMsQ0FDakQsRUFDRCxDQUFDO29CQUNELHdCQUF3QjtvQkFDeEIsSUFBSSxtQkFBbUIsR0FBUSx5QkFBeUIsQ0FBQyxTQUFTLENBQ2hFLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FDWCxHQUFHLENBQUMsVUFBVSxLQUFLLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQzt3QkFDekQsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FDcEQsQ0FBQztvQkFDRixJQUFJLG1CQUFtQixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQy9CLHlCQUF5QixDQUFDLG1CQUFtQixDQUFDLENBQUMsUUFBUSxDQUFDOzRCQUN0RCxRQUFRLENBQ04sSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUNwRCxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNqQixDQUFDO3lCQUFNLENBQUM7d0JBQ04seUJBQXlCLENBQUMsSUFBSSxDQUFDOzRCQUM3QixVQUFVLEVBQUUsYUFBYSxDQUFDLFlBQVksQ0FBQzs0QkFDdkMsVUFBVSxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQzs0QkFDbEQsTUFBTSxFQUFFLFFBQVEsQ0FDZCxJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLENBQ3BELENBQUMsUUFBUSxFQUFFOzRCQUNaLGdCQUFnQixFQUFFLENBQUM7NEJBQ25CLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQzs0QkFDMUMsU0FBUyxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQzt5QkFDakQsQ0FBQyxDQUFDO29CQUNMLENBQUM7b0JBRUQsbUJBQW1CO29CQUNuQixJQUFJLGNBQWMsR0FBUSxDQUN4QixJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLEdBQUcsUUFBUSxDQUMvRCxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDYixJQUFJLFlBQVksR0FDZCxVQUFVLENBQUMsQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRTt3QkFDN0QsQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7d0JBQ2xDLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZDLElBQUksdUJBQXVCLEdBQ3pCLHlCQUF5QixDQUFDLFNBQVMsQ0FDakMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUNYLEdBQUcsQ0FBQyxVQUFVLEtBQUssaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO3dCQUNyRCxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUNwRCxDQUFDO29CQUNKLElBQUksdUJBQXVCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDbkMseUJBQXlCLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxRQUFRLENBQUM7NEJBQzFELFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDeEMsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLHlCQUF5QixDQUFDLElBQUksQ0FBQzs0QkFDN0IsVUFBVSxFQUFFLGFBQWEsQ0FBQyxZQUFZLENBQUM7NEJBQ3ZDLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7NEJBQzlDLE1BQU0sRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxFQUFFOzRCQUMzQyxnQkFBZ0IsRUFBRSxDQUFDOzRCQUNuQixXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7NEJBQzFDLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7eUJBQzdDLENBQUMsQ0FBQztvQkFDTCxDQUFDO29CQUNELGlCQUFpQjtvQkFFakIsSUFBSSxxQkFBcUIsR0FDdkIseUJBQXlCLENBQUMsU0FBUyxDQUNqQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQ1gsR0FBRyxDQUFDLFVBQVUsS0FBSyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO3dCQUNuRCxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUNwRCxDQUFDO29CQUNKLElBQUkscUJBQXFCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDakMseUJBQXlCLENBQUMscUJBQXFCLENBQUMsQ0FBQyxRQUFRLENBQUM7NEJBQ3hELFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDeEMsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLHlCQUF5QixDQUFDLElBQUksQ0FBQzs0QkFDN0IsVUFBVSxFQUFFLGFBQWEsQ0FBQyxZQUFZLENBQUM7NEJBQ3ZDLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDOzRCQUM1QyxNQUFNLEVBQUUsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLFFBQVEsRUFBRTs0QkFDM0MsZ0JBQWdCLEVBQUUsQ0FBQzs0QkFDbkIsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDOzRCQUMxQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQzt5QkFDM0MsQ0FBQyxDQUFDO29CQUNMLENBQUM7Z0JBQ0gsQ0FBQztxQkFBTSxJQUNMLElBQUksQ0FBQyxlQUFlLENBQUMsNEJBQTRCLENBQUMsS0FBSyxNQUFNO29CQUM3RCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQywwQkFBMEIsQ0FBQyxDQUNqRDtvQkFDRCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUNwRCxFQUNELENBQUM7b0JBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO3dCQUMvQyxJQUFJLGNBQWMsR0FDaEIsVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsMEJBQTBCLENBQUMsQ0FBQzs0QkFDMUQsRUFBRTs0QkFDSixVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUM7d0JBQ2xFLElBQUksVUFBVSxHQUFRLENBQ3BCLFVBQVUsQ0FBQyxjQUFjLENBQUMsR0FBRyxRQUFRLENBQ3RDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNiLElBQUkscUJBQXFCLEdBQ3ZCLHlCQUF5QixDQUFDLFNBQVMsQ0FDakMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUNYLEdBQUcsQ0FBQyxVQUFVLEtBQUssZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQzs0QkFDbkQsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FDcEQsQ0FBQzt3QkFDSixJQUFJLHFCQUFxQixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7NEJBQ2pDLHlCQUF5QixDQUFDLHFCQUFxQixDQUFDLENBQUMsUUFBUSxDQUFDO2dDQUN4RCxJQUFJLENBQUMsZUFBZSxDQUFDLDBCQUEwQixDQUFDLENBQUMsUUFBUSxFQUFFO29DQUMzRCxHQUFHO29DQUNILElBQUksQ0FBQyxlQUFlLENBQ2xCLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsQ0FDcEQsQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDakIsQ0FBQzs2QkFBTSxDQUFDOzRCQUNOLHlCQUF5QixDQUFDLElBQUksQ0FBQztnQ0FDN0IsVUFBVSxFQUFFLGFBQWEsQ0FBQyxZQUFZLENBQUM7Z0NBQ3ZDLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO2dDQUM1QyxNQUFNLEVBQ0osSUFBSSxDQUFDLGVBQWUsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLFFBQVEsRUFBRTtvQ0FDM0QsR0FBRztvQ0FDSCxJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLENBQUMsUUFBUSxFQUFFO2dDQUNoRSxnQkFBZ0IsRUFBRSxDQUFDO2dDQUNuQixXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7Z0NBQzFDLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDOzZCQUMzQyxDQUFDLENBQUM7d0JBQ0wsQ0FBQzt3QkFDRCxJQUFJLHVCQUF1QixHQUN6Qix5QkFBeUIsQ0FBQyxTQUFTLENBQ2pDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FDWCxHQUFHLENBQUMsVUFBVSxLQUFLLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQzs0QkFDckQsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FDcEQsQ0FBQzt3QkFDSixJQUFJLHVCQUF1QixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7NEJBQ25DLHlCQUF5QixDQUFDLHVCQUF1QixDQUFDLENBQUMsUUFBUSxDQUFDO2dDQUMxRCxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ3hDLENBQUM7NkJBQU0sQ0FBQzs0QkFDTix5QkFBeUIsQ0FBQyxJQUFJLENBQUM7Z0NBQzdCLFVBQVUsRUFBRSxhQUFhLENBQUMsWUFBWSxDQUFDO2dDQUN2QyxVQUFVLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO2dDQUM5QyxNQUFNLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtnQ0FDM0MsZ0JBQWdCLEVBQUUsQ0FBQztnQ0FDbkIsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO2dDQUMxQyxTQUFTLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDOzZCQUM3QyxDQUFDLENBQUM7d0JBQ0wsQ0FBQzt3QkFDRCxJQUFJLG1CQUFtQixHQUNyQix5QkFBeUIsQ0FBQyxTQUFTLENBQ2pDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FDWCxHQUFHLENBQUMsVUFBVSxLQUFLLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQzs0QkFDekQsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FDcEQsQ0FBQzt3QkFDSixJQUFJLG1CQUFtQixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7NEJBQy9CLHlCQUF5QixDQUFDLG1CQUFtQixDQUFDLENBQUMsUUFBUSxDQUFDO2dDQUN0RCxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ3BDLENBQUM7NkJBQU0sQ0FBQzs0QkFDTix5QkFBeUIsQ0FBQyxJQUFJLENBQUM7Z0NBQzdCLFVBQVUsRUFBRSxhQUFhLENBQUMsWUFBWSxDQUFDO2dDQUN2QyxVQUFVLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO2dDQUNsRCxNQUFNLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtnQ0FDdkMsZ0JBQWdCLEVBQUUsQ0FBQztnQ0FDbkIsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO2dDQUMxQyxTQUFTLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDOzZCQUNqRCxDQUFDLENBQUM7d0JBQ0wsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7Z0JBRUQsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQztvQkFDaEQsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsRUFDakUsQ0FBQztvQkFDRCxJQUFJLHNCQUFzQixHQUFRLHlCQUF5QixDQUFDLE1BQU0sQ0FDaEUsQ0FBQyxjQUFtQixFQUFFLEVBQUUsQ0FDdEIsY0FBYyxDQUFDLFlBQVksQ0FBQzt3QkFDNUIscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQ3pDLENBQUM7b0JBQ0YsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxzQkFBc0IsQ0FBQzt3QkFDakQsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDOUQsQ0FBQzt3QkFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDOzRCQUMxRCxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDeEMsQ0FBQztnQkFDSCxDQUFDO2dCQUVELElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLENBQUM7b0JBQzVDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQzdELENBQUM7b0JBQ0QsSUFBSSwwQkFBMEIsR0FDNUIseUJBQXlCLENBQUMsTUFBTSxDQUM5QixDQUFDLGNBQW1CLEVBQUUsRUFBRSxDQUN0QixjQUFjLENBQUMsWUFBWSxDQUFDO3dCQUM1QixpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FDckMsQ0FBQztvQkFDSixJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLDBCQUEwQixDQUFDO3dCQUNyRCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUNsRSxDQUFDO3dCQUNELElBQUksQ0FBQyxlQUFlLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7NEJBQ3RELDBCQUEwQixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUM1QyxDQUFDO2dCQUNILENBQUM7Z0JBRUQsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUM7b0JBQzFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUMzRCxDQUFDO29CQUNELElBQUksd0JBQXdCLEdBQzFCLHlCQUF5QixDQUFDLE1BQU0sQ0FDOUIsQ0FBQyxjQUFtQixFQUFFLEVBQUUsQ0FDdEIsY0FBYyxDQUFDLFlBQVksQ0FBQzt3QkFDNUIsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUNuQyxDQUFDO29CQUNKLElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsd0JBQXdCLENBQUM7d0JBQ25ELENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQ2hFLENBQUM7d0JBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7NEJBQ3BELHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUMxQyxDQUFDO2dCQUNILENBQUM7Z0JBQ0gsSUFBSTtnQkFDSixJQUFJLDRCQUE0QixHQUFRLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUMvRCxhQUFhLENBQUMsV0FBVyxDQUFDLENBQzNCO29CQUNDLENBQUMsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUMvQixDQUFDLFVBQWUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxLQUFLLFdBQVcsQ0FDaEU7b0JBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDUCxJQUNFLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQztvQkFDM0IsNEJBQTRCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztvQkFDMUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQ3JELENBQUM7b0JBQ0QsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQW1CLEVBQUUsRUFBRTt3QkFDekQsSUFBSSxjQUFjLENBQUMsc0JBQXNCLENBQUMsS0FBSyxjQUFjLEVBQUUsQ0FBQzs0QkFDOUQsSUFBSSxjQUFjLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDO2dDQUN6QyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQzs0QkFDakUsQ0FBQztpQ0FBTSxDQUFDO2dDQUNOLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzs0QkFDNUQsQ0FBQzt3QkFDSCxDQUFDO3dCQUNELElBQUksaUJBQWlCLEdBQVEsRUFBRSxDQUFDO3dCQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUM7NEJBQzlELGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQ3BDLENBQUMsaUJBQXNCLEVBQUUsRUFBRTtnQ0FDekIsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsQ0FDekMsQ0FDRjtvQ0FDRCxJQUFJLENBQUMsZUFBZSxDQUNsQixpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUN6QyxFQUNELENBQUM7b0NBQ0QsaUJBQWlCLENBQUMsSUFBSSxDQUNwQixpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUN6QyxDQUFDO2dDQUNKLENBQUM7NEJBQ0gsQ0FBQyxDQUNGLENBQUM7d0JBQ0osQ0FBQzt3QkFDRCxJQUNFLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQzs0QkFDcEMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFVBQVU7K0JBQzFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFDaEYsQ0FBQzs0QkFDRCx3QkFBd0I7NEJBRXhCLElBQUksMEJBQTBCLEdBQzVCLHlCQUF5QixDQUFDLFNBQVMsQ0FDakMsQ0FBQyxlQUFvQixFQUFFLEVBQUUsQ0FDdkIsZUFBZSxDQUFDLFlBQVksQ0FBQztnQ0FDM0IsY0FBYyxDQUFDLFlBQVksQ0FBQztnQ0FDOUIsZUFBZSxDQUFDLFlBQVksQ0FBQztvQ0FDM0IsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUNoQyxDQUFDOzRCQUNKLElBQUksMEJBQTBCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQ0FDdEMsSUFBSSxHQUFHLEdBQVE7b0NBQ2IsVUFBVSxFQUFFLGFBQWEsQ0FBQyxZQUFZLENBQUM7b0NBQ3ZDLFVBQVUsRUFBRSxjQUFjLENBQUMsWUFBWSxDQUFDO29DQUN4QyxNQUFNLEVBQUUsRUFBRTtvQ0FDVixnQkFBZ0IsRUFBRSxDQUFDO29DQUNuQixXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7b0NBQzFDLFNBQVMsRUFBRSxjQUFjLENBQUMsV0FBVyxDQUFDO2lDQUN2QyxDQUFDO2dDQUNGLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dDQUM5RSx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQ3RDLENBQUM7aUNBQU0sQ0FBQztnQ0FDTix5QkFBeUIsQ0FBQywwQkFBMEIsQ0FBQyxDQUNuRCxRQUFRLENBQ1QsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDOzRCQUNwRSxDQUFDO3dCQUNILENBQUM7NkJBQU0sSUFDTCxjQUFjLENBQUMsb0JBQW9CLENBQUM7NEJBQ3BDLGNBQWMsQ0FBQyxjQUFjLENBQUMsS0FBSyxVQUFVOzRCQUM3QyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FDbkQsRUFDRCxDQUFDOzRCQUNELHdCQUF3Qjs0QkFDeEIsSUFBSSwwQkFBMEIsR0FDNUIseUJBQXlCLENBQUMsU0FBUyxDQUNqQyxDQUFDLGVBQW9CLEVBQUUsRUFBRSxDQUN2QixlQUFlLENBQUMsWUFBWSxDQUFDO2dDQUMzQixjQUFjLENBQUMsWUFBWSxDQUFDO2dDQUM5QixlQUFlLENBQUMsWUFBWSxDQUFDO29DQUMzQixhQUFhLENBQUMsWUFBWSxDQUFDLENBQ2hDLENBQUM7NEJBQ0osSUFBSSwwQkFBMEIsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dDQUN0QyxJQUFJLEdBQUcsR0FBUTtvQ0FDYixVQUFVLEVBQUUsYUFBYSxDQUFDLFlBQVksQ0FBQztvQ0FDdkMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxZQUFZLENBQUM7b0NBQ3hDLE1BQU0sRUFDSixjQUFjLENBQUMsY0FBYyxDQUFDLEtBQUssVUFBVTt3Q0FDM0MsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQ25EO3dDQUNILENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztvQ0FDeEQsZ0JBQWdCLEVBQUUsQ0FBQztvQ0FDbkIsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO29DQUMxQyxTQUFTLEVBQUUsY0FBYyxDQUFDLFdBQVcsQ0FBQztpQ0FDdkMsQ0FBQztnQ0FDRix5QkFBeUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQ3RDLENBQUM7aUNBQU0sQ0FBQztnQ0FDTix5QkFBeUIsQ0FBQywwQkFBMEIsQ0FBQyxDQUNuRCxRQUFRLENBQ1Q7b0NBQ0MsY0FBYyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFVBQVU7d0NBQzNDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FDTixJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUNuRDt3Q0FDSCxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzs0QkFDM0QsQ0FBQzt3QkFDSCxDQUFDO3dCQUNELDhIQUE4SDt3QkFDOUgsOE9BQThPO3dCQUM5Tyw0Q0FBNEM7d0JBQzVDLHVCQUF1Qjt3QkFDdkIsaURBQWlEO3dCQUNqRCxrREFBa0Q7d0JBQ2xELDBOQUEwTjt3QkFDMU4sNkJBQTZCO3dCQUM3QixvREFBb0Q7d0JBQ3BELGdEQUFnRDt3QkFDaEQsU0FBUzt3QkFDVCwyQ0FBMkM7d0JBQzNDLDBEQUEwRDt3QkFDMUQsMENBQTBDO3dCQUMxQyx3RUFBd0U7d0JBQ3hFLGdGQUFnRjt3QkFDaEYsOEtBQThLO3dCQUM5SyxnRkFBZ0Y7d0JBQ2hGLGNBQWM7d0JBQ2QsY0FBYzt3QkFDZCxVQUFVO3dCQUNWLHNEQUFzRDt3QkFDdEQsUUFBUTt3QkFDUixhQUFhO3dCQUNiLDBEQUEwRDt3QkFDMUQsMERBQTBEO3dCQUMxRCwwQ0FBMEM7d0JBQzFDLHdFQUF3RTt3QkFDeEUsZ0ZBQWdGO3dCQUNoRiw4S0FBOEs7d0JBQzlLLGdGQUFnRjt3QkFDaEYsY0FBYzt3QkFDZCxjQUFjO3dCQUNkLFVBQVU7d0JBQ1Ysd0dBQXdHO3dCQUN4RyxlQUFlO3dCQUNmLHFSQUFxUjt3QkFDclIsUUFBUTt3QkFFUixNQUFNO3dCQUVOLElBQUk7d0JBRUoscUVBQXFFO3dCQUNyRSxnUEFBZ1A7d0JBQ2hQLHFCQUFxQjt3QkFDckIsK0NBQStDO3dCQUMvQyxnREFBZ0Q7d0JBQ2hELHVEQUF1RDt3QkFDdkQsMkJBQTJCO3dCQUMzQixrREFBa0Q7d0JBQ2xELDhDQUE4Qzt3QkFDOUMsT0FBTzt3QkFDUCxrREFBa0Q7d0JBQ2xELDJDQUEyQzt3QkFDM0MsYUFBYTt3QkFDYixzSEFBc0g7d0JBQ3RILE1BQU07d0JBQ04sSUFBSTtvQkFDTixDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUNELE1BQU07Z0JBQ04sSUFBSTtZQUNOLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSwyQkFBMkIsR0FBUTtnQkFDckMsR0FBRyxJQUFJLEdBQUcsQ0FDUix5QkFBeUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUMzQixDQUNGO2FBQ0YsQ0FBQztZQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsMkJBQTJCLENBQUMsRUFBRSxDQUFDO2dCQUMzRCxnQkFBZ0IsR0FBRyx5QkFBeUIsQ0FBQyxNQUFNLENBQ2pELENBQUMsWUFBaUIsRUFBRSxFQUFFLENBQ3BCLFlBQVksQ0FBQyxZQUFZLENBQUMsS0FBSywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsQ0FDaEUsQ0FBQztnQkFDRixJQUFJLDJCQUEyQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDN0MsZ0JBQWdCLEdBQUcseUJBQXlCLENBQUMsTUFBTSxDQUNqRCxDQUFDLFlBQWlCLEVBQUUsRUFBRSxDQUNwQixZQUFZLENBQUMsWUFBWSxDQUFDLEtBQUssMkJBQTJCLENBQUMsQ0FBQyxDQUFDLENBQ2hFLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLGlCQUFpQixHQUFRLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUM5RSxJQUFJLENBQUMscUJBQXFCLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQzlDLGNBQWMsQ0FBQyxPQUFPLENBQ3BCLHVCQUF1QixFQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQ2pDLENBQUM7Z0JBQ0YsSUFBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO29CQUMvQyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUE7Z0JBQ3BGLENBQUM7Z0JBQ0QscUdBQXFHO2dCQUNyRyw4WkFBOFo7WUFDaGEsQ0FBQztZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQzlFLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxnQkFBZ0IsQ0FBQztnQkFDOUMsY0FBYyxDQUFDLE9BQU8sQ0FDcEIsdUJBQXVCLEVBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FDakMsQ0FBQztnQkFDRixJQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQy9DLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQTtnQkFDcEYsQ0FBQztnQkFDRCxzR0FBc0c7Z0JBQ3RHLDhaQUE4WjtZQUNoYSxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBWTtRQUN6QixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQyxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNqQixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDdEIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM5RCxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDdEMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsQ0FBQztZQUNELElBQ0UsSUFBSSxLQUFLLE1BQU07Z0JBQ2YsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUk7Z0JBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssU0FBUyxFQUNyQyxDQUFDO2dCQUNELFVBQVUsR0FBRyxVQUFVLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVELHdCQUF3QixDQUFDLGlCQUF1QixLQUFLO1FBQ25ELElBQUksT0FBTyxHQUFRLElBQUksQ0FBQztRQUN4QixJQUFJLGlCQUFpQixHQUFTLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGFBQWtCLEVBQUUsRUFBRTtZQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNyRSxJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDdkQsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7d0JBQzlELGNBQWM7d0JBQ2QsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDOzRCQUM3RCxlQUFlO3dCQUNqQixhQUFhLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7NEJBQzdELGtCQUFrQixDQUFDO29CQUN2QixPQUFPLEVBQ1AsQ0FBQztvQkFDRCx3Q0FBd0M7b0JBQ3hDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLE1BQU0sRUFBRSxDQUFDO3dCQUNsRSxJQUFJLGlCQUFpQixHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQ3ZELENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsS0FBSyxNQUFNLENBQ3JELENBQUM7d0JBQ0YsSUFBSSxlQUFlLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FDckQsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLE1BQU0sQ0FDckQsQ0FBQzt3QkFDRixJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDOzRCQUM1QyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUM7NEJBQzFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLDBCQUEwQixDQUFDLENBQ2pEO2dDQUNDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUNwRCxDQUFDLEVBQ0osQ0FBQzs0QkFDRCxPQUFPLEdBQUcsS0FBSyxDQUFDOzRCQUNoQixpQkFBaUIsR0FBRyx3Q0FBd0MsQ0FBQzs0QkFDN0QsSUFBRyxjQUFjLEVBQUUsQ0FBQztnQ0FDbEIsSUFBSSxVQUFVLEdBQVEsNkJBQTZCLENBQUM7Z0NBQ3BELElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7NEJBQ2xDLENBQUM7NEJBQ0QsdUVBQXVFOzRCQUN2RSw0RUFBNEU7NEJBQzVFLHNFQUFzRTs0QkFDdEUscUVBQXFFOzRCQUNyRSxrREFBa0Q7NEJBQ2xELElBQUk7NEJBQ0osMEZBQTBGOzRCQUMxRixpREFBaUQ7NEJBQ2pELDRDQUE0Qzs0QkFDNUMsZ0RBQWdEOzRCQUNoRCx1QkFBdUI7NEJBQ3ZCLG9FQUFvRTs0QkFDcEUsUUFBUTs0QkFDUixXQUFXOzRCQUNYLHNHQUFzRzs0QkFFdEcsSUFBSTs0QkFFSixnQkFBZ0I7NEJBQ2hCLElBQUk7d0JBQ04sQ0FBQztvQkFDSCxDQUFDO29CQUNELDhCQUE4QjtvQkFDOUIsSUFBSSxxQkFBcUIsR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUMzRCxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLEtBQUssS0FBSyxDQUNwRCxDQUFDO29CQUNGLElBQ0UsSUFBSSxDQUFDLGVBQWUsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLElBQUk7d0JBQzNELElBQUksQ0FBQyxtQkFBbUIsQ0FDdEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUNwRDt3QkFDRCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQzt3QkFDaEQsT0FBTyxFQUNQLENBQUM7d0JBQ0QsT0FBTyxHQUFHLEtBQUssQ0FBQzt3QkFDaEIsaUJBQWlCLEdBQUcsbUNBQW1DLENBQUM7d0JBRXhELElBQUcsY0FBYyxFQUFFLENBQUM7NEJBQ2xCLElBQUksVUFBVSxHQUFRLDZCQUE2QixDQUFDOzRCQUNwRCxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO3dCQUNsQyxDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQztnQkFFRCxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsaUJBQXNCLEVBQUUsRUFBRTtvQkFDNUQsaUNBQWlDO29CQUNqQyxJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDO3dCQUM1QyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO3dCQUNoRSxpQkFBaUIsQ0FBQyxvQkFBb0IsQ0FBQzt3QkFDdkMsT0FBTzt3QkFDUCxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsS0FBSyxZQUFZO3dCQUNsRCxpQkFBaUIsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEtBQUs7d0JBQ25ELGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxLQUFLLGFBQWE7d0JBQ25ELGlCQUFpQixDQUFDLHNCQUFzQixDQUFDLEtBQUssY0FBYzt3QkFDNUQsaUJBQWlCLENBQUMsY0FBYyxDQUFDLEtBQUssaUJBQWlCO3dCQUN2RCxpQkFBaUIsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLE1BQU07d0JBQ3BELGlCQUFpQixDQUFDLHNCQUFzQixDQUFDLEtBQUssTUFBTTt3QkFDcEQsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxHQUFHO3dCQUN4RCxJQUFJLENBQUMsbUJBQW1CLENBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FDdEQ7d0JBQ0Qsd0RBQXdEO3dCQUN4RCxpSEFBaUg7d0JBQ2pILG1JQUFtSTt3QkFDbkksT0FBTyxFQUNQLENBQUM7d0JBQ0QsaUJBQWlCLEdBQUcsbUNBQW1DLGFBQWEsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO3dCQUN0RixPQUFPLEdBQUcsS0FBSyxDQUFDO3dCQUVoQixJQUFHLGNBQWMsRUFBRSxDQUFDOzRCQUNsQixJQUFJLFVBQVUsR0FBUSxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQzs0QkFDdEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQzt3QkFDbEMsQ0FBQztvQkFDSCxDQUFDO29CQUVELE9BQU87b0JBQ1AsK0RBQStEO29CQUMvRCxxREFBcUQ7b0JBQ3JELCtDQUErQztvQkFDL0MsTUFBTTtvQkFDTiw4TkFBOE47b0JBQzlOLGdFQUFnRTtvQkFDaEUsa0xBQWtMO29CQUNsTCxnREFBZ0Q7b0JBQ2hELG9EQUFvRDtvQkFDcEQsMkJBQTJCO29CQUMzQiwrR0FBK0c7b0JBQy9HLFlBQVk7b0JBQ1osZUFBZTtvQkFDZixtSkFBbUo7b0JBQ25KLHlJQUF5STtvQkFDekksdUhBQXVIO29CQUN2SCxnQ0FBZ0M7b0JBQ2hDLHFDQUFxQztvQkFDckMsaUpBQWlKO29CQUNqSix5Q0FBeUM7b0JBQ3pDLHlIQUF5SDtvQkFDekgsa0NBQWtDO29CQUNsQyx1Q0FBdUM7b0JBQ3ZDLGlEQUFpRDtvQkFDakQseUhBQXlIO29CQUN6SCxrQ0FBa0M7b0JBQ2xDLHVDQUF1QztvQkFDdkMsWUFBWTtvQkFDWixxRkFBcUY7b0JBQ3JGLDBDQUEwQztvQkFDMUMsVUFBVTtvQkFDVixRQUFRO29CQUNSLHVCQUF1QjtvQkFDdkIsb0JBQW9CO29CQUNwQixNQUFNO29CQUVOLElBQUk7b0JBQ0osdUNBQXVDO29CQUN2QyxJQUNFLE9BQU87d0JBQ1AsaUJBQWlCLENBQUMsWUFBWSxLQUFLLGFBQWE7d0JBQ2hELGlCQUFpQixDQUFDLG9CQUFvQixDQUFDO3dCQUN2QyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO3dCQUNoRSxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsRUFDN0MsQ0FBQzt3QkFDRCxJQUNFLENBQUMsT0FBTzs0QkFDTiw4RUFBOEU7NEJBQzlFLG1FQUFtRTs0QkFDbkUsdUVBQXVFOzRCQUN2RSw4RkFBOEY7NEJBQzlGLCtJQUErSTs0QkFDL0ksSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQ0FDbkQsR0FBRyxDQUFDOzRCQUNSLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQzs0QkFDdEQsSUFBSSxDQUFDLG1CQUFtQixDQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQ3REO3dCQUNELElBQUk7d0JBQ0osaUVBQWlFOzBCQUNqRSxDQUFDOzRCQUNELE9BQU8sR0FBRyxLQUFLLENBQUM7NEJBQ2hCLGlCQUFpQixHQUFHLG1DQUFtQyxhQUFhLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQzs0QkFFdEYsSUFBRyxjQUFjLEVBQUUsQ0FBQztnQ0FDbEIsSUFBSSxVQUFVLEdBQVEsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7Z0NBQ3RELElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7NEJBQ2xDLENBQUM7d0JBQ0gsQ0FBQztvQkFDSCxDQUFDO29CQUVELHVDQUF1QztvQkFDdkMsbUZBQW1GO29CQUNuRixnRkFBZ0Y7b0JBQ2hGLFdBQVc7b0JBQ1gsMENBQTBDO29CQUMxQyxxREFBcUQ7b0JBQ3JELDJEQUEyRDtvQkFDM0QscURBQXFEO29CQUNyRCxvR0FBb0c7b0JBQ3BHLDZHQUE2RztvQkFDN0csVUFBVTtvQkFDVix5QkFBeUI7b0JBQ3pCLG9FQUFvRTtvQkFDcEUsc0RBQXNEO29CQUN0RCw2QkFBNkI7b0JBQzdCLDBIQUEwSDtvQkFDMUgsY0FBYztvQkFDZCxVQUFVO29CQUNWLFFBQVE7b0JBQ1IsUUFBUTtvQkFDUixJQUFJO2dCQUNOLENBQUMsQ0FBQyxDQUFDO2dCQUVILG1DQUFtQztnQkFDbkMscUVBQXFFO2dCQUNyRSwrREFBK0Q7Z0JBQy9ELGlIQUFpSDtnQkFDakgsNEVBQTRFO2dCQUM1RSxzREFBc0Q7Z0JBQ3RELFNBQVM7Z0JBQ1QsdUJBQXVCO2dCQUN2QixzRkFBc0Y7Z0JBQ3RGLDJFQUEyRTtnQkFDM0UsK0VBQStFO2dCQUMvRSx1R0FBdUc7Z0JBQ3ZHLHVKQUF1SjtnQkFDdkosNFVBQTRVO2dCQUU1VSxvRkFBb0Y7Z0JBQ3BGLDhFQUE4RTtnQkFDOUUsNkVBQTZFO2dCQUM3RSxZQUFZO2dCQUNaLDJCQUEyQjtnQkFDM0IsdUVBQXVFO2dCQUN2RSxzRkFBc0Y7Z0JBQ3RGLHlEQUF5RDtnQkFDekQsb0RBQW9EO2dCQUNwRCx3REFBd0Q7Z0JBQ3hELCtCQUErQjtnQkFDL0IsMkdBQTJHO2dCQUMzRyxnQkFBZ0I7Z0JBQ2hCLFlBQVk7Z0JBQ1osd0JBQXdCO2dCQUN4QixhQUFhO2dCQUNiLFVBQVU7Z0JBQ1YsTUFBTTtnQkFDTixNQUFNO2dCQUNOLElBQUk7WUFDTixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDNUUsY0FBYyxDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNoRSxjQUFjLENBQUMsT0FBTyxDQUFDLDJDQUEyQyxFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFDdkYsSUFBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUMvQyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDbkUsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ1IsY0FBYyxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUMzRCxjQUFjLENBQUMsT0FBTyxDQUFDLHNDQUFzQyxFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFFbEYsSUFBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUM3QyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDbkUsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQseUJBQXlCLENBQUMsUUFBYztRQUN0QyxJQUFJLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLGVBQWUsSUFBSSxRQUFRLENBQUMsc0JBQXNCLENBQUMsS0FBSyxXQUFXLEVBQUcsQ0FBQztZQUM5RyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUE7WUFFdkQsbURBQW1EO1lBQ25ELElBQUksY0FBYyxHQUFTLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBYyxFQUFFLEVBQUUsQ0FBQyxTQUFTLEtBQUssYUFBYSxDQUFDLENBQUM7WUFFbkksSUFDRSxjQUFjLEtBQU0sQ0FBQyxDQUFDLEVBQ3RCLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBZSxFQUFFLEVBQUUsQ0FBQyxTQUFTLEtBQUssYUFBYSxDQUFDLENBQUE7WUFDck0sQ0FBQztZQUNELElBQUksQ0FBQywyQkFBMkIsR0FBRyxFQUFFLENBQUM7WUFDdEMsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLFlBQVksQ0FDbEIsRUFBRSxDQUFDO2dCQUNKLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxhQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFFLENBQUMsQ0FBQztZQUM3UCxDQUFDO1lBQ0Qsd0dBQXdHO1lBQ3hHLDhCQUE4QjtZQUM5QixrQ0FBa0M7WUFDbEMsc0VBQXNFO1lBQ3RFLEtBQUs7WUFDTCw0REFBNEQ7WUFDNUQsT0FBTztZQUNQLGdFQUFnRTtZQUNoRSxxQ0FBcUM7WUFDckMsbUVBQW1FO1lBQ25FLDRCQUE0QjtZQUM1QixRQUFRO1lBQ1IsU0FBUztZQUNULHFDQUFxQztZQUNyQyxtRUFBbUU7WUFDbkUsNEJBQTRCO1lBQzVCLHdCQUF3QjtZQUN4QixNQUFNO1lBQ04sTUFBTTtZQUNKLCtEQUErRDtZQUMvRCx3QkFBd0I7WUFDeEIsOERBQThEO1lBQzlELHdCQUF3QjtZQUN4QixpREFBaUQ7WUFDakQsNkJBQTZCO1lBQzdCLHNDQUFzQztZQUN0QywrQ0FBK0M7WUFDL0MsV0FBVztZQUNYLHdDQUF3QztZQUN4QywrQ0FBK0M7WUFDL0MsV0FBVztZQUNYLGlEQUFpRDtZQUNqRCxLQUFLO1lBQ1AsSUFBSTtZQUNKLGtFQUFrRTtZQUNsRSxtQkFBbUI7WUFDbkIsbURBQW1EO1lBQ25ELGtEQUFrRDtZQUNsRCxzRUFBc0U7WUFDdEUsdUJBQXVCO1lBQ3ZCLDBCQUEwQjtZQUMxQixNQUFNO1lBQ04sTUFBTTtZQUVOLHNMQUFzTDtZQUN0TCxtRUFBbUU7WUFDbkUsbURBQW1EO1lBQ25ELCtEQUErRDtZQUMvRCx1QkFBdUI7WUFDdkIsMkJBQTJCO1lBQzNCLE1BQU07WUFDTixNQUFNO1lBQ04sNkJBQTZCO1lBRTdCLElBQUksZ0JBQWdCLEdBQVMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyRixpQ0FBaUM7WUFDakMsb0JBQW9CO1lBQ3BCLGtDQUFrQztZQUNsQyx3RUFBd0U7WUFDeEUsbUJBQW1CO1lBQ25CLE1BQU07WUFDTixLQUFLO1lBQ0wsSUFBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsY0FBYyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xjLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUyxDQUM5RyxDQUFDLElBQVMsRUFBRSxFQUFFO29CQUNaLDhCQUE4QjtvQkFDOUIsSUFBSSxhQUFhLEdBQVEsRUFBRSxDQUFDO29CQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFnQixFQUFFLEVBQUU7NEJBQ2hDLFdBQVcsQ0FDVCxjQUFjLENBQ2YsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FDL0MsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUMxQixDQUFDOzRCQUNGLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEtBQUssQ0FBQzs0QkFDMUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsSUFBSSxDQUFDOzRCQUMzQyxJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FDaEM7Z0NBQ0QsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEVBQy9DLENBQUM7Z0NBQ0QsV0FBVyxDQUFDLGtCQUFrQixDQUFDLEdBQUc7b0NBQ2hDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQztpQ0FDaEMsQ0FBQzs0QkFDSixDQUFDOzRCQUNELElBQ0UsV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFVBQVU7Z0NBQzFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FDaEMsRUFDRCxDQUFDO2dDQUNELFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE9BQU8sQ0FDckMsQ0FBQyx5QkFBOEIsRUFBRSxFQUFFO29DQUNqQyxJQUFJLGtCQUFrQixHQUFRLElBQUksQ0FBQyxNQUFNLENBQ3ZDLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FDZCxNQUFNLENBQUMsWUFBWSxDQUFDO3dDQUNwQix5QkFBeUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUM5QyxDQUFDO29DQUNGLElBQUksa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO3dDQUNsQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7NENBQ3BDLHlCQUF5QixDQUFDLHFCQUFxQixDQUFDLENBQUM7b0NBQ3JELENBQUM7Z0NBQ0gsQ0FBQyxDQUNGLENBQUM7NEJBQ0osQ0FBQzs0QkFDRCxPQUFPOzRCQUNQLCtCQUErQjs0QkFDL0Isa0NBQWtDOzRCQUNsQyxNQUFNOzRCQUNOLE1BQU07NEJBQ04sOERBQThEOzRCQUM5RCwyRUFBMkU7NEJBQzNFLHlDQUF5Qzs0QkFDekMsU0FBUzs0QkFDVCxRQUFROzRCQUNSLElBQUk7NEJBQ0osSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQ0FDdEQsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQzs0QkFDL0MsQ0FBQzs0QkFDRCxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQzt3QkFDcEQsQ0FBQyxDQUFDLENBQUM7d0JBQ0gsSUFBSSxDQUFDLElBQUksQ0FDUCxDQUFDLENBQU0sRUFBRSxDQUFNLEVBQUUsRUFBRSxDQUNqQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQ2pFLENBQUM7d0JBQ0YsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQVUsRUFBRSxHQUFRLEVBQUUsRUFBRTs0QkFDN0MsSUFBSSxXQUFXLEdBQVEsSUFBSSxDQUFDLE1BQU0sQ0FDaEMsQ0FBQyxjQUFtQixFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLEtBQUssS0FBSyxDQUMvRCxDQUFDOzRCQUNGLElBQUksR0FBRyxHQUFRO2dDQUNiLElBQUksRUFBRSxJQUFJLEdBQUcsR0FBRztnQ0FDaEIsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztvQ0FDL0MsQ0FBQyxDQUFDLFdBQVc7b0NBQ2IsQ0FBQyxDQUFDLEVBQUU7Z0NBQ04sV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUNwQyxXQUFXLENBQ1o7b0NBQ0MsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7b0NBQ3pCLENBQUMsQ0FBQyxFQUFFO2dDQUNOLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtnQ0FDM0Isb0JBQW9CLEVBQUUsSUFBSTtnQ0FDMUIsV0FBVyxFQUFFLElBQUk7NkJBQ2xCLENBQUM7NEJBQ0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQzlCLENBQUMsQ0FBQyxDQUFDO3dCQUNILElBQUksQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUM7d0JBQ3hDLG1IQUFtSDt3QkFDbkgsa0NBQWtDO3dCQUNsQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQztvQkFDckksQ0FBQztvQkFDRCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztnQkFDakMsQ0FBQyxFQUNELENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ1gsOEJBQThCO2dCQUNoQyxDQUFDLENBQ0YsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUE7SUFDaEMsQ0FBQztJQUNELHFCQUFxQixDQUFDLEtBQW9DO1FBQ3hELE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQzFCLENBQUM7SUFFRCx3QkFBd0I7UUFDcEIsSUFDRSxJQUFJLENBQUMsZUFBZSxDQUNsQiw0QkFBNEIsQ0FDN0IsS0FBSyxNQUFNO1lBQ1osQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQ2xCLDZCQUE2QixDQUM5QixDQUNGLEVBQ0QsQ0FBQztZQUNELElBQUksY0FBYyxHQUFRLENBQ3hCLFVBQVUsQ0FDUixJQUFJLENBQUMsZUFBZSxDQUNsQiw2QkFBNkIsQ0FDOUIsQ0FDRixHQUFHLFFBQVEsQ0FDYixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNiLElBQUksWUFBWSxHQUNkLFVBQVUsQ0FDUixDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7aUJBQ2xCLFFBQVEsRUFBRTtpQkFDVixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ2pCLEdBQUcsRUFBRTtnQkFDSixDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDbEMsQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2QyxJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixZQUFZLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN0QyxFQUNELENBQUM7Z0JBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsMEJBQTBCLENBQzNCLEdBQUcsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QyxDQUFDO1lBQ0QsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDdEMsRUFDRCxDQUFDO2dCQUNELElBQUksQ0FBQyxlQUFlLENBQ2xCLDZCQUE2QixDQUM5QjtvQkFDQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUk7d0JBQzlDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSTt3QkFDOUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJO3dCQUM1QyxDQUFDLENBQUMsWUFBWTs2QkFDVCxRQUFRLEVBQUU7NkJBQ1YsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs2QkFDYixNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNkLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlDLENBQUM7UUFDSCxDQUFDO2FBQU0sSUFDTCxJQUFJLENBQUMsZUFBZSxDQUNsQiw0QkFBNEIsQ0FDN0IsS0FBSyxJQUFJO1lBQ1YsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQ2xCLDBCQUEwQixDQUMzQixDQUNGO1lBQ0QsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQ2xCLDZCQUE2QixDQUM5QixDQUNGLEVBQ0QsQ0FBQztZQUNELElBQUksY0FBYyxHQUNoQixVQUFVLENBQ1IsVUFBVSxDQUNSLElBQUksQ0FBQyxlQUFlLENBQ2xCLDBCQUEwQixDQUMzQixDQUNGLENBQUMsUUFBUSxFQUFFO2dCQUNWLEdBQUc7Z0JBQ0gsVUFBVSxDQUNSLElBQUksQ0FBQyxlQUFlLENBQ2xCLDZCQUE2QixDQUM5QixDQUNGLENBQUMsUUFBUSxFQUFFLENBQ2YsR0FBRyxFQUFFLENBQUM7WUFDVCxJQUFJLFVBQVUsR0FBUSxDQUNwQixVQUFVLENBQUMsY0FBYyxDQUFDLEdBQUcsUUFBUSxDQUN0QyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNiLElBQUksQ0FBQyxlQUFlLENBQ2xCLDZCQUE2QixDQUM5QixHQUFHLFVBQVUsQ0FBQztRQUNqQixDQUFDO1FBQ0QsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVILGNBQWMsQ0FBQyxTQUFjO1FBQzNCLE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQztRQUN6QixJQUFJLENBQUMsaUJBQWlCLElBQUksaUJBQWlCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pELE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUFnQixDQUFDO1FBRXBELE1BQU0sZUFBZSxHQUFRLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUvRCxpRUFBaUU7UUFDakUscUJBQXFCLENBQUMsR0FBRyxFQUFFO1lBQ3pCLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQ3BELE1BQU0sYUFBYSxHQUNqQixlQUFlLEtBQUssTUFBTTtnQkFDeEIsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtnQkFDWixDQUFDLENBQUUsZUFBK0IsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBRS9ELE1BQU0sYUFBYSxHQUNqQixlQUFlLEtBQUssTUFBTTtnQkFDeEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLElBQUksUUFBUSxDQUFDLGVBQWUsQ0FBQyxTQUFTLElBQUksQ0FBQztnQkFDL0QsQ0FBQyxDQUFFLGVBQStCLENBQUMsU0FBUyxDQUFDO1lBRWpELE1BQU0sY0FBYyxHQUNsQixXQUFXLENBQUMsR0FBRyxHQUFHLGFBQWEsQ0FBQyxHQUFHLEdBQUcsYUFBYSxHQUFHLFlBQVksQ0FBQztZQUVyRSxJQUFJLGVBQWUsS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDL0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDL0QsQ0FBQztpQkFBTSxDQUFDO2dCQUNMLGVBQStCLENBQUMsUUFBUSxDQUFDO29CQUN4QyxHQUFHLEVBQUUsY0FBYztvQkFDbkIsUUFBUSxFQUFFLFFBQVE7aUJBQ25CLENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDdkMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLHNCQUFzQixDQUFDLENBQUM7WUFFMUQsd0NBQXdDO1lBQ3hDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDdkMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRVQsdUVBQXVFO1lBQ3ZFLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxLQUFXLEVBQUUsRUFBRTtnQkFDekMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztnQkFDakQsaURBQWlEO2dCQUNqRCxPQUFPLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLGtCQUFrQixDQUFDLENBQUM7Z0JBQ3pELE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztnQkFDMUQsT0FBTyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDL0QsT0FBTyxDQUFDLG1CQUFtQixDQUFDLGVBQWUsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO2dCQUVqRSw0REFBNEQ7Z0JBQzVELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2dCQUNwRSxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsd0JBQXdCLENBQUMsQ0FBQztnQkFDMUUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO29CQUNqQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUM7b0JBQ3hELEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztnQkFDekQsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO29CQUN2QyxRQUFRLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUM7b0JBQzNELFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztnQkFDNUQsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUM7WUFFRixtQ0FBbUM7WUFDbkMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBRXRELGlEQUFpRDtZQUNqRCxPQUFPLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUM7WUFFdkQsNEVBQTRFO1lBQzVFLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFNUQsOEJBQThCO1lBQzlCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUU5RCxvRUFBb0U7WUFDcEUsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDcEUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO2dCQUNqQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUM7Z0JBQ3JELEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUN0RCxDQUFDLENBQUMsQ0FBQztZQUVILDBEQUEwRDtZQUMxRCxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUMxRSxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQ3ZDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztnQkFDeEQsUUFBUSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3pELENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsSUFBd0I7UUFDbEQsSUFBSSxNQUFNLEdBQUcsSUFBSSxFQUFFLGFBQWEsQ0FBQztRQUNqQyxPQUFPLE1BQU0sRUFBRSxDQUFDO1lBQ2QsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUM1RCxJQUFJLFNBQVMsS0FBSyxNQUFNLElBQUksU0FBUyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNuRCxPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDO1lBQ0QsTUFBTSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7UUFDaEMsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7d0dBcG5HVSx3QkFBd0I7NEZBQXhCLHdCQUF3Qix3eUNDeENyQywydFdBNE5NLHcyQ0RyTUYsWUFBWSw2VkFDWixXQUFXLGd4QkFDWCxtQkFBbUIsK0JBQ25CLGdCQUFnQiwySEFDaEIsY0FBYywySEFDZCxpQkFBaUIsOEhBQ2pCLGVBQWUsa0pBQ2YsWUFBWSxxS0FDWixlQUFlLDhNQUNmLHVCQUF1Qiw2SUFDdkIsZ0JBQWdCLCtpQ0FDaEIsZUFBZSwyRUFDZixvQkFBb0I7OzRGQUtYLHdCQUF3QjtrQkF0QnBDLFNBQVM7K0JBQ0Usc0JBQXNCLGNBQ3BCLElBQUksV0FFUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2QsaUJBQWlCO3dCQUNqQixlQUFlO3dCQUNmLFlBQVk7d0JBQ1osZUFBZTt3QkFDZix1QkFBdUI7d0JBQ3ZCLGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixvQkFBb0I7cUJBQ3JCO3VHQUtTLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFFRSxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBUXFCLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdvb2dsZU1hcHNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9nb29nbGUtbWFwcyc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkluaXQsIFZpZXdDaGlsZCwgTmdab25lLCBBZnRlclZpZXdJbml0LCBpbnB1dCwgU2ltcGxlQ2hhbmdlcywgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBxdWVzdGlvbnNSZXNwb25zZSBmcm9tICcuL3F1ZXN0aW9ucy5qc29uJ1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVGV4dGJveENvbXBvbmVudCB9IGZyb20gJy4uL3RleHRib3gvdGV4dGJveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmFkaW9Db21wb25lbnQgfSBmcm9tICcuLi9yYWRpby9yYWRpby5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuLi9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vc2VsZWN0L3NlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRG9iQ29tcG9uZW50IH0gZnJvbSAnLi4vZG9iL2RvYi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVXBsb2FkQ29tcG9uZW50IH0gZnJvbSAnLi4vdXBsb2FkL3VwbG9hZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTXVsdGlwbGVTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi9tdWx0aXBsZS1zZWxlY3QvbXVsdGlwbGUtc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBIckxpbmVDb21wb25lbnQgfSBmcm9tICcuLi9oci1saW5lL2hyLWxpbmUuY29tcG9uZW50JztcbmltcG9ydCB7IE1hc3RlckNvbnRyb2xTZXJ2aWNlIH0gZnJvbSAnLi4vbWFzdGVyLWNvbnRyb2wuc2VydmljZSc7XG5pbXBvcnQgeyBNYXN0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vbWFzdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlsZVByZXZpZXdDb21wb25lbnQgfSBmcm9tICcuLi9maWxlLXByZXZpZXcvZmlsZS1wcmV2aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1tZWRpYWwtcXVlc3Rpb25zJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgLy8gY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBUZXh0Ym94Q29tcG9uZW50LFxuICAgIFJhZGlvQ29tcG9uZW50LFxuICAgIENoZWNrYm94Q29tcG9uZW50LFxuICAgIFNlbGVjdENvbXBvbmVudCxcbiAgICBEb2JDb21wb25lbnQsXG4gICAgVXBsb2FkQ29tcG9uZW50LFxuICAgIE11bHRpcGxlU2VsZWN0Q29tcG9uZW50LFxuICAgIEdvb2dsZU1hcHNNb2R1bGUsXG4gICAgSHJMaW5lQ29tcG9uZW50LFxuICAgIEZpbGVQcmV2aWV3Q29tcG9uZW50XG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9tZWRpYWwtcXVlc3Rpb25zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL21lZGlhbC1xdWVzdGlvbnMuY29tcG9uZW50LmNzcycsXG59KVxuZXhwb3J0IGNsYXNzIE1lZGlhbFF1ZXN0aW9uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBPdXRwdXQoKSBxdWVzdGlvbnNWYWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBjbHVzdGVySWQgOiBhbnkgPSBpbnB1dDxhbnk+KCk7IC8vIG5vbiBtYW5kYXRvcnkgY2x1c3RlciBpZFxuICBASW5wdXQoKSB0cmlnZ2VyVmFsaWRhdGlvbj86IFN1YmplY3Q8dm9pZD47XG4gIG1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UgPSBpbnB1dDxhbnk+KCk7XG4gIHBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UgOiBhbnkgPSBpbnB1dDxhbnk+KCk7XG4gIGRlZmF1bHRWYWx1ZXMgOiBhbnkgPSBpbnB1dDxhbnk+KCk7XG4gIHBlcnNvblR5cGU6IGFueSA9IGlucHV0PGFueT4oKTtcbiAgcGVyc29uVXdJZCA6IGFueSA9IFwiXCI7XG4gIGlzTWVkaWNhbFN1YlF1ZXN0aW9uc0F2YWlsYWJsZSA6IGFueSA9IG51bGw7XG4gIG1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZSA6IGFueSA9IHt9O1xuICBAVmlld0NoaWxkKCdhZGRyZXNzSW5wdXQnKSBhZGRyZXNzSW5wdXQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBwcml2YXRlIGF1dG9jb21wbGV0ZSE6IGdvb2dsZS5tYXBzLnBsYWNlcy5BdXRvY29tcGxldGU7XG4gIHNhdmVRdWVzdGlvblJlcXVlc3RMYTogYW55ID0gW107XG4gIHNhdmVRdWVzdGlvblJlcXVlc3RQaDogYW55ID0gW107XG4gIGZpZWxkOiBhbnkgPSBpbnB1dC5yZXF1aXJlZDxhbnk+KCk7XG4gIHF1ZXN0aW9uTGlzdDogYW55ID0gW107XG4gIGN1cnJlbnRDb29yZGluYXRlczogYW55ID0ge307XG4gIHBlcnNvblV3UmVzcG9uc2VPYmo6IGFueSA9IFtdO1xuICBjZW50ZXI6IGdvb2dsZS5tYXBzLkxhdExuZ0xpdGVyYWwgPSB7IGxhdDogNDAuNzMwNjEsIGxuZzogLTczLjkzNTI0MiB9O1xuICBsYXRpdHVkZTogYW55O1xuICBsb25naXR1ZGU6IGFueTtcbiAgem9vbTogYW55O1xuICBtYXJrZXI6IGFueSA9IHt9O1xuXG5cbiAgcGVyc29uVXdBbnN3ZXJzOiBhbnkgPSB7XG4gICAgbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQ6ICdGRUVUJyxcbiAgICBtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQ6IDAsXG4gICAgbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0OiAwLFxuICAgIG1lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dDogMCxcbiAgfTtcbiAgbWVkUXVlc3Rpb25PYmo6IGFueSA9IHt9O1xuICBsaXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveDogYW55ID0gW107XG4gIG1lZGljYWxRdWVzdGlvbnNGZWV0TGlzdDogYW55ID0gW107XG4gIG1lZGljYWxRdWVzdGlvbnNJbmNoZXNMaXN0OiBhbnkgPSBbXTtcbiAgcXVlc3Rpb25IZWFkZXI6IGFueSA9IFsnZWlhIGRldGFpbHMnLCAnYWJoYSBkZXRhaWxzJywgJ3BlcCBkZXRhaWxzJ107XG4gIG1lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0VHlwZXM6IGFueSA9IFtcbiAgICB7XG4gICAgICBsYWJlbDogJ0NtJyxcbiAgICAgIHZhbHVlOiAnQ00nLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6ICdGZWV0JyxcbiAgICAgIHZhbHVlOiAnRkVFVCcsXG4gICAgfSxcbiAgXTtcbiAgc2hvd0Ryb3Bkb3duID0gZmFsc2U7XG4gIGFkZHJlc3NTdWdnZXN0aW9uczogYW55W10gPSBbXTtcbiAgaG92ZXJlZEluZGV4ID0gLTE7XG4gIHNlYXJjaFRpbWVvdXQ6IGFueTtcbiAgaG9yaXpvbnRhbExpbmVPYmogOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgICAgIFwiY29udHJvbFN0eWxlXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY29udHJvbFR5cGVcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYm9yZGVyQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYm9yZGVyV2lkdGhcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYm9yZGVyUmFkaXVzXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvbnRTaXplXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvbnRXZWlnaHRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9udEZhbWlseVwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJiYWNrZ3JvdW5kXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNhcmV0Q29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibnVkZ2VEaXNwbGF5SW1hZ2VcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZHJvcGRvd25PcHRpb25CZ0NvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRyb3Bkb3duT3B0aW9uQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZHJvcGRvd25PcHRpb25Gb250V2VpZ2h0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIndpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzQm9yZGVyV2lkdGhcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNCb3JkZXJDb2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb2N1c0JhY2tncm91bmRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNDb2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb2N1c0Ryb3Bkb3duT3B0aW9uQmdDb2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb2N1c0Ryb3Bkb3duT3B0aW9uQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkZvbnRXZWlnaHRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlckxlZnRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlclJhZGl1c1wiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJob3ZlckJvcmRlckNvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImhvdmVyQm9yZGVyV2lkdGhcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaG92ZXJDb2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXNhYmxlQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGlzYWJsZUJhY2tncm91bmRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZXJyb3JCb3JkZXJDb2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJlcnJvckJvcmRlcldpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImVycm9yQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY3JlYXRlZERhdGVcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicGFkZGluZ1wiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXJnaW5cIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaXNNYXN0ZXJDc3NcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY29udHJvbE1ldGFJZFwiOiBcIkxJX0NPTV9HRU5fQ1RSTF9ockxpbmVfaHJMaW5lX1YxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJvcmRlclN0eWxlXCI6IFwic29saWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaGVpZ2h0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1pbkhlaWdodFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXhIZWlnaHRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWluV2lkdGhcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWF4V2lkdGhcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NzQ2xhc3NcIjogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcImZpZWxkTmFtZVwiOiBcImhyTGluZVwiLFxuICAgICAgICAgICAgICAgICAgICBcImxhYmVsXCI6IFwic29saWQgbGluZVwiLFxuICAgICAgICAgICAgICAgICAgICBcInBsYWNlSG9sZGVyXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIFwibWV0YUlkXCI6IFwiTElfQ09NX0dFTl9DVFJMX2hyTGluZV9ockxpbmVfVjFcIixcbiAgICAgICAgICAgICAgICAgICAgXCJpc1Zpc2libGVcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJpc0Rpc2FibGVcIjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIFwiZGVmYXVsdFZhbHVlXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIFwidmFsaWRhdG9yc1wiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImlzUmVxdWlyZWRcIjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInJlcXVpcmVkTWVzc2FnZVwiOiBcIlRoaXMgZmllbGQgY2Fubm90IGJlIGVtcHR5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1pbkxlbmd0aFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtaW5MZW5ndGhNZXNzYWdlXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1heExlbmd0aFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXhMZW5ndGhNZXNzYWdlXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInBhdHRlcm5cIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicGF0dGVybk1lc3NhZ2VcIjogXCJcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcIm9wdGlvbnNcIjogW10sXG4gICAgICAgICAgICAgICAgICAgIFwiY3NzQ2xhc3NcIjogXCJjb2wtMTJcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ2YWx1ZVwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBcInN0eWxlXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIFwiaW1hZ2VVcmxcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgXCJjb25maWdEYXRhXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaHJUZXh0XCI6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXCJtZXRhRGF0YU9ialwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBcImlzU2hvd0xhYmVsXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwiaXNNYXN0ZXJDb250cm9sXCI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBcImNvbnRyb2xUeXBlXCI6IFwiaHJMaW5lXCJcbiAgICAgICAgICAgICAgICB9O1xuICBwcmV2aWV3RmlsZTogRmlsZSB8IG51bGwgPSBudWxsO1xuXG4gIC8vIFZhbGlkYXRpb24gc3RhdGUgdHJhY2tpbmdcbiAgZmllbGRFcnJvcnM6IHsgW2tleTogc3RyaW5nXTogeyBbZXJyb3JUeXBlOiBzdHJpbmddOiBib29sZWFuIH0gfSA9IHt9O1xuICBmaWVsZFRvdWNoZWQ6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBuZ1pvbmU6IE5nWm9uZSwgcHVibGljIG1hc3RlclNlcnZpY2UgOiBNYXN0ZXJTZXJ2aWNlKSB7XG4gICAgY29uc29sZS5sb2coJ21lZGlhbFF1ZXN0aW9uUmVzcG9uc2VlZWVlZScsIHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpKTtcbiAgICBjb25zb2xlLmxvZygncGVyc29udHlwZScsIHRoaXMucGVyc29uVHlwZSgpKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLnRyaWdnZXJWYWxpZGF0aW9uKSB7XG4gICAgdGhpcy50cmlnZ2VyVmFsaWRhdGlvbi5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy52YWxpZGF0ZU1lZGljYWxRdWVzdGlvbnModHJ1ZSk7XG4gICAgfSk7XG4gIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoXG4gICAgICAoKGNoYW5nZXNbJ21lZGlhbFF1ZXN0aW9uUmVzcG9uc2UnXSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShjaGFuZ2VzWydtZWRpYWxRdWVzdGlvblJlc3BvbnNlJ10uY3VycmVudFZhbHVlKSkgfHxcbiAgICAgICgoY2hhbmdlc1sncHJlcGFyZVBlcnNvblV3UXVlc3Rpb25zT2JqJ10pICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoY2hhbmdlc1sncHJlcGFyZVBlcnNvblV3UXVlc3Rpb25zT2JqJ10uY3VycmVudFZhbHVlKSlcbiAgICApIHtcbiAgICAgIGlmICgnZ2VvbG9jYXRpb24nIGluIG5hdmlnYXRvcikge1xuICAgICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKChwb3NpdGlvbikgPT4ge1xuICAgICAgICAgIHRoaXMubGF0aXR1ZGUgPSBwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGU7XG4gICAgICAgICAgdGhpcy5sb25naXR1ZGUgPSBwb3NpdGlvbi5jb29yZHMubG9uZ2l0dWRlO1xuICAgICAgICAgIHRoaXMuem9vbSA9IDE1O1xuICAgICAgICAgIHRoaXMuY3VycmVudENvb3JkaW5hdGVzID0ge1xuICAgICAgICAgICAgbGF0OiB0aGlzLmxhdGl0dWRlLFxuICAgICAgICAgICAgbG5nOiB0aGlzLmxvbmdpdHVkZSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuY2VudGVyID0geyAuLi50aGlzLmN1cnJlbnRDb29yZGluYXRlcyB9O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMucHJlcGFyZVBlcnNvblV3UXVlc3Rpb25zT2JqKCk7XG4gICAgfVxuXG4gICAgaWYoKChjaGFuZ2VzWydkZWZhdWx0VmFsdWVzJ10pICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoY2hhbmdlc1snZGVmYXVsdFZhbHVlcyddLmN1cnJlbnRWYWx1ZSkpKSB7XG4gICAgICBpZih0eXBlb2YgdGhpcy5kZWZhdWx0VmFsdWVzKCkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzID0gey4uLnRoaXMucGVyc29uVXdBbnN3ZXJzLCAuLi50aGlzLmRlZmF1bHRWYWx1ZXMoKX07XG4gICAgICAgIHRoaXMucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsaXplQXV0b2NvbXBsZXRlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVIZWlnaHRRdWVzdGlvbklkcygpOiB2b2lkIHtcbiAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J10gPSAnJztcbiAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10gPSAnJztcbiAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10gPSAnJztcblxuICAgIC8vIHRoaXMucXVlc3Rpb25MaXN0LmZvckVhY2goKHNlY3Rpb246IGFueSkgPT4ge1xuICAgIC8vICAgaWYgKHNlY3Rpb24ucXVlc3Rpb25zICYmIEFycmF5LmlzQXJyYXkoc2VjdGlvbi5xdWVzdGlvbnMpKSB7XG4gICAgLy8gICAgIHNlY3Rpb24ucXVlc3Rpb25zLmZvckVhY2goKHF1ZXN0aW9uOiBhbnkpID0+IHtcbiAgICAvLyAgICAgICBzd2l0Y2ggKHF1ZXN0aW9uLmNhbW11bmRhUXVlc3Rpb25Db2RlKSB7XG4gICAgLy8gICAgICAgICBjYXNlICdRSFQnOlxuICAgIC8vICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J10gPSBxdWVzdGlvbi5xdWVzdGlvbklkO1xuICAgIC8vICAgICAgICAgICBicmVhaztcbiAgICAvLyAgICAgICAgIGNhc2UgJ1FIVEYnOlxuICAgIC8vICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10gPSBxdWVzdGlvbi5xdWVzdGlvbklkO1xuICAgIC8vICAgICAgICAgICBicmVhaztcbiAgICAvLyAgICAgICAgIGNhc2UgJ1FIVEknOlxuICAgIC8vICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10gPSBxdWVzdGlvbi5xdWVzdGlvbklkO1xuICAgIC8vICAgICAgICAgICBicmVhaztcbiAgICAvLyAgICAgICB9XG4gICAgLy8gICAgIH0pO1xuICAgIC8vICAgfVxuICAgIC8vIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplQXV0b2NvbXBsZXRlKCk6IHZvaWQge1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlID0gbmV3IGdvb2dsZS5tYXBzLnBsYWNlcy5BdXRvY29tcGxldGUoXG4gICAgICB0aGlzLmFkZHJlc3NJbnB1dD8ubmF0aXZlRWxlbWVudCxcbiAgICAgIHtcbiAgICAgICAgdHlwZXM6IFsnYWRkcmVzcyddLFxuICAgICAgICBjb21wb25lbnRSZXN0cmljdGlvbnM6IHsgY291bnRyeTogJ0lOJyB9LFxuICAgICAgICBmaWVsZHM6IFsncGxhY2VfaWQnLCAnZ2VvbWV0cnknLCAnbmFtZScsICdmb3JtYXR0ZWRfYWRkcmVzcyddLFxuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLmF1dG9jb21wbGV0ZS5hZGRMaXN0ZW5lcigncGxhY2VfY2hhbmdlZCcsICgpID0+IHtcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgIHRoaXMub25QbGFjZVNlbGVjdGVkKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb25QbGFjZVNlbGVjdGVkKCk6IHZvaWQge1xuICAgIGNvbnN0IHBsYWNlID0gdGhpcy5hdXRvY29tcGxldGUuZ2V0UGxhY2UoKTtcblxuICAgIGlmICghcGxhY2UuZ2VvbWV0cnkgfHwgIXBsYWNlLmdlb21ldHJ5LmxvY2F0aW9uKSB7XG4gICAgICBjb25zb2xlLmxvZygnTm8gZGV0YWlscyBhdmFpbGFibGUgZm9yIGlucHV0OiAnLCBwbGFjZS5uYW1lKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsb2NhdGlvbiA9IHBsYWNlLmdlb21ldHJ5LmxvY2F0aW9uO1xuICAgIHRoaXMuY2VudGVyID0ge1xuICAgICAgbGF0OiBsb2NhdGlvbi5sYXQoKSxcbiAgICAgIGxuZzogbG9jYXRpb24ubG5nKCksXG4gICAgfTtcbiAgICB0aGlzLmN1cnJlbnRDb29yZGluYXRlcyA9IHRoaXMuY2VudGVyO1xuXG4gICAgaWYgKHBsYWNlLmdlb21ldHJ5LnZpZXdwb3J0KSB7XG4gICAgICB0aGlzLnpvb20gPSAxNTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy56b29tID0gMTM7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ1NlbGVjdGVkIHBsYWNlOicsIHtcbiAgICAgIG5hbWU6IHBsYWNlLm5hbWUsXG4gICAgICBhZGRyZXNzOiBwbGFjZS5mb3JtYXR0ZWRfYWRkcmVzcyxcbiAgICAgIGNvb3JkaW5hdGVzOiB0aGlzLmNlbnRlcixcbiAgICB9KTtcblxuICAgIHRoaXMuc3RvcmVTZWxlY3RlZEFkZHJlc3MocGxhY2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9yZVNlbGVjdGVkQWRkcmVzcyhwbGFjZTogZ29vZ2xlLm1hcHMucGxhY2VzLlBsYWNlUmVzdWx0KTogdm9pZCB7XG4gICAgY29uc3QgYWRkcmVzc0RhdGEgPSB7XG4gICAgICBwbGFjZUlkOiBwbGFjZS5wbGFjZV9pZCxcbiAgICAgIG5hbWU6IHBsYWNlLm5hbWUsXG4gICAgICBmb3JtYXR0ZWRBZGRyZXNzOiBwbGFjZS5mb3JtYXR0ZWRfYWRkcmVzcyxcbiAgICAgIGNvb3JkaW5hdGVzOiB0aGlzLmNlbnRlcixcbiAgICB9O1xuICB9XG5cbiAgc2VhcmNoQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBnZW9jb2RlciA9IG5ldyBnb29nbGUubWFwcy5HZW9jb2RlcigpO1xuXG4gICAgZ2VvY29kZXIuZ2VvY29kZSh7IGFkZHJlc3M6IGFkZHJlc3MgfSwgKHJlc3VsdHMsIHN0YXR1cykgPT4ge1xuICAgICAgaWYgKHN0YXR1cyA9PT0gJ09LJyAmJiByZXN1bHRzICYmIHJlc3VsdHNbMF0pIHtcbiAgICAgICAgY29uc3QgbG9jYXRpb24gPSByZXN1bHRzWzBdLmdlb21ldHJ5LmxvY2F0aW9uO1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY2VudGVyID0ge1xuICAgICAgICAgICAgbGF0OiBsb2NhdGlvbi5sYXQoKSxcbiAgICAgICAgICAgIGxuZzogbG9jYXRpb24ubG5nKCksXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRDb29yZGluYXRlcyA9IHRoaXMuY2VudGVyO1xuICAgICAgICAgIHRoaXMuem9vbSA9IDE1O1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICdHZW9jb2RlIHdhcyBub3Qgc3VjY2Vzc2Z1bCBmb3IgdGhlIGZvbGxvd2luZyByZWFzb246ICcgKyBzdGF0dXNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uQWRkcmVzc0lucHV0S2V5dXAoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHF1ZXJ5ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuXG4gICAgLy8gQ2xlYXIgcHJldmlvdXMgdGltZW91dFxuICAgIGlmICh0aGlzLnNlYXJjaFRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNlYXJjaFRpbWVvdXQpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBhcnJvdyBrZXkgbmF2aWdhdGlvblxuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICB0aGlzLmhvdmVyZWRJbmRleCA9IE1hdGgubWluKFxuICAgICAgICB0aGlzLmhvdmVyZWRJbmRleCArIDEsXG4gICAgICAgIHRoaXMuYWRkcmVzc1N1Z2dlc3Rpb25zLmxlbmd0aCAtIDFcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgdGhpcy5ob3ZlcmVkSW5kZXggPSBNYXRoLm1heCh0aGlzLmhvdmVyZWRJbmRleCAtIDEsIC0xKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmhvdmVyZWRJbmRleCA+PSAwICYmXG4gICAgICAgIHRoaXMuYWRkcmVzc1N1Z2dlc3Rpb25zW3RoaXMuaG92ZXJlZEluZGV4XVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0QWRkcmVzcyh0aGlzLmFkZHJlc3NTdWdnZXN0aW9uc1t0aGlzLmhvdmVyZWRJbmRleF0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgdGhpcy5zaG93RHJvcGRvd24gPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocXVlcnkubGVuZ3RoIDwgMikge1xuICAgICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnMgPSBbXTtcbiAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZWFyY2hUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNlYXJjaEFkZHJlc3NlcyhxdWVyeSk7XG4gICAgfSwgMzAwKTtcbiAgfVxuXG4gIHNlYXJjaEFkZHJlc3NlcyhxdWVyeTogc3RyaW5nKSB7XG4gICAgLy8gUmVwbGFjZSB0aGlzIHdpdGggeW91ciBhY3R1YWwgYWRkcmVzcyBzZWFyY2ggQVBJIGNhbGxcbiAgICAvLyBGb3IgZXhhbXBsZSwgdXNpbmcgR29vZ2xlIFBsYWNlcyBBUEk6XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gbmV3IGdvb2dsZS5tYXBzLnBsYWNlcy5BdXRvY29tcGxldGVTZXJ2aWNlKCk7XG4gICAgc2VydmljZS5nZXRQbGFjZVByZWRpY3Rpb25zKFxuICAgICAge1xuICAgICAgICBpbnB1dDogcXVlcnksXG4gICAgICAgIHR5cGVzOiBbJ2FkZHJlc3MnXSxcbiAgICAgIH0sXG4gICAgICAocHJlZGljdGlvbnMsIHN0YXR1cykgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgc3RhdHVzID09PSBnb29nbGUubWFwcy5wbGFjZXMuUGxhY2VzU2VydmljZVN0YXR1cy5PSyAmJlxuICAgICAgICAgIHByZWRpY3Rpb25zXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuYWRkcmVzc1N1Z2dlc3Rpb25zID0gcHJlZGljdGlvbnMubWFwKChwcmVkaWN0aW9uKSA9PiAoe1xuICAgICAgICAgICAgcGxhY2VfaWQ6IHByZWRpY3Rpb24ucGxhY2VfaWQsXG4gICAgICAgICAgICBtYWluX3RleHQ6IHByZWRpY3Rpb24uc3RydWN0dXJlZF9mb3JtYXR0aW5nLm1haW5fdGV4dCxcbiAgICAgICAgICAgIHNlY29uZGFyeV90ZXh0OiBwcmVkaWN0aW9uLnN0cnVjdHVyZWRfZm9ybWF0dGluZy5zZWNvbmRhcnlfdGV4dCxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBwcmVkaWN0aW9uLmRlc2NyaXB0aW9uLFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgICB0aGlzLnNob3dEcm9wZG93biA9IHRydWU7XG4gICAgICAgICAgdGhpcy5ob3ZlcmVkSW5kZXggPSAtMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmFkZHJlc3NTdWdnZXN0aW9ucyA9IFtdO1xuICAgICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgc2VsZWN0QWRkcmVzcyhzdWdnZXN0aW9uOiBhbnkpIHtcbiAgICBjb25zdCBhZGRyZXNzSW5wdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJyNhZGRyZXNzSW5wdXQnXG4gICAgKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGlmIChhZGRyZXNzSW5wdXQpIHtcbiAgICAgIGFkZHJlc3NJbnB1dC52YWx1ZSA9IHN1Z2dlc3Rpb24uZGVzY3JpcHRpb247XG4gICAgfVxuXG4gICAgY29uc3Qgc2VydmljZSA9IG5ldyBnb29nbGUubWFwcy5wbGFjZXMuUGxhY2VzU2VydmljZShcbiAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgKTtcbiAgICBzZXJ2aWNlLmdldERldGFpbHMoXG4gICAgICB7XG4gICAgICAgIHBsYWNlSWQ6IHN1Z2dlc3Rpb24ucGxhY2VfaWQsXG4gICAgICAgIGZpZWxkczogWydnZW9tZXRyeScsICdmb3JtYXR0ZWRfYWRkcmVzcyddLFxuICAgICAgfSxcbiAgICAgIChwbGFjZSwgc3RhdHVzKSA9PiB7XG4gICAgICAgIGlmIChzdGF0dXMgPT09IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZXNTZXJ2aWNlU3RhdHVzLk9LICYmIHBsYWNlKSB7XG4gICAgICAgICAgY29uc3QgbGF0ID0gcGxhY2UuZ2VvbWV0cnk/LmxvY2F0aW9uPy5sYXQoKTtcbiAgICAgICAgICBjb25zdCBsbmcgPSBwbGFjZS5nZW9tZXRyeT8ubG9jYXRpb24/LmxuZygpO1xuXG4gICAgICAgICAgaWYgKGxhdCAhPT0gdW5kZWZpbmVkICYmIGxuZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmxvbmdpdHVkZSA9IGxuZztcbiAgICAgICAgICAgIHRoaXMubGF0aXR1ZGUgPSBsYXQ7XG5cbiAgICAgICAgICAgIHRoaXMuY2VudGVyID0geyBsYXQsIGxuZyB9O1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q29vcmRpbmF0ZXMgPSB0aGlzLmNlbnRlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5zaG93RHJvcGRvd24gPSBmYWxzZTtcbiAgICB0aGlzLmFkZHJlc3NTdWdnZXN0aW9ucyA9IFtdO1xuICB9XG5cbiAgb25JbnB1dEJsdXIoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNob3dEcm9wZG93biA9IGZhbHNlO1xuICAgIH0sIDIwMCk7XG4gIH1cblxuICBmaW5kTWVkaWNhbFF1ZXN0aW9uc0luT3BlblF1b3RlKGFycmF5T2ZPYmogOiBhbnkpIHtcbiAgICBpZihhcnJheU9mT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnTWVkaUNuZHRuJyB8fCBhcnJheU9mT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAgJ0xpZmVNZWRpQ25kdG4nKSB7XG4gICAgICB0aGlzLmlzTWVkaWNhbFN1YlF1ZXN0aW9uc0F2YWlsYWJsZSA9IGFycmF5T2ZPYmo7XG4gICAgfVxuICAgIGlmKHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLmlzTWVkaWNhbFN1YlF1ZXN0aW9uc0F2YWlsYWJsZSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShhcnJheU9mT2JqWydwZXJzb25VV0FjdGl2aXR5UmVzcG9uc2VFbnRpdHknXSkpIHtcbiAgICAgIGFycmF5T2ZPYmpbJ3BlcnNvblVXQWN0aXZpdHlSZXNwb25zZUVudGl0eSddLmZvckVhY2goKHNpbmdsZVN1YkFycmF5IDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZmluZE1lZGljYWxRdWVzdGlvbnNJbk9wZW5RdW90ZShzaW5nbGVTdWJBcnJheSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBtYXBBbnN3ZXJzRm9yT3BlblF1b3RlKCkge1xuICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKCkpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF0pICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF0/LnF1ZXN0aW9uTGlzdCkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXT8ucXVlc3Rpb25MaXN0WzBdPy5wZXJzb25VV2RldGFpbHNMaXN0KSkge1xuICAgICAgbGV0IGFycmF5T2ZLZXlzIDogYW55ID0gT2JqZWN0LmtleXModGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF0/LnF1ZXN0aW9uTGlzdFswXT8ucGVyc29uVVdkZXRhaWxzTGlzdCk7XG4gICAgICBhcnJheU9mS2V5cy5mb3JFYWNoKChzaW5nbGVLZXkgOiBhbnksIHNpbmdsZUtleUxlbmd0aCA6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXVsncXVlc3Rpb25MaXN0J11bMF1bJ3BlcnNvblVXZGV0YWlsc0xpc3QnXVtzaW5nbGVLZXldKSkge1xuICAgICAgICAgIHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdWydxdWVzdGlvbkxpc3QnXVswXVsncGVyc29uVVdkZXRhaWxzTGlzdCddW3NpbmdsZUtleV0uZm9yRWFjaCgoc2luZ2xlQW5zd2VyT2JqIDogYW55LCBzaW5nbGVBbnN3ZXJPYmpMZW5ndGggOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUGVyc29uVXdBbnN3ZXJzKHNpbmdsZUFuc3dlck9iaik7XG4gICAgICAgICAgICBpZihzaW5nbGVLZXlMZW5ndGggPT09IChhcnJheU9mS2V5cy5sZW5ndGggLSAxKSAmJiBzaW5nbGVBbnN3ZXJPYmpMZW5ndGggPT09ICh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXVsncXVlc3Rpb25MaXN0J11bMF1bJ3BlcnNvblVXZGV0YWlsc0xpc3QnXVtzaW5nbGVLZXldLmxlbmd0aCAtIDEpKSB7XG4gICAgICAgICAgICAgIHRoaXMucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB9XG4gIH1cblxuICBwcmVwYXJlUGVyc29uVXdRdWVzdGlvbnNPYmooKSB7XG4gICAgdGhpcy5xdWVzdGlvbkxpc3QgPSBbXTtcbiAgICBsZXQgZGF0YTogYW55ID0gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKCk7XG4gICAgdGhpcy5saXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveCA9IFtdO1xuXG4gICAgbGV0IGlzRGlzYWJsZSA6IGFueSA9IGZhbHNlO1xuICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaXNEaXNhYmxlTWVkaWNhbFF1ZXN0aW9ucycpKSApIHtcbiAgICAgIGxldCBpc0Rpc2FibGVNZWRpY2FsUXVlc3Rpb25zaW5VaSAgOiBhbnkgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdpc0Rpc2FibGVNZWRpY2FsUXVlc3Rpb25zJyk7XG4gICAgICBpc0Rpc2FibGUgPSBKU09OLnBhcnNlKGlzRGlzYWJsZU1lZGljYWxRdWVzdGlvbnNpblVpKSA/IHRydWUgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddKSkge1xuICAgICAgbGV0IHBlcnNvblV3SWRBcnJheTogYW55ID0gW107XG4gICAgICBkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uT2JqOiBhbnkpID0+IHtcbiAgICAgICAgcGVyc29uVXdJZEFycmF5LnB1c2goc2luZ2xlUXVlc3Rpb25PYmpbJ3BlcnNvblVXSWQnXSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKFxuICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGRhdGEpICYmXG4gICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZGF0YVsncXVlc3Rpb25zUmVzcG9uc2UnXSlcbiAgICAgICkge1xuXG4gICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGRhdGFbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10pKSB7XG4gICAgICAgICAgbGV0IGRpc3RpbmN0U3RlcHM6IGFueSA9IFtdO1xuICAgICAgICAgIGRhdGFbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZm9yRWFjaCgoc2luZ2xlUGVyc29uT2JqZWN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMucGVyc29uVXdJZCA9IHNpbmdsZVBlcnNvbk9iamVjdFsncGVyc29uVVdJZCddLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVQZXJzb25PYmplY3RbJ3F1ZXN0aW9uTGlzdCddKSkge1xuICAgICAgICAgICAgICBzaW5nbGVQZXJzb25PYmplY3RbJ3F1ZXN0aW9uTGlzdCddLmZvckVhY2goXG4gICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChzaW5nbGVRdWVzdGlvblsndGl0bGUnXSA9PT0gJ01lZGljYWwgRGV0YWlscycpIHtcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVGV4dCddID0gc2luZ2xlUXVlc3Rpb25bXG4gICAgICAgICAgICAgICAgICAgICAgJ3F1ZXN0aW9uVGV4dCdcbiAgICAgICAgICAgICAgICAgICAgXS5yZXBsYWNlKC9cXFxcbi9nLCAnXFxuJyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10gPVxuICAgICAgICAgICAgICAgICAgICBkYXRhWydkb21haW5WYWx1ZXMnXVtzaW5nbGVRdWVzdGlvblsnZG9tYWluTmFtZSddXTtcblxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2ZpZWxkJ10gPSB0aGlzLmdldEZpZWxkKHNpbmdsZVF1ZXN0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgaWYgKHNpbmdsZVF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUEFOJykge1xuICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsndmFsaWRhdGlvbnMnXSA9XG4gICAgICAgICAgICAgICAgICAgICAgJ3tcIlR5cGVcIjpcIkFscGhhTnVtZXJpY1wiLFwiTWluVmFsdWVcIjpcIjEwXCIsXCJNYXhWYWx1ZVwiOlwiMTBcIixcInJlZ2V4UGF0dGVyblwiOlwiL14oW2EtekEtWl0pezV9KFswLTldKXs0fShbYS16QS1aXSl7MX0/JC9cIn0nO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgLy8gaWYgKHNpbmdsZVF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnRnRjYUNudGNEZXRscycpIHtcbiAgICAgICAgICAgICAgICAgIC8vICAgc2luZ2xlUXVlc3Rpb25bJ3ZhbGlkYXRpb25zJ10gPSAne1wiY3VzdG9tVmFsaWRhdGlvblwiOlt7XCJjb3VudHJ5XCI6XCJJTlwiLFwiTWluVmFsdWVcIjpcIjEwXCIsXCJNYXhWYWx1ZVwiOlwiMTBcIixcInJlZ2V4UGF0dGVyblwiOlwiKCheWzYtOV0pezF9KFswLTldKXs5fSQpXCJ9LHtcImNvdW50cnlcIjpcIk9USEVSXCIsXCJNaW5WYWx1ZVwiOlwiNVwiLFwiTWF4VmFsdWVcIjpcIjE0XCJ9XX0nO1xuICAgICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiZcbiAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddLmZvckVhY2goXG4gICAgICAgICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmo6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5leHRRdWVzdGlvbk9iamVjdDogYW55ID0gc2luZ2xlUGVyc29uT2JqZWN0W1xuICAgICAgICAgICAgICAgICAgICAgICAgICAncXVlc3Rpb25MaXN0J1xuICAgICAgICAgICAgICAgICAgICAgICAgXS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChvYmplY3Q6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RbJ3F1ZXN0aW9uSWQnXSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqWyduZXh0UXVlc3Rpb25JZCddXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRRdWVzdGlvbk9iamVjdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRRdWVzdGlvbk9iamVjdFswXVsnYW5zd2VyZWRWYWx1ZSddID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqWydwYXJlbnRRdWVzdGlvblZhbHVlJ107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uWydkb21haW5OYW1lJ10pICYmXG4gICAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbJ2RvbWFpblZhbHVlcyddW3NpbmdsZVF1ZXN0aW9uWydkb21haW5OYW1lJ11dXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhWydkb21haW5WYWx1ZXMnXVtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5OYW1lJ11cbiAgICAgICAgICAgICAgICAgICAgICBdLmZvckVhY2goKHNpbmdsZURvbWFpblZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94LnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXVxuICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmICghZGlzdGluY3RTdGVwcy5pbmNsdWRlcyhzaW5nbGVRdWVzdGlvblsnc3RlcCddKSkge1xuICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFN0ZXBzLnB1c2goc2luZ2xlUXVlc3Rpb25bJ3N0ZXAnXSk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIHNpbmdsZVBlcnNvbk9iamVjdFsncXVlc3Rpb25MaXN0J10uZm9yRWFjaCgocXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdJTUFHRSBURVhUJykge1xuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25bJ3F1ZXN0aW9uVGV4dCddID0gcXVlc3Rpb25bXG4gICAgICAgICAgICAgICAgICAgICdxdWVzdGlvblRleHQnXG4gICAgICAgICAgICAgICAgICBdLnJlcGxhY2VBbGwoJ1xcXFxuJywgJzxicj4nKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpY2FsUXVlc3Rpb25zRmVldExpc3QgPSBxdWVzdGlvblsnZG9tYWluVmFsdWVzJ107XG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFRGJ10gPSBxdWVzdGlvbjtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVEYnXVsnZmllbGQnXVsnaXNTaG93TGFiZWwnXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhURiddWydmaWVsZCddWydjb250cm9sU3R5bGUnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbFR5cGU6ICdzZWxlY3QnLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogJyNmZmZmZmYnLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogJzE2cHgnLFxuICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiAnNDAwJyxcbiAgICAgICAgICAgICAgICAgICAgZm9udEZhbWlseTogJ011bGlzaCcsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICcjRkZGRkZGJyxcbiAgICAgICAgICAgICAgICAgICAgY2FyZXRDb2xvcjogJyNmZmJiMDAnLFxuICAgICAgICAgICAgICAgICAgICBudWRnZURpc3BsYXlJbWFnZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25CZ0NvbG9yOiAnI0ZGRkZGRicsXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiAnNDAwJyxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCYWNrZ3JvdW5kOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0NvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25CZ0NvbG9yOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQ29sb3I6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyTGVmdDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlclJhZGl1czogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxuICAgICAgICAgICAgICAgICAgICBob3ZlckJvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICBob3ZlckNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVDb2xvcjogJyNFQ0VDRUMnLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQmFja2dyb3VuZDogJyNFQ0VDRUMnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckJvcmRlckNvbG9yOiAnI0VFMDAwMCcsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlZERhdGU6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgaXNNYXN0ZXJDc3M6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xNZXRhSWQ6XG4gICAgICAgICAgICAgICAgICAgICAgJ0xJX0NPTV9HRU5fQ1RSTF9zZWxlY3RfZG93bmxvYWREb2N1bWVudHNfVjEnLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJTdHlsZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBjc3NDbGFzczogbnVsbCxcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEknKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZGljYWxRdWVzdGlvbnNJbmNoZXNMaXN0ID0gcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddO1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhUSSddID0gcXVlc3Rpb247XG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFRJJ11bJ2ZpZWxkJ11bJ2lzU2hvd0xhYmVsJ10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVEknXVsnZmllbGQnXVsnY29udHJvbFN0eWxlJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xUeXBlOiAnc2VsZWN0JyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcxNnB4JyxcbiAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogJzQwMCcsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6ICdNdWxpc2gnLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAnI0ZGRkZGRicsXG4gICAgICAgICAgICAgICAgICAgIGNhcmV0Q29sb3I6ICcjZmZiYjAwJyxcbiAgICAgICAgICAgICAgICAgICAgbnVkZ2VEaXNwbGF5SW1hZ2U6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uQmdDb2xvcjogJyNGRkZGRkYnLFxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uRm9udFdlaWdodDogJzQwMCcsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQmFja2dyb3VuZDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQmdDb2xvcjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkNvbG9yOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uRm9udFdlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlckxlZnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJSYWRpdXM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQ29sb3I6ICcjRUNFQ0VDJyxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUJhY2tncm91bmQ6ICcjRUNFQ0VDJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JCb3JkZXJDb2xvcjogJyNFRTAwMDAnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckJvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWREYXRlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGlzTWFzdGVyQ3NzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBjb250cm9sTWV0YUlkOlxuICAgICAgICAgICAgICAgICAgICAgICdMSV9DT01fR0VOX0NUUkxfc2VsZWN0X2Rvd25sb2FkRG9jdW1lbnRzX1YxJyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyU3R5bGU6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3M6IG51bGwsXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFQnKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZGljYWxRdWVzdGlvbnNJbmNoZXNMaXN0ID0gcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddO1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhUJ10gPSBxdWVzdGlvbjtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVCddWydmaWVsZCddWydpc1Nob3dMYWJlbCddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFQnXVsnZmllbGQnXVsnY29udHJvbFN0eWxlJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xUeXBlOiAnRlJFRVRFWFQnLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogJyNmZmZmZmYnLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogJzE2cHgnLFxuICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiAnNDAwJyxcbiAgICAgICAgICAgICAgICAgICAgZm9udEZhbWlseTogJ011bGlzaCcsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICcjRkZGRkZGJyxcbiAgICAgICAgICAgICAgICAgICAgY2FyZXRDb2xvcjogJyNmZmJiMDAnLFxuICAgICAgICAgICAgICAgICAgICBudWRnZURpc3BsYXlJbWFnZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25CZ0NvbG9yOiAnI0ZGRkZGRicsXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiAnNDAwJyxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCYWNrZ3JvdW5kOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0NvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25CZ0NvbG9yOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQ29sb3I6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyTGVmdDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlclJhZGl1czogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxuICAgICAgICAgICAgICAgICAgICBob3ZlckJvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICBob3ZlckNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVDb2xvcjogJyNFQ0VDRUMnLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQmFja2dyb3VuZDogJyNFQ0VDRUMnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckJvcmRlckNvbG9yOiAnI0VFMDAwMCcsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlZERhdGU6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgaXNNYXN0ZXJDc3M6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xNZXRhSWQ6XG4gICAgICAgICAgICAgICAgICAgICAgJ0xJX0NPTV9HRU5fQ1RSTF9zZWxlY3RfZG93bmxvYWREb2N1bWVudHNfVjEnLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJTdHlsZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBjc3NDbGFzczogbnVsbCxcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0RFQ0xBUkFUSU9OJykge1xuICAgICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAncmVjdlNmdENvcHknKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9iamVjdFsncm9sZSddXVtdID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblsnZG9tYWluVmFsdWVzJ10ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgZG9tYWluSW50ZXJuYWxWYWx1ZTogcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICAgICAgICBkb21haW5VaVZhbHVlOiAnTicsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddID0gW107XG4gICAgICAgICAgICAgICAgICBxdWVzdGlvblsnZG9tYWluVmFsdWVzJ10ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGRvbWFpbkludGVybmFsVmFsdWU6IHF1ZXN0aW9uWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgICAgIGRvbWFpblVpVmFsdWU6ICdZJyxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ2hhcmRDb3B5TGFuZycpIHtcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9ICdIQVJEIENPUFknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgc2luZ2xlUGVyc29uT2JqZWN0WydxdWVzdGlvbkxpc3QnXS5zb3J0KFxuICAgICAgICAgICAgICAgIChhOiBhbnksIGI6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgIGFbJ3N0ZXAnXSAtIGJbJ3N0ZXAnXSB8fCBhWydkaXNwbGF5T3JkZXInXSAtIGJbJ2Rpc3BsYXlPcmRlciddXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBxdWVzdGlvbnNMaXN0Rm9yTEE6IGFueSA9IFtdO1xuICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5mb3JFYWNoKChzdGVwczogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGxldCBmaWx0ZXJlZE9iajogYW55ID0gc2luZ2xlUGVyc29uT2JqZWN0WydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydzdGVwJ10gPT09IHN0ZXBzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHtcbiAgICAgICAgICAgICAgICBzdGVwOiBzdGVwcyxcbiAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVQZXJzb25PYmplY3RbJ3BlcnNvblVXSWQnXS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uczogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iailcbiAgICAgICAgICAgICAgICAgID8gZmlsdGVyZWRPYmpcbiAgICAgICAgICAgICAgICAgIDogW10sXG4gICAgICAgICAgICAgICAgc2VjdGlvbk5hbWU6ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRPYmopXG4gICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkT2JqWzBdWyd0aXRsZSddXG4gICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgIGlzTWVkaWNhbFN1YlF1ZXN0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzaG93U2VjdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRPYmopKSB7XG4gICAgICAgICAgICAgICAgLy8gSGFyZCBDb3B5IGFuZCBNYXAgcXVlc3Rpb25cbiAgICAgICAgICAgICAgICBsZXQgZmlsdGVyZWRIYXJkQ29weVF1ZXN0aW9uOiBhbnkgPSBmaWx0ZXJlZE9iai5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdyZWN2U2Z0Q29weSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkSGFyZENvcHlRdWVzdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgIG9ialsncXVlc3Rpb25zJ10ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uVHlwZTogJ01BUCcsXG4gICAgICAgICAgICAgICAgICAgIGlzU2hvd1F1ZXN0aW9uSW5VSTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25SZWxhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uSWQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEhhcmRDb3B5UXVlc3Rpb25bMF1bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvbkFuc3dlcjogJ1knLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gaWYgTlJJIHRoZW4gcGFzc3BvcnQgdXBsb2FkIGlzIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkTmF0aW9uYWxpdHlRdWVzdGlvbjogYW55ID0gZmlsdGVyZWRPYmouZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnTmF0aW9uYWxpdHknXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE5hdGlvbmFsaXR5UXVlc3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICBzaW5nbGVQZXJzb25PYmplY3RbJ3F1ZXN0aW9uTGlzdCddLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblR5cGU6ICdQQVNTUE9SVF9VUExPQUQnLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25hbFF1ZXN0aW9uOiAnTicsXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uVGV4dDogJ1Bhc3Nwb3J0IERldGFpbHMgJyxcbiAgICAgICAgICAgICAgICAgICAgaXNTaG93UXVlc3Rpb25JblVJOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvblJlbGF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25JZDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkTmF0aW9uYWxpdHlRdWVzdGlvblswXVsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uQW5zd2VyOiAnZm9yZ25OYXRpb25hbCcsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIG9ialsncXVlc3Rpb25zJ10ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uVHlwZTogJ1BBU1NQT1JUX1VQTE9BRCcsXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsUXVlc3Rpb246ICdOJyxcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25UZXh0OiAnUGFzc3BvcnQgRGV0YWlscyAnLFxuICAgICAgICAgICAgICAgICAgICBpc1Nob3dRdWVzdGlvbkluVUk6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uUmVsYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvbklkOlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWROYXRpb25hbGl0eVF1ZXN0aW9uWzBdWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25BbnN3ZXI6ICdmb3Jnbk5hdGlvbmFsJyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBxdWVzdGlvbnNMaXN0Rm9yTEEucHVzaChvYmopO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBsZXQgbGlmZUFzc3VyZWRPYmplY3RJbmRleEluTWFzdGVyOiBhbnkgPSB0aGlzLnF1ZXN0aW9uTGlzdC5maW5kSW5kZXgoKHNpbmdsZU9iajogYW55KSA9PiBzaW5nbGVPYmpbJ3JvbGUnXSA9PT0gc2luZ2xlUGVyc29uT2JqZWN0Wydyb2xlJ10pO1xuICAgICAgICAgICAgLy8gaWYgKGxpZmVBc3N1cmVkT2JqZWN0SW5kZXhJbk1hc3RlciAhPT0gdGhpcy5udW1iZXJNaW51c09uZSkge1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkxpc3QgPSBxdWVzdGlvbnNMaXN0Rm9yTEE7XG4gICAgICAgICAgICB0aGlzLnJlc29sdmVIZWlnaHRRdWVzdGlvbklkcygpO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMucGVyc29uVXdSZXNwb25zZU9iaiA9IGRhdGFbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ107XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdPy5xdWVzdGlvbkxpc3QpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF0/LnF1ZXN0aW9uTGlzdFswXT8ucGVyc29uVVdkZXRhaWxzTGlzdCkgKSB7XG4gICAgICAgICAgbGV0IGlzU3ViUXVlc3Rpb25FeGlzdHM6IGFueSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaXNNZWRpY2FsU3ViUXVlc3Rpb25zQXZhaWxhYmxlID0gbnVsbDtcbiAgICAgICAgICBsZXQgYXJyYXlPZktleXMgOiBhbnkgPSBPYmplY3Qua2V5cyh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXT8ucXVlc3Rpb25MaXN0WzBdPy5wZXJzb25VV2RldGFpbHNMaXN0KTtcbiAgICAgICAgICBhcnJheU9mS2V5cy5mb3JFYWNoKChzaW5nbGVLZXkgOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdWydxdWVzdGlvbkxpc3QnXVswXVsncGVyc29uVVdkZXRhaWxzTGlzdCddW3NpbmdsZUtleV0pKSB7XG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdWydxdWVzdGlvbkxpc3QnXVswXVsncGVyc29uVVdkZXRhaWxzTGlzdCddW3NpbmdsZUtleV0uZm9yRWFjaCgoc2luZ2xlQW5zd2VyT2JqIDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5maW5kTWVkaWNhbFF1ZXN0aW9uc0luT3BlblF1b3RlKHNpbmdsZUFuc3dlck9iaik7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLmlzTWVkaWNhbFN1YlF1ZXN0aW9uc0F2YWlsYWJsZSkpIHtcbiAgICAgICAgICAgIHRoaXMubWFzdGVyU2VydmljZVxuICAgICAgICAgICAgICAuZ2V0U3ViUXVlc3Rpb25zKFxuICAgICAgICAgICAgICAgIHRoaXMuZmllbGQoKT8uY29uZmlnRGF0YSxcbiAgICAgICAgICAgICAgICB0aGlzLmlzTWVkaWNhbFN1YlF1ZXN0aW9uc0F2YWlsYWJsZVsnYW5zd2VyJ10sXG4gICAgICAgICAgICAgICAgdGhpcy5pc01lZGljYWxTdWJRdWVzdGlvbnNBdmFpbGFibGVbJ3BlcnNvblVXSWQnXVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgKHN1YlF1ZXN0aW9uUmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgbGV0IGRpc3RpbmN0U3RlcHM6IGFueSA9IFtdO1xuICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc3ViUXVlc3Rpb25SZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25SZXNwb25zZS5mb3JFYWNoKChzdWJRdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydkb21haW5WYWx1ZXMnXVtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2RvbWFpbk5hbWUnXVxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydmaWVsZCddID0gdGhpcy5nZXRGaWVsZChzdWJRdWVzdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKCFkaXN0aW5jdFN0ZXBzLmluY2x1ZGVzKHN1YlF1ZXN0aW9uWydjbHVzdGVySWQnXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0U3RlcHMucHVzaChzdWJRdWVzdGlvblsnY2x1c3RlcklkJ10pO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25SZXNwb25zZS5zb3J0KFxuICAgICAgICAgICAgICAgICAgICAgIChhOiBhbnksIGI6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFbJ3N0ZXAnXSAtIGJbJ3N0ZXAnXSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgYVsnZGlzcGxheU9yZGVyJ10gLSBiWydkaXNwbGF5T3JkZXInXVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFN0ZXBzLmZvckVhY2goKHN0ZXBzOiBhbnksIGluZDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkT2JqOiBhbnkgPSBzdWJRdWVzdGlvblJlc3BvbnNlLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnY2x1c3RlcklkJ10gPT09IHN0ZXBzXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGVwOiAxMDAwICsgaW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25zOiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkT2JqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkT2JqXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uTmFtZTogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmaWx0ZXJlZE9ialswXVsndGl0bGUnXVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNNZWRpY2FsU3ViUXVlc3Rpb246IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93U2VjdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNNZWRpY2FsU3ViUXVlc3Rpb25zQXZhaWxhYmxlW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwZXJzb25VV0lkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICBdLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBsZXQgTGFJbmRleDogYW55ID0gdGhpcy5wZXJzb25Vd01hc3Rlck9iai5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgICAgLy8gICAoc2luZ2xlOiBhbnkpID0+IHNpbmdsZVsncm9sZSddID09PSBzaW5nbGVQZXJzb25bJ3JvbGUnXVxuICAgICAgICAgICAgICAgICAgICAgIC8vICk7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkxpc3QucHVzaChvYmopO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UgPSBzdWJRdWVzdGlvblJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICAvLyBsZXQgbGFJbmRleDogYW55ID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSBzaW5nbGVQZXJzb25bJ3JvbGUnXSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydxdWVzdGlvbnNSZXNwb25zZSddWzBdW1xuICAgICAgICAgICAgICAgICAgICAgICdxdWVzdGlvbkxpc3QnXG4gICAgICAgICAgICAgICAgICAgIF0gPSB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVtcbiAgICAgICAgICAgICAgICAgICAgICAncXVlc3Rpb25MaXN0J1xuICAgICAgICAgICAgICAgICAgICBdLmNvbmNhdCh0aGlzLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXBBbnN3ZXJzRm9yT3BlblF1b3RlKCk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcEFuc3dlcnNGb3JPcGVuUXVvdGUoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5tYXBBbnN3ZXJzRm9yT3BlblF1b3RlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1hcEFuc3dlcnNGb3JPcGVuUXVvdGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gdGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKCkuZm9yRWFjaCgoc2luZ2xlUGVyc29uOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVBlcnNvblsncXVlc3Rpb25MaXN0J10pICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUGVyc29uWydxdWVzdGlvbkxpc3QnXVswXSkpIHtcbiAgICAgICAgICAvLyAgICAgbGV0IGFycmF5T2ZLZXlzID0gT2JqZWN0LmtleXMoc2luZ2xlUGVyc29uWydxdWVzdGlvbkxpc3QnXVswXVsncGVyc29uVVdkZXRhaWxzTGlzdCddKTtcbiAgICAgICAgICAvLyAgICAgaWYgKGFycmF5T2ZLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAvLyAgICAgICBhcnJheU9mS2V5cy5mb3JFYWNoKChzaW5nbGVLZXkpID0+IHtcbiAgICAgICAgICAvLyAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVBlcnNvblsncXVlc3Rpb25MaXN0J11bMF1bJ3BlcnNvblVXZGV0YWlsc0xpc3QnXVtzaW5nbGVLZXldKSkge1xuICAgICAgICAgIC8vICAgICAgICAgICBzaW5nbGVQZXJzb25bJ3F1ZXN0aW9uTGlzdCddWzBdWydwZXJzb25VV2RldGFpbHNMaXN0J11bc2luZ2xlS2V5XS5mb3JFYWNoKChhbnN3ZXJPYmo6IGFueSkgPT4ge1xuXG4gICAgICAgICAgLy8gICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyT2JqLnF1ZXN0aW9uSWRdID0gYW5zd2VyT2JqLmFuc3dlcjtcblxuXG4gICAgICAgICAgLy8gICAgICAgICAgICAgbGV0IGZpbHRlcmVkUXVlc3Rpb246IGFueSA9IHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydxdWVzdGlvbnNSZXNwb25zZSddWzBdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gPT09IGFuc3dlck9ialsncXVlc3Rpb25JZCddKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uKSAmJiBmaWx0ZXJlZFF1ZXN0aW9uWzBdWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJykge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyT2JqLnF1ZXN0aW9uSWRdID0gW107XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyBsZXQgbGlzdE9mT3B0aW9uc1NlbGVjdGVkIDogYW55ID0gYW5zd2VyT2JqLmFuc3dlci5zcGxpdCgnLCcpO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gbGlzdE9mT3B0aW9uc1NlbGVjdGVkLmZvckVhY2goKHNpbmdsZUVsZW1lbnQgOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb25bMF0pICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvblswXVsnZG9tYWluVmFsdWVzJ10pKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgICAgbGV0IGZpbHRlcmVkRG9tYWluVmFsdWVPYmogOiBhbnkgPSBmaWx0ZXJlZFF1ZXN0aW9uWzBdWydkb21haW5WYWx1ZXMnXS5maWx0ZXIoKHNpbmdsZU9iaiA6IGFueSkgPT4gc2luZ2xlT2JqWydkb21haW5JbnRlcm5hbFZhbHVlJ10gPT09IHNpbmdsZUVsZW1lbnQpO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWREb21haW5WYWx1ZU9iaikpIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXS5wdXNoKHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgICAgICAgbGFiZWwgOiBmaWx0ZXJlZERvbWFpblZhbHVlT2JqWzBdWydkb21haW5VaVZhbHVlJ10sXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgICAgICAgIHZhbHVlIDogZmlsdGVyZWREb21haW5WYWx1ZU9ialswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgICAgICB9KTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIH1cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIH0pO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyT2JqLnF1ZXN0aW9uSWRdID0gYW5zd2VyT2JqLmFuc3dlci5zcGxpdCgnLCcpO1xuICAgICAgICAgIC8vICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmoucXVlc3Rpb25JZF0gPSBhbnN3ZXJPYmouYW5zd2VyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKGFuc3dlck9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXSA9IGFuc3dlck9ialsnYW5zd2VyJ107XG4gICAgICAgICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIChhbnN3ZXJPYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJykge1xuICAgICAgICAgICAgICAgICAgICAgIC8vICAgbGV0IGZlZXRBbnN3ZXIgPSBhbnN3ZXJPYmpbJ2Fuc3dlciddLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShhbnN3ZXJPYmpbJ2Fuc3dlciddKSAmJiBhbnN3ZXJPYmpbJ2Fuc3dlciddLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddID0gZmVldEFuc3dlclswXTtcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddID0gZmVldEFuc3dlclsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSA9IGZlZXRBbnN3ZXJbMF07XG4gICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSA9ICcwJztcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bJ3F1ZXN0aW9uTGlzdCddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uUmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIC8vICAgICAgICAgICAgIC8vICAgaWYgKHNpbmdsZVF1ZXN0aW9uUmVzcG9uc2VbJ3F1ZXN0aW9uSWQnXSA9PT0gYW5zd2VyT2JqWydxdWVzdGlvbklkJ10gJiYgc2luZ2xlUXVlc3Rpb25SZXNwb25zZVsncXVlc3Rpb25UeXBlJ10gPT09ICdERUNMQVJBVElPTicpIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAvLyAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyT2JqLnF1ZXN0aW9uSWRdID0gYW5zd2VyT2JqLmFuc3dlcjtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAvLyAgIH1cbiAgICAgICAgICAvLyAgICAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAvLyBsZXQgbGFJbmRleDogYW55ID0gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZmluZEluZGV4KChzaW5nbGVQZXJzb25PYmo6IGFueSkgPT4gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvblsncm9sZSddKTtcblxuICAgICAgICAgIC8vICAgICAgICAgICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb24pICYmIGZpbHRlcmVkUXVlc3Rpb25bMF1bJ3F1ZXN0aW9uVHlwZSddID09PSAnREVDTEFSQVRJT04nKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gICB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmoucXVlc3Rpb25JZF0gPSBhbnN3ZXJPYmouYW5zd2VyO1xuICAgICAgICAgIC8vICAgICAgICAgICAgIC8vIH1cblxuICAgICAgICAgIC8vICAgICAgICAgICAgIGlmIChhbnN3ZXJPYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdMaWZlTWVkaUNuZHRuJyB8fCBhbnN3ZXJPYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdNZWRpQ25kdG4nKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICBpc1N1YlF1ZXN0aW9uRXhpc3RzID0gdHJ1ZTtcblxuXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIFwidXJsUGFyYW1Gb3JEaXNlYXNlXCI6IFwibWRlaWNhbEhpc3RvcnlcIixcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgXCJhcGlVcmxcIjogXCJodHRwczovL3ByZXByb2QtZGlyZWN0cG9ydGFsbGlmZS5nb2RpZ2l0LmNvbS9EaXJlY3RQb3J0YWxMaWZlL2xpZmUvZmV0Y2hTdWJRdWVzdGlvbnNcIixcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgXCJ1cmxQYXJhbUZvclBlcnNvblV3SWRcIjogXCJwZXJzb25VV0lEXCIsXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIFwidG9rZW5Db29raWVQYXJhbVwiOiBcInYzVG9rZW5cIixcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgXCJpc1NlbmRUb2tlblwiOiBmYWxzZVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgdGhpcy5tYXN0ZXJTZXJ2aWNlLmdldFN1YlF1ZXN0aW9ucyh0aGlzLmZpZWxkKCk/LmNvbmZpZ0RhdGEsIGFuc3dlck9ialsnYW5zd2VyJ10sIGFuc3dlck9ialsncGVyc29uVVdJZCddKS5zdWJzY3JpYmUoXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgIChzdWJRdWVzdGlvblJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmxvYWRlclNlcnZpY2UuZGlzcGxheShmYWxzZSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgbGV0IGRpc3RpbmN0U3RlcHM6IGFueSA9IFtdO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHN1YlF1ZXN0aW9uUmVzcG9uc2UpKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblJlc3BvbnNlLmZvckVhY2goKHN1YlF1ZXN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10gPSB0cnVlO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBmYWxzZTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXSkgJiZcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheShzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddKVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddID0gW3N1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ11dO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiZcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10pXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9iajogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dFF1ZXN0aW9uT2JqZWN0OiBhbnkgPSBzdWJRdWVzdGlvblJlc3BvbnNlLmZpbHRlcihcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9iamVjdDogYW55KSA9PiBvYmplY3RbJ3F1ZXN0aW9uSWQnXSA9PT0gc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9ialsnbmV4dFF1ZXN0aW9uSWQnXVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0UXVlc3Rpb25PYmplY3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0UXVlc3Rpb25PYmplY3RbMF1bJ2Fuc3dlcmVkVmFsdWUnXSA9IHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmpbJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10gPSB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsnZG9tYWluVmFsdWVzJ11bXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2RvbWFpbk5hbWUnXVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydmaWVsZCddID0gdGhpcy5nZXRGaWVsZChzdWJRdWVzdGlvbik7XG5cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc3ViUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddKSkge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAvLyAgIHN1YlF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKChzdWJEb21haW46IGFueSkgPT4ge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5zdWJNZWRpY2FsUXVlc3Rpb25zRG9tYWluSW50ZXJuYWxWYWx1ZXNMaXN0LnB1c2goc3ViRG9tYWluWydkb21haW5JbnRlcm5hbFZhbHVlJ10pO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAvLyAgIH0pO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGlmICghZGlzdGluY3RTdGVwcy5pbmNsdWRlcyhzdWJRdWVzdGlvblsnY2x1c3RlcklkJ10pKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5wdXNoKHN1YlF1ZXN0aW9uWydjbHVzdGVySWQnXSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25SZXNwb25zZS5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4gYVsnc3RlcCddIC0gYlsnc3RlcCddIHx8IGFbJ2Rpc3BsYXlPcmRlciddIC0gYlsnZGlzcGxheU9yZGVyJ10pO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5mb3JFYWNoKChzdGVwczogYW55LCBpbmQ6IGFueSkgPT4ge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmlsdGVyZWRPYmo6IGFueSA9IHN1YlF1ZXN0aW9uUmVzcG9uc2UuZmlsdGVyKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsnY2x1c3RlcklkJ10gPT09IHN0ZXBzKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXA6IDEwMDAgKyBpbmQsXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25zOiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkT2JqKSA/IGZpbHRlcmVkT2JqIDogW10sXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbk5hbWU6ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRPYmopID8gZmlsdGVyZWRPYmpbMF1bJ3RpdGxlJ10gOiAnJyxcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBpc01lZGljYWxTdWJRdWVzdGlvbjogdHJ1ZSxcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzaG93U2VjdGlvbjogdHJ1ZSxcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBhbnN3ZXJPYmpbJ3BlcnNvblVXSWQnXS50b1N0cmluZygpLFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAvLyBsZXQgTGFJbmRleDogYW55ID0gdGhpcy5wZXJzb25Vd01hc3Rlck9iai5maW5kSW5kZXgoXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIC8vICAgKHNpbmdsZTogYW55KSA9PiBzaW5nbGVbJ3JvbGUnXSA9PT0gc2luZ2xlUGVyc29uWydyb2xlJ11cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgLy8gKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkxpc3QucHVzaChvYmopO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlID0gc3ViUXVlc3Rpb25SZXNwb25zZTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIC8vIGxldCBsYUluZGV4OiBhbnkgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZmluZEluZGV4KChzaW5nbGVQZXJzb25PYmo6IGFueSkgPT4gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvblsncm9sZSddKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydxdWVzdGlvbnNSZXNwb25zZSddWzBdWydxdWVzdGlvbkxpc3QnXSA9IHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydxdWVzdGlvbnNSZXNwb25zZSddWzBdWydxdWVzdGlvbkxpc3QnXS5jb25jYXQodGhpcy5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UpO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgLy8gdGhpcy5kaXNhYmxlQ29uZmlybWF0aW9uQnV0dG9uID0gZmFsc2U7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgIChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZGlzYWJsZUNvbmZpcm1hdGlvbkJ1dHRvbiA9IHRydWU7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgLy8gdGhpcy5sb2FkZXJTZXJ2aWNlLmRpc3BsYXkoZmFsc2UpO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICApO1xuICAgICAgICAgIC8vICAgICAgICAgICAgIH1cbiAgICAgICAgICAvLyAgICAgICAgICAgICAvLyBlbHNlIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAvLyAgIHRoaXMubG9hZGVyU2VydmljZS5kaXNwbGF5KGZhbHNlKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAvLyAgICAgICAgICAgICBpZiAodHlwZW9mIGFuc3dlck9iai5hbnN3ZXIgPT09ICdzdHJpbmcnICYmIGFuc3dlck9iai5hbnN3ZXIgIT09ICdZJyAmJiBhbnN3ZXJPYmouYW5zd2VyICE9PSAnTicpIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIGlmIChhbnN3ZXJPYmouYW5zd2VyLmluY2x1ZGVzKCcsJykpIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgYW5zd2VyT2JqLmFuc3dlci5zcGxpdCgnLCcpLmZvckVhY2goKGFuc3dlcjogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyXSA9IHRydWU7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIH0pO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyT2JqLmFuc3dlcl0gPSB0cnVlO1xuICAgICAgICAgIC8vICAgICAgICAgICAgIH1cbiAgICAgICAgICAvLyAgICAgICAgICAgICB0aGlzLiAgdXBkYXRlUGVyc29uVXdBbnN3ZXJzKGFuc3dlck9iaik7XG4gICAgICAgICAgLy8gICAgICAgICAgIH0pO1xuICAgICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAgIC8vICAgICAgIH0pO1xuICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgLy8gICB9XG4gICAgICAgICAgLy8gfSk7XG4gICAgICAgIH1cblxuXG4gICAgfVxuXG4gICAgdGhpcy5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xuXG4gICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnaGVpZ2h0T2JqZWN0VHlwZXMnXSA9IHtcbiAgICAgIGNvbnRyb2xTdHlsZToge1xuICAgICAgICBjb250cm9sVHlwZTogJ3NlbGVjdCcsXG4gICAgICAgIGJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgIGJvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICBib3JkZXJSYWRpdXM6IG51bGwsXG4gICAgICAgIGZvbnRTaXplOiAnMTZweCcsXG4gICAgICAgIGZvbnRXZWlnaHQ6ICc0MDAnLFxuICAgICAgICBmb250RmFtaWx5OiAnTXVsaXNoJyxcbiAgICAgICAgY29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgYmFja2dyb3VuZDogJyNGRkZGRkYnLFxuICAgICAgICBjYXJldENvbG9yOiAnI2ZmYmIwMCcsXG4gICAgICAgIG51ZGdlRGlzcGxheUltYWdlOiBudWxsLFxuICAgICAgICBkcm9wZG93bk9wdGlvbkJnQ29sb3I6ICcjRkZGRkZGJyxcbiAgICAgICAgZHJvcGRvd25PcHRpb25Db2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICBkcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6ICc0MDAnLFxuICAgICAgICB3aWR0aDogbnVsbCxcbiAgICAgICAgZm9jdXNCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgZm9jdXNCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxuICAgICAgICBmb2N1c0JhY2tncm91bmQ6IG51bGwsXG4gICAgICAgIGZvY3VzQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJnQ29sb3I6IG51bGwsXG4gICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Db2xvcjogbnVsbCxcbiAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6IG51bGwsXG4gICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJMZWZ0OiBudWxsLFxuICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyUmFkaXVzOiBudWxsLFxuICAgICAgICBob3ZlckJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgIGhvdmVyQm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgIGhvdmVyQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgZGlzYWJsZUNvbG9yOiAnI0VDRUNFQycsXG4gICAgICAgIGRpc2FibGVCYWNrZ3JvdW5kOiAnI0VDRUNFQycsXG4gICAgICAgIGVycm9yQm9yZGVyQ29sb3I6ICcjRUUwMDAwJyxcbiAgICAgICAgZXJyb3JCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgZXJyb3JDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICBjcmVhdGVkRGF0ZTogbnVsbCxcbiAgICAgICAgcGFkZGluZzogbnVsbCxcbiAgICAgICAgbWFyZ2luOiBudWxsLFxuICAgICAgICBpc01hc3RlckNzczogbnVsbCxcbiAgICAgICAgY29udHJvbE1ldGFJZDogJ0xJX0NPTV9HRU5fQ1RSTF9zZWxlY3RfZG93bmxvYWREb2N1bWVudHNfVjEnLFxuICAgICAgICBib3JkZXJTdHlsZTogbnVsbCxcbiAgICAgICAgaGVpZ2h0OiBudWxsLFxuICAgICAgICBtaW5IZWlnaHQ6IG51bGwsXG4gICAgICAgIG1heEhlaWdodDogbnVsbCxcbiAgICAgICAgbWluV2lkdGg6IG51bGwsXG4gICAgICAgIG1heFdpZHRoOiBudWxsLFxuICAgICAgICBjc3NDbGFzczogbnVsbCxcbiAgICAgIH0sXG4gICAgICBmaWVsZE5hbWU6IG51bGwsXG4gICAgICBsYWJlbDogJ2ZlZXQgLyBpbmNoZXMnLFxuICAgICAgcGxhY2VIb2xkZXI6ICcnLFxuICAgICAgbWV0YUlkOiAnJyxcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgIGlzRGlzYWJsZTogaXNEaXNhYmxlLFxuICAgICAgdmFsaWRhdG9yczoge1xuICAgICAgICBpc1JlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgcmVxdWlyZWRNZXNzYWdlOiAnVGhpcyBmaWVsZCBjYW5ub3QgYmUgZW1wdHknLFxuICAgICAgICBtaW5MZW5ndGg6IG51bGwsXG4gICAgICAgIG1pbkxlbmd0aE1lc3NhZ2U6IG51bGwsXG4gICAgICAgIG1heExlbmd0aDogMTUwLFxuICAgICAgICBtYXhMZW5ndGhNZXNzYWdlOiBudWxsLFxuICAgICAgICBwYXR0ZXJuOiBudWxsLFxuICAgICAgICBwYXR0ZXJuTWVzc2FnZTogJycsXG4gICAgICB9LFxuICAgICAgb3B0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdDbScsXG4gICAgICAgICAgdmFsdWU6ICdDTScsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0ZlZXQnLFxuICAgICAgICAgIHZhbHVlOiAnRkVFVCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgY3NzQ2xhc3M6IG51bGwsXG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIHN0eWxlOiBudWxsLFxuICAgICAgaW1hZ2VVcmw6IG51bGwsXG4gICAgICBjb25maWdEYXRhOiB7fSxcbiAgICAgIG1ldGFEYXRhT2JqOiBudWxsLFxuICAgICAgaXNTaG93TGFiZWw6IGZhbHNlLFxuICAgICAgaXNNYXN0ZXJDb250cm9sOiBmYWxzZSxcbiAgICAgIGNvbnRyb2xUeXBlOiAnc2VsZWN0JyxcbiAgICB9O1xuICB9XG5cbiAgdXBkYXRlUGVyc29uVXdBbnN3ZXJzKGFuc3dlck9iajogYW55KSB7XG5cbiAgICBpZiAoYW5zd2VyT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUJykge1xuICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddID0gYW5zd2VyT2JqWydhbnN3ZXInXTtcbiAgICB9XG4gICAgaWYgKGFuc3dlck9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnKSB7XG4gICAgICBsZXQgZmVldEFuc3dlciA9IGFuc3dlck9ialsnYW5zd2VyJ10uc3BsaXQoJy4nKTtcbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGFuc3dlck9ialsnYW5zd2VyJ10pICYmIGFuc3dlck9ialsnYW5zd2VyJ10uaW5jbHVkZXMoJy4nKSkge1xuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10gPSBmZWV0QW5zd2VyWzBdO1xuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10gPSBmZWV0QW5zd2VyWzFdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddID0gZmVldEFuc3dlclswXTtcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddID0gJzAnO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBmaWx0ZXJlZFF1ZXN0aW9uOiBhbnkgPSB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PSBhbnN3ZXJPYmpbJ3F1ZXN0aW9uSWQnXSk7XG4gICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb25bMF0pKSB7XG4gICAgICBpZihmaWx0ZXJlZFF1ZXN0aW9uWzBdWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJykge1xuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmoucXVlc3Rpb25JZF0gPSBhbnN3ZXJPYmouYW5zd2VyLnNwbGl0KCcsJyk7XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXSA9IGFuc3dlck9iai5hbnN3ZXI7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGFuc3dlck9iai5wZXJzb25VV0FjdGl2aXR5UmVzcG9uc2VFbnRpdHkpKSB7XG4gICAgICBhbnN3ZXJPYmoucGVyc29uVVdBY3Rpdml0eVJlc3BvbnNlRW50aXR5LmZvckVhY2goKHN1YnF1ZXN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVQZXJzb25Vd0Fuc3dlcnMoc3VicXVlc3Rpb24pO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnNhdmVRdWVzdGlvbkRldGFpbHMoKVxuICAgIH1cbiAgfVxuXG52YWxpZGF0ZUZpZWxkKHF1ZXN0aW9uSWQ6IHN0cmluZywgcXVlc3Rpb246IGFueSkge1xuICAgIHRoaXMuZmllbGRUb3VjaGVkW3F1ZXN0aW9uSWRdID0gdHJ1ZTtcblxuICAgIGNvbnN0IHZhbGlkYXRvcnMgPSB0aGlzLmdldEZpZWxkKHF1ZXN0aW9uKT8udmFsaWRhdG9ycztcbiAgICBsZXQgdmFsdWU7XG4gICAgaWYgKHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddICE9PSAnRkVFVCcpIHtcbiAgICAgIHZhbHVlID0gdGhpcy5wZXJzb25Vd0Fuc3dlcnMubWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHRoaXMucGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9uSWRdO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgZXJyb3JzIG9iamVjdCBmb3IgdGhpcyBmaWVsZFxuICAgIHRoaXMuZmllbGRFcnJvcnNbcXVlc3Rpb25JZF0gPSB7fTtcblxuXG5cbiAgICAvLyBSZXF1aXJlZCB2YWxpZGF0aW9uXG4gICAgaWYgKFxuICAgICAgcXVlc3Rpb24ucXVlc3Rpb25UeXBlID09PSAnQ0hFQ0tCT1gnICYmXG4gICAgICB2YWxpZGF0b3JzPy5pc1JlcXVpcmVkICYmXG4gICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodmFsdWVbMF0pXG4gICAgKSB7XG4gICAgICB0aGlzLmZpZWxkRXJyb3JzW3F1ZXN0aW9uSWRdWydyZXF1aXJlZCddID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdmFsaWRhdG9ycz8uaXNSZXF1aXJlZCAmJlxuICAgICAgKHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh2YWx1ZSkgfHwgdmFsdWUgPT09IDAuMClcbiAgICApIHtcbiAgICAgIHRoaXMuZmllbGRFcnJvcnNbcXVlc3Rpb25JZF1bJ3JlcXVpcmVkJ10gPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIFNraXAgb3RoZXIgdmFsaWRhdGlvbnMgaWYgdmFsdWUgaXMgZW1wdHlcbiAgICBpZiAodGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgLy8gVHlwZSB2YWxpZGF0aW9uIGZyb20gSlNPTiAoTnVtZXJpYywgQWxwaGFOdW1lcmljKVxuICAgIGlmICh2YWxpZGF0b3JzPy5wYXR0ZXJuKSB7XG4gICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cCh2YWxpZGF0b3JzLnBhdHRlcm4pO1xuICBpZiAoIXJlZ2V4LnRlc3QodmFsdWUudG9TdHJpbmcoKSkpIHtcbiAgICB0aGlzLmZpZWxkRXJyb3JzW3F1ZXN0aW9uSWRdWyd0eXBlJ10gPSB0cnVlO1xuICB9XG5cbiAgICAgIH1cblxuXG4gICAgLy8gTWluVmFsdWUgdmFsaWRhdGlvbiBmcm9tIEpTT05cbiAgICBpZiAodmFsaWRhdG9ycz8ubWluTGVuZ3RoICYmIHZhbGlkYXRvcnMubWF4TGVuZ3RoICYmIHZhbHVlKSB7XG4gICAgICBjb25zdCBtaW5WYWwgPXZhbGlkYXRvcnMubWluTGVuZ3RoO1xuICAgICAgY29uc3QgbWF4VmFsPSB2YWxpZGF0b3JzLm1heExlbmd0aDtcbiAgICAgIGlmICh2YWxpZGF0b3JzLnBhdHRlcm49PSdeWzAtOV0rJCcpIHtcbiAgICAgICAgLy8gRm9yIG51bWVyaWMsIGNvbXBhcmUgYXMgbnVtYmVyc1xuICAgICAgICBpZiAocGFyc2VJbnQodmFsdWUpIDwgbWluVmFsIHx8IHBhcnNlSW50KHZhbHVlKSA+IG1heFZhbCkge1xuICAgICAgICAgIHRoaXMuZmllbGRFcnJvcnNbcXVlc3Rpb25JZF1bJ3JhbmdlJ10gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3Igb3RoZXIgdHlwZXMsIGNvbXBhcmUgc3RyaW5nIGxlbmd0aFxuICAgICAgICBpZiAodmFsdWUudG9TdHJpbmcoKS5sZW5ndGggPCBtaW5WYWwgfHwgdmFsdWUudG9TdHJpbmcoKS5sZW5ndGggPiBtYXhWYWwpIHtcbiAgICAgICAgICB0aGlzLmZpZWxkRXJyb3JzW3F1ZXN0aW9uSWRdWydyYW5nZSddID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKCdWYWxpZGF0aW9uIGVycm9ycyBmb3InLCBxdWVzdGlvbklkLCB0aGlzLmZpZWxkRXJyb3JzW3F1ZXN0aW9uSWRdKTtcblxuICB9XG5cblxuXG4gIGhhc0FueUZpZWxkRXJyb3IocXVlc3Rpb25JZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRUb3VjaGVkW3F1ZXN0aW9uSWRdICYmXG4gICAgICAgICAgIHRoaXMuZmllbGRFcnJvcnNbcXVlc3Rpb25JZF0gJiZcbiAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5maWVsZEVycm9yc1txdWVzdGlvbklkXSkubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGdldEZpZWxkRXJyb3JNZXNzYWdlKHF1ZXN0aW9uSWQ6IHN0cmluZywgcXVlc3Rpb246IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmZpZWxkVG91Y2hlZFtxdWVzdGlvbklkXSB8fCAhdGhpcy5maWVsZEVycm9yc1txdWVzdGlvbklkXSkgcmV0dXJuICcnO1xuXG4gICAgaWYodGhpcy5maWVsZEVycm9yc1txdWVzdGlvbklkXSl7XG4gICAgICAgY29uc3QgZXJyb3JzID0gdGhpcy5maWVsZEVycm9yc1txdWVzdGlvbklkXTtcbiAgICBjb25zdCB2YWxpZGF0b3JzID0gcXVlc3Rpb24/LmZpZWxkPy52YWxpZGF0b3JzO1xuXG5cbiAgICAgIGlmIChlcnJvcnNbJ3JlcXVpcmVkJ10pIHtcbiAgICAgICAgaWYgKHF1ZXN0aW9uPy5maWVsZD8uY29udHJvbFR5cGUgPT09ICdyYWRpbycgfHwgcXVlc3Rpb24/LmZpZWxkPy5jb250cm9sVHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgICAgIHJldHVybiB2YWxpZGF0b3JzPy5yZXF1aXJlZE1lc3NhZ2UgfHwgYFBsZWFzZSBzZWxlY3QgYW55IG9uZSBvcHRpb25gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNsZWFuVGV4dCA9XG4gICAgICAgICAgcXVlc3Rpb24/LnF1ZXN0aW9uVGV4dD8ucmVwbGFjZSgvXFwoZnRcXCl8XFwoa2dcXCkvZ2ksICcnKS50cmltKCkgfHxcbiAgICAgICAgICAndGhpcyBmaWVsZCc7XG4gICAgICAgIHJldHVybiB2YWxpZGF0b3JzPy5yZXF1aXJlZE1lc3NhZ2UgfHwgYFBsZWFzZSBlbnRlciAke2NsZWFuVGV4dH1gO1xuICAgICAgfVxuICAgICAgaWYgKGVycm9yc1sndHlwZSddKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0b3JzPy5wYXR0ZXJuTWVzc2FnZSB8fCAnSW52YWxpZCBpbnB1dCB0eXBlJztcbiAgICAgIH1cbiAgICAgIGlmIChlcnJvcnNbJ3JhbmdlJ10pIHtcbiAgICAgICAgY29uc3QgY2xlYW5UZXh0ID1cbiAgICAgICAgICBxdWVzdGlvbj8ucXVlc3Rpb25UZXh0Py5yZXBsYWNlKC9cXChmdFxcKXxcXChrZ1xcKS9naSwgJycpLnRyaW0oKSB8fFxuICAgICAgICAgICd2YWx1ZSc7XG4gICAgICAgIHJldHVybiBgUGxlYXNlIGVudGVyIGEgdmFsaWQgJHtjbGVhblRleHR9YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjaGVja0lmVmFsdWVJc0VtcHR5KHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50cmltKCk7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB2YWx1ZSA9PT0gbnVsbCB8fFxuICAgICAgdmFsdWUgPT09ICcnIHx8XG4gICAgICAodmFsdWUgaW5zdGFuY2VvZiBBcnJheSAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHx8XG4gICAgICBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgPT09ICd7fSdcbiAgICApO1xuICB9XG5cbiAgZ2V0VGl0bGVDYXNlKGhlYWRlcjogYW55KTogYW55IHtcbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBpZiAodGhpcy5xdWVzdGlvbkhlYWRlci5pbmNsdWRlcyhoZWFkZXIudG9Mb2NhbGVMb3dlckNhc2UoKSkpIHtcbiAgICAgICAgbGV0IHZhbCA9IGhlYWRlci5zcGxpdCgnICcpO1xuICAgICAgICByZXR1cm4gdmFsWzBdLnRvVXBwZXJDYXNlKCkgKyAnICcgKyB0aGlzLnRvVGl0bGVDYXNlKHZhbFsxXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaGVhZGVyLnRvVXBwZXJDYXNlKCkgPT09ICdGQVRDQSBERVRBSUxTJykge1xuICAgICAgICAgIHJldHVybiBoZWFkZXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudG9UaXRsZUNhc2UoaGVhZGVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0b1RpdGxlQ2FzZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgLnJlcGxhY2UoXG4gICAgICAgICAgL1xcd1xcUyovZyxcbiAgICAgICAgICAodHh0OiBhbnkpID0+IHR4dFswXS50b1VwcGVyQ2FzZSgpICsgdHh0LnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RmllbGQocXVlc3Rpb25PYmo6IGFueSkge1xuICAgIGxldCBvcHRpb25zT2JqOiBhbnkgPSBbXTtcbiAgICBsZXQgY29udHJvbFN0eWxlIDogYW55ID0ge307XG4gICAgaWYgKHF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkge1xuICAgICAgcXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddLmZvckVhY2goKHNpbmdsZU9wdGlvblZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgb3B0aW9uc09iai5wdXNoKHtcbiAgICAgICAgICBsYWJlbDogc2luZ2xlT3B0aW9uVmFsdWVbJ2RvbWFpblVpVmFsdWUnXSxcbiAgICAgICAgICB2YWx1ZTogc2luZ2xlT3B0aW9uVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgbGV0IGlzRGlzYWJsZSA6IGFueSA9IGZhbHNlO1xuICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaXNEaXNhYmxlTWVkaWNhbFF1ZXN0aW9ucycpKSApIHtcbiAgICAgIGxldCBpc0Rpc2FibGVNZWRpY2FsUXVlc3Rpb25zaW5VaSAgOiBhbnkgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdpc0Rpc2FibGVNZWRpY2FsUXVlc3Rpb25zJyk7XG4gICAgICBpc0Rpc2FibGUgPSBKU09OLnBhcnNlKGlzRGlzYWJsZU1lZGljYWxRdWVzdGlvbnNpblVpKSA/IHRydWUgOiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IG1pbkxlbmd0aDogYW55ID0gbnVsbDtcbiAgICBsZXQgbWF4TGVuZ3RoOiBhbnkgPSAyMDA7XG4gICAgbGV0IHBhdHRlcm46IGFueSA9IG51bGw7XG4gICAgbGV0IHBhdHRlcm5NZXNzYWdlOiBhbnkgPSBudWxsO1xuICAgbGV0IGNvbmZpZ0RhdGE6IGFueSA9ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5maWVsZCgpPy5jb25maWdEYXRhKVxuICA/IHRoaXMuZmllbGQoKT8uY29uZmlnRGF0YVxuICA6IHt9O1xuXG4gICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShxdWVzdGlvbk9ialsnY29uZmlnRGF0YSddKSkge1xuICAgICAgY29uZmlnRGF0YSA9IHsuLi5jb25maWdEYXRhLCAuLi5xdWVzdGlvbk9ialsnY29uZmlnRGF0YSddfTtcbiAgICB9XG5cbiAgICBpZihxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICAnUkFESU8gQlVUVE9OJyB8fCBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdBRERNT1JFJykge1xuICAgICAgY29udHJvbFN0eWxlID0ge1xuICAgICAgICAgICAgICAgICAgXCJjb250cm9sVHlwZVwiOiBcInJhZGlvXCIsXG4gICAgICAgICAgICAgICAgICBcImJvcmRlckNvbG9yXCI6IFwiI0RBREFEQVwiLFxuICAgICAgICAgICAgICAgICAgXCJib3JkZXJXaWR0aFwiOiBcIjFweFwiLFxuICAgICAgICAgICAgICAgICAgXCJib3JkZXJSYWRpdXNcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwiZm9udFNpemVcIjogXCIxMnB4XCIsXG4gICAgICAgICAgICAgICAgICBcImZvbnRXZWlnaHRcIjogXCI0MDBcIixcbiAgICAgICAgICAgICAgICAgIFwiZm9udEZhbWlseVwiOiBcIk11bGlzaFwiLFxuICAgICAgICAgICAgICAgICAgXCJjb2xvclwiOiBcIiM0NDQ0NDRcIixcbiAgICAgICAgICAgICAgICAgIFwiYmFja2dyb3VuZFwiOiBcIiNGRkZGRkZcIixcbiAgICAgICAgICAgICAgICAgIFwiY2FyZXRDb2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJudWRnZURpc3BsYXlJbWFnZVwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJkcm9wZG93bk9wdGlvbkJnQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwiZHJvcGRvd25PcHRpb25Db2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJkcm9wZG93bk9wdGlvbkZvbnRXZWlnaHRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwid2lkdGhcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNCb3JkZXJXaWR0aFwiOiBcIjFweFwiLFxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0JvcmRlckNvbG9yXCI6IFwiI2ZmYmIwMFwiLFxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0JhY2tncm91bmRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNDb2xvclwiOiBcIiM0NDQ0NDRcIixcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkJnQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkNvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Gb250V2VpZ2h0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJMZWZ0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJSYWRpdXNcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwiaG92ZXJCb3JkZXJDb2xvclwiOiBcIiNEQURBREFcIixcbiAgICAgICAgICAgICAgICAgIFwiaG92ZXJCb3JkZXJXaWR0aFwiOiBcIjFweFwiLFxuICAgICAgICAgICAgICAgICAgXCJob3ZlckNvbG9yXCI6IFwiIzQ0NDQ0NFwiLFxuICAgICAgICAgICAgICAgICAgXCJkaXNhYmxlQ29sb3JcIjogXCIjRUNFQ0VDXCIsXG4gICAgICAgICAgICAgICAgICBcImRpc2FibGVCYWNrZ3JvdW5kXCI6IFwiI0VDRUNFQ1wiLFxuICAgICAgICAgICAgICAgICAgXCJlcnJvckJvcmRlckNvbG9yXCI6IFwiI0RBREFEQVwiLFxuICAgICAgICAgICAgICAgICAgXCJlcnJvckJvcmRlcldpZHRoXCI6IFwiMXB4XCIsXG4gICAgICAgICAgICAgICAgICBcImVycm9yQ29sb3JcIjogXCIjNDQ0NDQ0XCIsXG4gICAgICAgICAgICAgICAgICBcImNyZWF0ZWREYXRlXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcInBhZGRpbmdcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwibWFyZ2luXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImlzTWFzdGVyQ3NzXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImNvbnRyb2xNZXRhSWRcIjogXCJBTExfQ09NX0dFTl9DVFJMX3JhZGlvX25vbWluZWVHZW5kZXJfVjFcIixcbiAgICAgICAgICAgICAgICAgIFwiYm9yZGVyU3R5bGVcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwiaGVpZ2h0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcIm1pbkhlaWdodFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJtYXhIZWlnaHRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwibWluV2lkdGhcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwibWF4V2lkdGhcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwiY3NzQ2xhc3NcIjogbnVsbFxuICAgICAgICAgICAgICAgIH07XG4gICAgfVxuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHF1ZXN0aW9uT2JqWyd2YWxpZGF0aW9ucyddKSkge1xuICAgICAgbGV0IHZhbGlkYXRpb25PYmo6IGFueSA9IEpTT04ucGFyc2UocXVlc3Rpb25PYmpbJ3ZhbGlkYXRpb25zJ10pO1xuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodmFsaWRhdGlvbk9ialsnTWluVmFsdWUnXSkpIHtcbiAgICAgICAgbWluTGVuZ3RoID0gdmFsaWRhdGlvbk9ialsnTWluVmFsdWUnXTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHZhbGlkYXRpb25PYmpbJ01heFZhbHVlJ10pKSB7XG4gICAgICAgIG1heExlbmd0aCA9IHZhbGlkYXRpb25PYmpbJ01heFZhbHVlJ107XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh2YWxpZGF0aW9uT2JqWydUeXBlJ10pKSB7XG4gICAgICAgIGlmICh2YWxpZGF0aW9uT2JqWydUeXBlJ10gPT09ICdOdW1lcmljJykge1xuICAgICAgICAgIHBhdHRlcm4gPSAnXlswLTldKyQnO1xuICAgICAgICAgIHBhdHRlcm5NZXNzYWdlID0gJ09ubHkgbnVtYmVycyBhcmUgYWxsb3dlZC4nO1xuICAgICAgICAgIGNvbmZpZ0RhdGFbJ2lzQWxsb3dOdW1iZXJzSW5UZXh0RmllbGRzJ10gPSB0cnVlO1xuICAgICAgICAgIG1heExlbmd0aCA9ICc5Jy5yZXBlYXQoTnVtYmVyKG1heExlbmd0aCkpO1xuICAgICAgICAgIGNvbmZpZ0RhdGFbJ21heFZhbHVlJ10gPSBtYXhMZW5ndGg7XG4gICAgICAgICAgY29uZmlnRGF0YVsnbWluVmFsdWUnXSA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbk9ialsnVHlwZSddID09PSAnQWxwaGFOdW1lcmljJykge1xuICAgICAgICAgIHBhdHRlcm4gPSAnXlthLXpBLVowLTlcXFxcc10rJCc7XG4gICAgICAgICAgcGF0dGVybk1lc3NhZ2UgPSAnT25seSBsZXR0ZXJzIGFuZCBudW1iZXJzIGFyZSBhbGxvd2VkLic7XG4gICAgICAgICAgY29uZmlnRGF0YVsnaXNBbGxvd051bWJlcnNJblRleHRGaWVsZHMnXSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhdHRlcm4gPSBudWxsO1xuICAgICAgICAgIHBhdHRlcm5NZXNzYWdlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb25maWdEYXRhOiBjb25maWdEYXRhLFxuICAgICAgY29udHJvbFN0eWxlOiBjb250cm9sU3R5bGUsXG4gICAgICBjb250cm9sVHlwZTpcbiAgICAgICAgcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnRlJFRSBURVhUJ1xuICAgICAgICAgID8gJ3RleHQnXG4gICAgICAgICAgOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdSQURJTyBCVVRUT04nIHx8XG4gICAgICAgICAgICBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdBRERNT1JFJ1xuICAgICAgICAgID8gJ3JhZGlvJ1xuICAgICAgICAgIDogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnIHx8XG4gICAgICAgICAgICBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdERUNMQVJBVElPTidcbiAgICAgICAgICA/ICdjaGVja2JveCdcbiAgICAgICAgICA6IHF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NBTEVOREFSJ1xuICAgICAgICAgID8gJ2RhdGUnXG4gICAgICAgICAgOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdEUk9QRE9XTidcbiAgICAgICAgICA/ICdzZWxlY3QnXG4gICAgICAgICAgOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdET0NVUExPQUQnXG4gICAgICAgICAgPyAnZmlsZSdcbiAgICAgICAgICA6ICcnLFxuICAgICAgZmllbGROYW1lOiBxdWVzdGlvbk9ialsncXVlc3Rpb25JZCddLFxuICAgICAgaXNEaXNhYmxlLFxuICAgICAgbGFiZWw6IHF1ZXN0aW9uT2JqWydxdWVzdGlvblRleHQnXSxcbiAgICAgIHBsYWNlSG9sZGVyOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UZXh0J10sXG4gICAgICB2YWxpZGF0b3JzOiB7XG4gICAgICAgIGlzUmVxdWlyZWQ6IHF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJyA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgbWluTGVuZ3RoLFxuICAgICAgICBtYXhMZW5ndGgsXG4gICAgICAgIHBhdHRlcm4sXG4gICAgICAgIHBhdHRlcm5NZXNzYWdlLFxuICAgICAgfSxcbiAgICAgIGNzc0NsYXNzOiBcIm1iLTJcIixcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnNPYmosXG4gICAgICBpc1Nob3dMYWJlbDogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgcmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMocXVlc3Rpb24/OiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZygnc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzJywgdGhpcy5xdWVzdGlvbkxpc3QpXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5xdWVzdGlvbkxpc3QpKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uTGlzdC5mb3JFYWNoKChzaW5nbGVTZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10pKSB7XG4gICAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNob3dRdWVzdGlvbihzaW5nbGVRdWVzdGlvbikpIHtcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gZmFsc2U7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBEaXNhYmxlIHRoZSBxdWVzdGlvbiBpZiBpdCBoYXMgYSBkZWZhdWx0IHZhbHVlXG4gICAgICAgICAgICBsZXQgaXNFbmFibGVEZWZhdWx0UXVlc3Rpb25zIDogYW55ID0gdGhpcy5kZWZhdWx0VmFsdWVzKClbJ2lzRW5hYmxlRGVmYXVsdFF1ZXN0aW9ucyddID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25JZCA9IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10/LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBjb25zdCBoYXNEZWZhdWx0VmFsdWUgPSAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuZGVmYXVsdFZhbHVlcygpKSAmJiBPYmplY3Qua2V5cyh0aGlzLmRlZmF1bHRWYWx1ZXMoKSkuaW5jbHVkZXMocXVlc3Rpb25JZCk7XG4gICAgICAgICAgICBpZiAoaGFzRGVmYXVsdFZhbHVlICYmIHNpbmdsZVF1ZXN0aW9uWydmaWVsZCddICYmICFpc0VuYWJsZURlZmF1bHRRdWVzdGlvbnMpIHtcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2ZpZWxkJ10gPSB7XG4gICAgICAgICAgICAgICAgLi4uc2luZ2xlUXVlc3Rpb25bJ2ZpZWxkJ10sXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlOiB0cnVlXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddKSkge1xuICAgICAgICAgICAgICAgIGxldCBpc05vbmVJbkRvbWFpblZhbHVlczogYW55ID0gc2luZ2xlUXVlc3Rpb25bXG4gICAgICAgICAgICAgICAgICAnZG9tYWluVmFsdWVzJ1xuICAgICAgICAgICAgICAgIF0uZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgKHNpbmdsZU9iajogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVPYmpbJ2RvbWFpblVpVmFsdWUnXS50b1VwcGVyQ2FzZSgpID09PSAnTk9ORSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKFxuICAgICAgICAgICAgICAgICAgKHNpbmdsZURvbWFpblZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaXNOb25lSW5Eb21haW5WYWx1ZXMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpc05vbmVJbkRvbWFpblZhbHVlc1swXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNOb25lSW5Eb21haW5WYWx1ZXNbMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXVxuICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gbm9uZSBpcyBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHNpbmdsZURvbWFpblZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGFsbCBzZWxlY3RlZCBjaGVja2JveCBxdWVzdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlLmRvbWFpblVpVmFsdWUudG9VcHBlckNhc2UoKSAhPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTk9ORSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWUuaXNEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlLmlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBsZXQgaXNTZWN0aW9uRXhpc3RzSW5CbG9ja2VkTGlzdDogYW55ID0gdGhpcy5pc0Jsb2NrZWRRdWVzdGlvbnNMaXN0LmZpbHRlcigoc2luZ2xlQmxvY2tlZE9iajogYW55KSA9PiBzaW5nbGVCbG9ja2VkT2JqWydzZWN0aW9uVGl0bGUnXS50cmltKCkgPT09IHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10udHJpbSgpKTtcbiAgICAgICAgc2luZ2xlU2VjdGlvblsnc2hvd1NlY3Rpb24nXSA9ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxuICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgLy8gaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaXNTZWN0aW9uRXhpc3RzSW5CbG9ja2VkTGlzdCkpIHtcbiAgICAgICAgLy8gICBpZiAoaXNTZWN0aW9uRXhpc3RzSW5CbG9ja2VkTGlzdFswXS5pc0Jsb2NrZWRGb3JDdXN0b21lckZsb3cgJiYgIXRoaXMubG9hZGluZ0FnZW50cG9ydGFsKSB7XG4gICAgICAgIC8vICAgICBzaW5nbGVTZWN0aW9uWydzaG93U2VjdGlvbiddID0gZmFsc2U7XG4gICAgICAgIC8vICAgICBsZXQgZmlsdGVyZWRJbmRleDogYW55ID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSk7XG4gICAgICAgIC8vICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvbjogYW55KSA9PiB7XG4gICAgICAgIC8vICAgICAgIGxldCBmaWx0ZXJlZFF1ZXN0aW9uOiBhbnkgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bZmlsdGVyZWRJbmRleF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT0gc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb25bJ3F1ZXN0aW9uSWQnXSk7XG4gICAgICAgIC8vICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb24pKSB7XG4gICAgICAgIC8vICAgICAgICAgZmlsdGVyZWRRdWVzdGlvblswXVsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBzaW5nbGVTZWN0aW9uWydzaG93U2VjdGlvbiddO1xuICAgICAgICAvLyAgICAgICB9XG4gICAgICAgIC8vICAgICB9KTtcbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vICAgaWYgKChpc1NlY3Rpb25FeGlzdHNJbkJsb2NrZWRMaXN0WzBdLmlzQmxvY2tlZEZvckFnZW50RmxvdyB8fCBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdhZ2VudENoYW5uZWwnKSA9PT0gJ0QyMCcgfHwgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnYWdlbnRDaGFubmVsJykgPT09ICdEMDUnIHx8IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2FnZW50Q2hhbm5lbCcpID09PSAnRDA2JykgJiYgdGhpcy5sb2FkaW5nQWdlbnRwb3J0YWwpIHtcbiAgICAgICAgLy8gICAgIHNpbmdsZVNlY3Rpb25bJ3Nob3dTZWN0aW9uJ10gPSBmYWxzZTtcbiAgICAgICAgLy8gICAgIGxldCBmaWx0ZXJlZEluZGV4OiBhbnkgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZmluZEluZGV4KChzaW5nbGVQZXJzb25PYmo6IGFueSkgPT4gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKTtcbiAgICAgICAgLy8gICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uT2JqSW5TZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgLy8gICAgICAgbGV0IGZpbHRlcmVkUXVlc3Rpb246IGFueSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtmaWx0ZXJlZEluZGV4XVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PSBzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvblsncXVlc3Rpb25JZCddKTtcbiAgICAgICAgLy8gICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvbikpIHtcbiAgICAgICAgLy8gICAgICAgICBmaWx0ZXJlZFF1ZXN0aW9uWzBdWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IHNpbmdsZVNlY3Rpb25bJ3Nob3dTZWN0aW9uJ107XG4gICAgICAgIC8vICAgICAgIH1cbiAgICAgICAgLy8gICAgIH0pO1xuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gfVxuICAgICAgICBsZXQgaGlkZGVuUXVlc3Rpb25zOiBhbnkgPSB0aGlzLnF1ZXN0aW9uTGlzdC5maWx0ZXIoXG4gICAgICAgICAgKHNpbmdsZVNlY3Rpb25PYmo6IGFueSkgPT4gIXNpbmdsZVNlY3Rpb25PYmpbJ3Nob3dTZWN0aW9uJ11cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoaWRkZW5RdWVzdGlvbnMpKSB7XG4gICAgICAgICAgaGlkZGVuUXVlc3Rpb25zLmZvckVhY2goKHNpbmdsZVNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaChcbiAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uT2JqSW5TZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBsZXQgZmlsdGVyZWRRdWVzdGlvbjogYW55ID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddWzBdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gPT09IHNpbmdsZVF1ZXN0aW9uT2JqSW5TZWN0aW9uWydxdWVzdGlvbklkJ10pO1xuICAgICAgICAgICAgICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgLy8gICBmaWx0ZXJlZFF1ZXN0aW9uWzBdWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5xdWVzdGlvbkxpc3Quc29ydCgoYTogYW55LCBiOiBhbnkpID0+IGFbJ3N0ZXAnXSAtIGJbJ3N0ZXAnXSk7XG5cbiAgICBjb25zb2xlLmxvZygncXVlc3Rpb25zIGxpc3QnLCB0aGlzLnF1ZXN0aW9uTGlzdCk7XG5cblxuICAgIGlmICh0aGlzLnBlcnNvblV3QW5zd2Vycykge1xuICAgICAgT2JqZWN0LmtleXModGhpcy5wZXJzb25Vd0Fuc3dlcnMpLmZvckVhY2goKHF1ZXN0aW9uSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBlcnJvcnNGb3JGaWVsZCA9IHRoaXMuZmllbGRFcnJvcnNbcXVlc3Rpb25JZF07XG4gICAgICAgIGlmIChlcnJvcnNGb3JGaWVsZCAmJiBPYmplY3Qua2V5cyhlcnJvcnNGb3JGaWVsZCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9uSWRdID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKCdxdWVzdGlvbnMgYW5zd2VycycsIHRoaXMucGVyc29uVXdBbnN3ZXJzKTtcbiAgICB0aGlzLnNhdmVRdWVzdGlvbkRldGFpbHMoKTtcblxuXG5cbiAgICB0aGlzLnF1ZXN0aW9uc1ZhbHVlQ2hhbmdlLmVtaXQodGhpcy5wZXJzb25Vd0Fuc3dlcnMpO1xuICB9XG5cbiAgc2hvd1F1ZXN0aW9uKGN1cnJlbnRRdWVzdGlvbjogYW55KSB7XG4gICAgbGV0IHNob3dRdWVzdGlvbjogYW55ID0gZmFsc2U7XG4gICAgbGV0IHN1YlF1ZXN0aW9uczogYW55ID0gW107XG4gICAgLy8gbGV0IGN1cnJlbnRTZWN0aW9uSW5kZXg6IGFueSA9IHF1ZXN0aW9uc1Jlc3BvbnNlWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSBwZXJzb25Sb2xlKVxuICAgIC8vIGxldCByb2xlID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW2N1cnJlbnRTZWN0aW9uSW5kZXhdWydyb2xlJ11cblxuICAgIHRoaXMucGVyc29uVXdSZXNwb25zZU9ialswXS5xdWVzdGlvbkxpc3QuZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgbGV0IGlzU3ViUXVlc3Rpb25PYmplY3Q6IGFueSA9IFtdO1xuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXSkpIHtcbiAgICAgICAgaXNTdWJRdWVzdGlvbk9iamVjdCA9IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10uZmlsdGVyKFxuICAgICAgICAgIChxdWVzdGlvblJlbGF0aW9uT2JqOiBhbnkpID0+XG4gICAgICAgICAgICBxdWVzdGlvblJlbGF0aW9uT2JqWyduZXh0UXVlc3Rpb25JZCddID09PVxuICAgICAgICAgICAgY3VycmVudFF1ZXN0aW9uWydxdWVzdGlvbklkJ11cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1N1YlF1ZXN0aW9uT2JqZWN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgc3ViUXVlc3Rpb25zLnB1c2goc2luZ2xlUXVlc3Rpb24pO1xuICAgICAgICBpc1N1YlF1ZXN0aW9uT2JqZWN0LmZvckVhY2goKHNpbmdsZVN1YlF1ZXN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddICE9PSAnQ0hFQ0tCT1gnICYmXG4gICAgICAgICAgICAgIHNpbmdsZVN1YlF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblZhbHVlJ10udG9TdHJpbmcoKVswXSAhPT0gJyEnICYmXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dID09PVxuICAgICAgICAgICAgICAgIHNpbmdsZVN1YlF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblZhbHVlJ10pIHx8XG4gICAgICAgICAgICAoc2luZ2xlU3ViUXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXS50b1N0cmluZygpWzBdID09PSAnIScgJiZcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXVxuICAgICAgICAgICAgICApICYmXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dICE9PVxuICAgICAgICAgICAgICAgIHNpbmdsZVN1YlF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblZhbHVlJ11cbiAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAuc3BsaXQoJyEnKVsxXSkgfHxcbiAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiZcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXVxuICAgICAgICAgICAgICApICYmXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dPy5pbmNsdWRlcyhzaW5nbGVTdWJRdWVzdGlvblsncGFyZW50UXVlc3Rpb25WYWx1ZSddKVxuICAgICAgICAgICAgICAvLyB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXT8uZmlsdGVyKFxuICAgICAgICAgICAgICAvLyAgIChzaW5nbGVPYmo6IGFueSkgPT5cbiAgICAgICAgICAgICAgLy8gICAgIHNpbmdsZU9iaiA9PT1cbiAgICAgICAgICAgICAgLy8gICAgIHNpbmdsZVN1YlF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblZhbHVlJ11cbiAgICAgICAgICAgICAgLy8gKS5sZW5ndGggPiAwXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBzaG93UXVlc3Rpb24gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc3ViUXVlc3Rpb25zKSAmJlxuICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddKVxuICAgICkge1xuICAgICAgc2hvd1F1ZXN0aW9uID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShjdXJyZW50UXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uUmVsYXRpb24nXSkgJiZcbiAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgIGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddWydwYXJlbnRRdWVzdGlvbklkJ11cbiAgICAgICkgJiZcbiAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgIGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddWydwYXJlbnRRdWVzdGlvbklkJ11cbiAgICAgICAgXVxuICAgICAgKSAmJlxuICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgIGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddWydwYXJlbnRRdWVzdGlvbklkJ11cbiAgICAgIF0gPT09IGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddWydwYXJlbnRRdWVzdGlvbkFuc3dlciddXG4gICAgKSB7XG4gICAgICBzaG93UXVlc3Rpb24gPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoY3VycmVudFF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ05PRElTUExBWScpIHtcbiAgICAgIHNob3dRdWVzdGlvbiA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gc2hvd1F1ZXN0aW9uO1xuICB9XG5cbiAgc2F2ZVF1ZXN0aW9uRGV0YWlscygpIHtcbiAgICAvLyByZW1vdmUgYWxsIGNoZWNrYm94IHF1ZXN0aW9ucyBwcmVzZW50IGluIHZhbHVlc1xuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3gpKSB7XG4gICAgICAvLyBsZXQgbGlmZUFzc3VyZWRrZXlzOiBhbnkgPSBPYmplY3Qua2V5cyh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXSk7XG4gICAgICAvLyBsZXQgcG9saWN5QXNzdXJlZEtleXM6IGFueSA9IE9iamVjdC5rZXlzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydwb2xpY3lIb2xkZXInXSk7XG4gICAgICAvLyBsZXQgbGlmZUFzc3VyZWRPbmVLZXlzOiBhbnkgPSBPYmplY3Qua2V5cyh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWRPbmUnXSk7XG4gICAgICAvLyBsZXQgbGlmZUFzc3VyZWRUd29LZXlzOiBhbnkgPSBPYmplY3Qua2V5cyh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWRUd28nXSk7XG4gICAgICAvLyB0aGlzLnBlcnNvblV3QW5zd2Vycy5mb3JFYWNoKChzaW5nbGVLZXk6IGFueSkgPT4ge1xuICAgICAgLy8gICBpZiAoaXNOYU4oTnVtYmVyKHNpbmdsZUtleSkpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkJ11bc2luZ2xlS2V5XSkgJiYgdGhpcy5saXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveC5pbmNsdWRlcyh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXVtzaW5nbGVLZXldKSkge1xuICAgICAgLy8gICAgIGRlbGV0ZSB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXVtzaW5nbGVLZXldO1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9KTtcbiAgICAgIC8vIHBvbGljeUFzc3VyZWRLZXlzLmZvckVhY2goKHNpbmdsZUtleTogYW55KSA9PiB7XG4gICAgICAvLyAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddW3NpbmdsZUtleV0pICYmIHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3guaW5jbHVkZXModGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ3BvbGljeUhvbGRlciddW3NpbmdsZUtleV0pKSB7XG4gICAgICAvLyAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzWydwb2xpY3lIb2xkZXInXVtzaW5nbGVLZXldO1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9KTtcbiAgICAgIC8vIGxpZmVBc3N1cmVkT25lS2V5cy5mb3JFYWNoKChzaW5nbGVLZXk6IGFueSkgPT4ge1xuICAgICAgLy8gICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWRPbmUnXVtzaW5nbGVLZXldKSAmJiB0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94LmluY2x1ZGVzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZE9uZSddW3NpbmdsZUtleV0pKSB7XG4gICAgICAvLyAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzWydwb2xpY3lIb2xkZXInXVtzaW5nbGVLZXldO1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9KTtcbiAgICAgIC8vIGxpZmVBc3N1cmVkVHdvS2V5cy5mb3JFYWNoKChzaW5nbGVLZXk6IGFueSkgPT4ge1xuICAgICAgLy8gICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWRUd28nXVtzaW5nbGVLZXldKSAmJiB0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94LmluY2x1ZGVzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZFR3byddW3NpbmdsZUtleV0pKSB7XG4gICAgICAvLyAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzWydwb2xpY3lIb2xkZXInXVtzaW5nbGVLZXldO1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9KTtcbiAgICB9XG4gICAgLy8gbGV0IGhlaWdodEluSW5jaGVzT2JqOiBhbnkgPSBbXTtcbiAgICAvLyBsZXQgaGVpZ2h0SW5GZWV0T2JqOiBhbnkgPSBbXTtcbiAgICAvLyBsZXQgaGVpZ2h0SW5DZW50aW1ldGVyT2JqOiBhbnkgPSBbXTtcbiAgICBsZXQgaXNWYWxpZDogYW55ID0gdHJ1ZTtcbiAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9iaikgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXSkpIHtcbiAgICAvLyAgIGxldCBsYUluZGV4OiBhbnkgPSB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXS5maW5kSW5kZXgoKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gJ2xpZmVBc3N1cmVkJyk7XG4gICAgLy8gICBpZiAobGFJbmRleCAhPT0gLTEgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtsYUluZGV4XSkpIHtcbiAgICAvLyAgICAgaGVpZ2h0SW5JbmNoZXNPYmogPSB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtsYUluZGV4XVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUSScpO1xuICAgIC8vICAgICBoZWlnaHRJbkZlZXRPYmogPSB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtsYUluZGV4XVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicpO1xuICAgIC8vICAgICBoZWlnaHRJbkNlbnRpbWV0ZXJPYmogPSB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtsYUluZGV4XVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUJyk7XG4gICAgLy8gICB9XG4gICAgLy8gfVxuXG4gICAgLy8gdmFsaWRhdGlvbiBmb3IgbWVkaWNhbCBhbmQgbm9uIG1lZGljYWwgcXVlc3Rpb25zIDpcbiAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9iaikgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdNYXN0ZXJPYmopICYmIGlzVmFsaWQpIHtcbiAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd01hc3Rlck9iai5mb3JFYWNoKChzaW5nbGVQZXJzb25PYmo6IGFueSwgc2luZ2xlUGVyc29uSW5kZXg6IGFueSkgPT4ge1xuICAgIC8vICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVQZXJzb25PYmpbJ3F1ZXN0aW9uTGlzdCddKSAmJiBpc1ZhbGlkKSB7XG4gICAgLy8gICAgICAgbGV0IHJvbGU6IGFueSA9IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSAnbGlmZUFzc3VyZWQnID8gXCJsaWZlIGFzc3VyZWRcIiA6IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSAncG9saWN5SG9sZGVyJyA/IFwicG9saWN5IGhvbGRlclwiIDogc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09ICdsaWZlQXNzdXJlZE9uZScgPyBcIkpvaW50IExpZmUgMVwiIDogc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09ICdsaWZlQXNzdXJlZFR3bycgPyBcIkpvaW50IExpZmUgMlwiIDogXCJcIjtcbiAgICAvLyAgICAgICBzaW5nbGVQZXJzb25PYmpbJ3F1ZXN0aW9uTGlzdCddLmZvckVhY2goKHNpbmdsZVNlY3Rpb246IGFueSkgPT4ge1xuICAgIC8vICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10pICYmIGlzVmFsaWQpIHtcbiAgICAvLyAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSkgJiYgKHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10udG9VcHBlckNhc2UoKS5yZXBsYWNlQWxsKCcgJywgJ18nKSA9PT0gJ1RFTExfVVNfTU9SRScgfHwgc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50b1VwcGVyQ2FzZSgpLnJlcGxhY2VBbGwoJyAnLCAnXycpID09PSAnQkFTSUNfREVUQUlMUycpICYmIGlzVmFsaWQpIHtcblxuICAgIC8vICAgICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGhlaWdodCBlbnRlcmVkIGluIGZlZXRcbiAgICAvLyAgICAgICAgICAgICBpZiAodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J10gPT09ICdGRUVUJykge1xuICAgIC8vICAgICAgICAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzT2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUSScpO1xuICAgIC8vICAgICAgICAgICAgICAgbGV0IGhlaWdodEluRmVldE9iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcigob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnKTtcbiAgICAvLyAgICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluSW5jaGVzT2JqKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluRmVldE9iaikgJiYgKHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10pIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10pKSkge1xuICAgIC8vICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJiAhc2F2ZWRyYWZ0ICYmIHJlZGlyZWN0KSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiSW5kZXggPSBzaW5nbGVQZXJzb25JbmRleDtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JZDogYW55ID0gaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ10gKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIGVudGVyIEhlaWdodCBpbiBGZWV0IGFuZCBJbmNoZXMgZm9yICcgKyByb2xlXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5vcGVuU25hY2tCYXIoJ1BsZWFzZSBlbnRlciBIZWlnaHQgaW4gRmVldCBhbmQgSW5jaGVzIGZvciAnICsgcm9sZSwgJ0Nsb3NlJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiAhdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09PSAnbGlmZSBhc3N1cmVkJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvbGUgPT09ICdwb2xpY3kgaG9sZGVyJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX1BIJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdqb2ludGxpZmUnKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09PSAnSm9pbnQgTGlmZSAxJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdKT0lOVExJRkVPTkUnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ0pvaW50IExpZmUgMicpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigxKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnSk9JTlRMSUZFVFdPJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAvLyAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgaGVpZ2h0IGluIGNtXG4gICAgLy8gICAgICAgICAgICAgbGV0IGhlaWdodEluQ2VudGltZXRlck9iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcigob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVCcpO1xuICAgIC8vICAgICAgICAgICAgIGlmICh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0NNJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXSkgJiZcbiAgICAvLyAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DZW50aW1ldGVyT2JqKSAmJiBpc1ZhbGlkKSB7XG4gICAgLy8gICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgLy8gICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmlzTWFuZGF0b3J5RmllbGQgJiYgIXNhdmVkcmFmdCAmJiByZWRpcmVjdCkge1xuICAgIC8vICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgIT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYkluZGV4ID0gc2luZ2xlUGVyc29uSW5kZXg7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddICsgJ18nICsgc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIGVudGVyIEhlaWdodCBpbiBDTSAnICsgcm9sZVxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0pO1xuICAgIC8vICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uub3BlblNuYWNrQmFyKCdQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIENNICcgKyByb2xlLCAnQ2xvc2UnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiAhdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBpZiAocm9sZSA9PT0gJ2xpZmUgYXNzdXJlZCcpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb2xlID09PSAncG9saWN5IGhvbGRlcicpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9QSCcpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ2pvaW50bGlmZScpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09PSAnSm9pbnQgTGlmZSAxJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdKT0lOVExJRkVPTkUnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ0pvaW50IExpZmUgMicpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMSk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnSk9JTlRMSUZFVFdPJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICB9XG5cbiAgICAvLyAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgIH1cblxuICAgIC8vICAgICAgICAgICB9XG5cbiAgICAvLyAgICAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25PYmo6IGFueSkgPT4ge1xuICAgIC8vICAgICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGJhc2ljIHF1ZXN0aW9uc1xuICAgIC8vICAgICAgICAgICAgIGlmIChcbiAgICAvLyAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmopICYmXG4gICAgLy8gICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10pICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcbiAgICAvLyAgICAgICAgICAgICAgIGlzVmFsaWQgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ0lNQUdFIFRFWFQnICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVCcgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ0RFQ0xBUkFUSU9OJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdoYXJkQ29weUxhbmcnICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdQQVNTUE9SVF9VUExPQUQnICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVEYnICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVEknICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddLnRvU3RyaW5nKCkgPT09ICdOJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgKChzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ11dKSkgfHxcbiAgICAvLyAgICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJiAhdGhpcy52YWxpZGF0ZUNoZWNrQm94RmllbGQoc2luZ2xlUXVlc3Rpb25PYmosIHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSkpICYmIGlzVmFsaWRcbiAgICAvLyAgICAgICAgICAgICApIHtcbiAgICAvLyAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJiAhc2F2ZWRyYWZ0ICYmIHJlZGlyZWN0KSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIGxldCBxdWVzdGlvbklkOiBhbnkgPSBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddICsgJ18nICsgc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWJJbmRleCA9IHNpbmdsZVBlcnNvbkluZGV4O1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xuICAgIC8vICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBlbnRlciBhbGwgdGhlIGRldGFpbHMgaW4gJyArIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10gKyAnIGZvciAnICsgcm9sZVxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0pO1xuICAgIC8vICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uub3BlblNuYWNrQmFyKCdQbGVhc2UgZW50ZXIgYWxsIHRoZSBkZXRhaWxzIGluICcgKyBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddICsgJyBmb3IgJyArIHJvbGUsICdDbG9zZScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmICF0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09PSAnbGlmZSBhc3N1cmVkJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvbGUgPT09ICdwb2xpY3kgaG9sZGVyJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigxKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX1BIJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnam9pbnRsaWZlJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJqb2ludCBsaWZlIGNhc2VcIik7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICB9XG5cbiAgICAvLyAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgIH1cblxuICAgIC8vICAgICAgICAgICAgIGlmIChcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ1BBU1NQT1JUX1VQTE9BRCcgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXG4gICAgLy8gICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJlxuICAgIC8vICAgICAgICAgICAgICAgcmVkaXJlY3RcbiAgICAvLyAgICAgICAgICAgICApIHtcbiAgICAvLyAgICAgICAgICAgICAgIGxldCBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqOiBhbnkgPSB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnF1ZXN0aW9uc1Bhc3Nwb3J0VXBsb2FkT2JqLmZpbHRlcigoc2luZ2xlT2JqOiBhbnkpID0+IChzaW5nbGVPYmpbJ3BlcnNvblR5cGUnXSA9PT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gJiYgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZU9ialsnZG1zSWQnXSkpKTtcbiAgICAvLyAgICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmopKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChgJHtmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydxdWVzdGlvblR5cGUnXX1fJHtmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWyd0eXBlJ119XyR7ZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsncGVyc29uVHlwZSddfWApO1xuICAgIC8vICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgdXBsb2FkIHBhc3Nwb3J0ICcgKyBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydsYWJlbCddICsgJyBkb2N1bWVudCBmb3IgJyArIHJvbGVcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAvLyAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIHVwbG9hZCBwYXNzcG9ydCAnICsgZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsnbGFiZWwnXSArICcgZG9jdW1lbnQgZm9yICcgKyByb2xlLCAnQ2xvc2UnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgIXRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT09ICdsaWZlIGFzc3VyZWQnKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ3BvbGljeSBob2xkZXInKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9QSCcpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdqb2ludGxpZmUnKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImpvaW50IGxpZmUgY2FzZVwiKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgIC8vICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gICAgICAgICAgICAgICB9XG5cbiAgICAvLyAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgZGVjbGFyYXRpb24gcXVlc3Rpb25zXG4gICAgLy8gICAgICAgICAgICAgaWYgKGlzVmFsaWQgJiYgc2luZ2xlUXVlc3Rpb25PYmoucXVlc3Rpb25UeXBlID09PSAnREVDTEFSQVRJT04nICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcbiAgICAvLyAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSkgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJ1xuICAgIC8vICAgICAgICAgICAgICkge1xuICAgIC8vICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQgJiZcbiAgICAvLyAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2VycykgJiZcbiAgICAvLyAgICAgICAgICAgICAgICAgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKSAmJlxuICAgIC8vICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdKSAmJlxuICAgIC8vICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ10pICYmXG4gICAgLy8gICAgICAgICAgICAgICAgICAgKCghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkgJiZcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSA9PT0gJ04nKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSkpIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pKSB7XG5cbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWJJbmRleCA9IHNpbmdsZVBlcnNvbkluZGV4O1xuICAgIC8vICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5pc01hbmRhdG9yeUZpZWxkICYmICFzYXZlZHJhZnQgJiYgcmVkaXJlY3QpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JZDogYW55ID0gc2luZ2xlUXVlc3Rpb25PYmoucXVlc3Rpb25JZCArICdfJyArIHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2Ugc2VsZWN0IGFsbCB0aGUgZGV0YWlscyBpbiAnICsgc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSArICcgZm9yICcgKyByb2xlXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgfVxuXG4gICAgLy8gICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgbWVkaWNhbCBzdWIgcXVlc3Rpb25zXG4gICAgLy8gICAgICAgICAgICAgLy8gaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZSkpIHtcbiAgICAvLyAgICAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UuZm9yRWFjaCgocXVlc3Rpb246IGFueSkgPT4ge1xuICAgIC8vICAgICAgICAgICAgIC8vICAgICBpZiAoXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgdGhpcy5zaG93U3ViUXVlc3Rpb24ocXVlc3Rpb24pICYmXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgcXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddICE9PSAnSU1BR0UgVEVYVCcgJiZcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICBxdWVzdGlvblsnb3B0aW9uYWxRdWVzdGlvbiddLnRvU3RyaW5nKCkgPT09ICdOJyAmJlxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICgocXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddICE9PSAnQ0hFQ0tCT1gnICYmXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkJ11bcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0pKSB8fFxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICAgKHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJiAhdGhpcy52YWxpZGF0ZUNoZWNrQm94RmllbGQocXVlc3Rpb24sICdsaWZlQXNzdXJlZCcpKSlcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgKSB7XG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmxvYWRpbmdBZ2VudHBvcnRhbCAmJiAhc2F2ZWRyYWZ0KSB7XG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBhbnN3ZXIgYWxsIG1lZGljYWwgc3ViIHF1ZXN0aW9ucyAnICsgcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSArICcgJyArIHF1ZXN0aW9uWydxdWVzdGlvblRleHQnXVxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICAgfSk7XG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgfVxuICAgIC8vICAgICAgICAgICAgIC8vICAgICB9XG4gICAgLy8gICAgICAgICAgICAgLy8gICB9KTtcbiAgICAvLyAgICAgICAgICAgICAvLyB9XG4gICAgLy8gICAgICAgICAgIH0pO1xuXG4gICAgLy8gICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGZhdGNoIGRlY2xhcmF0aW9uXG4gICAgLy8gICAgICAgICAgIC8vIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvbi5xdWVzdGlvbnMpICYmIGlzVmFsaWQpe1xuICAgIC8vICAgICAgICAgICAvLyBzaW5nbGVTZWN0aW9uLnF1ZXN0aW9ucy5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iajphbnkpID0+IHtcbiAgICAvLyAgICAgICAgICAgLy8gICBpZihpc1ZhbGlkICYmIHNpbmdsZVF1ZXN0aW9uT2JqLnF1ZXN0aW9uVHlwZSA9PT0gJ0RFQ0xBUkFUSU9OJyAmJiBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddKSAmJlxuICAgIC8vICAgICAgICAgICAvLyAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddID09PSAnTidcbiAgICAvLyAgICAgICAgICAgLy8gICAgICl7XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgIGlmKCBpc1ZhbGlkICYmXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2VycykgJiZcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pICYmXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXSkgJiZcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ10pICAmJlxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgKCghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkgJiZcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSA9PT0gJ04nKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSkpIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pKSB7XG5cbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgIT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSB7XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiA9IHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWJJbmRleCA9IHNpbmdsZVBlcnNvbkluZGV4O1xuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmxvYWRpbmdBZ2VudHBvcnRhbCAmJiAhc2F2ZWRyYWZ0KSB7XG4gICAgLy8gICAgICAgICAgIC8vIGxldCBxdWVzdGlvbklkOiBhbnkgPSBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvbklkICsgJ18nICsgc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBzZWxlY3QgYWxsIHRoZSBkZXRhaWxzIGluICcgKyBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddICsgJyBmb3IgJyArIHJvbGVcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgIH0pO1xuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgfVxuICAgIC8vICAgICAgICAgICAvLyAgIH1cbiAgICAvLyAgICAgICAgICAgLy8gfSk7XG4gICAgLy8gICAgICAgICAgIC8vIH1cblxuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICAgIH0pO1xuICAgIC8vICAgICB9XG4gICAgLy8gICB9KTtcbiAgICAvLyB9XG5cbiAgICAvLyBpZiAoKGlzVmFsaWQgfHwgc2F2ZWRyYWZ0KSB8fCB0aGlzLnNoYXJlZFNlcnZpY2UubG9hZGluZ0FnZW50cG9ydGFsKSB7XG4gICAgLy8gaWYgKGlzVmFsaWQpIHtcbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgLy8gdGhpcy5sb2FkZXJTZXJ2aWNlLmRpc3BsYXkodHJ1ZSk7XG4gICAgICAvLyBsZXQgcmVxdWVzdDogYW55ID0gW107XG4gICAgICBsZXQgbWFpblJlcU9iajogYW55ID0gW107XG4gICAgICBsZXQgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uczogYW55ID0gW107XG4gICAgICBsZXQgbWFpblJlcXVlc3RGb3JMYTogYW55ID0gW107XG4gICAgICBsZXQgbWFpblJlcXVlc3RGb3JQaDogYW55ID0gW107XG4gICAgICB0aGlzLnF1ZXN0aW9uTGlzdC5mb3JFYWNoKChzaW5nbGVTZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgLy8gaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUGVyc29uT2JqWydxdWVzdGlvbkxpc3QnXSkpIHtcbiAgICAgICAgLy8gc2luZ2xlUGVyc29uT2JqWydxdWVzdGlvbkxpc3QnXS5mb3JFYWNoKChzaW5nbGVTZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgLy8gaWYgKFxuICAgICAgICAvLyAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSkgJiZcbiAgICAgICAgLy8gICAoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50b1VwcGVyQ2FzZSgpLnJlcGxhY2VBbGwoJyAnLCAnXycpID09PVxuICAgICAgICAvLyAgICAgJ1RFTExfVVNfTU9SRScgfHxcbiAgICAgICAgLy8gICAgIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10udG9VcHBlckNhc2UoKS5yZXBsYWNlQWxsKCcgJywgJ18nKSA9PT1cbiAgICAgICAgLy8gICAgICAgJ0JBU0lDX0RFVEFJTFMnKVxuICAgICAgICAvLyApIHtcbiAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBoZWlnaHQgaW4gY21cbiAgICAgICAgICBsZXQgaGVpZ2h0SW5DZW50aW1ldGVyT2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxuICAgICAgICAgICAgKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFQnIHx8IG9ialsncXVlc3Rpb25JZCddID09PSB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J11cbiAgICAgICAgICApO1xuICAgICAgICAgIGxldCBoZWlnaHRJbkluY2hlc09iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcbiAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUSScgfHwgb2JqWydxdWVzdGlvbklkJ10gPT09IHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXVxuICAgICAgICAgICk7XG4gICAgICAgICAgbGV0IGhlaWdodEluRmVldE9iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcbiAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicgfHwgb2JqWydxdWVzdGlvbklkJ10gPT09IHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J10gPT09ICdDTScgJiZcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DZW50aW1ldGVyT2JqKSAmJlxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmopICYmXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J11cbiAgICAgICAgICAgICkgJiYgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXVxuICAgICAgICAgICAgKSAmJiAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBwYXNzIGhlaWdodCBpbiBjbSBvYmpcbiAgICAgICAgICAgIGxldCBjbU9iakluQW5zd2Vyc2luZGV4OiBhbnkgPSBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgKG9iajogYW55KSA9PlxuICAgICAgICAgICAgICAgIG9iai5xdWVzdGlvbklkID09PSBoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXSAmJlxuICAgICAgICAgICAgICAgIG9ialsncGVyc29uVVdJZCddID09PSBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ11cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoY21PYmpJbkFuc3dlcnNpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tjbU9iakluQW5zd2Vyc2luZGV4XVsnYW5zd2VyJ10gPVxuICAgICAgICAgICAgICAgIHBhcnNlSW50KFxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddXG4gICAgICAgICAgICAgICAgKS50b1N0cmluZygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgYW5zd2VyOiBwYXJzZUludChcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXVxuICAgICAgICAgICAgICAgICkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxuICAgICAgICAgICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcbiAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IGhlaWdodEluQ2VudGltZXRlck9ialswXVsnY2x1c3RlcklkJ10sXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBoZWlnaHQgaW4gaW5jaGVzXG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5JbmNoZXM6IGFueSA9IChcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddICogMC4zOTM3MDFcbiAgICAgICAgICAgICkudG9GaXhlZCgyKTtcbiAgICAgICAgICAgIGxldCBoZWlnaHRJbkZlZXQ6IGFueSA9XG4gICAgICAgICAgICAgIHBhcnNlRmxvYXQoKGhlaWdodEluSW5jaGVzIC8gMTIpLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXSkgPiAxMlxuICAgICAgICAgICAgICAgID8gKGhlaWdodEluSW5jaGVzIC8gMTIpLnRvRml4ZWQoMSlcbiAgICAgICAgICAgICAgICA6IChoZWlnaHRJbkluY2hlcyAvIDEyKS50b0ZpeGVkKDIpO1xuICAgICAgICAgICAgbGV0IGluY2hlc29iakluQW5zd2Vyc2luZGV4OiBhbnkgPVxuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAob2JqOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICBvYmoucXVlc3Rpb25JZCA9PT0gaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXSAmJlxuICAgICAgICAgICAgICAgICAgb2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGluY2hlc29iakluQW5zd2Vyc2luZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW2luY2hlc29iakluQW5zd2Vyc2luZGV4XVsnYW5zd2VyJ10gPVxuICAgICAgICAgICAgICAgIHBhcnNlSW50KGhlaWdodEluSW5jaGVzKS50b1N0cmluZygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICBhbnN3ZXI6IHBhcnNlSW50KGhlaWdodEluSW5jaGVzKS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXG4gICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxuICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ2NsdXN0ZXJJZCddLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGhlaWdodCBpbiBmZWV0XG5cbiAgICAgICAgICAgIGxldCBmZWV0T2JqSW5BbnN3ZXJzaW5kZXg6IGFueSA9XG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgIChvYmo6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgIG9iai5xdWVzdGlvbklkID09PSBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSAmJlxuICAgICAgICAgICAgICAgICAgb2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGZlZXRPYmpJbkFuc3dlcnNpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tmZWV0T2JqSW5BbnN3ZXJzaW5kZXhdWydhbnN3ZXInXSA9XG4gICAgICAgICAgICAgICAgcGFyc2VGbG9hdChoZWlnaHRJbkZlZXQpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICBhbnN3ZXI6IHBhcnNlRmxvYXQoaGVpZ2h0SW5GZWV0KS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXG4gICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxuICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogaGVpZ2h0SW5GZWV0T2JqWzBdWydjbHVzdGVySWQnXSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnRkVFVCcgJiZcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXVxuICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkZlZXRPYmopKSB7XG4gICAgICAgICAgICAgIGxldCBoZWlnaHRJbkluY2hlczogYW55ID1cbiAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSkgKlxuICAgICAgICAgICAgICAgICAgMTIgK1xuICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddKTtcbiAgICAgICAgICAgICAgbGV0IGhlaWdodEluQ206IGFueSA9IChcbiAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KGhlaWdodEluSW5jaGVzKSAvIDAuMzkzNzAxXG4gICAgICAgICAgICAgICkudG9GaXhlZCgyKTtcbiAgICAgICAgICAgICAgbGV0IGZlZXRPYmpJbkFuc3dlcnNpbmRleDogYW55ID1cbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgIChvYmo6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgb2JqLnF1ZXN0aW9uSWQgPT09IGhlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddICYmXG4gICAgICAgICAgICAgICAgICAgIG9ialsncGVyc29uVVdJZCddID09PSBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ11cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoZmVldE9iakluQW5zd2Vyc2luZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbZmVldE9iakluQW5zd2Vyc2luZGV4XVsnYW5zd2VyJ10gPVxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddLnRvU3RyaW5nKCkgK1xuICAgICAgICAgICAgICAgICAgJy4nICtcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J11cbiAgICAgICAgICAgICAgICAgIF0udG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgICBhbnN3ZXI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXS50b1N0cmluZygpICtcbiAgICAgICAgICAgICAgICAgICAgJy4nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxuICAgICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxuICAgICAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkZlZXRPYmpbMF1bJ2NsdXN0ZXJJZCddLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGxldCBpbmNoZXNvYmpJbkFuc3dlcnNpbmRleDogYW55ID1cbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgIChvYmo6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgb2JqLnF1ZXN0aW9uSWQgPT09IGhlaWdodEluSW5jaGVzT2JqWzBdWydxdWVzdGlvbklkJ10gJiZcbiAgICAgICAgICAgICAgICAgICAgb2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChpbmNoZXNvYmpJbkFuc3dlcnNpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW2luY2hlc29iakluQW5zd2Vyc2luZGV4XVsnYW5zd2VyJ10gPVxuICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoaGVpZ2h0SW5JbmNoZXMpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGhlaWdodEluSW5jaGVzT2JqWzBdWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgICBhbnN3ZXI6IHBhcnNlSW50KGhlaWdodEluSW5jaGVzKS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcbiAgICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ2NsdXN0ZXJJZCddLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGxldCBjbU9iakluQW5zd2Vyc2luZGV4OiBhbnkgPVxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgKG9iajogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICBvYmoucXVlc3Rpb25JZCA9PT0gaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ10gJiZcbiAgICAgICAgICAgICAgICAgICAgb2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChjbU9iakluQW5zd2Vyc2luZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbY21PYmpJbkFuc3dlcnNpbmRleF1bJ2Fuc3dlciddID1cbiAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGhlaWdodEluQ20pLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgICAgYW5zd2VyOiBwYXJzZUludChoZWlnaHRJbkNtKS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcbiAgICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydjbHVzdGVySWQnXSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DZW50aW1ldGVyT2JqKSAmJlxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGxldCBoZWlnaHRJbkNtQW5zd2VyT2JqZWN0OiBhbnkgPSBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT1cbiAgICAgICAgICAgICAgICBoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNtQW5zd2VyT2JqZWN0KSAmJlxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ21BbnN3ZXJPYmplY3RbMF1bJ2Fuc3dlciddKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2hlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddXSA9XG4gICAgICAgICAgICAgICAgaGVpZ2h0SW5DbUFuc3dlck9iamVjdFswXVsnYW5zd2VyJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkluY2hlc09iaikgJiZcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGxldCBoZWlnaHRJbkluY2hlc0Fuc3dlck9iamVjdDogYW55ID1cbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PVxuICAgICAgICAgICAgICAgICAgaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluSW5jaGVzQW5zd2VyT2JqZWN0KSAmJlxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluSW5jaGVzQW5zd2VyT2JqZWN0WzBdWydhbnN3ZXInXSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1toZWlnaHRJbkluY2hlc09ialswXVsncXVlc3Rpb25JZCddXSA9XG4gICAgICAgICAgICAgICAgaGVpZ2h0SW5JbmNoZXNBbnN3ZXJPYmplY3RbMF1bJ2Fuc3dlciddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0T2JqKSAmJlxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGxldCBoZWlnaHRJbkZlZXRBbnN3ZXJPYmplY3Q6IGFueSA9XG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT1cbiAgICAgICAgICAgICAgICAgIGhlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0QW5zd2VyT2JqZWN0KSAmJlxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluRmVldEFuc3dlck9iamVjdFswXVsnYW5zd2VyJ10pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ11dID1cbiAgICAgICAgICAgICAgICBoZWlnaHRJbkZlZXRBbnN3ZXJPYmplY3RbMF1bJ2Fuc3dlciddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgLy8gfVxuICAgICAgICBsZXQgaXNOb0Rpc3BsYXlRdWVzdGlvbkluU2VjdGlvbjogYW55ID0gIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXVxuICAgICAgICApXG4gICAgICAgICAgPyBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXG4gICAgICAgICAgICAgIChzaW5nbGVEYXRhOiBhbnkpID0+IHNpbmdsZURhdGFbJ3F1ZXN0aW9uVHlwZSddID09PSAnTk9ESVNQTEFZJ1xuICAgICAgICAgICAgKVxuICAgICAgICAgIDogW107XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoc2luZ2xlU2VjdGlvblsnc2hvd1NlY3Rpb24nXSB8fFxuICAgICAgICAgICAgaXNOb0Rpc3BsYXlRdWVzdGlvbkluU2VjdGlvbi5sZW5ndGggPiAwKSAmJlxuICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10pXG4gICAgICAgICkge1xuICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ2hhcmRDb3B5TGFuZycpIHtcbiAgICAgICAgICAgICAgaWYgKHNpbmdsZVF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dID0gJ0VuZ2xpc2gnO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGNoZWNrZWRPcHRpb25zQXJyOiBhbnkgPSBbXTtcbiAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSkpIHtcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLmZvckVhY2goXG4gICAgICAgICAgICAgICAgKHNpbmdsZURvbWFpblZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11cbiAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tlZE9wdGlvbnNBcnIucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnXG4gICAgICAgICAgICAgICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgLy8gZm9yIGNoZWNrYm94IHF1ZXN0aW9uXG5cbiAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0OiBhbnkgPVxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgKHNpbmdsZUFuc3dlck9iajogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVBbnN3ZXJPYmpbJ3F1ZXN0aW9uSWQnXSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddICYmXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZUFuc3dlck9ialsncGVyc29uVVdJZCddID09PVxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChxdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgICAgYW5zd2VyOiAnJyxcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXG4gICAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXG4gICAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IHNpbmdsZVF1ZXN0aW9uWydjbHVzdGVySWQnXSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIG9ialsnYW5zd2VyJ10gPSB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaChvYmopO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbcXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3RdW1xuICAgICAgICAgICAgICAgICAgJ2Fuc3dlcidcbiAgICAgICAgICAgICAgICBdID0gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0udG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSAhPT0gJ0NIRUNLQk9YJyAmJlxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAvLyBub24gY2hlY2tib3ggcXVlc3Rpb25cbiAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0OiBhbnkgPVxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgKHNpbmdsZUFuc3dlck9iajogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVBbnN3ZXJPYmpbJ3F1ZXN0aW9uSWQnXSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddICYmXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZUFuc3dlck9ialsncGVyc29uVVdJZCddID09PVxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChxdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgICAgYW5zd2VyOlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDQUxFTkRBUidcbiAgICAgICAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0sXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxuICAgICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxuICAgICAgICAgICAgICAgICAgY2x1c3RlcklkOiBzaW5nbGVRdWVzdGlvblsnY2x1c3RlcklkJ10sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW3F1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0XVtcbiAgICAgICAgICAgICAgICAgICdhbnN3ZXInXG4gICAgICAgICAgICAgICAgXSA9XG4gICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDQUxFTkRBUidcbiAgICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZihzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSkpIHtcbiAgICAgICAgICAgIC8vICAgbGV0IHF1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0IDogYW55ID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoKHNpbmdsZUFuc3dlck9iaiA6IGFueSkgPT4gKHNpbmdsZUFuc3dlck9ialsncXVlc3Rpb25JZCddID09PSBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddICAmJiBzaW5nbGVBbnN3ZXJPYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddKSlcbiAgICAgICAgICAgIC8vICAgaWYocXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3QgPT09IC0xKSB7XG4gICAgICAgICAgICAvLyAgICAgbGV0IG9iajogYW55ID0ge1xuICAgICAgICAgICAgLy8gICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxuICAgICAgICAgICAgLy8gICAgICAgcXVlc3Rpb25JZDogc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgIC8vICAgICAgIGFuc3dlcjogc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInID8gdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0obmV3IERhdGUodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0pLCAneXl5eS1NTS1kZCcpIDogdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0sXG4gICAgICAgICAgICAvLyAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxuICAgICAgICAgICAgLy8gICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxuICAgICAgICAgICAgLy8gICAgICAgY2x1c3RlcklkOiBzaW5nbGVRdWVzdGlvblsnY2x1c3RlcklkJ10sXG4gICAgICAgICAgICAvLyAgICAgfTtcbiAgICAgICAgICAgIC8vICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2gob2JqKTtcbiAgICAgICAgICAgIC8vICAgICBpZihzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcbiAgICAgICAgICAgIC8vICAgICAgIGxldCBjaGVja2VkT3B0aW9uc0FyciA6IGFueSA9IFtdO1xuICAgICAgICAgICAgLy8gICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10pKSB7XG4gICAgICAgICAgICAvLyAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKChzaW5nbGVEb21haW5WYWx1ZSA6IGFueSkgPT4ge1xuICAgICAgICAgICAgLy8gICAgICAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pICYmIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBjaGVja2VkT3B0aW9uc0Fyci5wdXNoKHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ10pO1xuICAgICAgICAgICAgLy8gICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyAgICAgICB9XG4gICAgICAgICAgICAvLyAgICAgICBvYmpbJ2Fuc3dlciddID0gY2hlY2tlZE9wdGlvbnNBcnIudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyAgICAgLy8gb2JqZWN0IGFscmVhZHkgdGhlcmUgc28gb3ZlciByaWRlIHRoZSBuZXcgYW5zd2VyXG4gICAgICAgICAgICAvLyAgICAgaWYoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnKSB7XG4gICAgICAgICAgICAvLyAgICAgICBsZXQgY2hlY2tlZE9wdGlvbnNBcnIgOiBhbnkgPSBbXTtcbiAgICAgICAgICAgIC8vICAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddKSkge1xuICAgICAgICAgICAgLy8gICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaCgoc2luZ2xlRG9tYWluVmFsdWUgOiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSAmJiB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkge1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgY2hlY2tlZE9wdGlvbnNBcnIucHVzaChzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddKTtcbiAgICAgICAgICAgIC8vICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gICAgICAgfVxuICAgICAgICAgICAgLy8gICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1txdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdF1bJ2Fuc3dlciddID0gY2hlY2tlZE9wdGlvbnNBcnIudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIC8vICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1txdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdF1bJ2Fuc3dlciddID0gIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NBTEVOREFSJyA/IHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKG5ldyBEYXRlKHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dKSwgJ3l5eXktTU0tZGQnKSA6IHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dO1xuICAgICAgICAgICAgLy8gICAgIH1cblxuICAgICAgICAgICAgLy8gICB9XG5cbiAgICAgICAgICAgIC8vIH1cblxuICAgICAgICAgICAgLy8gaWYgKHNpbmdsZVF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAncmV0RmluYW5jRWxnYmwnKSB7XG4gICAgICAgICAgICAvLyAgIGxldCBmaW5hbmNpYWxFbGlnaWJpbGl0eUFuc3dlckluZGV4OiBhbnkgPSBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleCgoc2luZ2xlQW5zd2VyT2JqOiBhbnkpID0+IChzaW5nbGVBbnN3ZXJPYmpbJ3F1ZXN0aW9uSWQnXSA9PT0gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSAmJiBzaW5nbGVBbnN3ZXJPYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddKSlcbiAgICAgICAgICAgIC8vICAgbGV0IG9iajogYW55ID0ge1xuICAgICAgICAgICAgLy8gICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgIC8vICAgICBxdWVzdGlvbklkOiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgLy8gICAgIGFuc3dlcjogdGhpcy5zaGFyZWRTZXJ2aWNlLmZpbmFuY2lhbEVsaWdpYmlsaXR5LFxuICAgICAgICAgICAgLy8gICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXG4gICAgICAgICAgICAvLyAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxuICAgICAgICAgICAgLy8gICAgIGNsdXN0ZXJJZDogc2luZ2xlUXVlc3Rpb25bJ2NsdXN0ZXJJZCddLFxuICAgICAgICAgICAgLy8gICB9O1xuICAgICAgICAgICAgLy8gICBpZiAoZmluYW5jaWFsRWxpZ2liaWxpdHlBbnN3ZXJJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIC8vICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2gob2JqKTtcbiAgICAgICAgICAgIC8vICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW2ZpbmFuY2lhbEVsaWdpYmlsaXR5QW5zd2VySW5kZXhdWydhbnN3ZXInXSA9IHRoaXMuc2hhcmVkU2VydmljZS5maW5hbmNpYWxFbGlnaWJpbGl0eTtcbiAgICAgICAgICAgIC8vICAgfVxuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIH0pO1xuICAgICAgICAvLyB9XG4gICAgICB9KTtcbiAgICAgIGxldCBkaXN0aW5jdFBlcnNvbklkRnJvbVJlcXVlc3Q6IGFueSA9IFtcbiAgICAgICAgLi4ubmV3IFNldChcbiAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLm1hcCgoaXRlbTogYW55KSA9PlxuICAgICAgICAgICAgaXRlbS5wZXJzb25VV0lkLnRvU3RyaW5nKClcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICBdO1xuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZGlzdGluY3RQZXJzb25JZEZyb21SZXF1ZXN0KSkge1xuICAgICAgICBtYWluUmVxdWVzdEZvckxhID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXG4gICAgICAgICAgKHNpbmdsZUFuc3dlcjogYW55KSA9PlxuICAgICAgICAgICAgc2luZ2xlQW5zd2VyWydwZXJzb25VV0lkJ10gPT09IGRpc3RpbmN0UGVyc29uSWRGcm9tUmVxdWVzdFswXVxuICAgICAgICApO1xuICAgICAgICBpZiAoZGlzdGluY3RQZXJzb25JZEZyb21SZXF1ZXN0Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yUGggPSBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbHRlcihcbiAgICAgICAgICAgIChzaW5nbGVBbnN3ZXI6IGFueSkgPT5cbiAgICAgICAgICAgICAgc2luZ2xlQW5zd2VyWydwZXJzb25VV0lkJ10gPT09IGRpc3RpbmN0UGVyc29uSWRGcm9tUmVxdWVzdFsxXVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxldCBzYXZlUmVxdWVzdHNBcnJheTogYW55ID0gW107XG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShtYWluUmVxdWVzdEZvckxhKSAmJiB0aGlzLnBlcnNvblR5cGUoKSAhPT0gJ1BIJykge1xuICAgICAgICB0aGlzLnNhdmVRdWVzdGlvblJlcXVlc3RMYSA9IG1haW5SZXF1ZXN0Rm9yTGE7XG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXG4gICAgICAgICAgJ3NhdmVRdWVzdGlvblJlcXVlc3RMYScsXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkobWFpblJlcXVlc3RGb3JMYSlcbiAgICAgICAgKTtcbiAgICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLmNsdXN0ZXJJZCgpKSkge1xuICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oYExBXyR7dGhpcy5jbHVzdGVySWQoKX1gLCBKU09OLnN0cmluZ2lmeShtYWluUmVxdWVzdEZvckxhKSlcbiAgICAgICAgfVxuICAgICAgICAvLyBzYXZlUmVxdWVzdHNBcnJheS5wdXNoKHRoaXMuY29tbW9uU2VydmljZS5zYXZlQW5zd2VycyhtYWluUmVxdWVzdEZvckxhLCAhY2FsbGVkRnJvbUNvbmZpcm1hdGlvbikpO1xuICAgICAgICAvLyBzYXZlUmVxdWVzdHNBcnJheS5wdXNoKHRoaXMuY29tbW9uU2VydmljZS5zYXZlQW5zd2VycyhtYWluUmVxdWVzdEZvckxhLCAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlLmlzRWRpdEFsbG93ZWRGb3JBZ2VudCkgJiYgdGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlLmlzRWRpdEFsbG93ZWRGb3JBZ2VudCAmJiB0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UuaXNFZGl0QWxsb3dlZEZvckFnZW50LnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJykgPyB0cnVlIDogIWNhbGxlZEZyb21Db25maXJtYXRpb24pKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KG1haW5SZXF1ZXN0Rm9yTGEpICYmIHRoaXMucGVyc29uVHlwZSgpID09PSAnUEgnKSB7XG4gICAgICAgIHRoaXMuc2F2ZVF1ZXN0aW9uUmVxdWVzdFBoID0gbWFpblJlcXVlc3RGb3JMYTtcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgICAgICAnc2F2ZVF1ZXN0aW9uUmVxdWVzdFBoJyxcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShtYWluUmVxdWVzdEZvckxhKVxuICAgICAgICApO1xuICAgICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuY2x1c3RlcklkKCkpKSB7XG4gICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShgUEhfJHt0aGlzLmNsdXN0ZXJJZCgpfWAsIEpTT04uc3RyaW5naWZ5KG1haW5SZXF1ZXN0Rm9yTGEpKVxuICAgICAgICB9XG4gICAgICAgIC8vICBzYXZlUmVxdWVzdHNBcnJheS5wdXNoKHRoaXMuY29tbW9uU2VydmljZS5zYXZlQW5zd2VycyhtYWluUmVxdWVzdEZvclBoLCAhY2FsbGVkRnJvbUNvbmZpcm1hdGlvbikpO1xuICAgICAgICAvLyBzYXZlUmVxdWVzdHNBcnJheS5wdXNoKHRoaXMuY29tbW9uU2VydmljZS5zYXZlQW5zd2VycyhtYWluUmVxdWVzdEZvclBoLCAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlLmlzRWRpdEFsbG93ZWRGb3JBZ2VudCkgJiYgdGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlLmlzRWRpdEFsbG93ZWRGb3JBZ2VudCAmJiB0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UuaXNFZGl0QWxsb3dlZEZvckFnZW50LnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJykgPyB0cnVlIDogIWNhbGxlZEZyb21Db25maXJtYXRpb24pKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy52YWxpZGF0ZU1lZGljYWxRdWVzdGlvbnMoKTtcbiAgfVxuXG4gIGdldENvb2tpZVZhbHVlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgY29va2llID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7XG4gICAgbGV0IHRva2VuTmFtZSA9ICcnO1xuICAgIGxldCB0b2tlblZhbHVlID0gJyc7XG4gICAgY29uc3QgaW5kZXgyID0gMjtcbiAgICBjb29raWUuZm9yRWFjaCgoZGF0YSkgPT4ge1xuICAgICAgaWYgKGRhdGEuc3BsaXQoJz0nKVswXS5pbmNsdWRlcyhuYW1lKSAmJiAhIWRhdGEuc3BsaXQoJz0nKVsxXSkge1xuICAgICAgICB0b2tlbk5hbWUgPSBkYXRhLnNwbGl0KCc9JylbMF0udHJpbSgpO1xuICAgICAgICB0b2tlblZhbHVlID0gZGF0YS5zcGxpdCgnPScpWzFdO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBuYW1lID09PSAnbGluaycgJiZcbiAgICAgICAgZGF0YS5zcGxpdCgnPScpWzBdLmluY2x1ZGVzKG5hbWUpICYmXG4gICAgICAgIGRhdGEuc3BsaXQoJz0nKVtpbmRleDJdICE9PSBudWxsICYmXG4gICAgICAgIGRhdGEuc3BsaXQoJz0nKVtpbmRleDJdICE9PSB1bmRlZmluZWRcbiAgICAgICkge1xuICAgICAgICB0b2tlblZhbHVlID0gdG9rZW5WYWx1ZSArICc9JyArIGRhdGEuc3BsaXQoJz0nKVtpbmRleDJdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0b2tlblZhbHVlO1xuICB9XG5cbiAgdmFsaWRhdGVNZWRpY2FsUXVlc3Rpb25zKGZvY3VzT25JblZhbGlkIDogYW55ID0gZmFsc2UpIHtcbiAgICBsZXQgaXNWYWxpZDogYW55ID0gdHJ1ZTtcbiAgICBsZXQgdmFsaWRhdGlvbk1lc3NhZ2UgOiBhbnkgPSAnJztcbiAgICB0aGlzLnF1ZXN0aW9uTGlzdC5mb3JFYWNoKChzaW5nbGVTZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddKSAmJiBpc1ZhbGlkKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10pICYmXG4gICAgICAgICAgKHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10udG9VcHBlckNhc2UoKS5yZXBsYWNlQWxsKCcgJywgJ18nKSA9PT1cbiAgICAgICAgICAgICdURUxMX1VTX01PUkUnIHx8XG4gICAgICAgICAgICBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRvVXBwZXJDYXNlKCkucmVwbGFjZUFsbCgnICcsICdfJykgPT09XG4gICAgICAgICAgICAgICdCQVNJQ19ERVRBSUxTJyB8fFxuICAgICAgICAgICAgc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50b1VwcGVyQ2FzZSgpLnJlcGxhY2VBbGwoJyAnLCAnXycpID09PVxuICAgICAgICAgICAgICAnUEVSU09OQUxfREVUQUlMUycpICYmXG4gICAgICAgICAgaXNWYWxpZFxuICAgICAgICApIHtcbiAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBoZWlnaHQgZW50ZXJlZCBpbiBmZWV0XG4gICAgICAgICAgaWYgKHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnRkVFVCcpIHtcbiAgICAgICAgICAgIGxldCBoZWlnaHRJbkluY2hlc09iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcbiAgICAgICAgICAgICAgKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRJJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxldCBoZWlnaHRJbkZlZXRPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXG4gICAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5JbmNoZXNPYmopICYmXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0T2JqKSAmJlxuICAgICAgICAgICAgICAodGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXVxuICAgICAgICAgICAgICApIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddXG4gICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgIHZhbGlkYXRpb25NZXNzYWdlID0gYFBsZWFzZSBlbnRlciBIZWlnaHQgaW4gRmVldCBhbmQgSW5jaGVzYDtcbiAgICAgICAgICAgICAgaWYoZm9jdXNPbkluVmFsaWQpIHtcbiAgICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JZDogYW55ID0gJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCc7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmlzTWFuZGF0b3J5RmllbGQgJiYgIXNhdmVkcmFmdCAmJiByZWRpcmVjdCkge1xuICAgICAgICAgICAgICAvLyBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgIT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSB7XG4gICAgICAgICAgICAgIC8vICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAgICAgICAgICAgLy8gICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYkluZGV4ID0gc2luZ2xlUGVyc29uSW5kZXg7XG4gICAgICAgICAgICAgIC8vICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XG4gICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgLy8gbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IGhlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddICsgJ18nICsgc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgICAgICAgICAgIC8vIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcbiAgICAgICAgICAgICAgLy8gaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcbiAgICAgICAgICAgICAgLy8gICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XG4gICAgICAgICAgICAgIC8vICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgICAgICAgICAgIC8vICAgICBtZXNzYWdlOiAnUGxlYXNlIGVudGVyIEhlaWdodCBpbiBGZWV0IGFuZCBJbmNoZXMgZm9yICcgKyByb2xlXG4gICAgICAgICAgICAgIC8vICAgfSk7XG4gICAgICAgICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uub3BlblNuYWNrQmFyKCdQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIEZlZXQgYW5kIEluY2hlcyBmb3IgJyArIHJvbGUsICdDbG9zZScpO1xuXG4gICAgICAgICAgICAgIC8vIH1cblxuICAgICAgICAgICAgICAvLyByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgaGVpZ2h0IGluIGNtXG4gICAgICAgICAgbGV0IGhlaWdodEluQ2VudGltZXRlck9iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcbiAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J10gPT09ICdDTScgJiZcbiAgICAgICAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddXG4gICAgICAgICAgICApICYmXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ2VudGltZXRlck9iaikgJiZcbiAgICAgICAgICAgIGlzVmFsaWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhbGlkYXRpb25NZXNzYWdlID0gYFBsZWFzZSBlbnRlciBIZWlnaHQgaW4gY2VudGltZXRlcmA7XG5cbiAgICAgICAgICAgIGlmKGZvY3VzT25JblZhbGlkKSB7XG4gICAgICAgICAgICAgIGxldCBxdWVzdGlvbklkOiBhbnkgPSAnbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0JztcbiAgICAgICAgICAgICAgdGhpcy5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iajogYW55KSA9PiB7XG4gICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgYmFzaWMgcXVlc3Rpb25zXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9iaikgJiZcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSkgJiZcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxuICAgICAgICAgICAgaXNWYWxpZCAmJlxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddICE9PSAnSU1BR0UgVEVYVCcgJiZcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnUUhUJyAmJlxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddICE9PSAnREVDTEFSQVRJT04nICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ2hhcmRDb3B5TGFuZycgJiZcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ1BBU1NQT1JUX1VQTE9BRCcgJiZcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnUUhURicgJiZcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnUUhUSScgJiZcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10udG9TdHJpbmcoKSA9PT0gJ04nICYmXG4gICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ11dXG4gICAgICAgICAgICApICYmXG4gICAgICAgICAgICAvLyAoKHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ0NIRUNLQk9YJyAmJlxuICAgICAgICAgICAgLy8gICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqWydyb2xlJ11dW3NpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ11dKSkgfHxcbiAgICAgICAgICAgIC8vICAgKHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJiAhdGhpcy52YWxpZGF0ZUNoZWNrQm94RmllbGQoc2luZ2xlUXVlc3Rpb25PYmosIHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSkpXG4gICAgICAgICAgICBpc1ZhbGlkXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB2YWxpZGF0aW9uTWVzc2FnZSA9IGBQbGVhc2UgZW50ZXIgYWxsIHRoZSBkZXRhaWxzIGluICR7c2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXX1gO1xuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZihmb2N1c09uSW5WYWxpZCkge1xuICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JZDogYW55ID0gc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXTtcbiAgICAgICAgICAgICAgdGhpcy5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBpZiAoXG4gICAgICAgICAgLy8gICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdQQVNTUE9SVF9VUExPQUQnICYmXG4gICAgICAgICAgLy8gICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddID09PSAnTicgJiZcbiAgICAgICAgICAvLyAgIHNpbmdsZVF1ZXN0aW9uT2JqWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxuICAgICAgICAgIC8vICkge1xuICAgICAgICAgIC8vICAgbGV0IGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmo6IGFueSA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UucXVlc3Rpb25zUGFzc3BvcnRVcGxvYWRPYmouZmlsdGVyKChzaW5nbGVPYmo6IGFueSkgPT4gKHNpbmdsZU9ialsncGVyc29uVHlwZSddID09PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSAmJiB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlT2JqWydkbXNJZCddKSkpO1xuICAgICAgICAgIC8vICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9iaikpIHtcbiAgICAgICAgICAvLyAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KGAke2ZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ3F1ZXN0aW9uVHlwZSddfV8ke2ZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ3R5cGUnXX1fJHtmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydwZXJzb25UeXBlJ119YCk7XG4gICAgICAgICAgLy8gICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XG4gICAgICAgICAgLy8gICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xuICAgICAgICAgIC8vICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgICAgICAgIC8vICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSB1cGxvYWQgcGFzc3BvcnQgJyArIGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ2xhYmVsJ10gKyAnIGRvY3VtZW50IGZvciAnICsgcm9sZVxuICAgICAgICAgIC8vICAgICAgIH0pO1xuICAgICAgICAgIC8vICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uub3BlblNuYWNrQmFyKCdQbGVhc2UgdXBsb2FkIHBhc3Nwb3J0ICcgKyBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydsYWJlbCddICsgJyBkb2N1bWVudCBmb3IgJyArIHJvbGUsICdDbG9zZScpO1xuICAgICAgICAgIC8vICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XG4gICAgICAgICAgLy8gICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcbiAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgICAgICAgIC8vICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAgICAgICAvLyAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiAhdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XG4gICAgICAgICAgLy8gICAgICAgICBpZiAocm9sZSA9PT0gJ2xpZmUgYXNzdXJlZCcpIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgICAgICAgIC8vICAgICAgICAgfSBlbHNlIGlmIChyb2xlID09PSAncG9saWN5IGhvbGRlcicpIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX1BIJyk7XG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAgIC8vICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ2pvaW50bGlmZScpIHtcbiAgICAgICAgICAvLyAgICAgICAgIGNvbnNvbGUubG9nKFwiam9pbnQgbGlmZSBjYXNlXCIpO1xuICAgICAgICAgIC8vICAgICAgIH1cbiAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgIC8vICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgLy8gICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAvLyAgIH1cblxuICAgICAgICAgIC8vIH1cbiAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBkZWNsYXJhdGlvbiBxdWVzdGlvbnNcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc1ZhbGlkICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvblR5cGUgPT09ICdERUNMQVJBVElPTicgJiZcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddKSAmJlxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSA9PT0gJ04nXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIChpc1ZhbGlkICYmXG4gICAgICAgICAgICAgICAgLy8gIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV0pICYmXG4gICAgICAgICAgICAgICAgLy8gKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKSAmJlxuICAgICAgICAgICAgICAgIC8vICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF0pICYmXG4gICAgICAgICAgICAgICAgLy8gICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddKSAmJlxuICAgICAgICAgICAgICAgIC8vICAgKCghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9ialsncm9sZSddXVtzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pICYmXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV0gPT09XG4gICAgICAgICAgICAgICAgICAnTicpIHx8XG4gICAgICAgICAgICAgICF0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddXSB8fFxuICAgICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAvLyApXG4gICAgICAgICAgICAgIC8vIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICB2YWxpZGF0aW9uTWVzc2FnZSA9IGBQbGVhc2UgZW50ZXIgYWxsIHRoZSBkZXRhaWxzIGluICR7c2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXX1gO1xuXG4gICAgICAgICAgICAgIGlmKGZvY3VzT25JblZhbGlkKSB7XG4gICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ107XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIG1lZGljYWwgc3ViIHF1ZXN0aW9uc1xuICAgICAgICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UpKSB7XG4gICAgICAgICAgLy8gICB0aGlzLnNoYXJlZFNlcnZpY2UubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlLmZvckVhY2goKHF1ZXN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyAgICAgaWYgKFxuICAgICAgICAgIC8vICAgICAgIHRoaXMuc2hvd1N1YlF1ZXN0aW9uKHF1ZXN0aW9uKSAmJlxuICAgICAgICAgIC8vICAgICAgIHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSAhPT0gJ0lNQUdFIFRFWFQnICYmXG4gICAgICAgICAgLy8gICAgICAgcXVlc3Rpb25bJ29wdGlvbmFsUXVlc3Rpb24nXS50b1N0cmluZygpID09PSAnTicgJiZcbiAgICAgICAgICAvLyAgICAgICAoKHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSAhPT0gJ0NIRUNLQk9YJyAmJlxuICAgICAgICAgIC8vICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dKSkgfHxcbiAgICAgICAgICAvLyAgICAgICAgIChxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiYgIXRoaXMudmFsaWRhdGVDaGVja0JveEZpZWxkKHF1ZXN0aW9uLCAnbGlmZUFzc3VyZWQnKSkpXG4gICAgICAgICAgLy8gICAgICkge1xuICAgICAgICAgIC8vICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAvLyAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5sb2FkaW5nQWdlbnRwb3J0YWwgJiYgIXNhdmVkcmFmdCkge1xuICAgICAgICAgIC8vICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xuICAgICAgICAgIC8vICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgICAgICAgLy8gICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgYW5zd2VyIGFsbCBtZWRpY2FsIHN1YiBxdWVzdGlvbnMgJyArIHF1ZXN0aW9uWydxdWVzdGlvbklkJ10gKyAnICcgKyBxdWVzdGlvblsncXVlc3Rpb25UZXh0J11cbiAgICAgICAgICAvLyAgICAgICAgIH0pO1xuICAgICAgICAgIC8vICAgICAgIH1cbiAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgIC8vICAgfSk7XG4gICAgICAgICAgLy8gfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBmYXRjaCBkZWNsYXJhdGlvblxuICAgICAgICAvLyBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb24ucXVlc3Rpb25zKSAmJiBpc1ZhbGlkKXtcbiAgICAgICAgLy8gc2luZ2xlU2VjdGlvbi5xdWVzdGlvbnMuZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25PYmo6YW55KSA9PiB7XG4gICAgICAgIC8vICAgaWYoaXNWYWxpZCAmJiBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvblR5cGUgPT09ICdERUNMQVJBVElPTicgJiYgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXG4gICAgICAgIC8vICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSkgJiZcbiAgICAgICAgLy8gICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSA9PT0gJ04nXG4gICAgICAgIC8vICAgICApe1xuICAgICAgICAvLyAgICAgICBpZiggaXNWYWxpZCAmJlxuICAgICAgICAvLyAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqWydyb2xlJ11dKSAmJlxuICAgICAgICAvLyAgICAgICAgICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkgJiZcbiAgICAgICAgLy8gICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdKSAmJlxuICAgICAgICAvLyAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXSkgICYmXG4gICAgICAgIC8vICAgICAgICAgICAoKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqWydyb2xlJ11dW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkgJiZcbiAgICAgICAgLy8gICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9ialsncm9sZSddXVtzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0gPT09ICdOJykgfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9ialsncm9sZSddXVtzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pKSkgfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkpIHtcblxuICAgICAgICAvLyAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiAhPT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pIHtcbiAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgICAgIC8vICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYkluZGV4ID0gc2luZ2xlUGVyc29uSW5kZXg7XG4gICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAvLyAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgLy8gICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UubG9hZGluZ0FnZW50cG9ydGFsICYmICFzYXZlZHJhZnQpIHtcbiAgICAgICAgLy8gbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IHNpbmdsZVF1ZXN0aW9uT2JqLnF1ZXN0aW9uSWQgKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAgICAgLy8gICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgICAgIC8vICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcbiAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcbiAgICAgICAgLy8gICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgICAgICAvLyAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIHNlbGVjdCBhbGwgdGhlIGRldGFpbHMgaW4gJyArIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10gKyAnIGZvciAnICsgcm9sZVxuICAgICAgICAvLyAgICAgICAgICAgfSk7XG4gICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAvLyAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gICAgICAgICAgfVxuICAgICAgICAvLyAgICAgICB9XG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyB9KTtcbiAgICAgICAgLy8gfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblR5cGUoKSkgJiYgdGhpcy5wZXJzb25UeXBlID09PSAnUEgnKSB7XG4gICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdpc01lZGljYWxRdWVzdGlvbnNWYWxpZEZvclBIJywgaXNWYWxpZCk7XG4gICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCd2YWxpZGF0aW9uTWVzc2FnZUZvck1lZGljYWxRdWVzdGlvbnNGb3JQSCcsIHZhbGlkYXRpb25NZXNzYWdlKTtcbiAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5jbHVzdGVySWQoKSkpIHtcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShgUEhfJHt0aGlzLmNsdXN0ZXJJZCgpfV9pc1ZhbGlkYCwgaXNWYWxpZClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2lzTWVkaWNhbFF1ZXN0aW9uc1ZhbGlkJywgaXNWYWxpZCk7XG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgndmFsaWRhdGlvbk1lc3NhZ2VGb3JNZWRpY2FsUXVlc3Rpb25zJywgdmFsaWRhdGlvbk1lc3NhZ2UpO1xuXG4gICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLmNsdXN0ZXJJZCgpKSkge1xuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGBMQV8ke3RoaXMuY2x1c3RlcklkKCl9X2lzVmFsaWRgLCBpc1ZhbGlkKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhbHVlQ2hhbmdlRm9yTXVsdGlzZWxlY3QocXVlc3Rpb24gOiBhbnkpIHtcbiAgICBpZiAocXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdMaWZlTWVkaUNuZHRuJyB8fCBxdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ01lZGlDbmR0bicgKSB7XG4gICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1txdWVzdGlvblsncXVlc3Rpb25JZCddXS5sZW5ndGggPiAwXG5cbiAgICAgIC8vIGlmIG5vbmUgaXMgc2VsZWN0ZWQgdGhlbiByZW1vdmUgYWxsIGFuZCBjYWxsIEFQSVxuICAgICAgbGV0IGlzTm9uZVNlbGVjdGVkIDogYW55ID0gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0uZmluZEluZGV4KChzaW5nbGVPYmogOmFueSkgPT4gc2luZ2xlT2JqID09PSAnTm9NZWRIaXN0cnknKTtcblxuICAgICAgaWYgKFxuICAgICAgICBpc05vbmVTZWxlY3RlZCAhPT0gIC0xXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0gPSB0aGlzLnBlcnNvblV3QW5zd2Vyc1txdWVzdGlvblsncXVlc3Rpb25JZCddXSA9IHRoaXMucGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dLmZpbHRlcigoc2luZ2xlT2JqIDogYW55KSA9PiBzaW5nbGVPYmogPT09ICdOb01lZEhpc3RyeScpXG4gICAgICB9XG4gICAgICB0aGlzLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZSA9IFtdO1xuICAgICAgaWYgKFxuICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgIHRoaXMucXVlc3Rpb25MaXN0XG4gICAgICAgICkpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkxpc3QgPSB0aGlzLnF1ZXN0aW9uTGlzdC5maWx0ZXIoKHNpbmdsZVNlY3Rpb246IGFueSkgPT4gKCh0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSkgfHwgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSkgJiYgIXNpbmdsZVNlY3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10pKSApKTtcbiAgICAgIH1cbiAgICAgIC8vIGxldCBjdXJyZW50U2VjdGlvbkluZGV4OiBhbnkgPSB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXS5maW5kSW5kZXgoXG4gICAgICAvLyAgIChzaW5nbGVQZXJzb25PYmo6IGFueSkgPT5cbiAgICAgIC8vICAgICBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT1cbiAgICAgIC8vICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdNYXN0ZXJPYmpbc2luZ2xlUGVyc29uSW5kZXhdWydyb2xlJ11cbiAgICAgIC8vICk7XG4gICAgICAvLyByZW1vdmUgbWVkaWNhbCBzdWIgcXVlc3Rpb25zIGZyb20gcXVlc3Rpb25zIHJlc3BvbnNlIGxpc3RcbiAgICAgIC8vIGlmIChcbiAgICAgIC8vICAgY3VycmVudFNlY3Rpb25JbmRleCAhPT0gdGhpcy5udW1iZXJDb25zdGFudC5udW1iZXJtaW51czEgJiZcbiAgICAgIC8vICAgIXRoaXMuc2hhcmVkY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgIC8vICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtcbiAgICAgIC8vICAgICAgIGN1cnJlbnRTZWN0aW9uSW5kZXhcbiAgICAgIC8vICAgICBdXG4gICAgICAvLyAgICkgJiZcbiAgICAgIC8vICAgIXRoaXMuc2hhcmVkY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgIC8vICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtcbiAgICAgIC8vICAgICAgIGN1cnJlbnRTZWN0aW9uSW5kZXhcbiAgICAgIC8vICAgICBdWydxdWVzdGlvbkxpc3QnXVxuICAgICAgLy8gICApXG4gICAgICAvLyApIHtcbiAgICAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bXG4gICAgICAgIC8vICAgY3VycmVudFNlY3Rpb25JbmRleFxuICAgICAgICAvLyBdWydxdWVzdGlvbkxpc3QnXSA9IHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqW1xuICAgICAgICAvLyAgICdxdWVzdGlvbnNSZXNwb25zZSdcbiAgICAgICAgLy8gXVtjdXJyZW50U2VjdGlvbkluZGV4XVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKFxuICAgICAgICAvLyAgIChzaW5nbGVMaXN0SXRlbTogYW55KSA9PlxuICAgICAgICAvLyAgICAgdGhpcy5zaGFyZWRjaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAvLyAgICAgICBzaW5nbGVMaXN0SXRlbVsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXVxuICAgICAgICAvLyAgICAgKSB8fFxuICAgICAgICAvLyAgICAgKCF0aGlzLnNoYXJlZGNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgIC8vICAgICAgIHNpbmdsZUxpc3RJdGVtWydpc01lZGljYWxTdWJRdWVzdGlvbiddXG4gICAgICAgIC8vICAgICApICYmXG4gICAgICAgIC8vICAgICAgICFzaW5nbGVMaXN0SXRlbVsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSlcbiAgICAgICAgLy8gKTtcbiAgICAgIC8vIH1cbiAgICAgIC8vIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddWzBdW1xuICAgICAgLy8gICAncXVlc3Rpb25MaXN0J1xuICAgICAgLy8gXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbjogYW55LCBpbmRleDogYW55KSA9PiB7XG4gICAgICAvLyAgIGlmIChzaW5nbGVRdWVzdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSkge1xuICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddWzBdW1xuICAgICAgLy8gICAgICAgJ3F1ZXN0aW9uTGlzdCdcbiAgICAgIC8vICAgICBdLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH0pO1xuXG4gICAgICAvLyB0aGlzLnF1ZXN0aW9uTGlzdCA9IHRoaXMucXVlc3Rpb25MaXN0LmZpbHRlcigoc2luZ2xlU2VjdGlvbiA6IGFueSkgPT4gKCFzaW5nbGVTZWN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddKSkpO1xuICAgICAgLy8gdGhpcy5xdWVzdGlvbkxpc3QuZm9yRWFjaCgoc2luZ2xlTWFzdGVyT2JqOiBhbnksIGk6IG51bWJlcikgPT4ge1xuICAgICAgLy8gICBpZiAoc2luZ2xlTWFzdGVyT2JqWydpc01lZGljYWxTdWJRdWVzdGlvbiddKSB7XG4gICAgICAvLyAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3TWFzdGVyT2JqW3NpbmdsZVBlcnNvbkluZGV4XVtcbiAgICAgIC8vICAgICAgICdxdWVzdGlvbkxpc3QnXG4gICAgICAvLyAgICAgXVsncXVlc3Rpb25zJ10gPSBbXTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gfSk7XG4gICAgICAvLyB0aGlzLmxvYWRlci5kaXNwbGF5KHRydWUpO1xuXG4gICAgICBsZXQgc2VsZWN0ZWREaXNlYXNlcyA6IGFueSA9IHRoaXMucGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dLnRvU3RyaW5nKCk7XG4gICAgICAvLyBsZXQgcmVxdWVzdDogYW55ID0gSlNPTi5wYXJzZShcbiAgICAgIC8vICAgSlNPTi5zdHJpbmdpZnkoXG4gICAgICAvLyAgICAgdGhpcy5mZXRjaFN1YlF1ZXN0aW9uc0xpc3RbXG4gICAgICAvLyAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdNYXN0ZXJPYmpbc2luZ2xlUGVyc29uSW5kZXhdWydyb2xlJ11cbiAgICAgIC8vICAgICBdLnRvU3RyaW5nKClcbiAgICAgIC8vICAgKVxuICAgICAgLy8gKTtcbiAgICAgIGlmKHF1ZXN0aW9uWydmaWVsZCddWydjb25maWdEYXRhJ10uaGFzT3duUHJvcGVydHkoJ2FwaVVybCcpICYmIHF1ZXN0aW9uWydmaWVsZCddWydjb25maWdEYXRhJ10uaGFzT3duUHJvcGVydHkoJ3VybFBhcmFtRm9yRGlzZWFzZScpICYmIHF1ZXN0aW9uWydmaWVsZCddWydjb25maWdEYXRhJ10uaGFzT3duUHJvcGVydHkoJ3VybFBhcmFtRm9yUGVyc29uVXdJZCcpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkocXVlc3Rpb25bJ2ZpZWxkJ11bJ2NvbmZpZ0RhdGEnXVsnYXBpVXJsJ10pICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkocXVlc3Rpb25bJ2ZpZWxkJ11bJ2NvbmZpZ0RhdGEnXVsndXJsUGFyYW1Gb3JEaXNlYXNlJ10pICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkocXVlc3Rpb25bJ2ZpZWxkJ11bJ2NvbmZpZ0RhdGEnXVsndXJsUGFyYW1Gb3JQZXJzb25Vd0lkJ10pKSB7XG4gICAgICAgIHRoaXMubWFzdGVyU2VydmljZS5nZXRTdWJRdWVzdGlvbnMocXVlc3Rpb25bJ2ZpZWxkJ11bJ2NvbmZpZ0RhdGEnXSwgc2VsZWN0ZWREaXNlYXNlcywgdGhpcy5wZXJzb25Vd0lkKS5zdWJzY3JpYmUoXG4gICAgICAgICAgKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgLy8gdGhpcy5sb2FkZXIuZGlzcGxheShmYWxzZSk7XG4gICAgICAgICAgICBsZXQgZGlzdGluY3RTdGVwczogYW55ID0gW107XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhLmZvckVhY2goKHN1YlF1ZXN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBzdWJRdWVzdGlvbltcbiAgICAgICAgICAgICAgICAgICdkb21haW5WYWx1ZXMnXG4gICAgICAgICAgICAgICAgXSA9IHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydkb21haW5WYWx1ZXMnXVtcbiAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydkb21haW5OYW1lJ11cbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddXG4gICAgICAgICAgICAgICAgICApICYmXG4gICAgICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheShzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXSA9IFtcbiAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXVxuICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmXG4gICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddLmZvckVhY2goXG4gICAgICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dFF1ZXN0aW9uT2JqZWN0OiBhbnkgPSBkYXRhLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgIChvYmplY3Q6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0WydxdWVzdGlvbklkJ10gPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmpbJ25leHRRdWVzdGlvbklkJ11cbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0UXVlc3Rpb25PYmplY3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFF1ZXN0aW9uT2JqZWN0WzBdWydhbnN3ZXJlZFZhbHVlJ10gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqWydwYXJlbnRRdWVzdGlvblZhbHVlJ107XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBpZiAoXG4gICAgICAgICAgICAgICAgLy8gICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICAgIC8vICAgICBzdWJRdWVzdGlvblsnZG9tYWluVmFsdWVzJ11cbiAgICAgICAgICAgICAgICAvLyAgIClcbiAgICAgICAgICAgICAgICAvLyApIHtcbiAgICAgICAgICAgICAgICAvLyAgIHN1YlF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKChzdWJEb21haW46IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc3ViTWVkaWNhbFF1ZXN0aW9uc0RvbWFpbkludGVybmFsVmFsdWVzTGlzdC5wdXNoKFxuICAgICAgICAgICAgICAgIC8vICAgICAgIHN1YkRvbWFpblsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXG4gICAgICAgICAgICAgICAgLy8gICAgICk7XG4gICAgICAgICAgICAgICAgLy8gICB9KTtcbiAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgaWYgKCFkaXN0aW5jdFN0ZXBzLmluY2x1ZGVzKHN1YlF1ZXN0aW9uWydjbHVzdGVySWQnXSkpIHtcbiAgICAgICAgICAgICAgICAgIGRpc3RpbmN0U3RlcHMucHVzaChzdWJRdWVzdGlvblsnY2x1c3RlcklkJ10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnZmllbGQnXSA9IHRoaXMuZ2V0RmllbGQoc3ViUXVlc3Rpb24pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgZGF0YS5zb3J0KFxuICAgICAgICAgICAgICAgIChhOiBhbnksIGI6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgIGFbJ3N0ZXAnXSAtIGJbJ3N0ZXAnXSB8fCBhWydkaXNwbGF5T3JkZXInXSAtIGJbJ2Rpc3BsYXlPcmRlciddXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGRpc3RpbmN0U3RlcHMuZm9yRWFjaCgoc3RlcHM6IGFueSwgaW5kOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZmlsdGVyZWRPYmo6IGFueSA9IGRhdGEuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydjbHVzdGVySWQnXSA9PT0gc3RlcHNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHtcbiAgICAgICAgICAgICAgICAgIHN0ZXA6IDEwMDAgKyBpbmQsXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbnM6ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRPYmopXG4gICAgICAgICAgICAgICAgICAgID8gZmlsdGVyZWRPYmpcbiAgICAgICAgICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgICAgICAgICAgIHNlY3Rpb25OYW1lOiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZE9ialxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkT2JqWzBdWyd0aXRsZSddXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiB0aGlzLnBlcnNvblV3SWQsXG4gICAgICAgICAgICAgICAgICBpc01lZGljYWxTdWJRdWVzdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHNob3dTZWN0aW9uOiB0cnVlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uTGlzdC5wdXNoKG9iaik7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB0aGlzLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZSA9IGRhdGE7XG4gICAgICAgICAgICAgIC8vIG1lcmdlIG1lZGljYWwgc3ViIHF1ZXN0aW9ucyBpbnRvIHBlcnNvbiB1dyBtYWluIHF1ZXN0aW9ucyByZXNwb25zZSAocmVxdWlyZWQgZm9yIHNob3cgcXVlc3Rpb24gZnVuY3Rpb24gdG8gd29yaylcbiAgICAgICAgICAgICAgLy8gY2xlYXJpbmcgb24gdG9wIGJlZm9yZSBhcGkgY2FsbFxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbMF1bJ3F1ZXN0aW9uTGlzdCddID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWzBdWydxdWVzdGlvbkxpc3QnXS5jb25jYXQodGhpcy5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAvLyB0aGlzLmxvYWRlci5kaXNwbGF5KGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKVxuICB9XG4gIG9uRG9jdW1lbnRGaWxlUHJldmlldyhldmVudDogeyBmaWxlOiBGaWxlLCBpbmRleDogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnUHJldmlldyByZXF1ZXN0ZWQgZm9yOicsIGV2ZW50LmZpbGUubmFtZSk7XG4gICAgdGhpcy5wcmV2aWV3RmlsZSA9IGV2ZW50LmZpbGU7XG4gIH1cblxuICBjbG9zZUZpbGVQcmV2aWV3KCk6IHZvaWQge1xuICAgIHRoaXMucHJldmlld0ZpbGUgPSBudWxsO1xuICB9XG5cbiAgY2hlY2tBbmRVcGRhdGVIZWlnaHRVbml0KCkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXG4gICAgICAgIF0gPT09ICdGRUVUJyAmJlxuICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICAgJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCdcbiAgICAgICAgICBdXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBsZXQgaGVpZ2h0SW5JbmNoZXM6IGFueSA9IChcbiAgICAgICAgICBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXG4gICAgICAgICAgICBdXG4gICAgICAgICAgKSAqIDAuMzkzNzAxXG4gICAgICAgICkudG9GaXhlZCgyKTtcbiAgICAgICAgbGV0IGhlaWdodEluRmVldDogYW55ID1cbiAgICAgICAgICBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgKGhlaWdodEluSW5jaGVzIC8gMTIpXG4gICAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAgIC5zcGxpdCgnLicpWzFdXG4gICAgICAgICAgKSA+IDEyXG4gICAgICAgICAgICA/IChoZWlnaHRJbkluY2hlcyAvIDEyKS50b0ZpeGVkKDEpXG4gICAgICAgICAgICA6IChoZWlnaHRJbkluY2hlcyAvIDEyKS50b0ZpeGVkKDIpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgIGhlaWdodEluRmVldC50b1N0cmluZygpLnNwbGl0KCcuJylbMF1cbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICAgJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCdcbiAgICAgICAgICBdID0gaGVpZ2h0SW5GZWV0LnRvU3RyaW5nKCkuc3BsaXQoJy4nKVswXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgIGhlaWdodEluRmVldC50b1N0cmluZygpLnNwbGl0KCcuJylbMV1cbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICAgJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCdcbiAgICAgICAgICBdID1cbiAgICAgICAgICAgIGhlaWdodEluRmVldC50b1N0cmluZygpLnNwbGl0KCcuJylbMV0gIT09ICcxMScgJiZcbiAgICAgICAgICAgIGhlaWdodEluRmVldC50b1N0cmluZygpLnNwbGl0KCcuJylbMV0gIT09ICcxMicgJiZcbiAgICAgICAgICAgIGhlaWdodEluRmVldC50b1N0cmluZygpLnNwbGl0KCcuJylbMV0gIT09ICcxMydcbiAgICAgICAgICAgICAgPyBoZWlnaHRJbkZlZXRcbiAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAuc3BsaXQoJy4nKVsxXVxuICAgICAgICAgICAgICAgICAgLmNoYXJBdCgwKVxuICAgICAgICAgICAgICA6IGhlaWdodEluRmVldC50b1N0cmluZygpLnNwbGl0KCcuJylbMV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCdcbiAgICAgICAgXSA9PT0gJ0NNJyAmJlxuICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICAgJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCdcbiAgICAgICAgICBdXG4gICAgICAgICkgJiZcbiAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXG4gICAgICAgICAgXVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzOiBhbnkgPVxuICAgICAgICAgIHBhcnNlRmxvYXQoXG4gICAgICAgICAgICBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J1xuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApLnRvU3RyaW5nKCkgK1xuICAgICAgICAgICAgICAnLicgK1xuICAgICAgICAgICAgICBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICAgICAgICAgJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCdcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICkudG9TdHJpbmcoKVxuICAgICAgICAgICkgKiAxMjtcbiAgICAgICAgbGV0IGhlaWdodEluQ206IGFueSA9IChcbiAgICAgICAgICBwYXJzZUZsb2F0KGhlaWdodEluSW5jaGVzKSAvIDAuMzkzNzAxXG4gICAgICAgICkudG9GaXhlZCgyKTtcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCdcbiAgICAgICAgXSA9IGhlaWdodEluQ207XG4gICAgICB9XG4gICAgICB0aGlzLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XG4gICAgfVxuXG4gIGZvY3VzVG9FbGVtZW50KGVsZW1lbnRJZDogYW55KSB7XG4gICAgY29uc3QgZWxlbWVudENvbGxlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGVsZW1lbnRJZCk7XG4gICAgY29uc3QgaGVhZGVyT2Zmc2V0ID0gMTIwO1xuICAgIGlmICghZWxlbWVudENvbGxlY3Rpb24gfHwgZWxlbWVudENvbGxlY3Rpb24ubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50Q29sbGVjdGlvblswXSBhcyBIVE1MRWxlbWVudDtcblxuICAgIGNvbnN0IHNjcm9sbENvbnRhaW5lcjogYW55ID0gdGhpcy5nZXRTY3JvbGxhYmxlUGFyZW50KGVsZW1lbnQpO1xuXG4gICAgLy8gV2FpdCBmb3IgdGhlIG5leHQgZnJhbWUgc28gbGF5b3V0IGlzIHNldHRsZWQgYmVmb3JlIHNjcm9sbGluZy5cbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgY29udGFpbmVyUmVjdCA9XG4gICAgICAgIHNjcm9sbENvbnRhaW5lciA9PT0gd2luZG93XG4gICAgICAgICAgPyB7IHRvcDogMCB9XG4gICAgICAgICAgOiAoc2Nyb2xsQ29udGFpbmVyIGFzIEhUTUxFbGVtZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgY29uc3QgY3VycmVudFNjcm9sbCA9XG4gICAgICAgIHNjcm9sbENvbnRhaW5lciA9PT0gd2luZG93XG4gICAgICAgICAgPyB3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCB8fCAwXG4gICAgICAgICAgOiAoc2Nyb2xsQ29udGFpbmVyIGFzIEhUTUxFbGVtZW50KS5zY3JvbGxUb3A7XG5cbiAgICAgIGNvbnN0IHRhcmdldFBvc2l0aW9uID1cbiAgICAgICAgZWxlbWVudFJlY3QudG9wIC0gY29udGFpbmVyUmVjdC50b3AgKyBjdXJyZW50U2Nyb2xsIC0gaGVhZGVyT2Zmc2V0O1xuXG4gICAgICBpZiAoc2Nyb2xsQ29udGFpbmVyID09PSB3aW5kb3cpIHtcbiAgICAgICAgd2luZG93LnNjcm9sbFRvKHsgdG9wOiB0YXJnZXRQb3NpdGlvbiwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKHNjcm9sbENvbnRhaW5lciBhcyBIVE1MRWxlbWVudCkuc2Nyb2xsVG8oe1xuICAgICAgICAgIHRvcDogdGFyZ2V0UG9zaXRpb24sXG4gICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZWxlbWVudC5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2JsaW5rX21lJywgJ2ludmFsaWQtZmllbGQtb25lLXVpJyk7XG5cbiAgICAgIC8vIFJlbW92ZSBibGluayBhbmltYXRpb24gYWZ0ZXIgZHVyYXRpb25cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2JsaW5rX21lJyk7XG4gICAgICB9LCAzNTAwKTtcblxuICAgICAgLy8gUmVtb3ZlIGludmFsaWQtZmllbGQtb25lLXVpIGNsYXNzIHdoZW4gdXNlciBpbnRlcmFjdHMgd2l0aCB0aGUgZmllbGRcbiAgICAgIGNvbnN0IHJlbW92ZUludmFsaWRDbGFzcyA9IChldmVudD86IGFueSkgPT4ge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2ludmFsaWQtZmllbGQtb25lLXVpJyk7XG4gICAgICAgIC8vIENsZWFuIHVwIGFsbCBldmVudCBsaXN0ZW5lcnMgZnJvbSBtYWluIGVsZW1lbnRcbiAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdpbnB1dCcsIHJlbW92ZUludmFsaWRDbGFzcyk7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgcmVtb3ZlSW52YWxpZENsYXNzKTtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHJlbW92ZUludmFsaWRDbGFzcywgdHJ1ZSk7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbmdNb2RlbENoYW5nZScsIHJlbW92ZUludmFsaWRDbGFzcyk7XG5cbiAgICAgICAgLy8gQ2xlYW4gdXAgZXZlbnQgbGlzdGVuZXJzIGZyb20gY2hpbGQgcmFkaW8vY2hlY2tib3ggaW5wdXRzXG4gICAgICAgIGNvbnN0IHJhZGlvSW5wdXRzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPVwicmFkaW9cIl0nKTtcbiAgICAgICAgY29uc3QgY2hlY2tib3hJbnB1dHMgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXScpO1xuICAgICAgICByYWRpb0lucHV0cy5mb3JFYWNoKChyYWRpbzogYW55KSA9PiB7XG4gICAgICAgICAgcmFkaW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgcmVtb3ZlSW52YWxpZENsYXNzKTtcbiAgICAgICAgICByYWRpby5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHJlbW92ZUludmFsaWRDbGFzcyk7XG4gICAgICAgIH0pO1xuICAgICAgICBjaGVja2JveElucHV0cy5mb3JFYWNoKChjaGVja2JveDogYW55KSA9PiB7XG4gICAgICAgICAgY2hlY2tib3gucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgcmVtb3ZlSW52YWxpZENsYXNzKTtcbiAgICAgICAgICBjaGVja2JveC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHJlbW92ZUludmFsaWRDbGFzcyk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgLy8gRm9yIHRleHRib3ggLSB0cmlnZ2VycyBvbiB0eXBpbmdcbiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuXG4gICAgICAvLyBGb3Igc2VsZWN0IGRyb3Bkb3duIC0gdHJpZ2dlcnMgb24gdmFsdWUgY2hhbmdlXG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHJlbW92ZUludmFsaWRDbGFzcyk7XG5cbiAgICAgIC8vIEZvciBkaXJlY3QgY2xpY2sgb24gdGhlIGVsZW1lbnQgLSB1c2UgY2FwdHVyZSBwaGFzZSB0byBjYXRjaCBjaGlsZCBldmVudHNcbiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW1vdmVJbnZhbGlkQ2xhc3MsIHRydWUpO1xuXG4gICAgICAvLyBGb3IgQW5ndWxhciBuZ01vZGVsIGNoYW5nZXNcbiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbmdNb2RlbENoYW5nZScsIHJlbW92ZUludmFsaWRDbGFzcyk7XG5cbiAgICAgIC8vIEhhbmRsZSByYWRpbyBidXR0b25zIHdpdGhpbiB0aGUgZWxlbWVudCAoY29tbW9uIGluIEFuZ3VsYXIgZm9ybXMpXG4gICAgICBjb25zdCByYWRpb0lucHV0cyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbdHlwZT1cInJhZGlvXCJdJyk7XG4gICAgICByYWRpb0lucHV0cy5mb3JFYWNoKChyYWRpbzogYW55KSA9PiB7XG4gICAgICAgIHJhZGlvLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHJlbW92ZUludmFsaWRDbGFzcyk7XG4gICAgICAgIHJhZGlvLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVtb3ZlSW52YWxpZENsYXNzKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBIYW5kbGUgY2hlY2tib3hlcyB3aXRoaW4gdGhlIGVsZW1lbnQgKGZvciBtdWx0aS1zZWxlY3QpXG4gICAgICBjb25zdCBjaGVja2JveElucHV0cyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJyk7XG4gICAgICBjaGVja2JveElucHV0cy5mb3JFYWNoKChjaGVja2JveDogYW55KSA9PiB7XG4gICAgICAgIGNoZWNrYm94LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHJlbW92ZUludmFsaWRDbGFzcyk7XG4gICAgICAgIGNoZWNrYm94LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVtb3ZlSW52YWxpZENsYXNzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTY3JvbGxhYmxlUGFyZW50KG5vZGU6IEhUTUxFbGVtZW50IHwgbnVsbCk6IEhUTUxFbGVtZW50IHwgV2luZG93IHtcbiAgICBsZXQgcGFyZW50ID0gbm9kZT8ucGFyZW50RWxlbWVudDtcbiAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICBjb25zdCBvdmVyZmxvd1kgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnQpLm92ZXJmbG93WTtcbiAgICAgIGlmIChvdmVyZmxvd1kgPT09ICdhdXRvJyB8fCBvdmVyZmxvd1kgPT09ICdzY3JvbGwnKSB7XG4gICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICB9XG4gICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50RWxlbWVudDtcbiAgICB9XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxufVxuIiwiPGRpdiAqbmdGb3I9XCJsZXQgc2VjdGlvbiBvZiBxdWVzdGlvbkxpc3RcIj5cbiAgPGRpdiAqbmdJZj1cIlxuICAgICAgICAhY2hlY2tJZlZhbHVlSXNFbXB0eShzZWN0aW9uWydxdWVzdGlvbnMnXSkgJiZcbiAgICAgICAgc2VjdGlvblsnc2hvd1NlY3Rpb24nXVxuICAgICAgXCIgY2xhc3M9XCJjYXJkIHAtMyBtYi00XCIgaWQ9XCJwZXJzb25Vd01lZGljYWxRdWVzdGlvbnNcIj5cbiAgICA8aDYgY2xhc3M9XCJwYWdlLXRpdGxlIGJvbGQtbGFiZWxcIj5cbiAgICAgIHt7IGdldFRpdGxlQ2FzZShzZWN0aW9uW1wic2VjdGlvbk5hbWVcIl0pIH19XG4gICAgPC9oNj5cbiAgICA8bGliLWhyLWxpbmUgW2ZpZWxkXT1cImhvcml6b250YWxMaW5lT2JqXCIgLz5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBxdWVzdGlvbnMgb2Ygc2VjdGlvblsncXVlc3Rpb25zJ11cIiBjbGFzcz1cInJvd1wiPlxuICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0lNQUdFIFRFWFQnXCI+XG4gICAgICAgICAgPGltZyBbc3JjXT1cInF1ZXN0aW9uc1snc2FtcGxlUzNMaW5rJ11cIiBjbGFzcz1cImQtYmxvY2sgbXgtYXV0b1wiIFthbHRdPVwicXVlc3Rpb25zWyd0aXRsZSddXCI+XG4gICAgICAgICAgPGgzIFtpbm5lckhUTUxdPVwicXVlc3Rpb25zWydxdWVzdGlvblRleHQnXVwiPjwvaDM+XG4gICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgPGRpdiBbbmdDbGFzc109XCJxdWVzdGlvbnM/LmZpZWxkPy5jc3NDbGFzc1wiICpuZ0lmPVwiXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnRlJFRSBURVhUJyAmJlxuICAgICAgICAgICAgcXVlc3Rpb25zWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnUUhUJyAmJlxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxuICAgICAgICAgIFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIHB4LTAgbXktMVwiPlxuICAgICAgICAgIDxsaWItdGV4dGJveCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1txdWVzdGlvbnMucXVlc3Rpb25JZF1cIiBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCJcbiAgICAgICAgICAgIChibHVyKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucyk7IHJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIiAvPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJlcnJvci1tZXNzYWdlIHRleHQtZGFuZ2VyIG10LTFcIiAqbmdJZj1cImhhc0FueUZpZWxkRXJyb3IocXVlc3Rpb25zLnF1ZXN0aW9uSWQpXCI+XG4gICAgICAgICAgICB7eyBnZXRGaWVsZEVycm9yTWVzc2FnZShxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IFtuZ0NsYXNzXT1cInF1ZXN0aW9ucz8uZmllbGQ/LmNzc0NsYXNzXCIgKm5nSWY9XCJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdIRUlHSFRJTlBVVCcgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImNhcmQtdG9waWMgZC1ibG9jayBmaWVsZC1sYWJsZVwiPkhlaWdodFxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6ICNlZTAwMDBcIj4mIzQyOzwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGRpdiBbY2xhc3NdPVwiICdjb2wtYXV0byBweC0wIG15LTAgcHktMCBoZWlnaHRpbnB1dCBtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXCJcbiAgICAgICAgICBpZD1cIm1lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dFwiIChmb2N1c291dCk9XCJ2YWxpZGF0ZUZpZWxkKHF1ZXN0aW9ucy5xdWVzdGlvbklkLCBxdWVzdGlvbnMpXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBjb2wtMTIgbXktMVwiICpuZ0lmPVwicGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnQ00nXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgcHktMCBoZWlnaHRJbnB1dHNcIj5cbiAgICAgICAgICAgICAgPGxpYi10ZXh0Ym94IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXVwiXG4gICAgICAgICAgICAgICAgKGJsdXIpPVwidmFsaWRhdGVGaWVsZChxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKVwiIChuZ01vZGVsQ2hhbmdlKT1cInJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIlxuICAgICAgICAgICAgICAgIFtmaWVsZF09XCJtZWRRdWVzdGlvbk9ialsnUUhUJ11bJ2ZpZWxkJ11cIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTVcIj5cbiAgICAgICAgICAgICAgPGxpYi1zZWxlY3QgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J11cIlxuICAgICAgICAgICAgICAgIFtmaWVsZF09XCJtZWRRdWVzdGlvbk9ialsnaGVpZ2h0T2JqZWN0VHlwZXMnXVwiIChibHVyKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucylcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucyk7IGNoZWNrQW5kVXBkYXRlSGVpZ2h0VW5pdCgpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIHBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCdcbiAgICAgICAgICAgICAgICBdID09PSAnRkVFVCdcbiAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgcHktMCBteS0xXCI+XG4gICAgICAgICAgICAgIDxsaWItc2VsZWN0IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXVwiXG4gICAgICAgICAgICAgICAgKGJsdXIpPVwidmFsaWRhdGVGaWVsZChxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKVwiIChuZ01vZGVsQ2hhbmdlKT1cInJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIlxuICAgICAgICAgICAgICAgIFtmaWVsZF09XCJtZWRRdWVzdGlvbk9ialsnUUhURiddWydmaWVsZCddXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IHB5LTAgbXktMVwiPlxuICAgICAgICAgICAgICA8bGliLXNlbGVjdCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J11cIlxuICAgICAgICAgICAgICAgIChibHVyKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucylcIiAobmdNb2RlbENoYW5nZSk9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCJcbiAgICAgICAgICAgICAgICBbZmllbGRdPVwibWVkUXVlc3Rpb25PYmpbJ1FIVEknXVsnZmllbGQnXVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBweS0wIG15LTFcIj5cbiAgICAgICAgICAgICAgPGxpYi1zZWxlY3QgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J11cIlxuICAgICAgICAgICAgICAgIFtmaWVsZF09XCJtZWRRdWVzdGlvbk9ialsnaGVpZ2h0T2JqZWN0VHlwZXMnXVwiIChibHVyKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucylcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoZWNrQW5kVXBkYXRlSGVpZ2h0VW5pdCgpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXJyb3ItbWVzc2FnZSB0ZXh0LWRhbmdlciBtdC0xXCIgKm5nSWY9XCJoYXNBbnlGaWVsZEVycm9yKHF1ZXN0aW9ucy5xdWVzdGlvbklkKVwiPlxuICAgICAgICAgICAge3sgZ2V0RmllbGRFcnJvck1lc3NhZ2UocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucykgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBtdC0wIHB0LTBcIiAqbmdJZj1cIlxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ01BUCcgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cbiAgICAgICAgICBcIj5cblxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYXAtY29udGFpbmVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFkZHJlc3Mtc2VhcmNoLWNvbnRhaW5lciBtYi0zXCI+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGNhcmQtdG9waWNcIj5Mb25naXR1ZGU8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBbKG5nTW9kZWwpXT1cImxvbmdpdHVkZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIGxvbmdpdHVkZVwiIHN0ZXA9XCJhbnlcIiByZWFkb25seVxuICAgICAgICAgICAgICAgICAgKGJsdXIpPVwidmFsaWRhdGVGaWVsZChxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKVwiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBjYXJkLXRvcGljXCI+TGF0aXR1ZGU8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBbKG5nTW9kZWwpXT1cImxhdGl0dWRlXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgbGF0aXR1ZGVcIiBzdGVwPVwiYW55XCIgcmVhZG9ubHlcbiAgICAgICAgICAgICAgICAgIChibHVyKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucylcIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGlucHV0ICNhZGRyZXNzSW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGZvciBhZGRyZXNzXCJcbiAgICAgICAgICAgICAgKGtleXVwKT1cIm9uQWRkcmVzc0lucHV0S2V5dXAoJGV2ZW50KVwiIChmb2N1cyk9XCJzaG93RHJvcGRvd24gPSB0cnVlXCIgKGJsdXIpPVwib25JbnB1dEJsdXIoKVwiXG4gICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dEcm9wZG93biAmJiBhZGRyZXNzU3VnZ2VzdGlvbnMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYXV0b2NvbXBsZXRlLWRyb3Bkb3duIHBvc2l0aW9uLWFic29sdXRlIHctMTAwIG10LTFcIlxuICAgICAgICAgICAgICBzdHlsZT1cInotaW5kZXg6IDEwMDA7IG1heC1oZWlnaHQ6IDIwMHB4OyBvdmVyZmxvdy15OiBhdXRvOyBiYWNrZ3JvdW5kOiB3aGl0ZTsgYm9yZGVyOiAxcHggc29saWQgI2NjYzsgYm9yZGVyLXJhZGl1czogNHB4OyBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLDAsMCwwLjEpO1wiPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzdWdnZXN0aW9uIG9mIGFkZHJlc3NTdWdnZXN0aW9uczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwiZHJvcGRvd24taXRlbSBwLTJcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZTtcIiAobW91c2Vkb3duKT1cInNlbGVjdEFkZHJlc3Moc3VnZ2VzdGlvbilcIlxuICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cImhvdmVyZWRJbmRleCA9IGlcIiBbY2xhc3MuYmctbGlnaHRdPVwiaG92ZXJlZEluZGV4ID09PSBpXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LWJvbGRcIj57eyBzdWdnZXN0aW9uLm1haW5fdGV4dCB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWRcIj57eyBzdWdnZXN0aW9uLnNlY29uZGFyeV90ZXh0IH19PC9zbWFsbD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWRcIj5TdGFydCB0eXBpbmcgdG8gc2VhcmNoIGZvciBhZGRyZXNzZXM8L3NtYWxsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxnb29nbGUtbWFwIFtjZW50ZXJdPVwiY2VudGVyXCIgW3pvb21dPVwiem9vbVwiPlxuICAgICAgICAgICAgPG1hcC1tYXJrZXIgW3Bvc2l0aW9uXT1cImN1cnJlbnRDb29yZGluYXRlc1wiPjwvbWFwLW1hcmtlcj5cbiAgICAgICAgICA8L2dvb2dsZS1tYXA+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cblxuICAgICAgPGRpdiBbbmdDbGFzc109XCJxdWVzdGlvbnM/LmZpZWxkPy5jc3NDbGFzc1wiICpuZ0lmPVwiXG4gICAgICAgICAgICAocXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ1JBRElPIEJVVFRPTicgfHxcbiAgICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0FERE1PUkUnKSAmJlxuICAgICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCI+XG4gICAgICAgIDxsaWItcmFkaW8gWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25zLnF1ZXN0aW9uSWRdXCJcbiAgICAgICAgICAoYmx1cik9XCJ2YWxpZGF0ZUZpZWxkKHF1ZXN0aW9ucy5xdWVzdGlvbklkLCBxdWVzdGlvbnMpXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZUZpZWxkKHF1ZXN0aW9ucy5xdWVzdGlvbklkLCBxdWVzdGlvbnMpOyByZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCJcbiAgICAgICAgICBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCIgLz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVycm9yLW1lc3NhZ2UgdGV4dC1kYW5nZXIgbXQtMVwiICpuZ0lmPVwiaGFzQW55RmllbGRFcnJvcihxdWVzdGlvbnMucXVlc3Rpb25JZClcIj5cbiAgICAgICAgICB7eyBnZXRGaWVsZEVycm9yTWVzc2FnZShxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwibXktMVwiIFtuZ0NsYXNzXT1cInF1ZXN0aW9ucz8uZmllbGQ/LmNzc0NsYXNzXCIgKm5nSWY9XCJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cbiAgICAgICAgICBcIj5cbiAgICAgICAgPGxpYi1tdWx0aXBsZS1zZWxlY3QgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25zLnF1ZXN0aW9uSWRdXCJcbiAgICAgICAgICAoY2xpY2spPVwidmFsaWRhdGVGaWVsZChxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiXG4gICAgICAgICAgICB2YWxpZGF0ZUZpZWxkKHF1ZXN0aW9ucy5xdWVzdGlvbklkLCBxdWVzdGlvbnMpO1xuICAgICAgICAgICAgdmFsdWVDaGFuZ2VGb3JNdWx0aXNlbGVjdChxdWVzdGlvbnMpXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCJcbiAgICAgICAgLz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVycm9yLW1lc3NhZ2UgdGV4dC1kYW5nZXIgbXQtMVwiICpuZ0lmPVwiaGFzQW55RmllbGRFcnJvcihxdWVzdGlvbnMucXVlc3Rpb25JZClcIj5cbiAgICAgICAgICB7eyBnZXRGaWVsZEVycm9yTWVzc2FnZShxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwibXktMVwiIFtuZ0NsYXNzXT1cInF1ZXN0aW9ucz8uZmllbGQ/LmNzc0NsYXNzXCIgKm5nSWY9XCJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdERUNMQVJBVElPTicgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cbiAgICAgICAgICBcIj5cbiAgICAgICAgPGxpYi1jaGVja2JveCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1txdWVzdGlvbnMucXVlc3Rpb25JZF1cIlxuICAgICAgICAgIChibHVyKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucylcIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucyk7IHJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIlxuICAgICAgICAgIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAvPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXJyb3ItbWVzc2FnZSB0ZXh0LWRhbmdlciBtdC0xXCIgKm5nSWY9XCJoYXNBbnlGaWVsZEVycm9yKHF1ZXN0aW9ucy5xdWVzdGlvbklkKVwiPlxuICAgICAgICAgIHt7IGdldEZpZWxkRXJyb3JNZXNzYWdlKHF1ZXN0aW9ucy5xdWVzdGlvbklkLCBxdWVzdGlvbnMpIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJteS0xXCIgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIiAqbmdJZj1cIlxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0RST1BET1dOJyAmJlxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxuICAgICAgICAgXCIgKGZvY3Vzb3V0KT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucylcIj5cbiAgICAgICAgPGxpYi1zZWxlY3QgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25zLnF1ZXN0aW9uSWRdXCIgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiXG4gICAgICAgICAgKGJsdXIpPVwidmFsaWRhdGVGaWVsZChxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVGaWVsZChxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKTsgcmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKVwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJlcnJvci1tZXNzYWdlIHRleHQtZGFuZ2VyIG10LTFcIiAqbmdJZj1cImhhc0FueUZpZWxkRXJyb3IocXVlc3Rpb25zLnF1ZXN0aW9uSWQpXCI+XG4gICAgICAgICAge3sgZ2V0RmllbGRFcnJvck1lc3NhZ2UocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucykgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cIm15LTFcIiBbbmdDbGFzc109XCJxdWVzdGlvbnM/LmZpZWxkPy5jc3NDbGFzc1wiICpuZ0lmPVwiXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCI+XG4gICAgICAgIDxsaWItZG9iIFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIlxuICAgICAgICAgIChibHVyKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucylcIiAobmdNb2RlbENoYW5nZSk9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgLz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVycm9yLW1lc3NhZ2UgdGV4dC1kYW5nZXIgbXQtMVwiICpuZ0lmPVwiaGFzQW55RmllbGRFcnJvcihxdWVzdGlvbnMucXVlc3Rpb25JZClcIj5cbiAgICAgICAgICB7eyBnZXRGaWVsZEVycm9yTWVzc2FnZShxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIDxkaXZcbiAgICAgICAgICBjbGFzcz1cIlwiXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdIRUlHSFRJTlBVVCcgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwibXktMVwiIFtuZ0NsYXNzXT1cInF1ZXN0aW9ucz8uZmllbGQ/LmNzc0NsYXNzXCIgKm5nSWY9XCJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdET0NVUExPQUQnICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCI+XG4gICAgICAgIDxsaWItdXBsb2FkIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAoZmlsZVByZXZpZXcpPVwib25Eb2N1bWVudEZpbGVQcmV2aWV3KCRldmVudClcIlxuICAgICAgICAgIChibHVyKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucyk7XCIgLz5cbiAgICAgICAgPGxpYi1maWxlLXByZXZpZXcgKm5nSWY9XCIgcHJldmlld0ZpbGVcIiBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCIgW2ZpbGVdPVwicHJldmlld0ZpbGVcIlxuICAgICAgICAgIChjbG9zZWQpPVwiY2xvc2VGaWxlUHJldmlldygpXCI+XG4gICAgICAgIDwvbGliLWZpbGUtcHJldmlldz5cbiAgICAgIDwvZGl2PlxuXG5cbiAgICAgIDxkaXYgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIiAqbmdJZj1cIlxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ1BBU1NQT1JUX1VQTE9BRCcgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cbiAgICAgICAgICBcIj5cbiAgICAgICAgPCEtLSBwZW5kaW5nIC0tPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+Il19
2729
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL21lZGlhbC1xdWVzdGlvbnMvbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL21lZGlhbC1xdWVzdGlvbnMvbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFFTCxTQUFTLEVBR1QsS0FBSyxFQUdMLE1BQU0sRUFDTixZQUFZLEdBRWIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDdkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRy9ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7Ozs7QUF5QjlFLE1BQU0sT0FBTyx3QkFBd0I7SUFxSTFCO0lBQ0E7SUFySUMsb0JBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUN6RCxTQUFTLEdBQVEsS0FBSyxFQUFPLENBQUMsQ0FBQywyQkFBMkI7SUFDakQsaUJBQWlCLENBQWlCO0lBQzNDLHNCQUFzQixHQUFHLEtBQUssRUFBTyxDQUFDO0lBQ3RDLHlCQUF5QixHQUFRLEtBQUssRUFBTyxDQUFDO0lBQzlDLGFBQWEsR0FBUSxLQUFLLEVBQU8sQ0FBQztJQUNsQyxVQUFVLEdBQVEsS0FBSyxFQUFPLENBQUM7SUFDL0IsVUFBVSxHQUFRLEVBQUUsQ0FBQztJQUNyQiw4QkFBOEIsR0FBUSxJQUFJLENBQUM7SUFDM0MsMkJBQTJCLEdBQVEsRUFBRSxDQUFDO0lBQ1gsWUFBWSxDQUFnQztJQUMvRCxZQUFZLENBQW1DO0lBQ3ZELHFCQUFxQixHQUFRLEVBQUUsQ0FBQztJQUNoQyxxQkFBcUIsR0FBUSxFQUFFLENBQUM7SUFDaEMsS0FBSyxHQUFRLEtBQUssQ0FBQyxRQUFRLEVBQU8sQ0FBQztJQUNuQyxZQUFZLEdBQVEsRUFBRSxDQUFDO0lBQ3ZCLGtCQUFrQixHQUFRLEVBQUUsQ0FBQztJQUM3QixtQkFBbUIsR0FBUSxFQUFFLENBQUM7SUFDOUIsTUFBTSxHQUE4QixFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDdkUsUUFBUSxDQUFNO0lBQ2QsU0FBUyxDQUFNO0lBQ2YsSUFBSSxDQUFNO0lBQ1YsTUFBTSxHQUFRLEVBQUUsQ0FBQztJQUVqQixlQUFlLEdBQVE7UUFDckIsMEJBQTBCLEVBQUUsTUFBTTtRQUNsQyx3QkFBd0IsRUFBRSxDQUFDO1FBQzNCLDJCQUEyQixFQUFFLENBQUM7UUFDOUIsMkJBQTJCLEVBQUUsQ0FBQztLQUMvQixDQUFDO0lBQ0YsY0FBYyxHQUFRLEVBQUUsQ0FBQztJQUN6Qiw2QkFBNkIsR0FBUSxFQUFFLENBQUM7SUFDeEMsd0JBQXdCLEdBQVEsRUFBRSxDQUFDO0lBQ25DLDBCQUEwQixHQUFRLEVBQUUsQ0FBQztJQUNyQyxjQUFjLEdBQVEsQ0FBQyxhQUFhLEVBQUUsY0FBYyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ3JFLCtCQUErQixHQUFRO1FBQ3JDO1lBQ0UsS0FBSyxFQUFFLElBQUk7WUFDWCxLQUFLLEVBQUUsSUFBSTtTQUNaO1FBQ0Q7WUFDRSxLQUFLLEVBQUUsTUFBTTtZQUNiLEtBQUssRUFBRSxNQUFNO1NBQ2Q7S0FDRixDQUFDO0lBQ0YsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUNyQixrQkFBa0IsR0FBVSxFQUFFLENBQUM7SUFDL0IsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLGFBQWEsQ0FBTTtJQUNuQixpQkFBaUIsR0FBUTtRQUN2QixZQUFZLEVBQUU7WUFDWixXQUFXLEVBQUUsSUFBSTtZQUNqQixXQUFXLEVBQUUsSUFBSTtZQUNqQixXQUFXLEVBQUUsSUFBSTtZQUNqQixZQUFZLEVBQUUsSUFBSTtZQUNsQixRQUFRLEVBQUUsSUFBSTtZQUNkLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLEtBQUssRUFBRSxJQUFJO1lBQ1gsVUFBVSxFQUFFLElBQUk7WUFDaEIsVUFBVSxFQUFFLElBQUk7WUFDaEIsaUJBQWlCLEVBQUUsSUFBSTtZQUN2QixxQkFBcUIsRUFBRSxJQUFJO1lBQzNCLG1CQUFtQixFQUFFLElBQUk7WUFDekIsd0JBQXdCLEVBQUUsSUFBSTtZQUM5QixLQUFLLEVBQUUsSUFBSTtZQUNYLGdCQUFnQixFQUFFLElBQUk7WUFDdEIsZ0JBQWdCLEVBQUUsSUFBSTtZQUN0QixlQUFlLEVBQUUsSUFBSTtZQUNyQixVQUFVLEVBQUUsSUFBSTtZQUNoQiwwQkFBMEIsRUFBRSxJQUFJO1lBQ2hDLHdCQUF3QixFQUFFLElBQUk7WUFDOUIsNkJBQTZCLEVBQUUsSUFBSTtZQUNuQyw2QkFBNkIsRUFBRSxJQUFJO1lBQ25DLCtCQUErQixFQUFFLElBQUk7WUFDckMsZ0JBQWdCLEVBQUUsSUFBSTtZQUN0QixnQkFBZ0IsRUFBRSxJQUFJO1lBQ3RCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFlBQVksRUFBRSxJQUFJO1lBQ2xCLGlCQUFpQixFQUFFLElBQUk7WUFDdkIsZ0JBQWdCLEVBQUUsSUFBSTtZQUN0QixnQkFBZ0IsRUFBRSxJQUFJO1lBQ3RCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsTUFBTSxFQUFFLElBQUk7WUFDWixXQUFXLEVBQUUsSUFBSTtZQUNqQixhQUFhLEVBQUUsa0NBQWtDO1lBQ2pELFdBQVcsRUFBRSxPQUFPO1lBQ3BCLE1BQU0sRUFBRSxJQUFJO1lBQ1osU0FBUyxFQUFFLElBQUk7WUFDZixTQUFTLEVBQUUsSUFBSTtZQUNmLFFBQVEsRUFBRSxJQUFJO1lBQ2QsUUFBUSxFQUFFLElBQUk7WUFDZCxRQUFRLEVBQUUsSUFBSTtTQUNmO1FBQ0QsU0FBUyxFQUFFLFFBQVE7UUFDbkIsS0FBSyxFQUFFLFlBQVk7UUFDbkIsV0FBVyxFQUFFLElBQUk7UUFDakIsTUFBTSxFQUFFLGtDQUFrQztRQUMxQyxTQUFTLEVBQUUsSUFBSTtRQUNmLFNBQVMsRUFBRSxLQUFLO1FBQ2hCLFlBQVksRUFBRSxJQUFJO1FBQ2xCLFVBQVUsRUFBRTtZQUNWLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLGVBQWUsRUFBRSw0QkFBNEI7WUFDN0MsU0FBUyxFQUFFLElBQUk7WUFDZixnQkFBZ0IsRUFBRSxJQUFJO1lBQ3RCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsZ0JBQWdCLEVBQUUsSUFBSTtZQUN0QixPQUFPLEVBQUUsSUFBSTtZQUNiLGNBQWMsRUFBRSxFQUFFO1NBQ25CO1FBQ0QsT0FBTyxFQUFFLEVBQUU7UUFDWCxRQUFRLEVBQUUsUUFBUTtRQUNsQixLQUFLLEVBQUUsSUFBSTtRQUNYLEtBQUssRUFBRSxJQUFJO1FBQ1gsUUFBUSxFQUFFLElBQUk7UUFDZCxVQUFVLEVBQUU7WUFDVixNQUFNLEVBQUUsRUFBRTtTQUNYO1FBQ0QsV0FBVyxFQUFFLElBQUk7UUFDakIsV0FBVyxFQUFFLElBQUk7UUFDakIsZUFBZSxFQUFFLEtBQUs7UUFDdEIsV0FBVyxFQUFFLFFBQVE7S0FDdEIsQ0FBQztJQUNGLFdBQVcsR0FBZ0IsSUFBSSxDQUFDO0lBRWhDLDRCQUE0QjtJQUM1QixXQUFXLEdBQXdELEVBQUUsQ0FBQztJQUN0RSxZQUFZLEdBQStCLEVBQUUsQ0FBQztJQUM5QyxZQUNTLE1BQWMsRUFDZCxhQUE0QjtRQUQ1QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2Qsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFFbkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsRUFBRSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDcEMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFDRSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQztZQUNoQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUMvQyxDQUFDO1lBQ0osQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUM7Z0JBQ3JDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixPQUFPLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxZQUFZLENBQ3BELENBQUMsRUFDSixDQUFDO1lBQ0QsSUFBSSxhQUFhLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQy9CLFNBQVMsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtvQkFDcEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztvQkFDekMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztvQkFDM0MsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7b0JBQ2YsSUFBSSxDQUFDLGtCQUFrQixHQUFHO3dCQUN4QixHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVE7d0JBQ2xCLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUztxQkFDcEIsQ0FBQztvQkFDRixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDL0MsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBQ0QsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDckMsQ0FBQztRQUVELElBQ0UsT0FBTyxDQUFDLGVBQWUsQ0FBQztZQUN4QixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQ2hFLENBQUM7WUFDRCxJQUFJLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUM3QyxJQUFJLENBQUMsZUFBZSxHQUFHO29CQUNyQixHQUFHLElBQUksQ0FBQyxlQUFlO29CQUN2QixHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUU7aUJBQ3hCLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDakMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTyx3QkFBd0I7UUFDOUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN6RCxJQUFJLENBQUMsZUFBZSxDQUFDLDBCQUEwQixDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3RELElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFekQsZ0RBQWdEO1FBQ2hELGlFQUFpRTtRQUNqRSxxREFBcUQ7UUFDckQsaURBQWlEO1FBQ2pELHNCQUFzQjtRQUN0Qix1RkFBdUY7UUFDdkYsbUJBQW1CO1FBQ25CLHVCQUF1QjtRQUN2QixvRkFBb0Y7UUFDcEYsbUJBQW1CO1FBQ25CLHVCQUF1QjtRQUN2Qix1RkFBdUY7UUFDdkYsbUJBQW1CO1FBQ25CLFVBQVU7UUFDVixVQUFVO1FBQ1YsTUFBTTtRQUNOLE1BQU07SUFDUixDQUFDO0lBRU8sc0JBQXNCO1FBQzVCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQ3JELElBQUksQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUNoQztZQUNFLEtBQUssRUFBRSxDQUFDLFNBQVMsQ0FBQztZQUNsQixxQkFBcUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7WUFDeEMsTUFBTSxFQUFFLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsbUJBQW1CLENBQUM7U0FDOUQsQ0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRTtZQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGVBQWU7UUFDckIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUUzQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQ0FBa0MsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUQsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUN6QyxJQUFJLENBQUMsTUFBTSxHQUFHO1lBQ1osR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDbkIsR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUU7U0FDcEIsQ0FBQztRQUNGLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRXRDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNqQixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLENBQUM7UUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFO1lBQzdCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtZQUNoQixPQUFPLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtZQUNoQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDekIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxLQUFxQztRQUNoRSxNQUFNLFdBQVcsR0FBRztZQUNsQixPQUFPLEVBQUUsS0FBSyxDQUFDLFFBQVE7WUFDdkIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7WUFDekMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNO1NBQ3pCLENBQUM7SUFDSixDQUFDO0lBRUQsYUFBYSxDQUFDLE9BQWU7UUFDM0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRTVDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDekQsSUFBSSxNQUFNLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDN0MsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtvQkFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRzt3QkFDWixHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRTt3QkFDbkIsR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUU7cUJBQ3BCLENBQUM7b0JBQ0YsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNqQixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLENBQUMsR0FBRyxDQUNULHVEQUF1RCxHQUFHLE1BQU0sQ0FDakUsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUFVO1FBQzVCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBRWpDLHlCQUF5QjtRQUN6QixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixZQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFFRCw4QkFBOEI7UUFDOUIsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDMUIsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLEVBQ3JCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUNuQyxDQUFDO1lBQ0YsT0FBTztRQUNULENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEQsT0FBTztRQUNULENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDakMsSUFDRSxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzFDLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDakUsQ0FBQztZQUNELE9BQU87UUFDVCxDQUFDO2FBQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQzFCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDMUIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDbkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQWE7UUFDM0Isd0RBQXdEO1FBQ3hELHdDQUF3QztRQUV4QyxNQUFNLE9BQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDN0QsT0FBTyxDQUFDLG1CQUFtQixDQUN6QjtZQUNFLEtBQUssRUFBRSxLQUFLO1lBQ1osS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDO1NBQ25CLEVBQ0QsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDdEIsSUFDRSxNQUFNLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsRUFBRTtnQkFDcEQsV0FBVyxFQUNYLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ3pELFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTtvQkFDN0IsU0FBUyxFQUFFLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTO29CQUNyRCxjQUFjLEVBQUUsVUFBVSxDQUFDLHFCQUFxQixDQUFDLGNBQWM7b0JBQy9ELFdBQVcsRUFBRSxVQUFVLENBQUMsV0FBVztpQkFDcEMsQ0FBQyxDQUFDLENBQUM7Z0JBQ0osSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDekIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQzVCLENBQUM7UUFDSCxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxhQUFhLENBQUMsVUFBZTtRQUMzQixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUN6QyxlQUFlLENBQ0ksQ0FBQztRQUN0QixJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLFlBQVksQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQztRQUM5QyxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQ2xELFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQzlCLENBQUM7UUFDRixPQUFPLENBQUMsVUFBVSxDQUNoQjtZQUNFLE9BQU8sRUFBRSxVQUFVLENBQUMsUUFBUTtZQUM1QixNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLENBQUM7U0FDMUMsRUFDRCxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNoQixJQUFJLE1BQU0sS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ2xFLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUM1QyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFFNUMsSUFBSSxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDM0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO29CQUVwQixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO29CQUMzQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDeEMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELFdBQVc7UUFDVCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDNUIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVELCtCQUErQixDQUFDLFVBQWU7UUFDN0MsSUFDRSxVQUFVLENBQUMsc0JBQXNCLENBQUMsS0FBSyxXQUFXO1lBQ2xELFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLGVBQWUsRUFDdEQsQ0FBQztZQUNELElBQUksQ0FBQyw4QkFBOEIsR0FBRyxVQUFVLENBQUM7UUFDbkQsQ0FBQztRQUNELElBQ0UsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQztZQUM3RCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxFQUN2RSxDQUFDO1lBQ0QsVUFBVSxDQUFDLGdDQUFnQyxDQUFDLENBQUMsT0FBTyxDQUNsRCxDQUFDLGNBQW1CLEVBQUUsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLCtCQUErQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3ZELENBQUMsQ0FDRixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztZQUMzRCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5RCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUNsRDtZQUNELENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUNsRCxFQUFFLG1CQUFtQixDQUN4QixFQUNELENBQUM7WUFDRCxJQUFJLFdBQVcsR0FBUSxNQUFNLENBQUMsSUFBSSxDQUNoQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUNsRCxFQUFFLG1CQUFtQixDQUN4QixDQUFDO1lBQ0YsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQWMsRUFBRSxlQUF1QixFQUFFLEVBQUU7Z0JBQzlELElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNwRCxxQkFBcUIsQ0FDdEIsQ0FBQyxTQUFTLENBQUMsQ0FDYixFQUNELENBQUM7b0JBQ0QsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3BELHFCQUFxQixDQUN0QixDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FDbEIsQ0FBQyxlQUFvQixFQUFFLHFCQUE2QixFQUFFLEVBQUU7d0JBQ3RELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsQ0FBQzt3QkFDNUMsSUFDRSxlQUFlLEtBQUssV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDOzRCQUMxQyxxQkFBcUI7Z0NBQ25CLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNwRCxxQkFBcUIsQ0FDdEIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNO29DQUNqQixDQUFDLEVBQ0wsQ0FBQzs0QkFDRCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQzt3QkFDakMsQ0FBQztvQkFDSCxDQUFDLENBQ0YsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVELDJCQUEyQjtRQUN6QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLElBQUksR0FBUSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsNkJBQTZCLEdBQUcsRUFBRSxDQUFDO1FBRXhDLElBQUksU0FBUyxHQUFRLEtBQUssQ0FBQztRQUMzQixJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixjQUFjLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBQ3BELEVBQ0QsQ0FBQztZQUNELElBQUksNkJBQTZCLEdBQVEsY0FBYyxDQUFDLE9BQU8sQ0FDN0QsMkJBQTJCLENBQzVCLENBQUM7WUFDRixTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUN2RSxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDekQsSUFBSSxlQUFlLEdBQVEsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGlCQUFzQixFQUFFLEVBQUU7Z0JBQzNELGVBQWUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUN4RCxDQUFDLENBQUMsQ0FBQztZQUVILElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDO2dCQUMvQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxFQUNwRCxDQUFDO2dCQUNELElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsRUFBRSxDQUFDO29CQUN6RCxJQUFJLGFBQWEsR0FBUSxFQUFFLENBQUM7b0JBQzVCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGtCQUF1QixFQUFFLEVBQUU7d0JBQzVELElBQUksQ0FBQyxVQUFVLEdBQUcsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQzlELElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDOzRCQUNsRSxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQ3hDLENBQUMsY0FBbUIsRUFBRSxFQUFFO2dDQUN0QixJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsS0FBSyxpQkFBaUIsRUFBRSxDQUFDO29DQUNsRCxjQUFjLENBQUMsY0FBYyxDQUFDLEdBQUcsY0FBYyxDQUM3QyxjQUFjLENBQ2YsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO2dDQUMxQixDQUFDO2dDQUNELGNBQWMsQ0FBQyxjQUFjLENBQUM7b0NBQzVCLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztnQ0FFckQsY0FBYyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7Z0NBRXhELElBQUksY0FBYyxDQUFDLHNCQUFzQixDQUFDLEtBQUssS0FBSyxFQUFFLENBQUM7b0NBQ3JELGNBQWMsQ0FBQyxhQUFhLENBQUM7d0NBQzNCLG9IQUFvSCxDQUFDO2dDQUN6SCxDQUFDO2dDQUNELG9FQUFvRTtnQ0FDcEUsNE1BQTRNO2dDQUM1TSxJQUFJO2dDQUNKLElBQ0UsY0FBYyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFVBQVU7b0NBQzdDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixjQUFjLENBQUMsa0JBQWtCLENBQUMsQ0FDbkMsRUFDRCxDQUFDO29DQUNELGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE9BQU8sQ0FDeEMsQ0FBQyx5QkFBOEIsRUFBRSxFQUFFO3dDQUNqQyxJQUFJLGtCQUFrQixHQUFRLGtCQUFrQixDQUM5QyxjQUFjLENBQ2YsQ0FBQyxNQUFNLENBQ04sQ0FBQyxNQUFXLEVBQUUsRUFBRSxDQUNkLE1BQU0sQ0FBQyxZQUFZLENBQUM7NENBQ3BCLHlCQUF5QixDQUFDLGdCQUFnQixDQUFDLENBQzlDLENBQUM7d0NBQ0YsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7NENBQ2xDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztnREFDcEMseUJBQXlCLENBQUMscUJBQXFCLENBQUMsQ0FBQzt3Q0FDckQsQ0FBQztvQ0FDSCxDQUFDLENBQ0YsQ0FBQztnQ0FDSixDQUFDO2dDQUVELElBQUksY0FBYyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFVBQVUsRUFBRSxDQUFDO29DQUNsRCxJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQzt3Q0FDdkQsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FDbkQsRUFDRCxDQUFDO3dDQUNELElBQUksQ0FBQyxjQUFjLENBQUMsQ0FDbEIsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUM3QixDQUFDLE9BQU8sQ0FBQyxDQUFDLGlCQUFzQixFQUFFLEVBQUU7NENBQ25DLElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLENBQ3pDLEVBQ0QsQ0FBQztnREFDRCxJQUFJLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUNyQyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUN6QyxDQUFDOzRDQUNKLENBQUM7d0NBQ0gsQ0FBQyxDQUFDLENBQUM7b0NBQ0wsQ0FBQztnQ0FDSCxDQUFDO2dDQUVELElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7b0NBQ3BELGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0NBQzdDLENBQUM7Z0NBRUQsY0FBYyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsS0FBSyxDQUFDOzRCQUNqRCxDQUFDLENBQ0YsQ0FBQzs0QkFFRixrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtnQ0FDM0QsUUFBUSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsS0FBSyxDQUFDO2dDQUN2QyxJQUFJLFFBQVEsQ0FBQyxjQUFjLENBQUMsS0FBSyxZQUFZLEVBQUUsQ0FBQztvQ0FDOUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLFFBQVEsQ0FDakMsY0FBYyxDQUNmLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztnQ0FDOUIsQ0FBQztnQ0FFRCxJQUFJLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLE1BQU0sRUFBRSxDQUFDO29DQUNoRCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO29DQUN6RCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQztvQ0FDdkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxLQUFLLENBQUM7b0NBQzVELElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUc7d0NBQ3JELFdBQVcsRUFBRSxRQUFRO3dDQUNyQixXQUFXLEVBQUUsU0FBUzt3Q0FDdEIsV0FBVyxFQUFFLE9BQU87d0NBQ3BCLFlBQVksRUFBRSxJQUFJO3dDQUNsQixRQUFRLEVBQUUsTUFBTTt3Q0FDaEIsVUFBVSxFQUFFLEtBQUs7d0NBQ2pCLFVBQVUsRUFBRSxRQUFRO3dDQUNwQixLQUFLLEVBQUUsU0FBUzt3Q0FDaEIsVUFBVSxFQUFFLFNBQVM7d0NBQ3JCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQixpQkFBaUIsRUFBRSxJQUFJO3dDQUN2QixxQkFBcUIsRUFBRSxTQUFTO3dDQUNoQyxtQkFBbUIsRUFBRSxTQUFTO3dDQUM5Qix3QkFBd0IsRUFBRSxLQUFLO3dDQUMvQixLQUFLLEVBQUUsSUFBSTt3Q0FDWCxnQkFBZ0IsRUFBRSxPQUFPO3dDQUN6QixnQkFBZ0IsRUFBRSxTQUFTO3dDQUMzQixlQUFlLEVBQUUsSUFBSTt3Q0FDckIsVUFBVSxFQUFFLFNBQVM7d0NBQ3JCLDBCQUEwQixFQUFFLElBQUk7d0NBQ2hDLHdCQUF3QixFQUFFLElBQUk7d0NBQzlCLDZCQUE2QixFQUFFLElBQUk7d0NBQ25DLDZCQUE2QixFQUFFLElBQUk7d0NBQ25DLCtCQUErQixFQUFFLElBQUk7d0NBQ3JDLGdCQUFnQixFQUFFLFNBQVM7d0NBQzNCLGdCQUFnQixFQUFFLE9BQU87d0NBQ3pCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQixZQUFZLEVBQUUsU0FBUzt3Q0FDdkIsaUJBQWlCLEVBQUUsU0FBUzt3Q0FDNUIsZ0JBQWdCLEVBQUUsU0FBUzt3Q0FDM0IsZ0JBQWdCLEVBQUUsT0FBTzt3Q0FDekIsVUFBVSxFQUFFLFNBQVM7d0NBQ3JCLFdBQVcsRUFBRSxJQUFJO3dDQUNqQixPQUFPLEVBQUUsSUFBSTt3Q0FDYixNQUFNLEVBQUUsSUFBSTt3Q0FDWixXQUFXLEVBQUUsSUFBSTt3Q0FDakIsYUFBYSxFQUNYLDZDQUE2Qzt3Q0FDL0MsV0FBVyxFQUFFLElBQUk7d0NBQ2pCLE1BQU0sRUFBRSxJQUFJO3dDQUNaLFNBQVMsRUFBRSxJQUFJO3dDQUNmLFNBQVMsRUFBRSxJQUFJO3dDQUNmLFFBQVEsRUFBRSxJQUFJO3dDQUNkLFFBQVEsRUFBRSxJQUFJO3dDQUNkLFFBQVEsRUFBRSxJQUFJO3FDQUNmLENBQUM7Z0NBQ0osQ0FBQztnQ0FDRCxJQUFJLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLE1BQU0sRUFBRSxDQUFDO29DQUNoRCxJQUFJLENBQUMsMEJBQTBCLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO29DQUMzRCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQztvQ0FDdkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxLQUFLLENBQUM7b0NBQzVELElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUc7d0NBQ3JELFdBQVcsRUFBRSxRQUFRO3dDQUNyQixXQUFXLEVBQUUsU0FBUzt3Q0FDdEIsV0FBVyxFQUFFLE9BQU87d0NBQ3BCLFlBQVksRUFBRSxJQUFJO3dDQUNsQixRQUFRLEVBQUUsTUFBTTt3Q0FDaEIsVUFBVSxFQUFFLEtBQUs7d0NBQ2pCLFVBQVUsRUFBRSxRQUFRO3dDQUNwQixLQUFLLEVBQUUsU0FBUzt3Q0FDaEIsVUFBVSxFQUFFLFNBQVM7d0NBQ3JCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQixpQkFBaUIsRUFBRSxJQUFJO3dDQUN2QixxQkFBcUIsRUFBRSxTQUFTO3dDQUNoQyxtQkFBbUIsRUFBRSxTQUFTO3dDQUM5Qix3QkFBd0IsRUFBRSxLQUFLO3dDQUMvQixLQUFLLEVBQUUsSUFBSTt3Q0FDWCxnQkFBZ0IsRUFBRSxPQUFPO3dDQUN6QixnQkFBZ0IsRUFBRSxTQUFTO3dDQUMzQixlQUFlLEVBQUUsSUFBSTt3Q0FDckIsVUFBVSxFQUFFLFNBQVM7d0NBQ3JCLDBCQUEwQixFQUFFLElBQUk7d0NBQ2hDLHdCQUF3QixFQUFFLElBQUk7d0NBQzlCLDZCQUE2QixFQUFFLElBQUk7d0NBQ25DLDZCQUE2QixFQUFFLElBQUk7d0NBQ25DLCtCQUErQixFQUFFLElBQUk7d0NBQ3JDLGdCQUFnQixFQUFFLFNBQVM7d0NBQzNCLGdCQUFnQixFQUFFLE9BQU87d0NBQ3pCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQixZQUFZLEVBQUUsU0FBUzt3Q0FDdkIsaUJBQWlCLEVBQUUsU0FBUzt3Q0FDNUIsZ0JBQWdCLEVBQUUsU0FBUzt3Q0FDM0IsZ0JBQWdCLEVBQUUsT0FBTzt3Q0FDekIsVUFBVSxFQUFFLFNBQVM7d0NBQ3JCLFdBQVcsRUFBRSxJQUFJO3dDQUNqQixPQUFPLEVBQUUsSUFBSTt3Q0FDYixNQUFNLEVBQUUsSUFBSTt3Q0FDWixXQUFXLEVBQUUsSUFBSTt3Q0FDakIsYUFBYSxFQUNYLDZDQUE2Qzt3Q0FDL0MsV0FBVyxFQUFFLElBQUk7d0NBQ2pCLE1BQU0sRUFBRSxJQUFJO3dDQUNaLFNBQVMsRUFBRSxJQUFJO3dDQUNmLFNBQVMsRUFBRSxJQUFJO3dDQUNmLFFBQVEsRUFBRSxJQUFJO3dDQUNkLFFBQVEsRUFBRSxJQUFJO3dDQUNkLFFBQVEsRUFBRSxJQUFJO3FDQUNmLENBQUM7Z0NBQ0osQ0FBQztnQ0FDRCxJQUFJLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDO29DQUMvQyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO29DQUMzRCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQztvQ0FDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxLQUFLLENBQUM7b0NBQzNELElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUc7d0NBQ3BELFdBQVcsRUFBRSxVQUFVO3dDQUN2QixXQUFXLEVBQUUsU0FBUzt3Q0FDdEIsV0FBVyxFQUFFLE9BQU87d0NBQ3BCLFlBQVksRUFBRSxJQUFJO3dDQUNsQixRQUFRLEVBQUUsTUFBTTt3Q0FDaEIsVUFBVSxFQUFFLEtBQUs7d0NBQ2pCLFVBQVUsRUFBRSxRQUFRO3dDQUNwQixLQUFLLEVBQUUsU0FBUzt3Q0FDaEIsVUFBVSxFQUFFLFNBQVM7d0NBQ3JCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQixpQkFBaUIsRUFBRSxJQUFJO3dDQUN2QixxQkFBcUIsRUFBRSxTQUFTO3dDQUNoQyxtQkFBbUIsRUFBRSxTQUFTO3dDQUM5Qix3QkFBd0IsRUFBRSxLQUFLO3dDQUMvQixLQUFLLEVBQUUsSUFBSTt3Q0FDWCxnQkFBZ0IsRUFBRSxPQUFPO3dDQUN6QixnQkFBZ0IsRUFBRSxTQUFTO3dDQUMzQixlQUFlLEVBQUUsSUFBSTt3Q0FDckIsVUFBVSxFQUFFLFNBQVM7d0NBQ3JCLDBCQUEwQixFQUFFLElBQUk7d0NBQ2hDLHdCQUF3QixFQUFFLElBQUk7d0NBQzlCLDZCQUE2QixFQUFFLElBQUk7d0NBQ25DLDZCQUE2QixFQUFFLElBQUk7d0NBQ25DLCtCQUErQixFQUFFLElBQUk7d0NBQ3JDLGdCQUFnQixFQUFFLFNBQVM7d0NBQzNCLGdCQUFnQixFQUFFLE9BQU87d0NBQ3pCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQixZQUFZLEVBQUUsU0FBUzt3Q0FDdkIsaUJBQWlCLEVBQUUsU0FBUzt3Q0FDNUIsZ0JBQWdCLEVBQUUsU0FBUzt3Q0FDM0IsZ0JBQWdCLEVBQUUsT0FBTzt3Q0FDekIsVUFBVSxFQUFFLFNBQVM7d0NBQ3JCLFdBQVcsRUFBRSxJQUFJO3dDQUNqQixPQUFPLEVBQUUsSUFBSTt3Q0FDYixNQUFNLEVBQUUsSUFBSTt3Q0FDWixXQUFXLEVBQUUsSUFBSTt3Q0FDakIsYUFBYSxFQUNYLDZDQUE2Qzt3Q0FDL0MsV0FBVyxFQUFFLElBQUk7d0NBQ2pCLE1BQU0sRUFBRSxJQUFJO3dDQUNaLFNBQVMsRUFBRSxJQUFJO3dDQUNmLFNBQVMsRUFBRSxJQUFJO3dDQUNmLFFBQVEsRUFBRSxJQUFJO3dDQUNkLFFBQVEsRUFBRSxJQUFJO3dDQUNkLFFBQVEsRUFBRSxJQUFJO3FDQUNmLENBQUM7Z0NBQ0osQ0FBQztnQ0FFRCxJQUFJLFFBQVEsQ0FBQyxjQUFjLENBQUMsS0FBSyxhQUFhLEVBQUUsQ0FBQztvQ0FDL0MsSUFBSSxRQUFRLENBQUMsc0JBQXNCLENBQUMsS0FBSyxhQUFhLEVBQUUsQ0FBQzt3Q0FDdkQsOERBQThEO3dDQUM5RCxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDO3dDQUM5QixRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDOzRDQUM1QixtQkFBbUIsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDOzRDQUMzQyxhQUFhLEVBQUUsR0FBRzt5Q0FDbkIsQ0FBQyxDQUFDO29DQUNMLENBQUM7b0NBQ0QsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQ0FDOUIsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQzt3Q0FDNUIsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQzt3Q0FDM0MsYUFBYSxFQUFFLEdBQUc7cUNBQ25CLENBQUMsQ0FBQztnQ0FDTCxDQUFDO2dDQUVELElBQUksUUFBUSxDQUFDLHNCQUFzQixDQUFDLEtBQUssY0FBYyxFQUFFLENBQUM7b0NBQ3hELFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxXQUFXLENBQUM7Z0NBQ3pDLENBQUM7NEJBQ0gsQ0FBQyxDQUFDLENBQUM7NEJBRUgsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUNyQyxDQUFDLENBQU0sRUFBRSxDQUFNLEVBQUUsRUFBRSxDQUNqQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQ0FDckIsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FDeEMsQ0FBQzt3QkFDSixDQUFDO3dCQUVELElBQUksa0JBQWtCLEdBQVEsRUFBRSxDQUFDO3dCQUNqQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7NEJBQ25DLElBQUksV0FBVyxHQUFRLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sQ0FDOUQsQ0FBQyxjQUFtQixFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBSyxDQUMxRCxDQUFDOzRCQUNGLElBQUksR0FBRyxHQUFRO2dDQUNiLElBQUksRUFBRSxLQUFLO2dDQUNYLFVBQVUsRUFBRSxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLEVBQUU7Z0NBQ3ZELFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUM7b0NBQy9DLENBQUMsQ0FBQyxXQUFXO29DQUNiLENBQUMsQ0FBQyxFQUFFO2dDQUNOLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUM7b0NBQ2pELENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO29DQUN6QixDQUFDLENBQUMsRUFBRTtnQ0FDTixvQkFBb0IsRUFBRSxLQUFLO2dDQUMzQixXQUFXLEVBQUUsSUFBSTs2QkFDbEIsQ0FBQzs0QkFDRixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0NBQzNDLDZCQUE2QjtnQ0FDN0IsSUFBSSx3QkFBd0IsR0FBUSxXQUFXLENBQUMsTUFBTSxDQUNwRCxDQUFDLGNBQW1CLEVBQUUsRUFBRSxDQUN0QixjQUFjLENBQUMsc0JBQXNCLENBQUMsS0FBSyxhQUFhLENBQzNELENBQUM7Z0NBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLENBQUM7b0NBQ3hELEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUM7d0NBQ3BCLFlBQVksRUFBRSxLQUFLO3dDQUNuQixrQkFBa0IsRUFBRSxJQUFJO3dDQUN4QixzQkFBc0IsRUFBRTs0Q0FDdEIsZ0JBQWdCLEVBQ2Qsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDOzRDQUMzQyxvQkFBb0IsRUFBRSxHQUFHO3lDQUMxQjtxQ0FDRixDQUFDLENBQUM7Z0NBQ0wsQ0FBQztnQ0FFRCwwQ0FBMEM7Z0NBQzFDLElBQUksMkJBQTJCLEdBQVEsV0FBVyxDQUFDLE1BQU0sQ0FDdkQsQ0FBQyxjQUFtQixFQUFFLEVBQUUsQ0FDdEIsY0FBYyxDQUFDLHNCQUFzQixDQUFDLEtBQUssYUFBYSxDQUMzRCxDQUFDO2dDQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsMkJBQTJCLENBQUMsRUFBRSxDQUFDO29DQUMzRCxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUM7d0NBQ3RDLFlBQVksRUFBRSxpQkFBaUI7d0NBQy9CLGdCQUFnQixFQUFFLEdBQUc7d0NBQ3JCLFlBQVksRUFBRSxtQkFBbUI7d0NBQ2pDLGtCQUFrQixFQUFFLElBQUk7d0NBQ3hCLHNCQUFzQixFQUFFOzRDQUN0QixnQkFBZ0IsRUFDZCwyQkFBMkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7NENBQzlDLG9CQUFvQixFQUFFLGVBQWU7eUNBQ3RDO3FDQUNGLENBQUMsQ0FBQztvQ0FDSCxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDO3dDQUNwQixZQUFZLEVBQUUsaUJBQWlCO3dDQUMvQixnQkFBZ0IsRUFBRSxHQUFHO3dDQUNyQixZQUFZLEVBQUUsbUJBQW1CO3dDQUNqQyxrQkFBa0IsRUFBRSxJQUFJO3dDQUN4QixzQkFBc0IsRUFBRTs0Q0FDdEIsZ0JBQWdCLEVBQ2QsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDOzRDQUM5QyxvQkFBb0IsRUFBRSxlQUFlO3lDQUN0QztxQ0FDRixDQUFDLENBQUM7Z0NBQ0wsQ0FBQzs0QkFDSCxDQUFDOzRCQUNELGtCQUFrQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDL0IsQ0FBQyxDQUFDLENBQUM7d0JBQ0gsK0lBQStJO3dCQUMvSSxnRUFBZ0U7d0JBQ2hFLElBQUksQ0FBQyxZQUFZLEdBQUcsa0JBQWtCLENBQUM7d0JBQ3ZDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO3dCQUNoQyxJQUFJO29CQUNOLENBQUMsQ0FBQyxDQUFDO29CQUNILElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFDdkQsQ0FBQztZQUNILENBQUM7WUFFRCxJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO2dCQUMzRCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDOUQsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FDbEQ7Z0JBQ0QsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7b0JBQ2xELEVBQUUsbUJBQW1CLENBQ3hCLEVBQ0QsQ0FBQztnQkFDRCxJQUFJLG1CQUFtQixHQUFRLEtBQUssQ0FBQztnQkFDckMsSUFBSSxDQUFDLDhCQUE4QixHQUFHLElBQUksQ0FBQztnQkFDM0MsSUFBSSxXQUFXLEdBQVEsTUFBTSxDQUFDLElBQUksQ0FDaEMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztvQkFDbEQsRUFBRSxtQkFBbUIsQ0FDeEIsQ0FBQztnQkFDRixXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBYyxFQUFFLEVBQUU7b0JBQ3JDLElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNwRCxxQkFBcUIsQ0FDdEIsQ0FBQyxTQUFTLENBQUMsQ0FDYixFQUNELENBQUM7d0JBQ0QsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3BELHFCQUFxQixDQUN0QixDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGVBQW9CLEVBQUUsRUFBRTs0QkFDNUMsSUFBSSxDQUFDLCtCQUErQixDQUFDLGVBQWUsQ0FBQyxDQUFDO3dCQUN4RCxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO2dCQUVILElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLEVBQUUsQ0FBQztvQkFDbkUsSUFBSSxDQUFDLGFBQWE7eUJBQ2YsZUFBZSxDQUNkLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxVQUFVLEVBQ3hCLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxRQUFRLENBQUMsRUFDN0MsSUFBSSxDQUFDLDhCQUE4QixDQUFDLFlBQVksQ0FBQyxDQUNsRDt5QkFDQSxTQUFTLENBQ1IsQ0FBQyxtQkFBd0IsRUFBRSxFQUFFO3dCQUMzQixJQUFJLGFBQWEsR0FBUSxFQUFFLENBQUM7d0JBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDOzRCQUNuRCxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFnQixFQUFFLEVBQUU7Z0NBQy9DLFdBQVcsQ0FBQyxjQUFjLENBQUM7b0NBQ3pCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUMzQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQzFCLENBQUM7Z0NBRUosV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7Z0NBQ2xELElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUM7b0NBQ3RELGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0NBQy9DLENBQUM7NEJBQ0gsQ0FBQyxDQUFDLENBQUM7NEJBRUgsbUJBQW1CLENBQUMsSUFBSSxDQUN0QixDQUFDLENBQU0sRUFBRSxDQUFNLEVBQUUsRUFBRSxDQUNqQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQ0FDckIsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FDeEMsQ0FBQzs0QkFDRixhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBVSxFQUFFLEdBQVEsRUFBRSxFQUFFO2dDQUM3QyxJQUFJLFdBQVcsR0FBUSxtQkFBbUIsQ0FBQyxNQUFNLENBQy9DLENBQUMsY0FBbUIsRUFBRSxFQUFFLENBQ3RCLGNBQWMsQ0FBQyxXQUFXLENBQUMsS0FBSyxLQUFLLENBQ3hDLENBQUM7Z0NBQ0YsSUFBSSxHQUFHLEdBQVE7b0NBQ2IsSUFBSSxFQUFFLElBQUksR0FBRyxHQUFHO29DQUNoQixTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDO3dDQUMvQyxDQUFDLENBQUMsV0FBVzt3Q0FDYixDQUFDLENBQUMsRUFBRTtvQ0FDTixXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDO3dDQUNqRCxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQzt3Q0FDekIsQ0FBQyxDQUFDLEVBQUU7b0NBQ04sb0JBQW9CLEVBQUUsSUFBSTtvQ0FDMUIsV0FBVyxFQUFFLElBQUk7b0NBQ2pCLFVBQVUsRUFDUixJQUFJLENBQUMsOEJBQThCLENBQ2pDLFlBQVksQ0FDYixDQUFDLFFBQVEsRUFBRTtpQ0FDZixDQUFDO2dDQUNGLHVEQUF1RDtnQ0FDdkQsNkRBQTZEO2dDQUM3RCxLQUFLO2dDQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUM5QixDQUFDLENBQUMsQ0FBQzs0QkFDSCxJQUFJLENBQUMsMkJBQTJCLEdBQUcsbUJBQW1CLENBQUM7NEJBQ3ZELDBKQUEwSjs0QkFDMUosSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDbkQsY0FBYyxDQUNmLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDdkQsY0FBYyxDQUNmLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDOzRCQUUzQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQzt3QkFDaEMsQ0FBQzs2QkFBTSxDQUFDOzRCQUNOLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO3dCQUNoQyxDQUFDO29CQUNILENBQUMsRUFDRCxDQUFDLEdBQVEsRUFBRSxFQUFFO3dCQUNYLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO29CQUNoQyxDQUFDLENBQ0YsQ0FBQztnQkFDTixDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7Z0JBQ2hDLENBQUM7Z0JBQ0Qsb0VBQW9FO2dCQUNwRSxpSUFBaUk7Z0JBQ2pJLDZGQUE2RjtnQkFDN0Ysb0NBQW9DO2dCQUNwQyw2Q0FBNkM7Z0JBQzdDLDhHQUE4RztnQkFDOUcsNEdBQTRHO2dCQUU1Ryw2RUFBNkU7Z0JBRTdFLDJNQUEyTTtnQkFDM00sdUhBQXVIO2dCQUN2SCxvRUFBb0U7Z0JBQ3BFLGtGQUFrRjtnQkFDbEYsNEVBQTRFO2dCQUM1RSwyTEFBMkw7Z0JBQzNMLCtLQUErSztnQkFDL0ssK0VBQStFO2dCQUMvRSwyRUFBMkU7Z0JBQzNFLCtFQUErRTtnQkFDL0Usb0ZBQW9GO2dCQUNwRiw2QkFBNkI7Z0JBQzdCLHlCQUF5QjtnQkFDekIsdUJBQXVCO2dCQUN2Qix1QkFBdUI7Z0JBQ3ZCLDBGQUEwRjtnQkFDMUYsdUJBQXVCO2dCQUN2Qiw4RUFBOEU7Z0JBQzlFLGdCQUFnQjtnQkFFaEIscURBQXFEO2dCQUNyRCwrRUFBK0U7Z0JBQy9FLElBQUk7Z0JBQ0osc0RBQXNEO2dCQUN0RCxxREFBcUQ7Z0JBQ3JELCtGQUErRjtnQkFDL0Ysd0VBQXdFO2dCQUN4RSwyRUFBMkU7Z0JBQzNFLGFBQWE7Z0JBQ2Isd0VBQXdFO2dCQUN4RSxpRUFBaUU7Z0JBQ2pFLE1BQU07Z0JBQ04sSUFBSTtnQkFDSixrSUFBa0k7Z0JBQ2xJLHVKQUF1SjtnQkFDdkosb0ZBQW9GO2dCQUNwRixxQkFBcUI7Z0JBQ3JCLHFCQUFxQjtnQkFDckIsOEtBQThLO2dCQUU5Syw2SEFBNkg7Z0JBQzdILGtGQUFrRjtnQkFDbEYsbUJBQW1CO2dCQUVuQixnSUFBZ0k7Z0JBQ2hJLDRDQUE0QztnQkFFNUMscUJBQXFCO2dCQUNyQiw2REFBNkQ7Z0JBQzdELHVIQUF1SDtnQkFDdkgsNERBQTREO2dCQUM1RCxvREFBb0Q7Z0JBQ3BELDBDQUEwQztnQkFDMUMscUJBQXFCO2dCQUNyQixzSUFBc0k7Z0JBQ3RJLGtEQUFrRDtnQkFDbEQsMERBQTBEO2dCQUMxRCxpREFBaUQ7Z0JBQ2pELDBFQUEwRTtnQkFDMUUsMEVBQTBFO2dCQUMxRSxvRUFBb0U7Z0JBQ3BFLG1FQUFtRTtnQkFDbkUsNkJBQTZCO2dCQUM3Qix3RkFBd0Y7Z0JBQ3hGLDBFQUEwRTtnQkFDMUUsNEJBQTRCO2dCQUM1QiwrRkFBK0Y7Z0JBQy9GLDBCQUEwQjtnQkFDMUIsNkJBQTZCO2dCQUM3Qix3RUFBd0U7Z0JBQ3hFLHFGQUFxRjtnQkFDckYsNEJBQTRCO2dCQUM1Qix3R0FBd0c7Z0JBQ3hHLHNGQUFzRjtnQkFDdEYsb0hBQW9IO2dCQUNwSCwrQkFBK0I7Z0JBQy9CLGlFQUFpRTtnQkFDakUseUhBQXlIO2dCQUN6SCw4QkFBOEI7Z0JBQzlCLDhCQUE4QjtnQkFDOUIsMEJBQTBCO2dCQUMxQixxR0FBcUc7Z0JBQ3JHLG9EQUFvRDtnQkFDcEQsMkJBQTJCO2dCQUUzQiwyRUFBMkU7Z0JBRTNFLHlGQUF5RjtnQkFDekYsdUZBQXVGO2dCQUN2Rix3SEFBd0g7Z0JBQ3hILGlDQUFpQztnQkFDakMsNkJBQTZCO2dCQUM3QixpRkFBaUY7Z0JBQ2pGLHdFQUF3RTtnQkFDeEUsMEJBQTBCO2dCQUMxQiwwQkFBMEI7Z0JBQzFCLG9JQUFvSTtnQkFDcEksd0VBQXdFO2dCQUN4RSwySUFBMkk7Z0JBQzNJLHlDQUF5QztnQkFDekMsNENBQTRDO2dCQUM1QyxnR0FBZ0c7Z0JBQ2hHLDhHQUE4RztnQkFDOUcsc0RBQXNEO2dCQUN0RCw2Q0FBNkM7Z0JBQzdDLDBFQUEwRTtnQkFDMUUsMkJBQTJCO2dCQUMzQixnRkFBZ0Y7Z0JBQ2hGLHNGQUFzRjtnQkFDdEYsOEJBQThCO2dCQUM5QixxREFBcUQ7Z0JBQ3JELHlCQUF5QjtnQkFDekIsOEVBQThFO2dCQUM5RSxpTEFBaUw7Z0JBQ2pMLDhNQUE4TTtnQkFDOU0sc0JBQXNCO2dCQUN0QixvREFBb0Q7Z0JBQ3BELCtEQUErRDtnQkFDL0QscUJBQXFCO2dCQUNyQixrQ0FBa0M7Z0JBQ2xDLDhEQUE4RDtnQkFDOUQsMERBQTBEO2dCQUMxRCxvQkFBb0I7Z0JBQ3BCLG1CQUFtQjtnQkFDbkIsZ0JBQWdCO2dCQUNoQix3QkFBd0I7Z0JBQ3hCLHNEQUFzRDtnQkFDdEQsbUJBQW1CO2dCQUVuQixrSEFBa0g7Z0JBQ2xILHlEQUF5RDtnQkFDekQsNEVBQTRFO2dCQUM1RSw0REFBNEQ7Z0JBQzVELHlCQUF5QjtnQkFDekIscUJBQXFCO2dCQUNyQixrRUFBa0U7Z0JBQ2xFLGdCQUFnQjtnQkFDaEIsdURBQXVEO2dCQUN2RCxnQkFBZ0I7Z0JBQ2hCLFlBQVk7Z0JBQ1osWUFBWTtnQkFDWixRQUFRO2dCQUNSLE1BQU07Z0JBQ04sTUFBTTtZQUNSLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFFL0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHO1lBQ3pDLFlBQVksRUFBRTtnQkFDWixXQUFXLEVBQUUsUUFBUTtnQkFDckIsV0FBVyxFQUFFLFNBQVM7Z0JBQ3RCLFdBQVcsRUFBRSxPQUFPO2dCQUNwQixZQUFZLEVBQUUsSUFBSTtnQkFDbEIsUUFBUSxFQUFFLE1BQU07Z0JBQ2hCLFVBQVUsRUFBRSxLQUFLO2dCQUNqQixVQUFVLEVBQUUsUUFBUTtnQkFDcEIsS0FBSyxFQUFFLFNBQVM7Z0JBQ2hCLFVBQVUsRUFBRSxTQUFTO2dCQUNyQixVQUFVLEVBQUUsU0FBUztnQkFDckIsaUJBQWlCLEVBQUUsSUFBSTtnQkFDdkIscUJBQXFCLEVBQUUsU0FBUztnQkFDaEMsbUJBQW1CLEVBQUUsU0FBUztnQkFDOUIsd0JBQXdCLEVBQUUsS0FBSztnQkFDL0IsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsZ0JBQWdCLEVBQUUsT0FBTztnQkFDekIsZ0JBQWdCLEVBQUUsU0FBUztnQkFDM0IsZUFBZSxFQUFFLElBQUk7Z0JBQ3JCLFVBQVUsRUFBRSxTQUFTO2dCQUNyQiwwQkFBMEIsRUFBRSxJQUFJO2dCQUNoQyx3QkFBd0IsRUFBRSxJQUFJO2dCQUM5Qiw2QkFBNkIsRUFBRSxJQUFJO2dCQUNuQyw2QkFBNkIsRUFBRSxJQUFJO2dCQUNuQywrQkFBK0IsRUFBRSxJQUFJO2dCQUNyQyxnQkFBZ0IsRUFBRSxTQUFTO2dCQUMzQixnQkFBZ0IsRUFBRSxPQUFPO2dCQUN6QixVQUFVLEVBQUUsU0FBUztnQkFDckIsWUFBWSxFQUFFLFNBQVM7Z0JBQ3ZCLGlCQUFpQixFQUFFLFNBQVM7Z0JBQzVCLGdCQUFnQixFQUFFLFNBQVM7Z0JBQzNCLGdCQUFnQixFQUFFLE9BQU87Z0JBQ3pCLFVBQVUsRUFBRSxTQUFTO2dCQUNyQixXQUFXLEVBQUUsSUFBSTtnQkFDakIsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsTUFBTSxFQUFFLElBQUk7Z0JBQ1osV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLGFBQWEsRUFBRSw2Q0FBNkM7Z0JBQzVELFdBQVcsRUFBRSxJQUFJO2dCQUNqQixNQUFNLEVBQUUsSUFBSTtnQkFDWixTQUFTLEVBQUUsSUFBSTtnQkFDZixTQUFTLEVBQUUsSUFBSTtnQkFDZixRQUFRLEVBQUUsSUFBSTtnQkFDZCxRQUFRLEVBQUUsSUFBSTtnQkFDZCxRQUFRLEVBQUUsSUFBSTthQUNmO1lBQ0QsU0FBUyxFQUFFLElBQUk7WUFDZixLQUFLLEVBQUUsZUFBZTtZQUN0QixXQUFXLEVBQUUsRUFBRTtZQUNmLE1BQU0sRUFBRSxFQUFFO1lBQ1YsU0FBUyxFQUFFLElBQUk7WUFDZixTQUFTLEVBQUUsU0FBUztZQUNwQixVQUFVLEVBQUU7Z0JBQ1YsVUFBVSxFQUFFLEtBQUs7Z0JBQ2pCLGVBQWUsRUFBRSw0QkFBNEI7Z0JBQzdDLFNBQVMsRUFBRSxJQUFJO2dCQUNmLGdCQUFnQixFQUFFLElBQUk7Z0JBQ3RCLFNBQVMsRUFBRSxHQUFHO2dCQUNkLGdCQUFnQixFQUFFLElBQUk7Z0JBQ3RCLE9BQU8sRUFBRSxJQUFJO2dCQUNiLGNBQWMsRUFBRSxFQUFFO2FBQ25CO1lBQ0QsT0FBTyxFQUFFO2dCQUNQO29CQUNFLEtBQUssRUFBRSxJQUFJO29CQUNYLEtBQUssRUFBRSxJQUFJO2lCQUNaO2dCQUNEO29CQUNFLEtBQUssRUFBRSxNQUFNO29CQUNiLEtBQUssRUFBRSxNQUFNO2lCQUNkO2FBQ0Y7WUFDRCxRQUFRLEVBQUUsSUFBSTtZQUNkLEtBQUssRUFBRSxJQUFJO1lBQ1gsS0FBSyxFQUFFLElBQUk7WUFDWCxRQUFRLEVBQUUsSUFBSTtZQUNkLFVBQVUsRUFBRSxFQUFFO1lBQ2QsV0FBVyxFQUFFLElBQUk7WUFDakIsV0FBVyxFQUFFLEtBQUs7WUFDbEIsZUFBZSxFQUFFLEtBQUs7WUFDdEIsV0FBVyxFQUFFLFFBQVE7U0FDdEIsQ0FBQztJQUNKLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxTQUFjO1FBQ2xDLElBQUksU0FBUyxDQUFDLHNCQUFzQixDQUFDLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDaEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBQ0QsSUFBSSxTQUFTLENBQUMsc0JBQXNCLENBQUMsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUNqRCxJQUFJLFVBQVUsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hELElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM5QyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUNqQyxDQUFDO2dCQUNELElBQUksQ0FBQyxlQUFlLENBQUMsMEJBQTBCLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pFLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsMEJBQTBCLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pFLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDNUQsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLGdCQUFnQixHQUFRLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUN2RCxtQkFBbUIsQ0FDcEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQ3pCLENBQUMsY0FBbUIsRUFBRSxFQUFFLENBQ3RCLGNBQWMsQ0FBQyxZQUFZLENBQUMsS0FBSyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQzNELENBQUM7UUFDRixJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDO1lBQzNDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQzlDLENBQUM7WUFDRCxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUN2RCxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7b0JBQ3hDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1lBQ2hFLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsOEJBQThCLENBQUMsRUFBRSxDQUFDO1lBQ3hFLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFnQixFQUFFLEVBQUU7Z0JBQ3BFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMxQyxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLFVBQWtCLEVBQUUsUUFBYTtRQUM3QyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUVyQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFVBQVUsQ0FBQztRQUN2RCxJQUFJLEtBQUssQ0FBQztRQUNWLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ2xFLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLDJCQUEyQixDQUFDO1FBQzNELENBQUM7YUFBTSxDQUFDO1lBQ04sS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUVELDBDQUEwQztRQUMxQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUVsQyxzQkFBc0I7UUFDdEIsSUFDRSxRQUFRLENBQUMsWUFBWSxLQUFLLFVBQVU7WUFDcEMsVUFBVSxFQUFFLFVBQVU7WUFDdEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNsQyxDQUFDO1lBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDbEQsQ0FBQzthQUFNLElBQ0wsVUFBVSxFQUFFLFVBQVU7WUFDdEIsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxLQUFLLEdBQUcsQ0FBQyxFQUNsRCxDQUFDO1lBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDbEQsQ0FBQztRQUVELDJDQUEyQztRQUMzQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPO1FBRTVDLG9EQUFvRDtRQUNwRCxJQUFJLFVBQVUsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUN4QixNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDOUMsQ0FBQztRQUNILENBQUM7UUFFRCxnQ0FBZ0M7UUFDaEMsSUFBSSxVQUFVLEVBQUUsU0FBUyxJQUFJLFVBQVUsQ0FBQyxTQUFTLElBQUksS0FBSyxFQUFFLENBQUM7WUFDM0QsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztZQUNwQyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDO1lBQ3BDLElBQUksVUFBVSxDQUFDLE9BQU8sSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDckMsa0NBQWtDO2dCQUNsQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDO29CQUN6RCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDL0MsQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTix5Q0FBeUM7Z0JBQ3pDLElBQ0UsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sR0FBRyxNQUFNO29CQUNoQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxHQUFHLE1BQU0sRUFDaEMsQ0FBQztvQkFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDL0MsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxDQUFDLEdBQUcsQ0FDVCx1QkFBdUIsRUFDdkIsVUFBVSxFQUNWLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQzdCLENBQUM7SUFDSixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsVUFBa0I7UUFDakMsT0FBTyxDQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDO1lBQzdCLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQ3JELENBQUM7SUFDSixDQUFDO0lBRUQsb0JBQW9CLENBQUMsVUFBa0IsRUFBRSxRQUFhO1FBQ3BELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUM7WUFDakUsT0FBTyxFQUFFLENBQUM7UUFFWixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzVDLE1BQU0sVUFBVSxHQUFHLFFBQVEsRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDO1lBRS9DLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZCLElBQ0UsUUFBUSxFQUFFLEtBQUssRUFBRSxXQUFXLEtBQUssT0FBTztvQkFDeEMsUUFBUSxFQUFFLEtBQUssRUFBRSxXQUFXLEtBQUssVUFBVSxFQUMzQyxDQUFDO29CQUNELE9BQU8sVUFBVSxFQUFFLGVBQWUsSUFBSSw4QkFBOEIsQ0FBQztnQkFDdkUsQ0FBQztnQkFDRCxNQUFNLFNBQVMsR0FDYixRQUFRLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUU7b0JBQzdELFlBQVksQ0FBQztnQkFDZixPQUFPLFVBQVUsRUFBRSxlQUFlLElBQUksZ0JBQWdCLFNBQVMsRUFBRSxDQUFDO1lBQ3BFLENBQUM7WUFDRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUNuQixPQUFPLFVBQVUsRUFBRSxjQUFjLElBQUksb0JBQW9CLENBQUM7WUFDNUQsQ0FBQztZQUNELElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ3BCLE1BQU0sU0FBUyxHQUNiLFFBQVEsRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRTtvQkFDN0QsT0FBTyxDQUFDO2dCQUNWLE9BQU8sd0JBQXdCLFNBQVMsRUFBRSxDQUFDO1lBQzdDLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsbUJBQW1CLENBQUMsS0FBVTtRQUM1QixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzlCLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkIsQ0FBQztRQUNELE9BQU8sQ0FDTCxLQUFLLEtBQUssU0FBUztZQUNuQixLQUFLLEtBQUssSUFBSTtZQUNkLEtBQUssS0FBSyxFQUFFO1lBQ1osQ0FBQyxLQUFLLFlBQVksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUMvQixDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFXO1FBQ3RCLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDN0QsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDNUIsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0QsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRSxLQUFLLGVBQWUsRUFBRSxDQUFDO29CQUM3QyxPQUFPLE1BQU0sQ0FBQztnQkFDaEIsQ0FBQztnQkFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQVU7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE9BQU8sS0FBSztpQkFDVCxRQUFRLEVBQUU7aUJBQ1YsT0FBTyxDQUNOLFFBQVEsRUFDUixDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQ2pFLENBQUM7UUFDTixDQUFDO0lBQ0gsQ0FBQztJQUVELFFBQVEsQ0FBQyxXQUFnQjtRQUN2QixJQUFJLFVBQVUsR0FBUSxFQUFFLENBQUM7UUFDekIsSUFBSSxZQUFZLEdBQVEsRUFBRSxDQUFDO1FBQzNCLElBQUksV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDaEMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGlCQUFzQixFQUFFLEVBQUU7Z0JBQzdELFVBQVUsQ0FBQyxJQUFJLENBQUM7b0JBQ2QsS0FBSyxFQUFFLGlCQUFpQixDQUFDLGVBQWUsQ0FBQztvQkFDekMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDO2lCQUNoRCxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLFNBQVMsR0FBUSxLQUFLLENBQUM7UUFDM0IsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsY0FBYyxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxDQUNwRCxFQUNELENBQUM7WUFDRCxJQUFJLDZCQUE2QixHQUFRLGNBQWMsQ0FBQyxPQUFPLENBQzdELDJCQUEyQixDQUM1QixDQUFDO1lBQ0YsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDdkUsQ0FBQztRQUNELElBQUksU0FBUyxHQUFRLElBQUksQ0FBQztRQUMxQixJQUFJLFNBQVMsR0FBUSxHQUFHLENBQUM7UUFDekIsSUFBSSxPQUFPLEdBQVEsSUFBSSxDQUFDO1FBQ3hCLElBQUksY0FBYyxHQUFRLElBQUksQ0FBQztRQUMvQixJQUFJLFVBQVUsR0FBUSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsVUFBVSxDQUFDO1lBQ3ZFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsVUFBVTtZQUMxQixDQUFDLENBQUMsRUFBRSxDQUFDO1FBRVAsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pELFVBQVUsR0FBRyxFQUFFLEdBQUcsVUFBVSxFQUFFLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7UUFDL0QsQ0FBQztRQUVELElBQ0UsV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFLLGNBQWM7WUFDOUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFNBQVMsRUFDekMsQ0FBQztZQUNELFlBQVksR0FBRztnQkFDYixXQUFXLEVBQUUsT0FBTztnQkFDcEIsV0FBVyxFQUFFLFNBQVM7Z0JBQ3RCLFdBQVcsRUFBRSxLQUFLO2dCQUNsQixZQUFZLEVBQUUsSUFBSTtnQkFDbEIsUUFBUSxFQUFFLE1BQU07Z0JBQ2hCLFVBQVUsRUFBRSxLQUFLO2dCQUNqQixVQUFVLEVBQUUsUUFBUTtnQkFDcEIsS0FBSyxFQUFFLFNBQVM7Z0JBQ2hCLFVBQVUsRUFBRSxTQUFTO2dCQUNyQixVQUFVLEVBQUUsSUFBSTtnQkFDaEIsaUJBQWlCLEVBQUUsSUFBSTtnQkFDdkIscUJBQXFCLEVBQUUsSUFBSTtnQkFDM0IsbUJBQW1CLEVBQUUsSUFBSTtnQkFDekIsd0JBQXdCLEVBQUUsSUFBSTtnQkFDOUIsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsZ0JBQWdCLEVBQUUsS0FBSztnQkFDdkIsZ0JBQWdCLEVBQUUsU0FBUztnQkFDM0IsZUFBZSxFQUFFLElBQUk7Z0JBQ3JCLFVBQVUsRUFBRSxTQUFTO2dCQUNyQiwwQkFBMEIsRUFBRSxJQUFJO2dCQUNoQyx3QkFBd0IsRUFBRSxJQUFJO2dCQUM5Qiw2QkFBNkIsRUFBRSxJQUFJO2dCQUNuQyw2QkFBNkIsRUFBRSxJQUFJO2dCQUNuQywrQkFBK0IsRUFBRSxJQUFJO2dCQUNyQyxnQkFBZ0IsRUFBRSxTQUFTO2dCQUMzQixnQkFBZ0IsRUFBRSxLQUFLO2dCQUN2QixVQUFVLEVBQUUsU0FBUztnQkFDckIsWUFBWSxFQUFFLFNBQVM7Z0JBQ3ZCLGlCQUFpQixFQUFFLFNBQVM7Z0JBQzVCLGdCQUFnQixFQUFFLFNBQVM7Z0JBQzNCLGdCQUFnQixFQUFFLEtBQUs7Z0JBQ3ZCLFVBQVUsRUFBRSxTQUFTO2dCQUNyQixXQUFXLEVBQUUsSUFBSTtnQkFDakIsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsTUFBTSxFQUFFLElBQUk7Z0JBQ1osV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLGFBQWEsRUFBRSx5Q0FBeUM7Z0JBQ3hELFdBQVcsRUFBRSxJQUFJO2dCQUNqQixNQUFNLEVBQUUsSUFBSTtnQkFDWixTQUFTLEVBQUUsSUFBSTtnQkFDZixTQUFTLEVBQUUsSUFBSTtnQkFDZixRQUFRLEVBQUUsSUFBSTtnQkFDZCxRQUFRLEVBQUUsSUFBSTtnQkFDZCxRQUFRLEVBQUUsSUFBSTthQUNmLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzFELElBQUksYUFBYSxHQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN6RCxTQUFTLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3hDLENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pELFNBQVMsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDeEMsQ0FBQztZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDckQsSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQ3hDLE9BQU8sR0FBRyxVQUFVLENBQUM7b0JBQ3JCLGNBQWMsR0FBRywyQkFBMkIsQ0FBQztvQkFDN0MsVUFBVSxDQUFDLDRCQUE0QixDQUFDLEdBQUcsSUFBSSxDQUFDO29CQUNoRCxTQUFTLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztvQkFDMUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFNBQVMsQ0FBQztvQkFDbkMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDN0IsQ0FBQztxQkFBTSxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxjQUFjLEVBQUUsQ0FBQztvQkFDcEQsT0FBTyxHQUFHLG1CQUFtQixDQUFDO29CQUM5QixjQUFjLEdBQUcsdUNBQXVDLENBQUM7b0JBQ3pELFVBQVUsQ0FBQyw0QkFBNEIsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDbkQsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE9BQU8sR0FBRyxJQUFJLENBQUM7b0JBQ2YsY0FBYyxHQUFHLElBQUksQ0FBQztnQkFDeEIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTztZQUNMLFVBQVUsRUFBRSxVQUFVO1lBQ3RCLFlBQVksRUFBRSxZQUFZO1lBQzFCLFdBQVcsRUFDVCxXQUFXLENBQUMsY0FBYyxDQUFDLEtBQUssV0FBVztnQkFDekMsQ0FBQyxDQUFDLE1BQU07Z0JBQ1IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsS0FBSyxjQUFjO29CQUM1QyxXQUFXLENBQUMsY0FBYyxDQUFDLEtBQUssU0FBUztvQkFDM0MsQ0FBQyxDQUFDLE9BQU87b0JBQ1QsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsS0FBSyxVQUFVO3dCQUN4QyxXQUFXLENBQUMsY0FBYyxDQUFDLEtBQUssYUFBYTt3QkFDL0MsQ0FBQyxDQUFDLFVBQVU7d0JBQ1osQ0FBQyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsS0FBSyxVQUFVOzRCQUMxQyxDQUFDLENBQUMsTUFBTTs0QkFDUixDQUFDLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFVBQVU7Z0NBQzFDLENBQUMsQ0FBQyxRQUFRO2dDQUNWLENBQUMsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEtBQUssV0FBVztvQ0FDM0MsQ0FBQyxDQUFDLE1BQU07b0NBQ1IsQ0FBQyxDQUFDLEVBQUU7WUFDbEIsU0FBUyxFQUFFLFdBQVcsQ0FBQyxZQUFZLENBQUM7WUFDcEMsU0FBUztZQUNULEtBQUssRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDO1lBQ2xDLFdBQVcsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDO1lBQ3hDLFVBQVUsRUFBRTtnQkFDVixVQUFVLEVBQUUsV0FBVyxDQUFDLGtCQUFrQixDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUs7Z0JBQ2xFLFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxPQUFPO2dCQUNQLGNBQWM7YUFDZjtZQUNELFFBQVEsRUFBRSxNQUFNO1lBQ2hCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsT0FBTyxFQUFFLFVBQVU7WUFDbkIsV0FBVyxFQUFFLElBQUk7U0FDbEIsQ0FBQztJQUNKLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxRQUFjO1FBQ3BDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDakQsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFrQixFQUFFLEVBQUU7Z0JBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDMUQsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQW1CLEVBQUUsRUFBRTt3QkFDekQsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQzs0QkFDdkMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsS0FBSyxDQUFDOzRCQUM3QyxJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUNuRCxFQUNELENBQUM7Z0NBQ0QsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDOzRCQUM1RCxDQUFDOzRCQUNELElBQUk7d0JBQ04sQ0FBQzs2QkFBTSxDQUFDOzRCQUNOLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLElBQUksQ0FBQzt3QkFDOUMsQ0FBQzt3QkFFRCxpREFBaUQ7d0JBQ2pELElBQUksd0JBQXdCLEdBQVEsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUN0RCwwQkFBMEIsQ0FDM0I7NEJBQ0MsQ0FBQyxDQUFDLElBQUk7NEJBQ04sQ0FBQyxDQUFDLEtBQUssQ0FBQzt3QkFDVixNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMsWUFBWSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUM7d0JBQzVELE1BQU0sZUFBZSxHQUNuQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7NEJBQy9DLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO3dCQUN6RCxJQUNFLGVBQWU7NEJBQ2YsY0FBYyxDQUFDLE9BQU8sQ0FBQzs0QkFDdkIsQ0FBQyx3QkFBd0IsRUFDekIsQ0FBQzs0QkFDRCxjQUFjLENBQUMsT0FBTyxDQUFDLEdBQUc7Z0NBQ3hCLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQztnQ0FDMUIsU0FBUyxFQUFFLElBQUk7NkJBQ2hCLENBQUM7d0JBQ0osQ0FBQzt3QkFFRCxJQUFJLGNBQWMsQ0FBQyxjQUFjLENBQUMsS0FBSyxVQUFVLEVBQUUsQ0FBQzs0QkFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDO2dDQUM5RCxJQUFJLG9CQUFvQixHQUFRLGNBQWMsQ0FDNUMsY0FBYyxDQUNmLENBQUMsTUFBTSxDQUNOLENBQUMsU0FBYyxFQUFFLEVBQUUsQ0FDakIsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLE1BQU0sQ0FDdEQsQ0FBQztnQ0FDRixjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUNwQyxDQUFDLGlCQUFzQixFQUFFLEVBQUU7b0NBQ3pCLElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsb0JBQW9CLENBQUM7d0NBQy9DLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixJQUFJLENBQUMsZUFBZSxDQUNsQixvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUMvQyxDQUNGO3dDQUNELElBQUksQ0FBQyxlQUFlLENBQ2xCLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQy9DLEVBQ0QsQ0FBQzt3Q0FDRCxtQkFBbUI7d0NBQ25CLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQ3BDLENBQUMsaUJBQXNCLEVBQUUsRUFBRTs0Q0FDekIseUNBQXlDOzRDQUN6QyxJQUNFLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUU7Z0RBQzdDLE1BQU0sRUFDTixDQUFDO2dEQUNELGlCQUFpQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0RBQ3BDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FDekIsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsQ0FDekMsQ0FBQzs0Q0FDSixDQUFDO3dDQUNILENBQUMsQ0FDRixDQUFDO29DQUNKLENBQUM7eUNBQU0sQ0FBQzt3Q0FDTixpQkFBaUIsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO29DQUN2QyxDQUFDO2dDQUNILENBQUMsQ0FDRixDQUFDOzRCQUNKLENBQUM7d0JBQ0gsQ0FBQztvQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUNELDBMQUEwTDtnQkFDMUwsYUFBYSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN0RCxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUMvQixDQUFDLGNBQW1CLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUM5RCxDQUNGLENBQUM7Z0JBQ0YsaUVBQWlFO2dCQUNqRSxnR0FBZ0c7Z0JBQ2hHLDRDQUE0QztnQkFDNUMsdUtBQXVLO2dCQUN2SyxnRkFBZ0Y7Z0JBQ2hGLDZOQUE2TjtnQkFDN04sMkRBQTJEO2dCQUMzRCxvRkFBb0Y7Z0JBQ3BGLFVBQVU7Z0JBQ1YsVUFBVTtnQkFDVixNQUFNO2dCQUNOLDBQQUEwUDtnQkFDMVAsNENBQTRDO2dCQUM1Qyx1S0FBdUs7Z0JBQ3ZLLGdGQUFnRjtnQkFDaEYsNk5BQTZOO2dCQUM3TiwyREFBMkQ7Z0JBQzNELG9GQUFvRjtnQkFDcEYsVUFBVTtnQkFDVixVQUFVO2dCQUNWLE1BQU07Z0JBQ04sSUFBSTtnQkFDSixJQUFJLGVBQWUsR0FBUSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FDakQsQ0FBQyxnQkFBcUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FDNUQsQ0FBQztnQkFDRixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO29CQUM5QyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBa0IsRUFBRSxFQUFFO3dCQUM3QyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUNoQyxDQUFDLDBCQUErQixFQUFFLEVBQUU7NEJBQ2xDLDBCQUEwQixDQUFDLG9CQUFvQixDQUFDLEdBQUcsS0FBSyxDQUFDOzRCQUN6RCwyTUFBMk07NEJBQzNNLHFEQUFxRDs0QkFDckQsdURBQXVEOzRCQUN2RCxJQUFJO3dCQUNOLENBQUMsQ0FDRixDQUFDO29CQUNKLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUVsRSxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVqRCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFrQixFQUFFLEVBQUU7Z0JBQy9ELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3BELElBQUksY0FBYyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUM3RCxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDeEMsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRTNCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxZQUFZLENBQUMsZUFBb0I7UUFDL0IsSUFBSSxZQUFZLEdBQVEsS0FBSyxDQUFDO1FBQzlCLElBQUksWUFBWSxHQUFRLEVBQUUsQ0FBQztRQUMzQixvSkFBb0o7UUFDcEosd0ZBQXdGO1FBRXhGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsY0FBbUIsRUFBRSxFQUFFO1lBQ3ZFLElBQUksbUJBQW1CLEdBQVEsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNsRSxtQkFBbUIsR0FBRyxjQUFjLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxNQUFNLENBQzdELENBQUMsbUJBQXdCLEVBQUUsRUFBRSxDQUMzQixtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDckMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUNoQyxDQUFDO1lBQ0osQ0FBQztZQUNELElBQUksbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNuQyxZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUNsQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxpQkFBc0IsRUFBRSxFQUFFO29CQUNyRCxJQUNFLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFVBQVU7d0JBQzVDLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRzt3QkFDOUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7NEJBQ2hELGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLENBQUM7d0JBQzdDLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHOzRCQUM3RCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FDbkQ7NEJBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7Z0NBQ2hELGlCQUFpQixDQUFDLHFCQUFxQixDQUFDO3FDQUNyQyxRQUFRLEVBQUU7cUNBQ1YsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNyQixDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsS0FBSyxVQUFVOzRCQUM1QyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FDbkQ7NEJBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQzFELGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLENBQ3pDLENBQUM7b0JBQ0osOERBQThEO29CQUM5RCx3QkFBd0I7b0JBQ3hCLG9CQUFvQjtvQkFDcEIsK0NBQStDO29CQUMvQyxlQUFlO3NCQUNmLENBQUM7d0JBQ0QsWUFBWSxHQUFHLElBQUksQ0FBQztvQkFDdEIsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQ0UsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQztZQUN0QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLHdCQUF3QixDQUFDLENBQUMsRUFDbkUsQ0FBQztZQUNELFlBQVksR0FBRyxJQUFJLENBQUM7UUFDdEIsQ0FBQztRQUNELElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFDcEUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLGVBQWUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQzlEO1lBQ0QsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQ2xCLGVBQWUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQzlELENBQ0Y7WUFDRCxJQUFJLENBQUMsZUFBZSxDQUNsQixlQUFlLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUM5RCxLQUFLLGVBQWUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEVBQ3ZFLENBQUM7WUFDRCxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLENBQUM7UUFDRCxJQUFJLGVBQWUsQ0FBQyxjQUFjLENBQUMsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUNwRCxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLGtEQUFrRDtRQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxFQUFFLENBQUM7WUFDbEUsK0VBQStFO1lBQy9FLGtGQUFrRjtZQUNsRixxRkFBcUY7WUFDckYscUZBQXFGO1lBQ3JGLHFEQUFxRDtZQUNyRCxnTkFBZ047WUFDaE4sNkRBQTZEO1lBQzdELE1BQU07WUFDTixNQUFNO1lBQ04sa0RBQWtEO1lBQ2xELHFMQUFxTDtZQUNyTCw4REFBOEQ7WUFDOUQsTUFBTTtZQUNOLE1BQU07WUFDTixtREFBbUQ7WUFDbkQsMExBQTBMO1lBQzFMLDhEQUE4RDtZQUM5RCxNQUFNO1lBQ04sTUFBTTtZQUNOLG1EQUFtRDtZQUNuRCwwTEFBMEw7WUFDMUwsOERBQThEO1lBQzlELE1BQU07WUFDTixNQUFNO1FBQ1IsQ0FBQztRQUNELG1DQUFtQztRQUNuQyxpQ0FBaUM7UUFDakMsdUNBQXVDO1FBQ3ZDLElBQUksT0FBTyxHQUFRLElBQUksQ0FBQztRQUN4QixxS0FBcUs7UUFDckssbUtBQW1LO1FBQ25LLDZIQUE2SDtRQUM3SCw2S0FBNks7UUFDN0ssMktBQTJLO1FBQzNLLGdMQUFnTDtRQUNoTCxNQUFNO1FBQ04sSUFBSTtRQUVKLHFEQUFxRDtRQUNyRCx5SkFBeUo7UUFDekoscUdBQXFHO1FBQ3JHLG1GQUFtRjtRQUNuRix3UkFBd1I7UUFDeFIsMEVBQTBFO1FBQzFFLGtGQUFrRjtRQUNsRixxUUFBcVE7UUFFclEsdURBQXVEO1FBQ3ZELG1GQUFtRjtRQUNuRixpSUFBaUk7UUFDakksK0hBQStIO1FBQy9ILG1SQUFtUjtRQUNuUixtQ0FBbUM7UUFDbkMsdUZBQXVGO1FBQ3ZGLDhGQUE4RjtRQUM5Rix3RkFBd0Y7UUFDeEYsdUZBQXVGO1FBQ3ZGLG9FQUFvRTtRQUNwRSxzQkFBc0I7UUFDdEIsNEdBQTRHO1FBQzVHLG1FQUFtRTtRQUNuRSw4REFBOEQ7UUFDOUQsa0VBQWtFO1FBQ2xFLHlDQUF5QztRQUN6QyxzRkFBc0Y7UUFDdEYsMEJBQTBCO1FBQzFCLDZCQUE2QjtRQUM3QiwwSEFBMEg7UUFDMUgsdUpBQXVKO1FBQ3ZKLDhDQUE4QztRQUM5QywyQ0FBMkM7UUFDM0MsdUlBQXVJO1FBQ3ZJLGlDQUFpQztRQUNqQyxtREFBbUQ7UUFDbkQsK0pBQStKO1FBQy9KLHVEQUF1RDtRQUN2RCxnREFBZ0Q7UUFDaEQsNkNBQTZDO1FBQzdDLHlJQUF5STtRQUN6SSxtQ0FBbUM7UUFDbkMscURBQXFEO1FBQ3JELCtEQUErRDtRQUMvRCxnREFBZ0Q7UUFDaEQsNkNBQTZDO1FBQzdDLHlJQUF5STtRQUN6SSxtQ0FBbUM7UUFDbkMscURBQXFEO1FBQ3JELDBCQUEwQjtRQUMxQixtR0FBbUc7UUFDbkcsdURBQXVEO1FBQ3ZELGdEQUFnRDtRQUNoRCw2Q0FBNkM7UUFDN0Msd0lBQXdJO1FBQ3hJLG1DQUFtQztRQUNuQyxxREFBcUQ7UUFDckQsOERBQThEO1FBQzlELGdEQUFnRDtRQUNoRCw2Q0FBNkM7UUFDN0Msd0lBQXdJO1FBQ3hJLG1DQUFtQztRQUNuQyxxREFBcUQ7UUFDckQsMEJBQTBCO1FBQzFCLHdCQUF3QjtRQUV4QixzQkFBc0I7UUFFdEIsa0NBQWtDO1FBQ2xDLG9CQUFvQjtRQUNwQixrQkFBa0I7UUFDbEIsZ0JBQWdCO1FBQ2hCLDZDQUE2QztRQUM3QyxrSUFBa0k7UUFDbEksaUZBQWlGO1FBQ2pGLGlHQUFpRztRQUNqRywrRUFBK0U7UUFDL0UsaUNBQWlDO1FBQ2pDLHFGQUFxRjtRQUNyRiw0RkFBNEY7UUFDNUYsc0ZBQXNGO1FBQ3RGLHFGQUFxRjtRQUNyRixrRUFBa0U7UUFDbEUsb0JBQW9CO1FBQ3BCLGdIQUFnSDtRQUNoSCxpRUFBaUU7UUFDakUsNERBQTREO1FBQzVELGdFQUFnRTtRQUNoRSx1Q0FBdUM7UUFDdkMsbUVBQW1FO1FBQ25FLHdCQUF3QjtRQUN4QiwyQkFBMkI7UUFDM0IsdUdBQXVHO1FBQ3ZHLHFKQUFxSjtRQUNySiw0Q0FBNEM7UUFDNUMseUNBQXlDO1FBQ3pDLHFJQUFxSTtRQUNySSwrQkFBK0I7UUFDL0IsaURBQWlEO1FBQ2pELDZKQUE2SjtRQUM3SixxREFBcUQ7UUFDckQsOENBQThDO1FBQzlDLDJDQUEyQztRQUMzQyx1SUFBdUk7UUFDdkksaUNBQWlDO1FBQ2pDLG1EQUFtRDtRQUNuRCw2REFBNkQ7UUFDN0QsOENBQThDO1FBQzlDLDJDQUEyQztRQUMzQyx1SUFBdUk7UUFDdkksaUNBQWlDO1FBQ2pDLG1EQUFtRDtRQUNuRCx3QkFBd0I7UUFDeEIsaUdBQWlHO1FBQ2pHLHFEQUFxRDtRQUNyRCw4Q0FBOEM7UUFDOUMsMkNBQTJDO1FBQzNDLHNJQUFzSTtRQUN0SSxpQ0FBaUM7UUFDakMsbURBQW1EO1FBQ25ELDREQUE0RDtRQUM1RCw4Q0FBOEM7UUFDOUMsMkNBQTJDO1FBQzNDLHNJQUFzSTtRQUN0SSxpQ0FBaUM7UUFDakMsbURBQW1EO1FBQ25ELHdCQUF3QjtRQUN4QixzQkFBc0I7UUFDdEIsb0JBQW9CO1FBRXBCLGdDQUFnQztRQUNoQyxrQkFBa0I7UUFDbEIsZ0JBQWdCO1FBRWhCLGNBQWM7UUFFZCw2RUFBNkU7UUFDN0UsZ0RBQWdEO1FBQ2hELG1CQUFtQjtRQUNuQixnRUFBZ0U7UUFDaEUsb0ZBQW9GO1FBQ3BGLDJEQUEyRDtRQUMzRCwyQkFBMkI7UUFDM0Isc0VBQXNFO1FBQ3RFLHVFQUF1RTtRQUN2RSx1RUFBdUU7UUFDdkUsZ0ZBQWdGO1FBQ2hGLDJFQUEyRTtRQUMzRSx3RUFBd0U7UUFDeEUsd0VBQXdFO1FBQ3hFLDRFQUE0RTtRQUM1RSxzRUFBc0U7UUFDdEUsc0dBQXNHO1FBQ3RHLDRKQUE0SjtRQUM1SixrQkFBa0I7UUFDbEIsaUNBQWlDO1FBQ2pDLHFGQUFxRjtRQUNyRix5R0FBeUc7UUFDekcsaUVBQWlFO1FBQ2pFLDRGQUE0RjtRQUM1RixzRkFBc0Y7UUFDdEYscUZBQXFGO1FBQ3JGLGtFQUFrRTtRQUNsRSxvQkFBb0I7UUFDcEIsNERBQTREO1FBQzVELGdFQUFnRTtRQUNoRSx1Q0FBdUM7UUFDdkMsa0hBQWtIO1FBQ2xILHdCQUF3QjtRQUN4QiwyQkFBMkI7UUFDM0Isc0pBQXNKO1FBQ3RKLHFKQUFxSjtRQUNySiw0Q0FBNEM7UUFDNUMseUNBQXlDO1FBQ3pDLHFJQUFxSTtRQUNySSwrQkFBK0I7UUFDL0IsaURBQWlEO1FBQ2pELDZKQUE2SjtRQUM3SixxREFBcUQ7UUFDckQsOENBQThDO1FBQzlDLDJDQUEyQztRQUMzQyx1SUFBdUk7UUFDdkksaUNBQWlDO1FBQ2pDLG1EQUFtRDtRQUNuRCw2REFBNkQ7UUFDN0QsOENBQThDO1FBQzlDLDJDQUEyQztRQUMzQyx1SUFBdUk7UUFDdkksaUNBQWlDO1FBQ2pDLG1EQUFtRDtRQUNuRCx3QkFBd0I7UUFDeEIsaUdBQWlHO1FBQ2pHLHNEQUFzRDtRQUN0RCxzQkFBc0I7UUFDdEIsb0JBQW9CO1FBRXBCLGdDQUFnQztRQUNoQyxrQkFBa0I7UUFDbEIsZ0JBQWdCO1FBRWhCLG1CQUFtQjtRQUNuQiwyRUFBMkU7UUFDM0UsaUVBQWlFO1FBQ2pFLDJEQUEyRDtRQUMzRCx1REFBdUQ7UUFDdkQseUJBQXlCO1FBQ3pCLGtCQUFrQjtRQUNsQiwwT0FBME87UUFDMU8sNEVBQTRFO1FBQzVFLDhMQUE4TDtRQUM5TCw0REFBNEQ7UUFDNUQsZ0VBQWdFO1FBQ2hFLHVDQUF1QztRQUN2QywySEFBMkg7UUFDM0gsd0JBQXdCO1FBQ3hCLDJCQUEyQjtRQUMzQiwrSkFBK0o7UUFDL0oscUpBQXFKO1FBQ3JKLG1JQUFtSTtRQUNuSSw0Q0FBNEM7UUFDNUMsaURBQWlEO1FBQ2pELDZKQUE2SjtRQUM3SixxREFBcUQ7UUFDckQscUlBQXFJO1FBQ3JJLDhDQUE4QztRQUM5QyxtREFBbUQ7UUFDbkQsNkRBQTZEO1FBQzdELHFJQUFxSTtRQUNySSw4Q0FBOEM7UUFDOUMsbURBQW1EO1FBQ25ELHdCQUF3QjtRQUN4QixpR0FBaUc7UUFDakcsc0RBQXNEO1FBQ3RELHNCQUFzQjtRQUN0QixvQkFBb0I7UUFDcEIsbUNBQW1DO1FBQ25DLGdDQUFnQztRQUNoQyxrQkFBa0I7UUFFbEIsZ0JBQWdCO1FBQ2hCLHNEQUFzRDtRQUN0RCxpRkFBaUY7UUFDakYsMkRBQTJEO1FBQzNELG9GQUFvRjtRQUNwRiw4REFBOEQ7UUFDOUQsa0JBQWtCO1FBQ2xCLCtCQUErQjtRQUMvQixxRUFBcUU7UUFDckUsbUZBQW1GO1FBQ25GLHVGQUF1RjtRQUN2Riw4R0FBOEc7UUFDOUcsc0lBQXNJO1FBQ3RJLG9TQUFvUztRQUVwUyw0RkFBNEY7UUFDNUYsc0ZBQXNGO1FBQ3RGLHFGQUFxRjtRQUNyRixvQkFBb0I7UUFDcEIsbUNBQW1DO1FBQ25DLHVGQUF1RjtRQUN2Rix3R0FBd0c7UUFDeEcsbUVBQW1FO1FBQ25FLDhEQUE4RDtRQUM5RCxrRUFBa0U7UUFDbEUseUNBQXlDO1FBQ3pDLHFIQUFxSDtRQUNySCwwQkFBMEI7UUFDMUIsc0JBQXNCO1FBQ3RCLGtDQUFrQztRQUNsQyxvQkFBb0I7UUFDcEIsa0JBQWtCO1FBQ2xCLGdCQUFnQjtRQUVoQixzREFBc0Q7UUFDdEQsa0dBQWtHO1FBQ2xHLCtGQUErRjtRQUMvRiwwQkFBMEI7UUFDMUIseURBQXlEO1FBQ3pELG9FQUFvRTtRQUNwRSwwRUFBMEU7UUFDMUUsb0VBQW9FO1FBQ3BFLG1IQUFtSDtRQUNuSCw0SEFBNEg7UUFDNUgseUJBQXlCO1FBQ3pCLHdDQUF3QztRQUN4QyxtRkFBbUY7UUFDbkYscUVBQXFFO1FBQ3JFLDRDQUE0QztRQUM1Qyx5SUFBeUk7UUFDekksNkJBQTZCO1FBQzdCLHlCQUF5QjtRQUN6Qix1QkFBdUI7UUFDdkIsdUJBQXVCO1FBQ3ZCLG1CQUFtQjtRQUNuQixnQkFBZ0I7UUFFaEIsZ0RBQWdEO1FBQ2hELGtGQUFrRjtRQUNsRiw0RUFBNEU7UUFDNUUsOEhBQThIO1FBQzlILHlGQUF5RjtRQUN6RixtRUFBbUU7UUFDbkUsc0JBQXNCO1FBQ3RCLG9DQUFvQztRQUNwQywwRUFBMEU7UUFDMUUsd0ZBQXdGO1FBQ3hGLDRGQUE0RjtRQUM1RixvSEFBb0g7UUFDcEgsMklBQTJJO1FBQzNJLHVTQUF1UztRQUV2UyxpR0FBaUc7UUFDakcsMkZBQTJGO1FBQzNGLDBGQUEwRjtRQUMxRix5QkFBeUI7UUFDekIsd0NBQXdDO1FBQ3hDLG9GQUFvRjtRQUNwRixtR0FBbUc7UUFDbkcsc0VBQXNFO1FBQ3RFLGlFQUFpRTtRQUNqRSxxRUFBcUU7UUFDckUsNENBQTRDO1FBQzVDLHdIQUF3SDtRQUN4SCw2QkFBNkI7UUFDN0IseUJBQXlCO1FBQ3pCLHFDQUFxQztRQUNyQywwQkFBMEI7UUFDMUIsdUJBQXVCO1FBQ3ZCLG1CQUFtQjtRQUNuQixtQkFBbUI7UUFDbkIsaUJBQWlCO1FBRWpCLFlBQVk7UUFDWixZQUFZO1FBQ1osUUFBUTtRQUNSLFFBQVE7UUFDUixJQUFJO1FBRUoseUVBQXlFO1FBQ3pFLGlCQUFpQjtRQUNqQixJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osb0NBQW9DO1lBQ3BDLHlCQUF5QjtZQUN6QixJQUFJLFVBQVUsR0FBUSxFQUFFLENBQUM7WUFDekIsSUFBSSx5QkFBeUIsR0FBUSxFQUFFLENBQUM7WUFDeEMsSUFBSSxnQkFBZ0IsR0FBUSxFQUFFLENBQUM7WUFDL0IsSUFBSSxnQkFBZ0IsR0FBUSxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFrQixFQUFFLEVBQUU7Z0JBQy9DLG9FQUFvRTtnQkFDcEUsb0VBQW9FO2dCQUNwRSxPQUFPO2dCQUNQLCtEQUErRDtnQkFDL0QseUVBQXlFO2dCQUN6RSx3QkFBd0I7Z0JBQ3hCLDBFQUEwRTtnQkFDMUUseUJBQXlCO2dCQUN6QixNQUFNO2dCQUNOLDhCQUE4QjtnQkFDOUIsSUFBSSxxQkFBcUIsR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUMzRCxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQ1gsR0FBRyxDQUFDLHNCQUFzQixDQUFDLEtBQUssS0FBSztvQkFDckMsR0FBRyxDQUFDLFlBQVksQ0FBQzt3QkFDZixJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLENBQ3hELENBQUM7Z0JBQ0YsSUFBSSxpQkFBaUIsR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUN2RCxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQ1gsR0FBRyxDQUFDLHNCQUFzQixDQUFDLEtBQUssTUFBTTtvQkFDdEMsR0FBRyxDQUFDLFlBQVksQ0FBQzt3QkFDZixJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLENBQ3hELENBQUM7Z0JBQ0YsSUFBSSxlQUFlLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FDckQsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUNYLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLE1BQU07b0JBQ3RDLEdBQUcsQ0FBQyxZQUFZLENBQUM7d0JBQ2YsSUFBSSxDQUFDLGVBQWUsQ0FBQywwQkFBMEIsQ0FBQyxDQUNyRCxDQUFDO2dCQUNGLElBQ0UsSUFBSSxDQUFDLGVBQWUsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLElBQUk7b0JBQzNELENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDO29CQUNoRCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQztvQkFDaEQsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsQ0FDcEQ7b0JBQ0QsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsQ0FDcEQ7b0JBQ0QsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsMEJBQTBCLENBQUMsQ0FDakQsRUFDRCxDQUFDO29CQUNELHdCQUF3QjtvQkFDeEIsSUFBSSxtQkFBbUIsR0FBUSx5QkFBeUIsQ0FBQyxTQUFTLENBQ2hFLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FDWCxHQUFHLENBQUMsVUFBVSxLQUFLLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQzt3QkFDekQsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FDcEQsQ0FBQztvQkFDRixJQUFJLG1CQUFtQixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQy9CLHlCQUF5QixDQUFDLG1CQUFtQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUNqRSxJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLENBQ3BELENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2YsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLHlCQUF5QixDQUFDLElBQUksQ0FBQzs0QkFDN0IsVUFBVSxFQUFFLGFBQWEsQ0FBQyxZQUFZLENBQUM7NEJBQ3ZDLFVBQVUsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7NEJBQ2xELE1BQU0sRUFBRSxRQUFRLENBQ2QsSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUNwRCxDQUFDLFFBQVEsRUFBRTs0QkFDWixnQkFBZ0IsRUFBRSxDQUFDOzRCQUNuQixXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7NEJBQzFDLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7eUJBQ2pELENBQUMsQ0FBQztvQkFDTCxDQUFDO29CQUVELG1CQUFtQjtvQkFDbkIsSUFBSSxjQUFjLEdBQVEsQ0FDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxHQUFHLFFBQVEsQ0FDL0QsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2IsSUFBSSxZQUFZLEdBQ2QsVUFBVSxDQUFDLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUU7d0JBQzdELENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO3dCQUNsQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN2QyxJQUFJLHVCQUF1QixHQUN6Qix5QkFBeUIsQ0FBQyxTQUFTLENBQ2pDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FDWCxHQUFHLENBQUMsVUFBVSxLQUFLLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQzt3QkFDckQsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FDcEQsQ0FBQztvQkFDSixJQUFJLHVCQUF1QixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ25DLHlCQUF5QixDQUFDLHVCQUF1QixDQUFDLENBQUMsUUFBUSxDQUFDOzRCQUMxRCxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ3hDLENBQUM7eUJBQU0sQ0FBQzt3QkFDTix5QkFBeUIsQ0FBQyxJQUFJLENBQUM7NEJBQzdCLFVBQVUsRUFBRSxhQUFhLENBQUMsWUFBWSxDQUFDOzRCQUN2QyxVQUFVLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDOzRCQUM5QyxNQUFNLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFFBQVEsRUFBRTs0QkFDM0MsZ0JBQWdCLEVBQUUsQ0FBQzs0QkFDbkIsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDOzRCQUMxQyxTQUFTLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO3lCQUM3QyxDQUFDLENBQUM7b0JBQ0wsQ0FBQztvQkFDRCxpQkFBaUI7b0JBRWpCLElBQUkscUJBQXFCLEdBQVEseUJBQXlCLENBQUMsU0FBUyxDQUNsRSxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQ1gsR0FBRyxDQUFDLFVBQVUsS0FBSyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO3dCQUNuRCxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUNwRCxDQUFDO29CQUNGLElBQUkscUJBQXFCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDakMseUJBQXlCLENBQUMscUJBQXFCLENBQUMsQ0FBQyxRQUFRLENBQUM7NEJBQ3hELFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDeEMsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLHlCQUF5QixDQUFDLElBQUksQ0FBQzs0QkFDN0IsVUFBVSxFQUFFLGFBQWEsQ0FBQyxZQUFZLENBQUM7NEJBQ3ZDLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDOzRCQUM1QyxNQUFNLEVBQUUsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLFFBQVEsRUFBRTs0QkFDM0MsZ0JBQWdCLEVBQUUsQ0FBQzs0QkFDbkIsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDOzRCQUMxQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQzt5QkFDM0MsQ0FBQyxDQUFDO29CQUNMLENBQUM7Z0JBQ0gsQ0FBQztxQkFBTSxJQUNMLElBQUksQ0FBQyxlQUFlLENBQUMsNEJBQTRCLENBQUMsS0FBSyxNQUFNO29CQUM3RCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQywwQkFBMEIsQ0FBQyxDQUNqRDtvQkFDRCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUNwRCxFQUNELENBQUM7b0JBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO3dCQUMvQyxJQUFJLGNBQWMsR0FDaEIsVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsMEJBQTBCLENBQUMsQ0FBQzs0QkFDMUQsRUFBRTs0QkFDSixVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUM7d0JBQ2xFLElBQUksVUFBVSxHQUFRLENBQ3BCLFVBQVUsQ0FBQyxjQUFjLENBQUMsR0FBRyxRQUFRLENBQ3RDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNiLElBQUkscUJBQXFCLEdBQ3ZCLHlCQUF5QixDQUFDLFNBQVMsQ0FDakMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUNYLEdBQUcsQ0FBQyxVQUFVLEtBQUssZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQzs0QkFDbkQsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FDcEQsQ0FBQzt3QkFDSixJQUFJLHFCQUFxQixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7NEJBQ2pDLHlCQUF5QixDQUFDLHFCQUFxQixDQUFDLENBQUMsUUFBUSxDQUFDO2dDQUN4RCxJQUFJLENBQUMsZUFBZSxDQUFDLDBCQUEwQixDQUFDLENBQUMsUUFBUSxFQUFFO29DQUMzRCxHQUFHO29DQUNILElBQUksQ0FBQyxlQUFlLENBQ2xCLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsQ0FDcEQsQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDakIsQ0FBQzs2QkFBTSxDQUFDOzRCQUNOLHlCQUF5QixDQUFDLElBQUksQ0FBQztnQ0FDN0IsVUFBVSxFQUFFLGFBQWEsQ0FBQyxZQUFZLENBQUM7Z0NBQ3ZDLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO2dDQUM1QyxNQUFNLEVBQ0osSUFBSSxDQUFDLGVBQWUsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLFFBQVEsRUFBRTtvQ0FDM0QsR0FBRztvQ0FDSCxJQUFJLENBQUMsZUFBZSxDQUNsQiw2QkFBNkIsQ0FDOUIsQ0FBQyxRQUFRLEVBQUU7Z0NBQ2QsZ0JBQWdCLEVBQUUsQ0FBQztnQ0FDbkIsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO2dDQUMxQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQzs2QkFDM0MsQ0FBQyxDQUFDO3dCQUNMLENBQUM7d0JBQ0QsSUFBSSx1QkFBdUIsR0FDekIseUJBQXlCLENBQUMsU0FBUyxDQUNqQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQ1gsR0FBRyxDQUFDLFVBQVUsS0FBSyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7NEJBQ3JELEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQ3BELENBQUM7d0JBQ0osSUFBSSx1QkFBdUIsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDOzRCQUNuQyx5QkFBeUIsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQztnQ0FDMUQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUN4QyxDQUFDOzZCQUFNLENBQUM7NEJBQ04seUJBQXlCLENBQUMsSUFBSSxDQUFDO2dDQUM3QixVQUFVLEVBQUUsYUFBYSxDQUFDLFlBQVksQ0FBQztnQ0FDdkMsVUFBVSxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztnQ0FDOUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLEVBQUU7Z0NBQzNDLGdCQUFnQixFQUFFLENBQUM7Z0NBQ25CLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztnQ0FDMUMsU0FBUyxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQzs2QkFDN0MsQ0FBQyxDQUFDO3dCQUNMLENBQUM7d0JBQ0QsSUFBSSxtQkFBbUIsR0FBUSx5QkFBeUIsQ0FBQyxTQUFTLENBQ2hFLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FDWCxHQUFHLENBQUMsVUFBVSxLQUFLLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQzs0QkFDekQsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FDcEQsQ0FBQzt3QkFDRixJQUFJLG1CQUFtQixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7NEJBQy9CLHlCQUF5QixDQUFDLG1CQUFtQixDQUFDLENBQUMsUUFBUSxDQUFDO2dDQUN0RCxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ3BDLENBQUM7NkJBQU0sQ0FBQzs0QkFDTix5QkFBeUIsQ0FBQyxJQUFJLENBQUM7Z0NBQzdCLFVBQVUsRUFBRSxhQUFhLENBQUMsWUFBWSxDQUFDO2dDQUN2QyxVQUFVLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO2dDQUNsRCxNQUFNLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtnQ0FDdkMsZ0JBQWdCLEVBQUUsQ0FBQztnQ0FDbkIsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO2dDQUMxQyxTQUFTLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDOzZCQUNqRCxDQUFDLENBQUM7d0JBQ0wsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7Z0JBRUQsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQztvQkFDaEQsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsRUFDakUsQ0FBQztvQkFDRCxJQUFJLHNCQUFzQixHQUFRLHlCQUF5QixDQUFDLE1BQU0sQ0FDaEUsQ0FBQyxjQUFtQixFQUFFLEVBQUUsQ0FDdEIsY0FBYyxDQUFDLFlBQVksQ0FBQzt3QkFDNUIscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQ3pDLENBQUM7b0JBQ0YsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxzQkFBc0IsQ0FBQzt3QkFDakQsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDOUQsQ0FBQzt3QkFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDOzRCQUMxRCxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDeEMsQ0FBQztnQkFDSCxDQUFDO2dCQUVELElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLENBQUM7b0JBQzVDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQzdELENBQUM7b0JBQ0QsSUFBSSwwQkFBMEIsR0FDNUIseUJBQXlCLENBQUMsTUFBTSxDQUM5QixDQUFDLGNBQW1CLEVBQUUsRUFBRSxDQUN0QixjQUFjLENBQUMsWUFBWSxDQUFDO3dCQUM1QixpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FDckMsQ0FBQztvQkFDSixJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLDBCQUEwQixDQUFDO3dCQUNyRCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUNsRSxDQUFDO3dCQUNELElBQUksQ0FBQyxlQUFlLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7NEJBQ3RELDBCQUEwQixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUM1QyxDQUFDO2dCQUNILENBQUM7Z0JBRUQsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUM7b0JBQzFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUMzRCxDQUFDO29CQUNELElBQUksd0JBQXdCLEdBQVEseUJBQXlCLENBQUMsTUFBTSxDQUNsRSxDQUFDLGNBQW1CLEVBQUUsRUFBRSxDQUN0QixjQUFjLENBQUMsWUFBWSxDQUFDLEtBQUssZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUNwRSxDQUFDO29CQUNGLElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsd0JBQXdCLENBQUM7d0JBQ25ELENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQ2hFLENBQUM7d0JBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7NEJBQ3BELHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUMxQyxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsSUFBSTtnQkFDSixJQUFJLDRCQUE0QixHQUFRLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUMvRCxhQUFhLENBQUMsV0FBVyxDQUFDLENBQzNCO29CQUNDLENBQUMsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUMvQixDQUFDLFVBQWUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxLQUFLLFdBQVcsQ0FDaEU7b0JBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDUCxJQUNFLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQztvQkFDM0IsNEJBQTRCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztvQkFDMUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQ3JELENBQUM7b0JBQ0QsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQW1CLEVBQUUsRUFBRTt3QkFDekQsSUFBSSxjQUFjLENBQUMsc0JBQXNCLENBQUMsS0FBSyxjQUFjLEVBQUUsQ0FBQzs0QkFDOUQsSUFBSSxjQUFjLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDO2dDQUN6QyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQzs0QkFDakUsQ0FBQztpQ0FBTSxDQUFDO2dDQUNOLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzs0QkFDNUQsQ0FBQzt3QkFDSCxDQUFDO3dCQUNELElBQUksaUJBQWlCLEdBQVEsRUFBRSxDQUFDO3dCQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUM7NEJBQzlELGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQ3BDLENBQUMsaUJBQXNCLEVBQUUsRUFBRTtnQ0FDekIsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsQ0FDekMsQ0FDRjtvQ0FDRCxJQUFJLENBQUMsZUFBZSxDQUNsQixpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUN6QyxFQUNELENBQUM7b0NBQ0QsaUJBQWlCLENBQUMsSUFBSSxDQUNwQixpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUN6QyxDQUFDO2dDQUNKLENBQUM7NEJBQ0gsQ0FBQyxDQUNGLENBQUM7d0JBQ0osQ0FBQzt3QkFDRCxJQUNFLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQzs0QkFDcEMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFVBQVU7NEJBQzdDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUNuRCxFQUNELENBQUM7NEJBQ0Qsd0JBQXdCOzRCQUV4QixJQUFJLDBCQUEwQixHQUM1Qix5QkFBeUIsQ0FBQyxTQUFTLENBQ2pDLENBQUMsZUFBb0IsRUFBRSxFQUFFLENBQ3ZCLGVBQWUsQ0FBQyxZQUFZLENBQUM7Z0NBQzNCLGNBQWMsQ0FBQyxZQUFZLENBQUM7Z0NBQzlCLGVBQWUsQ0FBQyxZQUFZLENBQUM7b0NBQzNCLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FDaEMsQ0FBQzs0QkFDSixJQUFJLDBCQUEwQixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0NBQ3RDLElBQUksR0FBRyxHQUFRO29DQUNiLFVBQVUsRUFBRSxhQUFhLENBQUMsWUFBWSxDQUFDO29DQUN2QyxVQUFVLEVBQUUsY0FBYyxDQUFDLFlBQVksQ0FBQztvQ0FDeEMsTUFBTSxFQUFFLEVBQUU7b0NBQ1YsZ0JBQWdCLEVBQUUsQ0FBQztvQ0FDbkIsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO29DQUMxQyxTQUFTLEVBQUUsY0FBYyxDQUFDLFdBQVcsQ0FBQztpQ0FDdkMsQ0FBQztnQ0FDRixHQUFHLENBQUMsUUFBUSxDQUFDO29DQUNYLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7Z0NBQ2hFLHlCQUF5QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFDdEMsQ0FBQztpQ0FBTSxDQUFDO2dDQUNOLHlCQUF5QixDQUFDLDBCQUEwQixDQUFDLENBQ25ELFFBQVEsQ0FDVDtvQ0FDQyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDOzRCQUNsRSxDQUFDO3dCQUNILENBQUM7NkJBQU0sSUFDTCxjQUFjLENBQUMsb0JBQW9CLENBQUM7NEJBQ3BDLGNBQWMsQ0FBQyxjQUFjLENBQUMsS0FBSyxVQUFVOzRCQUM3QyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FDbkQsRUFDRCxDQUFDOzRCQUNELHdCQUF3Qjs0QkFDeEIsSUFBSSwwQkFBMEIsR0FDNUIseUJBQXlCLENBQUMsU0FBUyxDQUNqQyxDQUFDLGVBQW9CLEVBQUUsRUFBRSxDQUN2QixlQUFlLENBQUMsWUFBWSxDQUFDO2dDQUMzQixjQUFjLENBQUMsWUFBWSxDQUFDO2dDQUM5QixlQUFlLENBQUMsWUFBWSxDQUFDO29DQUMzQixhQUFhLENBQUMsWUFBWSxDQUFDLENBQ2hDLENBQUM7NEJBQ0osSUFBSSwwQkFBMEIsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dDQUN0QyxJQUFJLEdBQUcsR0FBUTtvQ0FDYixVQUFVLEVBQUUsYUFBYSxDQUFDLFlBQVksQ0FBQztvQ0FDdkMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxZQUFZLENBQUM7b0NBQ3hDLE1BQU0sRUFDSixjQUFjLENBQUMsY0FBYyxDQUFDLEtBQUssVUFBVTt3Q0FDM0MsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQ25EO3dDQUNILENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztvQ0FDeEQsZ0JBQWdCLEVBQUUsQ0FBQztvQ0FDbkIsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO29DQUMxQyxTQUFTLEVBQUUsY0FBYyxDQUFDLFdBQVcsQ0FBQztpQ0FDdkMsQ0FBQztnQ0FDRix5QkFBeUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQ3RDLENBQUM7aUNBQU0sQ0FBQztnQ0FDTix5QkFBeUIsQ0FBQywwQkFBMEIsQ0FBQyxDQUNuRCxRQUFRLENBQ1Q7b0NBQ0MsY0FBYyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFVBQVU7d0NBQzNDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FDTixJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUNuRDt3Q0FDSCxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzs0QkFDM0QsQ0FBQzt3QkFDSCxDQUFDO3dCQUNELDhIQUE4SDt3QkFDOUgsOE9BQThPO3dCQUM5Tyw0Q0FBNEM7d0JBQzVDLHVCQUF1Qjt3QkFDdkIsaURBQWlEO3dCQUNqRCxrREFBa0Q7d0JBQ2xELDBOQUEwTjt3QkFDMU4sNkJBQTZCO3dCQUM3QixvREFBb0Q7d0JBQ3BELGdEQUFnRDt3QkFDaEQsU0FBUzt3QkFDVCwyQ0FBMkM7d0JBQzNDLDBEQUEwRDt3QkFDMUQsMENBQTBDO3dCQUMxQyx3RUFBd0U7d0JBQ3hFLGdGQUFnRjt3QkFDaEYsOEtBQThLO3dCQUM5SyxnRkFBZ0Y7d0JBQ2hGLGNBQWM7d0JBQ2QsY0FBYzt3QkFDZCxVQUFVO3dCQUNWLHNEQUFzRDt3QkFDdEQsUUFBUTt3QkFDUixhQUFhO3dCQUNiLDBEQUEwRDt3QkFDMUQsMERBQTBEO3dCQUMxRCwwQ0FBMEM7d0JBQzFDLHdFQUF3RTt3QkFDeEUsZ0ZBQWdGO3dCQUNoRiw4S0FBOEs7d0JBQzlLLGdGQUFnRjt3QkFDaEYsY0FBYzt3QkFDZCxjQUFjO3dCQUNkLFVBQVU7d0JBQ1Ysd0dBQXdHO3dCQUN4RyxlQUFlO3dCQUNmLHFSQUFxUjt3QkFDclIsUUFBUTt3QkFFUixNQUFNO3dCQUVOLElBQUk7d0JBRUoscUVBQXFFO3dCQUNyRSxnUEFBZ1A7d0JBQ2hQLHFCQUFxQjt3QkFDckIsK0NBQStDO3dCQUMvQyxnREFBZ0Q7d0JBQ2hELHVEQUF1RDt3QkFDdkQsMkJBQTJCO3dCQUMzQixrREFBa0Q7d0JBQ2xELDhDQUE4Qzt3QkFDOUMsT0FBTzt3QkFDUCxrREFBa0Q7d0JBQ2xELDJDQUEyQzt3QkFDM0MsYUFBYTt3QkFDYixzSEFBc0g7d0JBQ3RILE1BQU07d0JBQ04sSUFBSTtvQkFDTixDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUNELE1BQU07Z0JBQ04sSUFBSTtZQUNOLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSwyQkFBMkIsR0FBUTtnQkFDckMsR0FBRyxJQUFJLEdBQUcsQ0FDUix5QkFBeUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUMzQixDQUNGO2FBQ0YsQ0FBQztZQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsMkJBQTJCLENBQUMsRUFBRSxDQUFDO2dCQUMzRCxnQkFBZ0IsR0FBRyx5QkFBeUIsQ0FBQyxNQUFNLENBQ2pELENBQUMsWUFBaUIsRUFBRSxFQUFFLENBQ3BCLFlBQVksQ0FBQyxZQUFZLENBQUMsS0FBSywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsQ0FDaEUsQ0FBQztnQkFDRixJQUFJLDJCQUEyQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDN0MsZ0JBQWdCLEdBQUcseUJBQXlCLENBQUMsTUFBTSxDQUNqRCxDQUFDLFlBQWlCLEVBQUUsRUFBRSxDQUNwQixZQUFZLENBQUMsWUFBWSxDQUFDLEtBQUssMkJBQTJCLENBQUMsQ0FBQyxDQUFDLENBQ2hFLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLGlCQUFpQixHQUFRLEVBQUUsQ0FBQztZQUNoQyxJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDO2dCQUMzQyxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssSUFBSSxFQUMxQixDQUFDO2dCQUNELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxnQkFBZ0IsQ0FBQztnQkFDOUMsY0FBYyxDQUFDLE9BQU8sQ0FDcEIsdUJBQXVCLEVBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FDakMsQ0FBQztnQkFDRixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQ2hELGNBQWMsQ0FBQyxPQUFPLENBQ3BCLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FDakMsQ0FBQztnQkFDSixDQUFDO2dCQUNELHFHQUFxRztnQkFDckcsOFpBQThaO1lBQ2hhLENBQUM7WUFDRCxJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDO2dCQUMzQyxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssSUFBSSxFQUMxQixDQUFDO2dCQUNELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxnQkFBZ0IsQ0FBQztnQkFDOUMsY0FBYyxDQUFDLE9BQU8sQ0FDcEIsdUJBQXVCLEVBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FDakMsQ0FBQztnQkFDRixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQ2hELGNBQWMsQ0FBQyxPQUFPLENBQ3BCLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FDakMsQ0FBQztnQkFDSixDQUFDO2dCQUNELHNHQUFzRztnQkFDdEcsOFpBQThaO1lBQ2hhLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFZO1FBQ3pCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDcEIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN0QixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzlELFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN0QyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxDQUFDO1lBQ0QsSUFDRSxJQUFJLEtBQUssTUFBTTtnQkFDZixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSTtnQkFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxTQUFTLEVBQ3JDLENBQUM7Z0JBQ0QsVUFBVSxHQUFHLFVBQVUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxRCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsd0JBQXdCLENBQUMsaUJBQXNCLEtBQUs7UUFDbEQsSUFBSSxPQUFPLEdBQVEsSUFBSSxDQUFDO1FBQ3hCLElBQUksaUJBQWlCLEdBQVEsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBa0IsRUFBRSxFQUFFO1lBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ3JFLElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUN2RCxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQzt3QkFDOUQsY0FBYzt3QkFDZCxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7NEJBQzdELGVBQWU7d0JBQ2pCLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQzs0QkFDN0Qsa0JBQWtCLENBQUM7b0JBQ3ZCLE9BQU8sRUFDUCxDQUFDO29CQUNELHdDQUF3QztvQkFDeEMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLDRCQUE0QixDQUFDLEtBQUssTUFBTSxFQUFFLENBQUM7d0JBQ2xFLElBQUksaUJBQWlCLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FDdkQsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLE1BQU0sQ0FDckQsQ0FBQzt3QkFDRixJQUFJLGVBQWUsR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUNyRCxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLEtBQUssTUFBTSxDQUNyRCxDQUFDO3dCQUNGLElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLENBQUM7NEJBQzVDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQzs0QkFDMUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsMEJBQTBCLENBQUMsQ0FDakQ7Z0NBQ0MsSUFBSSxDQUFDLG1CQUFtQixDQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLENBQ3BELENBQUMsRUFDSixDQUFDOzRCQUNELE9BQU8sR0FBRyxLQUFLLENBQUM7NEJBQ2hCLGlCQUFpQixHQUFHLHdDQUF3QyxDQUFDOzRCQUM3RCxJQUFJLGNBQWMsRUFBRSxDQUFDO2dDQUNuQixJQUFJLFVBQVUsR0FBUSw2QkFBNkIsQ0FBQztnQ0FDcEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQzs0QkFDbEMsQ0FBQzs0QkFDRCx1RUFBdUU7NEJBQ3ZFLDRFQUE0RTs0QkFDNUUsc0VBQXNFOzRCQUN0RSxxRUFBcUU7NEJBQ3JFLGtEQUFrRDs0QkFDbEQsSUFBSTs0QkFDSiwwRkFBMEY7NEJBQzFGLGlEQUFpRDs0QkFDakQsNENBQTRDOzRCQUM1QyxnREFBZ0Q7NEJBQ2hELHVCQUF1Qjs0QkFDdkIsb0VBQW9FOzRCQUNwRSxRQUFROzRCQUNSLFdBQVc7NEJBQ1gsc0dBQXNHOzRCQUV0RyxJQUFJOzRCQUVKLGdCQUFnQjs0QkFDaEIsSUFBSTt3QkFDTixDQUFDO29CQUNILENBQUM7b0JBQ0QsOEJBQThCO29CQUM5QixJQUFJLHFCQUFxQixHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQzNELENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsS0FBSyxLQUFLLENBQ3BELENBQUM7b0JBQ0YsSUFDRSxJQUFJLENBQUMsZUFBZSxDQUFDLDRCQUE0QixDQUFDLEtBQUssSUFBSTt3QkFDM0QsSUFBSSxDQUFDLG1CQUFtQixDQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLENBQ3BEO3dCQUNELENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDO3dCQUNoRCxPQUFPLEVBQ1AsQ0FBQzt3QkFDRCxPQUFPLEdBQUcsS0FBSyxDQUFDO3dCQUNoQixpQkFBaUIsR0FBRyxtQ0FBbUMsQ0FBQzt3QkFFeEQsSUFBSSxjQUFjLEVBQUUsQ0FBQzs0QkFDbkIsSUFBSSxVQUFVLEdBQVEsNkJBQTZCLENBQUM7NEJBQ3BELElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7d0JBQ2xDLENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDO2dCQUVELGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxpQkFBc0IsRUFBRSxFQUFFO29CQUM1RCxpQ0FBaUM7b0JBQ2pDLElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLENBQUM7d0JBQzVDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLENBQUM7d0JBQ2hFLGlCQUFpQixDQUFDLG9CQUFvQixDQUFDO3dCQUN2QyxPQUFPO3dCQUNQLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxLQUFLLFlBQVk7d0JBQ2xELGlCQUFpQixDQUFDLHNCQUFzQixDQUFDLEtBQUssS0FBSzt3QkFDbkQsaUJBQWlCLENBQUMsY0FBYyxDQUFDLEtBQUssYUFBYTt3QkFDbkQsaUJBQWlCLENBQUMsc0JBQXNCLENBQUMsS0FBSyxjQUFjO3dCQUM1RCxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsS0FBSyxpQkFBaUI7d0JBQ3ZELGlCQUFpQixDQUFDLHNCQUFzQixDQUFDLEtBQUssTUFBTTt3QkFDcEQsaUJBQWlCLENBQUMsc0JBQXNCLENBQUMsS0FBSyxNQUFNO3dCQUNwRCxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLEdBQUc7d0JBQ3hELElBQUksQ0FBQyxtQkFBbUIsQ0FDdEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUN0RDt3QkFDRCx3REFBd0Q7d0JBQ3hELGlIQUFpSDt3QkFDakgsbUlBQW1JO3dCQUNuSSxPQUFPLEVBQ1AsQ0FBQzt3QkFDRCxpQkFBaUIsR0FBRyxtQ0FBbUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7d0JBQ3RGLE9BQU8sR0FBRyxLQUFLLENBQUM7d0JBRWhCLElBQUksY0FBYyxFQUFFLENBQUM7NEJBQ25CLElBQUksVUFBVSxHQUFRLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDOzRCQUN0RCxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO3dCQUNsQyxDQUFDO29CQUNILENBQUM7b0JBRUQsT0FBTztvQkFDUCwrREFBK0Q7b0JBQy9ELHFEQUFxRDtvQkFDckQsK0NBQStDO29CQUMvQyxNQUFNO29CQUNOLDhOQUE4TjtvQkFDOU4sZ0VBQWdFO29CQUNoRSxrTEFBa0w7b0JBQ2xMLGdEQUFnRDtvQkFDaEQsb0RBQW9EO29CQUNwRCwyQkFBMkI7b0JBQzNCLCtHQUErRztvQkFDL0csWUFBWTtvQkFDWixlQUFlO29CQUNmLG1KQUFtSjtvQkFDbkoseUlBQXlJO29CQUN6SSx1SEFBdUg7b0JBQ3ZILGdDQUFnQztvQkFDaEMscUNBQXFDO29CQUNyQyxpSkFBaUo7b0JBQ2pKLHlDQUF5QztvQkFDekMseUhBQXlIO29CQUN6SCxrQ0FBa0M7b0JBQ2xDLHVDQUF1QztvQkFDdkMsaURBQWlEO29CQUNqRCx5SEFBeUg7b0JBQ3pILGtDQUFrQztvQkFDbEMsdUNBQXVDO29CQUN2QyxZQUFZO29CQUNaLHFGQUFxRjtvQkFDckYsMENBQTBDO29CQUMxQyxVQUFVO29CQUNWLFFBQVE7b0JBQ1IsdUJBQXVCO29CQUN2QixvQkFBb0I7b0JBQ3BCLE1BQU07b0JBRU4sSUFBSTtvQkFDSix1Q0FBdUM7b0JBQ3ZDLElBQ0UsT0FBTzt3QkFDUCxpQkFBaUIsQ0FBQyxZQUFZLEtBQUssYUFBYTt3QkFDaEQsaUJBQWlCLENBQUMsb0JBQW9CLENBQUM7d0JBQ3ZDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLENBQUM7d0JBQ2hFLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLEtBQUssR0FBRyxFQUM3QyxDQUFDO3dCQUNELElBQ0UsQ0FBQyxPQUFPOzRCQUNOLDhFQUE4RTs0QkFDOUUsbUVBQW1FOzRCQUNuRSx1RUFBdUU7NEJBQ3ZFLDhGQUE4Rjs0QkFDOUYsK0lBQStJOzRCQUMvSSxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDO2dDQUNuRCxHQUFHLENBQUM7NEJBQ1IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDOzRCQUN0RCxJQUFJLENBQUMsbUJBQW1CLENBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FDdEQ7d0JBQ0QsSUFBSTt3QkFDSixpRUFBaUU7MEJBQ2pFLENBQUM7NEJBQ0QsT0FBTyxHQUFHLEtBQUssQ0FBQzs0QkFDaEIsaUJBQWlCLEdBQUcsbUNBQW1DLGFBQWEsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDOzRCQUV0RixJQUFJLGNBQWMsRUFBRSxDQUFDO2dDQUNuQixJQUFJLFVBQVUsR0FBUSxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQ0FDdEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQzs0QkFDbEMsQ0FBQzt3QkFDSCxDQUFDO29CQUNILENBQUM7b0JBRUQsdUNBQXVDO29CQUN2QyxtRkFBbUY7b0JBQ25GLGdGQUFnRjtvQkFDaEYsV0FBVztvQkFDWCwwQ0FBMEM7b0JBQzFDLHFEQUFxRDtvQkFDckQsMkRBQTJEO29CQUMzRCxxREFBcUQ7b0JBQ3JELG9HQUFvRztvQkFDcEcsNkdBQTZHO29CQUM3RyxVQUFVO29CQUNWLHlCQUF5QjtvQkFDekIsb0VBQW9FO29CQUNwRSxzREFBc0Q7b0JBQ3RELDZCQUE2QjtvQkFDN0IsMEhBQTBIO29CQUMxSCxjQUFjO29CQUNkLFVBQVU7b0JBQ1YsUUFBUTtvQkFDUixRQUFRO29CQUNSLElBQUk7Z0JBQ04sQ0FBQyxDQUFDLENBQUM7Z0JBRUgsbUNBQW1DO2dCQUNuQyxxRUFBcUU7Z0JBQ3JFLCtEQUErRDtnQkFDL0QsaUhBQWlIO2dCQUNqSCw0RUFBNEU7Z0JBQzVFLHNEQUFzRDtnQkFDdEQsU0FBUztnQkFDVCx1QkFBdUI7Z0JBQ3ZCLHNGQUFzRjtnQkFDdEYsMkVBQTJFO2dCQUMzRSwrRUFBK0U7Z0JBQy9FLHVHQUF1RztnQkFDdkcsdUpBQXVKO2dCQUN2Siw0VUFBNFU7Z0JBRTVVLG9GQUFvRjtnQkFDcEYsOEVBQThFO2dCQUM5RSw2RUFBNkU7Z0JBQzdFLFlBQVk7Z0JBQ1osMkJBQTJCO2dCQUMzQix1RUFBdUU7Z0JBQ3ZFLHNGQUFzRjtnQkFDdEYseURBQXlEO2dCQUN6RCxvREFBb0Q7Z0JBQ3BELHdEQUF3RDtnQkFDeEQsK0JBQStCO2dCQUMvQiwyR0FBMkc7Z0JBQzNHLGdCQUFnQjtnQkFDaEIsWUFBWTtnQkFDWix3QkFBd0I7Z0JBQ3hCLGFBQWE7Z0JBQ2IsVUFBVTtnQkFDVixNQUFNO2dCQUNOLE1BQU07Z0JBQ04sSUFBSTtZQUNOLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxJQUFJLEVBQzFCLENBQUM7WUFDRCxjQUFjLENBQUMsT0FBTyxDQUFDLDhCQUE4QixFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2hFLGNBQWMsQ0FBQyxPQUFPLENBQ3BCLDJDQUEyQyxFQUMzQyxpQkFBaUIsQ0FDbEIsQ0FBQztZQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDaEQsY0FBYyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3BFLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLGNBQWMsQ0FBQyxPQUFPLENBQUMseUJBQXlCLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDM0QsY0FBYyxDQUFDLE9BQU8sQ0FDcEIsc0NBQXNDLEVBQ3RDLGlCQUFpQixDQUNsQixDQUFDO1lBRUYsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNoRCxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDcEUsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQseUJBQXlCLENBQUMsUUFBYTtRQUNyQyxJQUNFLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLGVBQWU7WUFDcEQsUUFBUSxDQUFDLHNCQUFzQixDQUFDLEtBQUssV0FBVyxFQUNoRCxDQUFDO1lBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBRXhELG1EQUFtRDtZQUNuRCxJQUFJLGNBQWMsR0FBUSxJQUFJLENBQUMsZUFBZSxDQUM1QyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQ3ZCLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBYyxFQUFFLEVBQUUsQ0FBQyxTQUFTLEtBQUssYUFBYSxDQUFDLENBQUM7WUFFN0QsSUFBSSxjQUFjLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUNqRSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQ3ZCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQ3JELENBQUMsU0FBYyxFQUFFLEVBQUUsQ0FBQyxTQUFTLEtBQUssYUFBYSxDQUNoRCxDQUFDO1lBQ0osQ0FBQztZQUNELElBQUksQ0FBQywyQkFBMkIsR0FBRyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztnQkFDakQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FDMUMsQ0FBQyxhQUFrQixFQUFFLEVBQUUsQ0FDckIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO29CQUMvRCxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO3dCQUMvRCxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQzVDLENBQUM7WUFDSixDQUFDO1lBQ0Qsd0dBQXdHO1lBQ3hHLDhCQUE4QjtZQUM5QixrQ0FBa0M7WUFDbEMsc0VBQXNFO1lBQ3RFLEtBQUs7WUFDTCw0REFBNEQ7WUFDNUQsT0FBTztZQUNQLGdFQUFnRTtZQUNoRSxxQ0FBcUM7WUFDckMsbUVBQW1FO1lBQ25FLDRCQUE0QjtZQUM1QixRQUFRO1lBQ1IsU0FBUztZQUNULHFDQUFxQztZQUNyQyxtRUFBbUU7WUFDbkUsNEJBQTRCO1lBQzVCLHdCQUF3QjtZQUN4QixNQUFNO1lBQ04sTUFBTTtZQUNOLCtEQUErRDtZQUMvRCx3QkFBd0I7WUFDeEIsOERBQThEO1lBQzlELHdCQUF3QjtZQUN4QixpREFBaUQ7WUFDakQsNkJBQTZCO1lBQzdCLHNDQUFzQztZQUN0QywrQ0FBK0M7WUFDL0MsV0FBVztZQUNYLHdDQUF3QztZQUN4QywrQ0FBK0M7WUFDL0MsV0FBVztZQUNYLGlEQUFpRDtZQUNqRCxLQUFLO1lBQ0wsSUFBSTtZQUNKLGtFQUFrRTtZQUNsRSxtQkFBbUI7WUFDbkIsbURBQW1EO1lBQ25ELGtEQUFrRDtZQUNsRCxzRUFBc0U7WUFDdEUsdUJBQXVCO1lBQ3ZCLDBCQUEwQjtZQUMxQixNQUFNO1lBQ04sTUFBTTtZQUVOLHNMQUFzTDtZQUN0TCxtRUFBbUU7WUFDbkUsbURBQW1EO1lBQ25ELCtEQUErRDtZQUMvRCx1QkFBdUI7WUFDdkIsMkJBQTJCO1lBQzNCLE1BQU07WUFDTixNQUFNO1lBQ04sNkJBQTZCO1lBRTdCLElBQUksZ0JBQWdCLEdBQ2xCLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDMUQsaUNBQWlDO1lBQ2pDLG9CQUFvQjtZQUNwQixrQ0FBa0M7WUFDbEMsd0VBQXdFO1lBQ3hFLG1CQUFtQjtZQUNuQixNQUFNO1lBQ04sS0FBSztZQUNMLElBQ0UsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7Z0JBQ3hELFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUM7Z0JBQ3BFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxjQUFjLENBQzVDLHVCQUF1QixDQUN4QjtnQkFDRCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3BFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FDdEQ7Z0JBQ0QsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUN6RCxFQUNELENBQUM7Z0JBQ0QsSUFBSSxDQUFDLGFBQWE7cUJBQ2YsZUFBZSxDQUNkLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFDL0IsZ0JBQWdCLEVBQ2hCLElBQUksQ0FBQyxVQUFVLENBQ2hCO3FCQUNBLFNBQVMsQ0FDUixDQUFDLElBQVMsRUFBRSxFQUFFO29CQUNaLDhCQUE4QjtvQkFDOUIsSUFBSSxhQUFhLEdBQVEsRUFBRSxDQUFDO29CQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFnQixFQUFFLEVBQUU7NEJBQ2hDLFdBQVcsQ0FBQyxjQUFjLENBQUM7Z0NBQ3pCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUMzQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQzFCLENBQUM7NEJBQ0osV0FBVyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsS0FBSyxDQUFDOzRCQUMxQyxXQUFXLENBQUMsc0JBQXNCLENBQUMsR0FBRyxJQUFJLENBQUM7NEJBQzNDLElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUNoQztnQ0FDRCxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUMsRUFDL0MsQ0FBQztnQ0FDRCxXQUFXLENBQUMsa0JBQWtCLENBQUMsR0FBRztvQ0FDaEMsV0FBVyxDQUFDLGtCQUFrQixDQUFDO2lDQUNoQyxDQUFDOzRCQUNKLENBQUM7NEJBQ0QsSUFDRSxXQUFXLENBQUMsY0FBYyxDQUFDLEtBQUssVUFBVTtnQ0FDMUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUMsRUFDMUQsQ0FBQztnQ0FDRCxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQ3JDLENBQUMseUJBQThCLEVBQUUsRUFBRTtvQ0FDakMsSUFBSSxrQkFBa0IsR0FBUSxJQUFJLENBQUMsTUFBTSxDQUN2QyxDQUFDLE1BQVcsRUFBRSxFQUFFLENBQ2QsTUFBTSxDQUFDLFlBQVksQ0FBQzt3Q0FDcEIseUJBQXlCLENBQUMsZ0JBQWdCLENBQUMsQ0FDOUMsQ0FBQztvQ0FDRixJQUFJLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQzt3Q0FDbEMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDOzRDQUNwQyx5QkFBeUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO29DQUNyRCxDQUFDO2dDQUNILENBQUMsQ0FDRixDQUFDOzRCQUNKLENBQUM7NEJBQ0QsT0FBTzs0QkFDUCwrQkFBK0I7NEJBQy9CLGtDQUFrQzs0QkFDbEMsTUFBTTs0QkFDTixNQUFNOzRCQUNOLDhEQUE4RDs0QkFDOUQsMkVBQTJFOzRCQUMzRSx5Q0FBeUM7NEJBQ3pDLFNBQVM7NEJBQ1QsUUFBUTs0QkFDUixJQUFJOzRCQUNKLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0NBQ3RELGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7NEJBQy9DLENBQUM7NEJBQ0QsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7d0JBQ3BELENBQUMsQ0FBQyxDQUFDO3dCQUNILElBQUksQ0FBQyxJQUFJLENBQ1AsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFFLEVBQUUsQ0FDakIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7NEJBQ3JCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQ3hDLENBQUM7d0JBQ0YsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQVUsRUFBRSxHQUFRLEVBQUUsRUFBRTs0QkFDN0MsSUFBSSxXQUFXLEdBQVEsSUFBSSxDQUFDLE1BQU0sQ0FDaEMsQ0FBQyxjQUFtQixFQUFFLEVBQUUsQ0FDdEIsY0FBYyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEtBQUssQ0FDeEMsQ0FBQzs0QkFDRixJQUFJLEdBQUcsR0FBUTtnQ0FDYixJQUFJLEVBQUUsSUFBSSxHQUFHLEdBQUc7Z0NBQ2hCLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUM7b0NBQy9DLENBQUMsQ0FBQyxXQUFXO29DQUNiLENBQUMsQ0FBQyxFQUFFO2dDQUNOLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUM7b0NBQ2pELENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO29DQUN6QixDQUFDLENBQUMsRUFBRTtnQ0FDTixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7Z0NBQzNCLG9CQUFvQixFQUFFLElBQUk7Z0NBQzFCLFdBQVcsRUFBRSxJQUFJOzZCQUNsQixDQUFDOzRCQUNGLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUM5QixDQUFDLENBQUMsQ0FBQzt3QkFDSCxJQUFJLENBQUMsMkJBQTJCLEdBQUcsSUFBSSxDQUFDO3dCQUN4QyxtSEFBbUg7d0JBQ25ILGtDQUFrQzt3QkFDbEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQzs0QkFDekMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sQ0FDaEQsSUFBSSxDQUFDLDJCQUEyQixDQUNqQyxDQUFDO29CQUNOLENBQUM7b0JBQ0QsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7Z0JBQ2pDLENBQUMsRUFDRCxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUNYLDhCQUE4QjtnQkFDaEMsQ0FBQyxDQUNGLENBQUM7WUFDTixDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFDRCxxQkFBcUIsQ0FBQyxLQUFvQztRQUN4RCxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUMxQixDQUFDO0lBRUQsd0JBQXdCO1FBQ3RCLElBQ0UsSUFBSSxDQUFDLGVBQWUsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLE1BQU07WUFDN0QsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsQ0FDcEQsRUFDRCxDQUFDO1lBQ0QsSUFBSSxjQUFjLEdBQVEsQ0FDeEIsVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsQ0FBQztnQkFDL0QsUUFBUSxDQUNULENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2IsSUFBSSxZQUFZLEdBQ2QsVUFBVSxDQUFDLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUU7Z0JBQzdELENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNsQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JFLElBQUksQ0FBQyxlQUFlLENBQUMsMEJBQTBCLENBQUMsR0FBRyxZQUFZO3FCQUM1RCxRQUFRLEVBQUU7cUJBQ1YsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25CLENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNyRSxJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDO29CQUNqRCxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUk7d0JBQzlDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSTt3QkFDOUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJO3dCQUM1QyxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNqRCxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QyxDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQ0wsSUFBSSxDQUFDLGVBQWUsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLElBQUk7WUFDM0QsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsMEJBQTBCLENBQUMsQ0FDakQ7WUFDRCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUNwRCxFQUNELENBQUM7WUFDRCxJQUFJLGNBQWMsR0FDaEIsVUFBVSxDQUNSLFVBQVUsQ0FDUixJQUFJLENBQUMsZUFBZSxDQUFDLDBCQUEwQixDQUFDLENBQ2pELENBQUMsUUFBUSxFQUFFO2dCQUNWLEdBQUc7Z0JBQ0gsVUFBVSxDQUNSLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsQ0FDcEQsQ0FBQyxRQUFRLEVBQUUsQ0FDZixHQUFHLEVBQUUsQ0FBQztZQUNULElBQUksVUFBVSxHQUFRLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6RSxJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLEdBQUcsVUFBVSxDQUFDO1FBQ25FLENBQUM7UUFDRCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsY0FBYyxDQUFDLFNBQWM7UUFDM0IsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckUsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekQsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQWdCLENBQUM7UUFFcEQsTUFBTSxlQUFlLEdBQVEsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRS9ELGlFQUFpRTtRQUNqRSxxQkFBcUIsQ0FBQyxHQUFHLEVBQUU7WUFDekIsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDcEQsTUFBTSxhQUFhLEdBQ2pCLGVBQWUsS0FBSyxNQUFNO2dCQUN4QixDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO2dCQUNaLENBQUMsQ0FBRSxlQUErQixDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFFL0QsTUFBTSxhQUFhLEdBQ2pCLGVBQWUsS0FBSyxNQUFNO2dCQUN4QixDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsSUFBSSxRQUFRLENBQUMsZUFBZSxDQUFDLFNBQVMsSUFBSSxDQUFDO2dCQUMvRCxDQUFDLENBQUUsZUFBK0IsQ0FBQyxTQUFTLENBQUM7WUFFakQsTUFBTSxjQUFjLEdBQ2xCLFdBQVcsQ0FBQyxHQUFHLEdBQUcsYUFBYSxDQUFDLEdBQUcsR0FBRyxhQUFhLEdBQUcsWUFBWSxDQUFDO1lBRXJFLElBQUksZUFBZSxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUMvQixNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUMvRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0wsZUFBK0IsQ0FBQyxRQUFRLENBQUM7b0JBQ3hDLEdBQUcsRUFBRSxjQUFjO29CQUNuQixRQUFRLEVBQUUsUUFBUTtpQkFDbkIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVELE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN2QyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztZQUUxRCx3Q0FBd0M7WUFDeEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN2QyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFVCx1RUFBdUU7WUFDdkUsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEtBQVcsRUFBRSxFQUFFO2dCQUN6QyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO2dCQUNqRCxpREFBaUQ7Z0JBQ2pELE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztnQkFDekQsT0FBTyxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO2dCQUMxRCxPQUFPLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUMvRCxPQUFPLENBQUMsbUJBQW1CLENBQUMsZUFBZSxFQUFFLGtCQUFrQixDQUFDLENBQUM7Z0JBRWpFLDREQUE0RDtnQkFDNUQsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLHFCQUFxQixDQUFDLENBQUM7Z0JBQ3BFLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FDN0Msd0JBQXdCLENBQ3pCLENBQUM7Z0JBQ0YsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO29CQUNqQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUM7b0JBQ3hELEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztnQkFDekQsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO29CQUN2QyxRQUFRLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUM7b0JBQzNELFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztnQkFDNUQsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUM7WUFFRixtQ0FBbUM7WUFDbkMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBRXRELGlEQUFpRDtZQUNqRCxPQUFPLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUM7WUFFdkQsNEVBQTRFO1lBQzVFLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFNUQsOEJBQThCO1lBQzlCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUU5RCxvRUFBb0U7WUFDcEUsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDcEUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO2dCQUNqQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUM7Z0JBQ3JELEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUN0RCxDQUFDLENBQUMsQ0FBQztZQUVILDBEQUEwRDtZQUMxRCxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUMxRSxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQ3ZDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztnQkFDeEQsUUFBUSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3pELENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsSUFBd0I7UUFDbEQsSUFBSSxNQUFNLEdBQUcsSUFBSSxFQUFFLGFBQWEsQ0FBQztRQUNqQyxPQUFPLE1BQU0sRUFBRSxDQUFDO1lBQ2QsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUM1RCxJQUFJLFNBQVMsS0FBSyxNQUFNLElBQUksU0FBUyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNuRCxPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDO1lBQ0QsTUFBTSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7UUFDaEMsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7d0dBeHZHVSx3QkFBd0I7NEZBQXhCLHdCQUF3Qix3eUNDdERyQywydFdBNE5NLHcyQ0R2TEYsWUFBWSw2VkFDWixXQUFXLGd4QkFDWCxtQkFBbUIsK0JBQ25CLGdCQUFnQiwySEFDaEIsY0FBYywySEFDZCxpQkFBaUIsOEhBQ2pCLGVBQWUsa0pBQ2YsWUFBWSxxS0FDWixlQUFlLDhNQUNmLHVCQUF1Qiw2SUFDdkIsZ0JBQWdCLCtpQ0FDaEIsZUFBZSwyRUFDZixvQkFBb0I7OzRGQUtYLHdCQUF3QjtrQkF0QnBDLFNBQVM7K0JBQ0Usc0JBQXNCLGNBQ3BCLElBQUksV0FFUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2QsaUJBQWlCO3dCQUNqQixlQUFlO3dCQUNmLFlBQVk7d0JBQ1osZUFBZTt3QkFDZix1QkFBdUI7d0JBQ3ZCLGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixvQkFBb0I7cUJBQ3JCO3VHQUtTLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFFRSxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBUXFCLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdvb2dsZU1hcHNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9nb29nbGUtbWFwcyc7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZCxcbiAgTmdab25lLFxuICBBZnRlclZpZXdJbml0LFxuICBpbnB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBvdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHF1ZXN0aW9uc1Jlc3BvbnNlIGZyb20gJy4vcXVlc3Rpb25zLmpzb24nO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVGV4dGJveENvbXBvbmVudCB9IGZyb20gJy4uL3RleHRib3gvdGV4dGJveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmFkaW9Db21wb25lbnQgfSBmcm9tICcuLi9yYWRpby9yYWRpby5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuLi9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vc2VsZWN0L3NlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRG9iQ29tcG9uZW50IH0gZnJvbSAnLi4vZG9iL2RvYi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVXBsb2FkQ29tcG9uZW50IH0gZnJvbSAnLi4vdXBsb2FkL3VwbG9hZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTXVsdGlwbGVTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi9tdWx0aXBsZS1zZWxlY3QvbXVsdGlwbGUtc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBIckxpbmVDb21wb25lbnQgfSBmcm9tICcuLi9oci1saW5lL2hyLWxpbmUuY29tcG9uZW50JztcbmltcG9ydCB7IE1hc3RlckNvbnRyb2xTZXJ2aWNlIH0gZnJvbSAnLi4vbWFzdGVyLWNvbnRyb2wuc2VydmljZSc7XG5pbXBvcnQgeyBNYXN0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vbWFzdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlsZVByZXZpZXdDb21wb25lbnQgfSBmcm9tICcuLi9maWxlLXByZXZpZXcvZmlsZS1wcmV2aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1tZWRpYWwtcXVlc3Rpb25zJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgLy8gY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBUZXh0Ym94Q29tcG9uZW50LFxuICAgIFJhZGlvQ29tcG9uZW50LFxuICAgIENoZWNrYm94Q29tcG9uZW50LFxuICAgIFNlbGVjdENvbXBvbmVudCxcbiAgICBEb2JDb21wb25lbnQsXG4gICAgVXBsb2FkQ29tcG9uZW50LFxuICAgIE11bHRpcGxlU2VsZWN0Q29tcG9uZW50LFxuICAgIEdvb2dsZU1hcHNNb2R1bGUsXG4gICAgSHJMaW5lQ29tcG9uZW50LFxuICAgIEZpbGVQcmV2aWV3Q29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9tZWRpYWwtcXVlc3Rpb25zLmNvbXBvbmVudC5jc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBNZWRpYWxRdWVzdGlvbnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBAT3V0cHV0KCkgcXVlc3Rpb25zVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgY2x1c3RlcklkOiBhbnkgPSBpbnB1dDxhbnk+KCk7IC8vIG5vbiBtYW5kYXRvcnkgY2x1c3RlciBpZFxuICBASW5wdXQoKSB0cmlnZ2VyVmFsaWRhdGlvbj86IFN1YmplY3Q8dm9pZD47XG4gIG1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UgPSBpbnB1dDxhbnk+KCk7XG4gIHBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2U6IGFueSA9IGlucHV0PGFueT4oKTtcbiAgZGVmYXVsdFZhbHVlczogYW55ID0gaW5wdXQ8YW55PigpO1xuICBwZXJzb25UeXBlOiBhbnkgPSBpbnB1dDxhbnk+KCk7XG4gIHBlcnNvblV3SWQ6IGFueSA9ICcnO1xuICBpc01lZGljYWxTdWJRdWVzdGlvbnNBdmFpbGFibGU6IGFueSA9IG51bGw7XG4gIG1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZTogYW55ID0ge307XG4gIEBWaWV3Q2hpbGQoJ2FkZHJlc3NJbnB1dCcpIGFkZHJlc3NJbnB1dCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gIHByaXZhdGUgYXV0b2NvbXBsZXRlITogZ29vZ2xlLm1hcHMucGxhY2VzLkF1dG9jb21wbGV0ZTtcbiAgc2F2ZVF1ZXN0aW9uUmVxdWVzdExhOiBhbnkgPSBbXTtcbiAgc2F2ZVF1ZXN0aW9uUmVxdWVzdFBoOiBhbnkgPSBbXTtcbiAgZmllbGQ6IGFueSA9IGlucHV0LnJlcXVpcmVkPGFueT4oKTtcbiAgcXVlc3Rpb25MaXN0OiBhbnkgPSBbXTtcbiAgY3VycmVudENvb3JkaW5hdGVzOiBhbnkgPSB7fTtcbiAgcGVyc29uVXdSZXNwb25zZU9iajogYW55ID0gW107XG4gIGNlbnRlcjogZ29vZ2xlLm1hcHMuTGF0TG5nTGl0ZXJhbCA9IHsgbGF0OiA0MC43MzA2MSwgbG5nOiAtNzMuOTM1MjQyIH07XG4gIGxhdGl0dWRlOiBhbnk7XG4gIGxvbmdpdHVkZTogYW55O1xuICB6b29tOiBhbnk7XG4gIG1hcmtlcjogYW55ID0ge307XG5cbiAgcGVyc29uVXdBbnN3ZXJzOiBhbnkgPSB7XG4gICAgbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQ6ICdGRUVUJyxcbiAgICBtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQ6IDAsXG4gICAgbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0OiAwLFxuICAgIG1lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dDogMCxcbiAgfTtcbiAgbWVkUXVlc3Rpb25PYmo6IGFueSA9IHt9O1xuICBsaXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveDogYW55ID0gW107XG4gIG1lZGljYWxRdWVzdGlvbnNGZWV0TGlzdDogYW55ID0gW107XG4gIG1lZGljYWxRdWVzdGlvbnNJbmNoZXNMaXN0OiBhbnkgPSBbXTtcbiAgcXVlc3Rpb25IZWFkZXI6IGFueSA9IFsnZWlhIGRldGFpbHMnLCAnYWJoYSBkZXRhaWxzJywgJ3BlcCBkZXRhaWxzJ107XG4gIG1lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0VHlwZXM6IGFueSA9IFtcbiAgICB7XG4gICAgICBsYWJlbDogJ0NtJyxcbiAgICAgIHZhbHVlOiAnQ00nLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6ICdGZWV0JyxcbiAgICAgIHZhbHVlOiAnRkVFVCcsXG4gICAgfSxcbiAgXTtcbiAgc2hvd0Ryb3Bkb3duID0gZmFsc2U7XG4gIGFkZHJlc3NTdWdnZXN0aW9uczogYW55W10gPSBbXTtcbiAgaG92ZXJlZEluZGV4ID0gLTE7XG4gIHNlYXJjaFRpbWVvdXQ6IGFueTtcbiAgaG9yaXpvbnRhbExpbmVPYmo6IGFueSA9IHtcbiAgICBjb250cm9sU3R5bGU6IHtcbiAgICAgIGNvbnRyb2xUeXBlOiBudWxsLFxuICAgICAgYm9yZGVyQ29sb3I6IG51bGwsXG4gICAgICBib3JkZXJXaWR0aDogbnVsbCxcbiAgICAgIGJvcmRlclJhZGl1czogbnVsbCxcbiAgICAgIGZvbnRTaXplOiBudWxsLFxuICAgICAgZm9udFdlaWdodDogbnVsbCxcbiAgICAgIGZvbnRGYW1pbHk6IG51bGwsXG4gICAgICBjb2xvcjogbnVsbCxcbiAgICAgIGJhY2tncm91bmQ6IG51bGwsXG4gICAgICBjYXJldENvbG9yOiBudWxsLFxuICAgICAgbnVkZ2VEaXNwbGF5SW1hZ2U6IG51bGwsXG4gICAgICBkcm9wZG93bk9wdGlvbkJnQ29sb3I6IG51bGwsXG4gICAgICBkcm9wZG93bk9wdGlvbkNvbG9yOiBudWxsLFxuICAgICAgZHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiBudWxsLFxuICAgICAgd2lkdGg6IG51bGwsXG4gICAgICBmb2N1c0JvcmRlcldpZHRoOiBudWxsLFxuICAgICAgZm9jdXNCb3JkZXJDb2xvcjogbnVsbCxcbiAgICAgIGZvY3VzQmFja2dyb3VuZDogbnVsbCxcbiAgICAgIGZvY3VzQ29sb3I6IG51bGwsXG4gICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQmdDb2xvcjogbnVsbCxcbiAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Db2xvcjogbnVsbCxcbiAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiBudWxsLFxuICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlckxlZnQ6IG51bGwsXG4gICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyUmFkaXVzOiBudWxsLFxuICAgICAgaG92ZXJCb3JkZXJDb2xvcjogbnVsbCxcbiAgICAgIGhvdmVyQm9yZGVyV2lkdGg6IG51bGwsXG4gICAgICBob3ZlckNvbG9yOiBudWxsLFxuICAgICAgZGlzYWJsZUNvbG9yOiBudWxsLFxuICAgICAgZGlzYWJsZUJhY2tncm91bmQ6IG51bGwsXG4gICAgICBlcnJvckJvcmRlckNvbG9yOiBudWxsLFxuICAgICAgZXJyb3JCb3JkZXJXaWR0aDogbnVsbCxcbiAgICAgIGVycm9yQ29sb3I6IG51bGwsXG4gICAgICBjcmVhdGVkRGF0ZTogbnVsbCxcbiAgICAgIHBhZGRpbmc6IG51bGwsXG4gICAgICBtYXJnaW46IG51bGwsXG4gICAgICBpc01hc3RlckNzczogbnVsbCxcbiAgICAgIGNvbnRyb2xNZXRhSWQ6ICdMSV9DT01fR0VOX0NUUkxfaHJMaW5lX2hyTGluZV9WMScsXG4gICAgICBib3JkZXJTdHlsZTogJ3NvbGlkJyxcbiAgICAgIGhlaWdodDogbnVsbCxcbiAgICAgIG1pbkhlaWdodDogbnVsbCxcbiAgICAgIG1heEhlaWdodDogbnVsbCxcbiAgICAgIG1pbldpZHRoOiBudWxsLFxuICAgICAgbWF4V2lkdGg6IG51bGwsXG4gICAgICBjc3NDbGFzczogbnVsbCxcbiAgICB9LFxuICAgIGZpZWxkTmFtZTogJ2hyTGluZScsXG4gICAgbGFiZWw6ICdzb2xpZCBsaW5lJyxcbiAgICBwbGFjZUhvbGRlcjogbnVsbCxcbiAgICBtZXRhSWQ6ICdMSV9DT01fR0VOX0NUUkxfaHJMaW5lX2hyTGluZV9WMScsXG4gICAgaXNWaXNpYmxlOiB0cnVlLFxuICAgIGlzRGlzYWJsZTogZmFsc2UsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICAgIHZhbGlkYXRvcnM6IHtcbiAgICAgIGlzUmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgcmVxdWlyZWRNZXNzYWdlOiAnVGhpcyBmaWVsZCBjYW5ub3QgYmUgZW1wdHknLFxuICAgICAgbWluTGVuZ3RoOiBudWxsLFxuICAgICAgbWluTGVuZ3RoTWVzc2FnZTogbnVsbCxcbiAgICAgIG1heExlbmd0aDogbnVsbCxcbiAgICAgIG1heExlbmd0aE1lc3NhZ2U6IG51bGwsXG4gICAgICBwYXR0ZXJuOiBudWxsLFxuICAgICAgcGF0dGVybk1lc3NhZ2U6ICcnLFxuICAgIH0sXG4gICAgb3B0aW9uczogW10sXG4gICAgY3NzQ2xhc3M6ICdjb2wtMTInLFxuICAgIHZhbHVlOiBudWxsLFxuICAgIHN0eWxlOiBudWxsLFxuICAgIGltYWdlVXJsOiBudWxsLFxuICAgIGNvbmZpZ0RhdGE6IHtcbiAgICAgIGhyVGV4dDogJycsXG4gICAgfSxcbiAgICBtZXRhRGF0YU9iajogbnVsbCxcbiAgICBpc1Nob3dMYWJlbDogdHJ1ZSxcbiAgICBpc01hc3RlckNvbnRyb2w6IGZhbHNlLFxuICAgIGNvbnRyb2xUeXBlOiAnaHJMaW5lJyxcbiAgfTtcbiAgcHJldmlld0ZpbGU6IEZpbGUgfCBudWxsID0gbnVsbDtcblxuICAvLyBWYWxpZGF0aW9uIHN0YXRlIHRyYWNraW5nXG4gIGZpZWxkRXJyb3JzOiB7IFtrZXk6IHN0cmluZ106IHsgW2Vycm9yVHlwZTogc3RyaW5nXTogYm9vbGVhbiB9IH0gPSB7fTtcbiAgZmllbGRUb3VjaGVkOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbmdab25lOiBOZ1pvbmUsXG4gICAgcHVibGljIG1hc3RlclNlcnZpY2U6IE1hc3RlclNlcnZpY2UsXG4gICkge1xuICAgIGNvbnNvbGUubG9nKCdtZWRpYWxRdWVzdGlvblJlc3BvbnNlZWVlZWUnLCB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKSk7XG4gICAgY29uc29sZS5sb2coJ3BlcnNvbnR5cGUnLCB0aGlzLnBlcnNvblR5cGUoKSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy50cmlnZ2VyVmFsaWRhdGlvbikge1xuICAgICAgdGhpcy50cmlnZ2VyVmFsaWRhdGlvbi5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnZhbGlkYXRlTWVkaWNhbFF1ZXN0aW9ucyh0cnVlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoXG4gICAgICAoY2hhbmdlc1snbWVkaWFsUXVlc3Rpb25SZXNwb25zZSddICYmXG4gICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgY2hhbmdlc1snbWVkaWFsUXVlc3Rpb25SZXNwb25zZSddLmN1cnJlbnRWYWx1ZSxcbiAgICAgICAgKSkgfHxcbiAgICAgIChjaGFuZ2VzWydwcmVwYXJlUGVyc29uVXdRdWVzdGlvbnNPYmonXSAmJlxuICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgIGNoYW5nZXNbJ3ByZXBhcmVQZXJzb25Vd1F1ZXN0aW9uc09iaiddLmN1cnJlbnRWYWx1ZSxcbiAgICAgICAgKSlcbiAgICApIHtcbiAgICAgIGlmICgnZ2VvbG9jYXRpb24nIGluIG5hdmlnYXRvcikge1xuICAgICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKChwb3NpdGlvbikgPT4ge1xuICAgICAgICAgIHRoaXMubGF0aXR1ZGUgPSBwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGU7XG4gICAgICAgICAgdGhpcy5sb25naXR1ZGUgPSBwb3NpdGlvbi5jb29yZHMubG9uZ2l0dWRlO1xuICAgICAgICAgIHRoaXMuem9vbSA9IDE1O1xuICAgICAgICAgIHRoaXMuY3VycmVudENvb3JkaW5hdGVzID0ge1xuICAgICAgICAgICAgbGF0OiB0aGlzLmxhdGl0dWRlLFxuICAgICAgICAgICAgbG5nOiB0aGlzLmxvbmdpdHVkZSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuY2VudGVyID0geyAuLi50aGlzLmN1cnJlbnRDb29yZGluYXRlcyB9O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMucHJlcGFyZVBlcnNvblV3UXVlc3Rpb25zT2JqKCk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgY2hhbmdlc1snZGVmYXVsdFZhbHVlcyddICYmXG4gICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGNoYW5nZXNbJ2RlZmF1bHRWYWx1ZXMnXS5jdXJyZW50VmFsdWUpXG4gICAgKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuZGVmYXVsdFZhbHVlcygpID09PSAnb2JqZWN0Jykge1xuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2VycyA9IHtcbiAgICAgICAgICAuLi50aGlzLnBlcnNvblV3QW5zd2VycyxcbiAgICAgICAgICAuLi50aGlzLmRlZmF1bHRWYWx1ZXMoKSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVBdXRvY29tcGxldGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUhlaWdodFF1ZXN0aW9uSWRzKCk6IHZvaWQge1xuICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXSA9ICcnO1xuICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSA9ICcnO1xuICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSA9ICcnO1xuXG4gICAgLy8gdGhpcy5xdWVzdGlvbkxpc3QuZm9yRWFjaCgoc2VjdGlvbjogYW55KSA9PiB7XG4gICAgLy8gICBpZiAoc2VjdGlvbi5xdWVzdGlvbnMgJiYgQXJyYXkuaXNBcnJheShzZWN0aW9uLnF1ZXN0aW9ucykpIHtcbiAgICAvLyAgICAgc2VjdGlvbi5xdWVzdGlvbnMuZm9yRWFjaCgocXVlc3Rpb246IGFueSkgPT4ge1xuICAgIC8vICAgICAgIHN3aXRjaCAocXVlc3Rpb24uY2FtbXVuZGFRdWVzdGlvbkNvZGUpIHtcbiAgICAvLyAgICAgICAgIGNhc2UgJ1FIVCc6XG4gICAgLy8gICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXSA9IHF1ZXN0aW9uLnF1ZXN0aW9uSWQ7XG4gICAgLy8gICAgICAgICAgIGJyZWFrO1xuICAgIC8vICAgICAgICAgY2FzZSAnUUhURic6XG4gICAgLy8gICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSA9IHF1ZXN0aW9uLnF1ZXN0aW9uSWQ7XG4gICAgLy8gICAgICAgICAgIGJyZWFrO1xuICAgIC8vICAgICAgICAgY2FzZSAnUUhUSSc6XG4gICAgLy8gICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSA9IHF1ZXN0aW9uLnF1ZXN0aW9uSWQ7XG4gICAgLy8gICAgICAgICAgIGJyZWFrO1xuICAgIC8vICAgICAgIH1cbiAgICAvLyAgICAgfSk7XG4gICAgLy8gICB9XG4gICAgLy8gfSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVBdXRvY29tcGxldGUoKTogdm9pZCB7XG4gICAgdGhpcy5hdXRvY29tcGxldGUgPSBuZXcgZ29vZ2xlLm1hcHMucGxhY2VzLkF1dG9jb21wbGV0ZShcbiAgICAgIHRoaXMuYWRkcmVzc0lucHV0Py5uYXRpdmVFbGVtZW50LFxuICAgICAge1xuICAgICAgICB0eXBlczogWydhZGRyZXNzJ10sXG4gICAgICAgIGNvbXBvbmVudFJlc3RyaWN0aW9uczogeyBjb3VudHJ5OiAnSU4nIH0sXG4gICAgICAgIGZpZWxkczogWydwbGFjZV9pZCcsICdnZW9tZXRyeScsICduYW1lJywgJ2Zvcm1hdHRlZF9hZGRyZXNzJ10sXG4gICAgICB9LFxuICAgICk7XG5cbiAgICB0aGlzLmF1dG9jb21wbGV0ZS5hZGRMaXN0ZW5lcigncGxhY2VfY2hhbmdlZCcsICgpID0+IHtcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgIHRoaXMub25QbGFjZVNlbGVjdGVkKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb25QbGFjZVNlbGVjdGVkKCk6IHZvaWQge1xuICAgIGNvbnN0IHBsYWNlID0gdGhpcy5hdXRvY29tcGxldGUuZ2V0UGxhY2UoKTtcblxuICAgIGlmICghcGxhY2UuZ2VvbWV0cnkgfHwgIXBsYWNlLmdlb21ldHJ5LmxvY2F0aW9uKSB7XG4gICAgICBjb25zb2xlLmxvZygnTm8gZGV0YWlscyBhdmFpbGFibGUgZm9yIGlucHV0OiAnLCBwbGFjZS5uYW1lKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsb2NhdGlvbiA9IHBsYWNlLmdlb21ldHJ5LmxvY2F0aW9uO1xuICAgIHRoaXMuY2VudGVyID0ge1xuICAgICAgbGF0OiBsb2NhdGlvbi5sYXQoKSxcbiAgICAgIGxuZzogbG9jYXRpb24ubG5nKCksXG4gICAgfTtcbiAgICB0aGlzLmN1cnJlbnRDb29yZGluYXRlcyA9IHRoaXMuY2VudGVyO1xuXG4gICAgaWYgKHBsYWNlLmdlb21ldHJ5LnZpZXdwb3J0KSB7XG4gICAgICB0aGlzLnpvb20gPSAxNTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy56b29tID0gMTM7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ1NlbGVjdGVkIHBsYWNlOicsIHtcbiAgICAgIG5hbWU6IHBsYWNlLm5hbWUsXG4gICAgICBhZGRyZXNzOiBwbGFjZS5mb3JtYXR0ZWRfYWRkcmVzcyxcbiAgICAgIGNvb3JkaW5hdGVzOiB0aGlzLmNlbnRlcixcbiAgICB9KTtcblxuICAgIHRoaXMuc3RvcmVTZWxlY3RlZEFkZHJlc3MocGxhY2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9yZVNlbGVjdGVkQWRkcmVzcyhwbGFjZTogZ29vZ2xlLm1hcHMucGxhY2VzLlBsYWNlUmVzdWx0KTogdm9pZCB7XG4gICAgY29uc3QgYWRkcmVzc0RhdGEgPSB7XG4gICAgICBwbGFjZUlkOiBwbGFjZS5wbGFjZV9pZCxcbiAgICAgIG5hbWU6IHBsYWNlLm5hbWUsXG4gICAgICBmb3JtYXR0ZWRBZGRyZXNzOiBwbGFjZS5mb3JtYXR0ZWRfYWRkcmVzcyxcbiAgICAgIGNvb3JkaW5hdGVzOiB0aGlzLmNlbnRlcixcbiAgICB9O1xuICB9XG5cbiAgc2VhcmNoQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBnZW9jb2RlciA9IG5ldyBnb29nbGUubWFwcy5HZW9jb2RlcigpO1xuXG4gICAgZ2VvY29kZXIuZ2VvY29kZSh7IGFkZHJlc3M6IGFkZHJlc3MgfSwgKHJlc3VsdHMsIHN0YXR1cykgPT4ge1xuICAgICAgaWYgKHN0YXR1cyA9PT0gJ09LJyAmJiByZXN1bHRzICYmIHJlc3VsdHNbMF0pIHtcbiAgICAgICAgY29uc3QgbG9jYXRpb24gPSByZXN1bHRzWzBdLmdlb21ldHJ5LmxvY2F0aW9uO1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY2VudGVyID0ge1xuICAgICAgICAgICAgbGF0OiBsb2NhdGlvbi5sYXQoKSxcbiAgICAgICAgICAgIGxuZzogbG9jYXRpb24ubG5nKCksXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRDb29yZGluYXRlcyA9IHRoaXMuY2VudGVyO1xuICAgICAgICAgIHRoaXMuem9vbSA9IDE1O1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICdHZW9jb2RlIHdhcyBub3Qgc3VjY2Vzc2Z1bCBmb3IgdGhlIGZvbGxvd2luZyByZWFzb246ICcgKyBzdGF0dXMsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvbkFkZHJlc3NJbnB1dEtleXVwKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBxdWVyeSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcblxuICAgIC8vIENsZWFyIHByZXZpb3VzIHRpbWVvdXRcbiAgICBpZiAodGhpcy5zZWFyY2hUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hUaW1lb3V0KTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYXJyb3cga2V5IG5hdmlnYXRpb25cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgdGhpcy5ob3ZlcmVkSW5kZXggPSBNYXRoLm1pbihcbiAgICAgICAgdGhpcy5ob3ZlcmVkSW5kZXggKyAxLFxuICAgICAgICB0aGlzLmFkZHJlc3NTdWdnZXN0aW9ucy5sZW5ndGggLSAxLFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICB0aGlzLmhvdmVyZWRJbmRleCA9IE1hdGgubWF4KHRoaXMuaG92ZXJlZEluZGV4IC0gMSwgLTEpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaG92ZXJlZEluZGV4ID49IDAgJiZcbiAgICAgICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnNbdGhpcy5ob3ZlcmVkSW5kZXhdXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5zZWxlY3RBZGRyZXNzKHRoaXMuYWRkcmVzc1N1Z2dlc3Rpb25zW3RoaXMuaG92ZXJlZEluZGV4XSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICB0aGlzLnNob3dEcm9wZG93biA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChxdWVyeS5sZW5ndGggPCAyKSB7XG4gICAgICB0aGlzLmFkZHJlc3NTdWdnZXN0aW9ucyA9IFtdO1xuICAgICAgdGhpcy5zaG93RHJvcGRvd24gPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNlYXJjaFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2VhcmNoQWRkcmVzc2VzKHF1ZXJ5KTtcbiAgICB9LCAzMDApO1xuICB9XG5cbiAgc2VhcmNoQWRkcmVzc2VzKHF1ZXJ5OiBzdHJpbmcpIHtcbiAgICAvLyBSZXBsYWNlIHRoaXMgd2l0aCB5b3VyIGFjdHVhbCBhZGRyZXNzIHNlYXJjaCBBUEkgY2FsbFxuICAgIC8vIEZvciBleGFtcGxlLCB1c2luZyBHb29nbGUgUGxhY2VzIEFQSTpcblxuICAgIGNvbnN0IHNlcnZpY2UgPSBuZXcgZ29vZ2xlLm1hcHMucGxhY2VzLkF1dG9jb21wbGV0ZVNlcnZpY2UoKTtcbiAgICBzZXJ2aWNlLmdldFBsYWNlUHJlZGljdGlvbnMoXG4gICAgICB7XG4gICAgICAgIGlucHV0OiBxdWVyeSxcbiAgICAgICAgdHlwZXM6IFsnYWRkcmVzcyddLFxuICAgICAgfSxcbiAgICAgIChwcmVkaWN0aW9ucywgc3RhdHVzKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzdGF0dXMgPT09IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZXNTZXJ2aWNlU3RhdHVzLk9LICYmXG4gICAgICAgICAgcHJlZGljdGlvbnNcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnMgPSBwcmVkaWN0aW9ucy5tYXAoKHByZWRpY3Rpb24pID0+ICh7XG4gICAgICAgICAgICBwbGFjZV9pZDogcHJlZGljdGlvbi5wbGFjZV9pZCxcbiAgICAgICAgICAgIG1haW5fdGV4dDogcHJlZGljdGlvbi5zdHJ1Y3R1cmVkX2Zvcm1hdHRpbmcubWFpbl90ZXh0LFxuICAgICAgICAgICAgc2Vjb25kYXJ5X3RleHQ6IHByZWRpY3Rpb24uc3RydWN0dXJlZF9mb3JtYXR0aW5nLnNlY29uZGFyeV90ZXh0LFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHByZWRpY3Rpb24uZGVzY3JpcHRpb24sXG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmhvdmVyZWRJbmRleCA9IC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWRkcmVzc1N1Z2dlc3Rpb25zID0gW107XG4gICAgICAgICAgdGhpcy5zaG93RHJvcGRvd24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgc2VsZWN0QWRkcmVzcyhzdWdnZXN0aW9uOiBhbnkpIHtcbiAgICBjb25zdCBhZGRyZXNzSW5wdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJyNhZGRyZXNzSW5wdXQnLFxuICAgICkgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBpZiAoYWRkcmVzc0lucHV0KSB7XG4gICAgICBhZGRyZXNzSW5wdXQudmFsdWUgPSBzdWdnZXN0aW9uLmRlc2NyaXB0aW9uO1xuICAgIH1cblxuICAgIGNvbnN0IHNlcnZpY2UgPSBuZXcgZ29vZ2xlLm1hcHMucGxhY2VzLlBsYWNlc1NlcnZpY2UoXG4gICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSxcbiAgICApO1xuICAgIHNlcnZpY2UuZ2V0RGV0YWlscyhcbiAgICAgIHtcbiAgICAgICAgcGxhY2VJZDogc3VnZ2VzdGlvbi5wbGFjZV9pZCxcbiAgICAgICAgZmllbGRzOiBbJ2dlb21ldHJ5JywgJ2Zvcm1hdHRlZF9hZGRyZXNzJ10sXG4gICAgICB9LFxuICAgICAgKHBsYWNlLCBzdGF0dXMpID0+IHtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gZ29vZ2xlLm1hcHMucGxhY2VzLlBsYWNlc1NlcnZpY2VTdGF0dXMuT0sgJiYgcGxhY2UpIHtcbiAgICAgICAgICBjb25zdCBsYXQgPSBwbGFjZS5nZW9tZXRyeT8ubG9jYXRpb24/LmxhdCgpO1xuICAgICAgICAgIGNvbnN0IGxuZyA9IHBsYWNlLmdlb21ldHJ5Py5sb2NhdGlvbj8ubG5nKCk7XG5cbiAgICAgICAgICBpZiAobGF0ICE9PSB1bmRlZmluZWQgJiYgbG5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMubG9uZ2l0dWRlID0gbG5nO1xuICAgICAgICAgICAgdGhpcy5sYXRpdHVkZSA9IGxhdDtcblxuICAgICAgICAgICAgdGhpcy5jZW50ZXIgPSB7IGxhdCwgbG5nIH07XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDb29yZGluYXRlcyA9IHRoaXMuY2VudGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApO1xuXG4gICAgdGhpcy5zaG93RHJvcGRvd24gPSBmYWxzZTtcbiAgICB0aGlzLmFkZHJlc3NTdWdnZXN0aW9ucyA9IFtdO1xuICB9XG5cbiAgb25JbnB1dEJsdXIoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNob3dEcm9wZG93biA9IGZhbHNlO1xuICAgIH0sIDIwMCk7XG4gIH1cblxuICBmaW5kTWVkaWNhbFF1ZXN0aW9uc0luT3BlblF1b3RlKGFycmF5T2ZPYmo6IGFueSkge1xuICAgIGlmIChcbiAgICAgIGFycmF5T2ZPYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdNZWRpQ25kdG4nIHx8XG4gICAgICBhcnJheU9mT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnTGlmZU1lZGlDbmR0bidcbiAgICApIHtcbiAgICAgIHRoaXMuaXNNZWRpY2FsU3ViUXVlc3Rpb25zQXZhaWxhYmxlID0gYXJyYXlPZk9iajtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuaXNNZWRpY2FsU3ViUXVlc3Rpb25zQXZhaWxhYmxlKSAmJlxuICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShhcnJheU9mT2JqWydwZXJzb25VV0FjdGl2aXR5UmVzcG9uc2VFbnRpdHknXSlcbiAgICApIHtcbiAgICAgIGFycmF5T2ZPYmpbJ3BlcnNvblVXQWN0aXZpdHlSZXNwb25zZUVudGl0eSddLmZvckVhY2goXG4gICAgICAgIChzaW5nbGVTdWJBcnJheTogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5maW5kTWVkaWNhbFF1ZXN0aW9uc0luT3BlblF1b3RlKHNpbmdsZVN1YkFycmF5KTtcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgbWFwQW5zd2Vyc0Zvck9wZW5RdW90ZSgpIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpKSAmJlxuICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXSkgJiZcbiAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgIHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdPy5xdWVzdGlvbkxpc3QsXG4gICAgICApICYmXG4gICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICB0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXT8ucXVlc3Rpb25MaXN0WzBdXG4gICAgICAgICAgPy5wZXJzb25VV2RldGFpbHNMaXN0LFxuICAgICAgKVxuICAgICkge1xuICAgICAgbGV0IGFycmF5T2ZLZXlzOiBhbnkgPSBPYmplY3Qua2V5cyhcbiAgICAgICAgdGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF0/LnF1ZXN0aW9uTGlzdFswXVxuICAgICAgICAgID8ucGVyc29uVVdkZXRhaWxzTGlzdCxcbiAgICAgICk7XG4gICAgICBhcnJheU9mS2V5cy5mb3JFYWNoKChzaW5nbGVLZXk6IGFueSwgc2luZ2xlS2V5TGVuZ3RoOiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICB0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXVsncXVlc3Rpb25MaXN0J11bMF1bXG4gICAgICAgICAgICAgICdwZXJzb25VV2RldGFpbHNMaXN0J1xuICAgICAgICAgICAgXVtzaW5nbGVLZXldLFxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF1bJ3F1ZXN0aW9uTGlzdCddWzBdW1xuICAgICAgICAgICAgJ3BlcnNvblVXZGV0YWlsc0xpc3QnXG4gICAgICAgICAgXVtzaW5nbGVLZXldLmZvckVhY2goXG4gICAgICAgICAgICAoc2luZ2xlQW5zd2VyT2JqOiBhbnksIHNpbmdsZUFuc3dlck9iakxlbmd0aDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlUGVyc29uVXdBbnN3ZXJzKHNpbmdsZUFuc3dlck9iaik7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzaW5nbGVLZXlMZW5ndGggPT09IGFycmF5T2ZLZXlzLmxlbmd0aCAtIDEgJiZcbiAgICAgICAgICAgICAgICBzaW5nbGVBbnN3ZXJPYmpMZW5ndGggPT09XG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXVsncXVlc3Rpb25MaXN0J11bMF1bXG4gICAgICAgICAgICAgICAgICAgICdwZXJzb25VV2RldGFpbHNMaXN0J1xuICAgICAgICAgICAgICAgICAgXVtzaW5nbGVLZXldLmxlbmd0aCAtXG4gICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByZXBhcmVQZXJzb25Vd1F1ZXN0aW9uc09iaigpIHtcbiAgICB0aGlzLnF1ZXN0aW9uTGlzdCA9IFtdO1xuICAgIGxldCBkYXRhOiBhbnkgPSB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKTtcbiAgICB0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94ID0gW107XG5cbiAgICBsZXQgaXNEaXNhYmxlOiBhbnkgPSBmYWxzZTtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdpc0Rpc2FibGVNZWRpY2FsUXVlc3Rpb25zJyksXG4gICAgICApXG4gICAgKSB7XG4gICAgICBsZXQgaXNEaXNhYmxlTWVkaWNhbFF1ZXN0aW9uc2luVWk6IGFueSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXG4gICAgICAgICdpc0Rpc2FibGVNZWRpY2FsUXVlc3Rpb25zJyxcbiAgICAgICk7XG4gICAgICBpc0Rpc2FibGUgPSBKU09OLnBhcnNlKGlzRGlzYWJsZU1lZGljYWxRdWVzdGlvbnNpblVpKSA/IHRydWUgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddKSkge1xuICAgICAgbGV0IHBlcnNvblV3SWRBcnJheTogYW55ID0gW107XG4gICAgICBkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uT2JqOiBhbnkpID0+IHtcbiAgICAgICAgcGVyc29uVXdJZEFycmF5LnB1c2goc2luZ2xlUXVlc3Rpb25PYmpbJ3BlcnNvblVXSWQnXSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKFxuICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGRhdGEpICYmXG4gICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZGF0YVsncXVlc3Rpb25zUmVzcG9uc2UnXSlcbiAgICAgICkge1xuICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddKSkge1xuICAgICAgICAgIGxldCBkaXN0aW5jdFN0ZXBzOiBhbnkgPSBbXTtcbiAgICAgICAgICBkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddLmZvckVhY2goKHNpbmdsZVBlcnNvbk9iamVjdDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBlcnNvblV3SWQgPSBzaW5nbGVQZXJzb25PYmplY3RbJ3BlcnNvblVXSWQnXS50b1N0cmluZygpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUGVyc29uT2JqZWN0WydxdWVzdGlvbkxpc3QnXSkpIHtcbiAgICAgICAgICAgICAgc2luZ2xlUGVyc29uT2JqZWN0WydxdWVzdGlvbkxpc3QnXS5mb3JFYWNoKFxuICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoc2luZ2xlUXVlc3Rpb25bJ3RpdGxlJ10gPT09ICdNZWRpY2FsIERldGFpbHMnKSB7XG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblRleHQnXSA9IHNpbmdsZVF1ZXN0aW9uW1xuICAgICAgICAgICAgICAgICAgICAgICdxdWVzdGlvblRleHQnXG4gICAgICAgICAgICAgICAgICAgIF0ucmVwbGFjZSgvXFxcXG4vZywgJ1xcbicpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddID1cbiAgICAgICAgICAgICAgICAgICAgZGF0YVsnZG9tYWluVmFsdWVzJ11bc2luZ2xlUXVlc3Rpb25bJ2RvbWFpbk5hbWUnXV07XG5cbiAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydmaWVsZCddID0gdGhpcy5nZXRGaWVsZChzaW5nbGVRdWVzdGlvbik7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1BBTicpIHtcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3ZhbGlkYXRpb25zJ10gPVxuICAgICAgICAgICAgICAgICAgICAgICd7XCJUeXBlXCI6XCJBbHBoYU51bWVyaWNcIixcIk1pblZhbHVlXCI6XCIxMFwiLFwiTWF4VmFsdWVcIjpcIjEwXCIsXCJyZWdleFBhdHRlcm5cIjpcIi9eKFthLXpBLVpdKXs1fShbMC05XSl7NH0oW2EtekEtWl0pezF9PyQvXCJ9JztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIC8vIGlmIChzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ0Z0Y2FDbnRjRGV0bHMnKSB7XG4gICAgICAgICAgICAgICAgICAvLyAgIHNpbmdsZVF1ZXN0aW9uWyd2YWxpZGF0aW9ucyddID0gJ3tcImN1c3RvbVZhbGlkYXRpb25cIjpbe1wiY291bnRyeVwiOlwiSU5cIixcIk1pblZhbHVlXCI6XCIxMFwiLFwiTWF4VmFsdWVcIjpcIjEwXCIsXCJyZWdleFBhdHRlcm5cIjpcIigoXls2LTldKXsxfShbMC05XSl7OX0kKVwifSx7XCJjb3VudHJ5XCI6XCJPVEhFUlwiLFwiTWluVmFsdWVcIjpcIjVcIixcIk1heFZhbHVlXCI6XCIxNFwifV19JztcbiAgICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmXG4gICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXSxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10uZm9yRWFjaChcbiAgICAgICAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9iajogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dFF1ZXN0aW9uT2JqZWN0OiBhbnkgPSBzaW5nbGVQZXJzb25PYmplY3RbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdxdWVzdGlvbkxpc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICBdLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG9iamVjdDogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFsncXVlc3Rpb25JZCddID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmpbJ25leHRRdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRRdWVzdGlvbk9iamVjdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRRdWVzdGlvbk9iamVjdFswXVsnYW5zd2VyZWRWYWx1ZSddID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqWydwYXJlbnRRdWVzdGlvblZhbHVlJ107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvblsnZG9tYWluTmFtZSddKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhWydkb21haW5WYWx1ZXMnXVtzaW5nbGVRdWVzdGlvblsnZG9tYWluTmFtZSddXSxcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIGRhdGFbJ2RvbWFpblZhbHVlcyddW1xuICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2RvbWFpbk5hbWUnXVxuICAgICAgICAgICAgICAgICAgICAgIF0uZm9yRWFjaCgoc2luZ2xlRG9tYWluVmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94LnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoIWRpc3RpbmN0U3RlcHMuaW5jbHVkZXMoc2luZ2xlUXVlc3Rpb25bJ3N0ZXAnXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5wdXNoKHNpbmdsZVF1ZXN0aW9uWydzdGVwJ10pO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgc2luZ2xlUGVyc29uT2JqZWN0WydxdWVzdGlvbkxpc3QnXS5mb3JFYWNoKChxdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgcXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0lNQUdFIFRFWFQnKSB7XG4gICAgICAgICAgICAgICAgICBxdWVzdGlvblsncXVlc3Rpb25UZXh0J10gPSBxdWVzdGlvbltcbiAgICAgICAgICAgICAgICAgICAgJ3F1ZXN0aW9uVGV4dCdcbiAgICAgICAgICAgICAgICAgIF0ucmVwbGFjZUFsbCgnXFxcXG4nLCAnPGJyPicpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZGljYWxRdWVzdGlvbnNGZWV0TGlzdCA9IHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVEYnXSA9IHF1ZXN0aW9uO1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhURiddWydmaWVsZCddWydpc1Nob3dMYWJlbCddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFRGJ11bJ2ZpZWxkJ11bJ2NvbnRyb2xTdHlsZSddID0ge1xuICAgICAgICAgICAgICAgICAgICBjb250cm9sVHlwZTogJ3NlbGVjdCcsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMTZweCcsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6ICc0MDAnLFxuICAgICAgICAgICAgICAgICAgICBmb250RmFtaWx5OiAnTXVsaXNoJyxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJyNGRkZGRkYnLFxuICAgICAgICAgICAgICAgICAgICBjYXJldENvbG9yOiAnI2ZmYmIwMCcsXG4gICAgICAgICAgICAgICAgICAgIG51ZGdlRGlzcGxheUltYWdlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkJnQ29sb3I6ICcjRkZGRkZGJyxcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25Db2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6ICc0MDAnLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JhY2tncm91bmQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJnQ29sb3I6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Db2xvcjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJMZWZ0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyUmFkaXVzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBob3ZlckJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUNvbG9yOiAnI0VDRUNFQycsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVCYWNrZ3JvdW5kOiAnI0VDRUNFQycsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQm9yZGVyQ29sb3I6ICcjRUUwMDAwJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkRGF0ZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBpc01hc3RlckNzczogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbE1ldGFJZDpcbiAgICAgICAgICAgICAgICAgICAgICAnTElfQ09NX0dFTl9DVFJMX3NlbGVjdF9kb3dubG9hZERvY3VtZW50c19WMScsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclN0eWxlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUSScpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWNhbFF1ZXN0aW9uc0luY2hlc0xpc3QgPSBxdWVzdGlvblsnZG9tYWluVmFsdWVzJ107XG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFRJJ10gPSBxdWVzdGlvbjtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVEknXVsnZmllbGQnXVsnaXNTaG93TGFiZWwnXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhUSSddWydmaWVsZCddWydjb250cm9sU3R5bGUnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbFR5cGU6ICdzZWxlY3QnLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogJyNmZmZmZmYnLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogJzE2cHgnLFxuICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiAnNDAwJyxcbiAgICAgICAgICAgICAgICAgICAgZm9udEZhbWlseTogJ011bGlzaCcsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICcjRkZGRkZGJyxcbiAgICAgICAgICAgICAgICAgICAgY2FyZXRDb2xvcjogJyNmZmJiMDAnLFxuICAgICAgICAgICAgICAgICAgICBudWRnZURpc3BsYXlJbWFnZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25CZ0NvbG9yOiAnI0ZGRkZGRicsXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiAnNDAwJyxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCYWNrZ3JvdW5kOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0NvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25CZ0NvbG9yOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQ29sb3I6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyTGVmdDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlclJhZGl1czogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxuICAgICAgICAgICAgICAgICAgICBob3ZlckJvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICBob3ZlckNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVDb2xvcjogJyNFQ0VDRUMnLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQmFja2dyb3VuZDogJyNFQ0VDRUMnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckJvcmRlckNvbG9yOiAnI0VFMDAwMCcsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlZERhdGU6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgaXNNYXN0ZXJDc3M6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xNZXRhSWQ6XG4gICAgICAgICAgICAgICAgICAgICAgJ0xJX0NPTV9HRU5fQ1RSTF9zZWxlY3RfZG93bmxvYWREb2N1bWVudHNfVjEnLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJTdHlsZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBjc3NDbGFzczogbnVsbCxcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVCcpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWNhbFF1ZXN0aW9uc0luY2hlc0xpc3QgPSBxdWVzdGlvblsnZG9tYWluVmFsdWVzJ107XG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFQnXSA9IHF1ZXN0aW9uO1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhUJ11bJ2ZpZWxkJ11bJ2lzU2hvd0xhYmVsJ10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVCddWydmaWVsZCddWydjb250cm9sU3R5bGUnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbFR5cGU6ICdGUkVFVEVYVCcsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMTZweCcsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6ICc0MDAnLFxuICAgICAgICAgICAgICAgICAgICBmb250RmFtaWx5OiAnTXVsaXNoJyxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJyNGRkZGRkYnLFxuICAgICAgICAgICAgICAgICAgICBjYXJldENvbG9yOiAnI2ZmYmIwMCcsXG4gICAgICAgICAgICAgICAgICAgIG51ZGdlRGlzcGxheUltYWdlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkJnQ29sb3I6ICcjRkZGRkZGJyxcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25Db2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6ICc0MDAnLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JhY2tncm91bmQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJnQ29sb3I6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Db2xvcjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJMZWZ0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyUmFkaXVzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBob3ZlckJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUNvbG9yOiAnI0VDRUNFQycsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVCYWNrZ3JvdW5kOiAnI0VDRUNFQycsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQm9yZGVyQ29sb3I6ICcjRUUwMDAwJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkRGF0ZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBpc01hc3RlckNzczogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbE1ldGFJZDpcbiAgICAgICAgICAgICAgICAgICAgICAnTElfQ09NX0dFTl9DVFJMX3NlbGVjdF9kb3dubG9hZERvY3VtZW50c19WMScsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclN0eWxlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnREVDTEFSQVRJT04nKSB7XG4gICAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdyZWN2U2Z0Q29weScpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqZWN0Wydyb2xlJ11dW10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddID0gW107XG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICBkb21haW5JbnRlcm5hbFZhbHVlOiBxdWVzdGlvblsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgICAgICAgIGRvbWFpblVpVmFsdWU6ICdOJyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBxdWVzdGlvblsnZG9tYWluVmFsdWVzJ10gPSBbXTtcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZG9tYWluSW50ZXJuYWxWYWx1ZTogcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICAgICAgZG9tYWluVWlWYWx1ZTogJ1knLFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnaGFyZENvcHlMYW5nJykge1xuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID0gJ0hBUkQgQ09QWSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBzaW5nbGVQZXJzb25PYmplY3RbJ3F1ZXN0aW9uTGlzdCddLnNvcnQoXG4gICAgICAgICAgICAgICAgKGE6IGFueSwgYjogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgYVsnc3RlcCddIC0gYlsnc3RlcCddIHx8XG4gICAgICAgICAgICAgICAgICBhWydkaXNwbGF5T3JkZXInXSAtIGJbJ2Rpc3BsYXlPcmRlciddLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgcXVlc3Rpb25zTGlzdEZvckxBOiBhbnkgPSBbXTtcbiAgICAgICAgICAgIGRpc3RpbmN0U3RlcHMuZm9yRWFjaCgoc3RlcHM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBsZXQgZmlsdGVyZWRPYmo6IGFueSA9IHNpbmdsZVBlcnNvbk9iamVjdFsncXVlc3Rpb25MaXN0J10uZmlsdGVyKFxuICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsnc3RlcCddID09PSBzdGVwcyxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge1xuICAgICAgICAgICAgICAgIHN0ZXA6IHN0ZXBzLFxuICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVBlcnNvbk9iamVjdFsncGVyc29uVVdJZCddLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25zOiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkT2JqKVxuICAgICAgICAgICAgICAgICAgPyBmaWx0ZXJlZE9ialxuICAgICAgICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgICAgICAgICBzZWN0aW9uTmFtZTogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iailcbiAgICAgICAgICAgICAgICAgID8gZmlsdGVyZWRPYmpbMF1bJ3RpdGxlJ11cbiAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgaXNNZWRpY2FsU3ViUXVlc3Rpb246IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNob3dTZWN0aW9uOiB0cnVlLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iaikpIHtcbiAgICAgICAgICAgICAgICAvLyBIYXJkIENvcHkgYW5kIE1hcCBxdWVzdGlvblxuICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJlZEhhcmRDb3B5UXVlc3Rpb246IGFueSA9IGZpbHRlcmVkT2JqLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ3JlY3ZTZnRDb3B5JyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkSGFyZENvcHlRdWVzdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgIG9ialsncXVlc3Rpb25zJ10ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uVHlwZTogJ01BUCcsXG4gICAgICAgICAgICAgICAgICAgIGlzU2hvd1F1ZXN0aW9uSW5VSTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25SZWxhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uSWQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEhhcmRDb3B5UXVlc3Rpb25bMF1bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvbkFuc3dlcjogJ1knLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gaWYgTlJJIHRoZW4gcGFzc3BvcnQgdXBsb2FkIGlzIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkTmF0aW9uYWxpdHlRdWVzdGlvbjogYW55ID0gZmlsdGVyZWRPYmouZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnTmF0aW9uYWxpdHknLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWROYXRpb25hbGl0eVF1ZXN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgc2luZ2xlUGVyc29uT2JqZWN0WydxdWVzdGlvbkxpc3QnXS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25UeXBlOiAnUEFTU1BPUlRfVVBMT0FEJyxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxRdWVzdGlvbjogJ04nLFxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblRleHQ6ICdQYXNzcG9ydCBEZXRhaWxzICcsXG4gICAgICAgICAgICAgICAgICAgIGlzU2hvd1F1ZXN0aW9uSW5VSTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25SZWxhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uSWQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZE5hdGlvbmFsaXR5UXVlc3Rpb25bMF1bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvbkFuc3dlcjogJ2ZvcmduTmF0aW9uYWwnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICBvYmpbJ3F1ZXN0aW9ucyddLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblR5cGU6ICdQQVNTUE9SVF9VUExPQUQnLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25hbFF1ZXN0aW9uOiAnTicsXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uVGV4dDogJ1Bhc3Nwb3J0IERldGFpbHMgJyxcbiAgICAgICAgICAgICAgICAgICAgaXNTaG93UXVlc3Rpb25JblVJOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvblJlbGF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25JZDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkTmF0aW9uYWxpdHlRdWVzdGlvblswXVsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uQW5zd2VyOiAnZm9yZ25OYXRpb25hbCcsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcXVlc3Rpb25zTGlzdEZvckxBLnB1c2gob2JqKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gbGV0IGxpZmVBc3N1cmVkT2JqZWN0SW5kZXhJbk1hc3RlcjogYW55ID0gdGhpcy5xdWVzdGlvbkxpc3QuZmluZEluZGV4KChzaW5nbGVPYmo6IGFueSkgPT4gc2luZ2xlT2JqWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvbk9iamVjdFsncm9sZSddKTtcbiAgICAgICAgICAgIC8vIGlmIChsaWZlQXNzdXJlZE9iamVjdEluZGV4SW5NYXN0ZXIgIT09IHRoaXMubnVtYmVyTWludXNPbmUpIHtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25MaXN0ID0gcXVlc3Rpb25zTGlzdEZvckxBO1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZlSGVpZ2h0UXVlc3Rpb25JZHMoKTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmogPSBkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKSkgJiZcbiAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXSkgJiZcbiAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICB0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXT8ucXVlc3Rpb25MaXN0LFxuICAgICAgICApICYmXG4gICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgdGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF0/LnF1ZXN0aW9uTGlzdFswXVxuICAgICAgICAgICAgPy5wZXJzb25VV2RldGFpbHNMaXN0LFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgbGV0IGlzU3ViUXVlc3Rpb25FeGlzdHM6IGFueSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzTWVkaWNhbFN1YlF1ZXN0aW9uc0F2YWlsYWJsZSA9IG51bGw7XG4gICAgICAgIGxldCBhcnJheU9mS2V5czogYW55ID0gT2JqZWN0LmtleXMoXG4gICAgICAgICAgdGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF0/LnF1ZXN0aW9uTGlzdFswXVxuICAgICAgICAgICAgPy5wZXJzb25VV2RldGFpbHNMaXN0LFxuICAgICAgICApO1xuICAgICAgICBhcnJheU9mS2V5cy5mb3JFYWNoKChzaW5nbGVLZXk6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdWydxdWVzdGlvbkxpc3QnXVswXVtcbiAgICAgICAgICAgICAgICAncGVyc29uVVdkZXRhaWxzTGlzdCdcbiAgICAgICAgICAgICAgXVtzaW5nbGVLZXldLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF1bJ3F1ZXN0aW9uTGlzdCddWzBdW1xuICAgICAgICAgICAgICAncGVyc29uVVdkZXRhaWxzTGlzdCdcbiAgICAgICAgICAgIF1bc2luZ2xlS2V5XS5mb3JFYWNoKChzaW5nbGVBbnN3ZXJPYmo6IGFueSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmZpbmRNZWRpY2FsUXVlc3Rpb25zSW5PcGVuUXVvdGUoc2luZ2xlQW5zd2VyT2JqKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5pc01lZGljYWxTdWJRdWVzdGlvbnNBdmFpbGFibGUpKSB7XG4gICAgICAgICAgdGhpcy5tYXN0ZXJTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0U3ViUXVlc3Rpb25zKFxuICAgICAgICAgICAgICB0aGlzLmZpZWxkKCk/LmNvbmZpZ0RhdGEsXG4gICAgICAgICAgICAgIHRoaXMuaXNNZWRpY2FsU3ViUXVlc3Rpb25zQXZhaWxhYmxlWydhbnN3ZXInXSxcbiAgICAgICAgICAgICAgdGhpcy5pc01lZGljYWxTdWJRdWVzdGlvbnNBdmFpbGFibGVbJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgIChzdWJRdWVzdGlvblJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZGlzdGluY3RTdGVwczogYW55ID0gW107XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc3ViUXVlc3Rpb25SZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uUmVzcG9uc2UuZm9yRWFjaCgoc3ViUXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10gPVxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydkb21haW5WYWx1ZXMnXVtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydkb21haW5OYW1lJ11cbiAgICAgICAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydmaWVsZCddID0gdGhpcy5nZXRGaWVsZChzdWJRdWVzdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZGlzdGluY3RTdGVwcy5pbmNsdWRlcyhzdWJRdWVzdGlvblsnY2x1c3RlcklkJ10pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5wdXNoKHN1YlF1ZXN0aW9uWydjbHVzdGVySWQnXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblJlc3BvbnNlLnNvcnQoXG4gICAgICAgICAgICAgICAgICAgIChhOiBhbnksIGI6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICBhWydzdGVwJ10gLSBiWydzdGVwJ10gfHxcbiAgICAgICAgICAgICAgICAgICAgICBhWydkaXNwbGF5T3JkZXInXSAtIGJbJ2Rpc3BsYXlPcmRlciddLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGRpc3RpbmN0U3RlcHMuZm9yRWFjaCgoc3RlcHM6IGFueSwgaW5kOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkT2JqOiBhbnkgPSBzdWJRdWVzdGlvblJlc3BvbnNlLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydjbHVzdGVySWQnXSA9PT0gc3RlcHMsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGVwOiAxMDAwICsgaW5kLFxuICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uczogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iailcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZmlsdGVyZWRPYmpcbiAgICAgICAgICAgICAgICAgICAgICAgIDogW10sXG4gICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbk5hbWU6ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRPYmopXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkT2JqWzBdWyd0aXRsZSddXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgIGlzTWVkaWNhbFN1YlF1ZXN0aW9uOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgIHNob3dTZWN0aW9uOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTWVkaWNhbFN1YlF1ZXN0aW9uc0F2YWlsYWJsZVtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BlcnNvblVXSWQnXG4gICAgICAgICAgICAgICAgICAgICAgICBdLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8vIGxldCBMYUluZGV4OiBhbnkgPSB0aGlzLnBlcnNvblV3TWFzdGVyT2JqLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgLy8gICAoc2luZ2xlOiBhbnkpID0+IHNpbmdsZVsncm9sZSddID09PSBzaW5nbGVQZXJzb25bJ3JvbGUnXVxuICAgICAgICAgICAgICAgICAgICAvLyApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uTGlzdC5wdXNoKG9iaik7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlID0gc3ViUXVlc3Rpb25SZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgIC8vIGxldCBsYUluZGV4OiBhbnkgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZmluZEluZGV4KChzaW5nbGVQZXJzb25PYmo6IGFueSkgPT4gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvblsncm9sZSddKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydxdWVzdGlvbnNSZXNwb25zZSddWzBdW1xuICAgICAgICAgICAgICAgICAgICAncXVlc3Rpb25MaXN0J1xuICAgICAgICAgICAgICAgICAgXSA9IHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydxdWVzdGlvbnNSZXNwb25zZSddWzBdW1xuICAgICAgICAgICAgICAgICAgICAncXVlc3Rpb25MaXN0J1xuICAgICAgICAgICAgICAgICAgXS5jb25jYXQodGhpcy5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgICAgICB0aGlzLm1hcEFuc3dlcnNGb3JPcGVuUXVvdGUoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5tYXBBbnN3ZXJzRm9yT3BlblF1b3RlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm1hcEFuc3dlcnNGb3JPcGVuUXVvdGUoKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tYXBBbnN3ZXJzRm9yT3BlblF1b3RlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKCkuZm9yRWFjaCgoc2luZ2xlUGVyc29uOiBhbnkpID0+IHtcbiAgICAgICAgLy8gICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVQZXJzb25bJ3F1ZXN0aW9uTGlzdCddKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVBlcnNvblsncXVlc3Rpb25MaXN0J11bMF0pKSB7XG4gICAgICAgIC8vICAgICBsZXQgYXJyYXlPZktleXMgPSBPYmplY3Qua2V5cyhzaW5nbGVQZXJzb25bJ3F1ZXN0aW9uTGlzdCddWzBdWydwZXJzb25VV2RldGFpbHNMaXN0J10pO1xuICAgICAgICAvLyAgICAgaWYgKGFycmF5T2ZLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gICAgICAgYXJyYXlPZktleXMuZm9yRWFjaCgoc2luZ2xlS2V5KSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUGVyc29uWydxdWVzdGlvbkxpc3QnXVswXVsncGVyc29uVVdkZXRhaWxzTGlzdCddW3NpbmdsZUtleV0pKSB7XG4gICAgICAgIC8vICAgICAgICAgICBzaW5nbGVQZXJzb25bJ3F1ZXN0aW9uTGlzdCddWzBdWydwZXJzb25VV2RldGFpbHNMaXN0J11bc2luZ2xlS2V5XS5mb3JFYWNoKChhbnN3ZXJPYmo6IGFueSkgPT4ge1xuXG4gICAgICAgIC8vICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXSA9IGFuc3dlck9iai5hbnN3ZXI7XG5cbiAgICAgICAgLy8gICAgICAgICAgICAgbGV0IGZpbHRlcmVkUXVlc3Rpb246IGFueSA9IHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydxdWVzdGlvbnNSZXNwb25zZSddWzBdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gPT09IGFuc3dlck9ialsncXVlc3Rpb25JZCddKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvbikgJiYgZmlsdGVyZWRRdWVzdGlvblswXVsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAvLyB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmoucXVlc3Rpb25JZF0gPSBbXTtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAvLyBsZXQgbGlzdE9mT3B0aW9uc1NlbGVjdGVkIDogYW55ID0gYW5zd2VyT2JqLmFuc3dlci5zcGxpdCgnLCcpO1xuICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIGxpc3RPZk9wdGlvbnNTZWxlY3RlZC5mb3JFYWNoKChzaW5nbGVFbGVtZW50IDogYW55KSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb24pICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvblswXSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uWzBdWydkb21haW5WYWx1ZXMnXSkpIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgICAgbGV0IGZpbHRlcmVkRG9tYWluVmFsdWVPYmogOiBhbnkgPSBmaWx0ZXJlZFF1ZXN0aW9uWzBdWydkb21haW5WYWx1ZXMnXS5maWx0ZXIoKHNpbmdsZU9iaiA6IGFueSkgPT4gc2luZ2xlT2JqWydkb21haW5JbnRlcm5hbFZhbHVlJ10gPT09IHNpbmdsZUVsZW1lbnQpO1xuICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkRG9tYWluVmFsdWVPYmopKSB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyT2JqLnF1ZXN0aW9uSWRdLnB1c2goe1xuICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgICAgICAgbGFiZWwgOiBmaWx0ZXJlZERvbWFpblZhbHVlT2JqWzBdWydkb21haW5VaVZhbHVlJ10sXG4gICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICAgICAgICB2YWx1ZSA6IGZpbHRlcmVkRG9tYWluVmFsdWVPYmpbMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXVxuICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgICAgIH0pO1xuICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICB9XG4gICAgICAgIC8vICAgICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyT2JqLnF1ZXN0aW9uSWRdID0gYW5zd2VyT2JqLmFuc3dlci5zcGxpdCgnLCcpO1xuICAgICAgICAvLyAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXSA9IGFuc3dlck9iai5hbnN3ZXJcbiAgICAgICAgLy8gICAgICAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIChhbnN3ZXJPYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFQnKSB7XG4gICAgICAgIC8vICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddID0gYW5zd2VyT2JqWydhbnN3ZXInXTtcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBpZiAoYW5zd2VyT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicpIHtcbiAgICAgICAgLy8gICBsZXQgZmVldEFuc3dlciA9IGFuc3dlck9ialsnYW5zd2VyJ10uc3BsaXQoJy4nKTtcbiAgICAgICAgLy8gICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShhbnN3ZXJPYmpbJ2Fuc3dlciddKSAmJiBhbnN3ZXJPYmpbJ2Fuc3dlciddLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgICAgLy8gICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSA9IGZlZXRBbnN3ZXJbMF07XG4gICAgICAgIC8vICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10gPSBmZWV0QW5zd2VyWzFdO1xuICAgICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10gPSBmZWV0QW5zd2VyWzBdO1xuICAgICAgICAvLyAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddID0gJzAnO1xuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gfVxuICAgICAgICAvLyAgICAgICAgICAgICAvLyB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVsncXVlc3Rpb25MaXN0J10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25SZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgICAgIC8vICAgaWYgKHNpbmdsZVF1ZXN0aW9uUmVzcG9uc2VbJ3F1ZXN0aW9uSWQnXSA9PT0gYW5zd2VyT2JqWydxdWVzdGlvbklkJ10gJiYgc2luZ2xlUXVlc3Rpb25SZXNwb25zZVsncXVlc3Rpb25UeXBlJ10gPT09ICdERUNMQVJBVElPTicpIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgLy8gICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXSA9IGFuc3dlck9iai5hbnN3ZXI7XG4gICAgICAgIC8vICAgICAgICAgICAgIC8vICAgfVxuICAgICAgICAvLyAgICAgICAgICAgICAvLyB9KTtcbiAgICAgICAgLy8gICAgICAgICAgICAgLy8gbGV0IGxhSW5kZXg6IGFueSA9IHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSBzaW5nbGVQZXJzb25bJ3JvbGUnXSk7XG5cbiAgICAgICAgLy8gICAgICAgICAgICAgLy8gaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvbikgJiYgZmlsdGVyZWRRdWVzdGlvblswXVsncXVlc3Rpb25UeXBlJ10gPT09ICdERUNMQVJBVElPTicpIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgLy8gICB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmoucXVlc3Rpb25JZF0gPSBhbnN3ZXJPYmouYW5zd2VyO1xuICAgICAgICAvLyAgICAgICAgICAgICAvLyB9XG5cbiAgICAgICAgLy8gICAgICAgICAgICAgaWYgKGFuc3dlck9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ0xpZmVNZWRpQ25kdG4nIHx8IGFuc3dlck9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ01lZGlDbmR0bicpIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICBpc1N1YlF1ZXN0aW9uRXhpc3RzID0gdHJ1ZTtcblxuICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIFwidXJsUGFyYW1Gb3JEaXNlYXNlXCI6IFwibWRlaWNhbEhpc3RvcnlcIixcbiAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIFwiYXBpVXJsXCI6IFwiaHR0cHM6Ly9wcmVwcm9kLWRpcmVjdHBvcnRhbGxpZmUuZ29kaWdpdC5jb20vRGlyZWN0UG9ydGFsTGlmZS9saWZlL2ZldGNoU3ViUXVlc3Rpb25zXCIsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICBcInVybFBhcmFtRm9yUGVyc29uVXdJZFwiOiBcInBlcnNvblVXSURcIixcbiAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIFwidG9rZW5Db29raWVQYXJhbVwiOiBcInYzVG9rZW5cIixcbiAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIFwiaXNTZW5kVG9rZW5cIjogZmFsc2VcbiAgICAgICAgLy8gICAgICAgICAgICAgICAvLyB9XG4gICAgICAgIC8vICAgICAgICAgICAgICAgdGhpcy5tYXN0ZXJTZXJ2aWNlLmdldFN1YlF1ZXN0aW9ucyh0aGlzLmZpZWxkKCk/LmNvbmZpZ0RhdGEsIGFuc3dlck9ialsnYW5zd2VyJ10sIGFuc3dlck9ialsncGVyc29uVVdJZCddKS5zdWJzY3JpYmUoXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAoc3ViUXVlc3Rpb25SZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgIC8vIHRoaXMubG9hZGVyU2VydmljZS5kaXNwbGF5KGZhbHNlKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgbGV0IGRpc3RpbmN0U3RlcHM6IGFueSA9IFtdO1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzdWJRdWVzdGlvblJlc3BvbnNlKSkge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uUmVzcG9uc2UuZm9yRWFjaCgoc3ViUXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10gPSB0cnVlO1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gZmFsc2U7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXSkgJiZcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXSlcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddID0gW3N1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ11dO1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiZcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddKVxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9iajogYW55KSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5leHRRdWVzdGlvbk9iamVjdDogYW55ID0gc3ViUXVlc3Rpb25SZXNwb25zZS5maWx0ZXIoXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob2JqZWN0OiBhbnkpID0+IG9iamVjdFsncXVlc3Rpb25JZCddID09PSBzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqWyduZXh0UXVlc3Rpb25JZCddXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFF1ZXN0aW9uT2JqZWN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRRdWVzdGlvbk9iamVjdFswXVsnYW5zd2VyZWRWYWx1ZSddID0gc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9ialsncGFyZW50UXVlc3Rpb25WYWx1ZSddO1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10gPSB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsnZG9tYWluVmFsdWVzJ11bXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydkb21haW5OYW1lJ11cbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIF07XG5cbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydmaWVsZCddID0gdGhpcy5nZXRGaWVsZChzdWJRdWVzdGlvbik7XG5cbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHN1YlF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSkpIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIC8vICAgc3ViUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLmZvckVhY2goKHN1YkRvbWFpbjogYW55KSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5zdWJNZWRpY2FsUXVlc3Rpb25zRG9tYWluSW50ZXJuYWxWYWx1ZXNMaXN0LnB1c2goc3ViRG9tYWluWydkb21haW5JbnRlcm5hbFZhbHVlJ10pO1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgLy8gICB9KTtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGlmICghZGlzdGluY3RTdGVwcy5pbmNsdWRlcyhzdWJRdWVzdGlvblsnY2x1c3RlcklkJ10pKSB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0U3RlcHMucHVzaChzdWJRdWVzdGlvblsnY2x1c3RlcklkJ10pO1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uUmVzcG9uc2Uuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IGFbJ3N0ZXAnXSAtIGJbJ3N0ZXAnXSB8fCBhWydkaXNwbGF5T3JkZXInXSAtIGJbJ2Rpc3BsYXlPcmRlciddKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFN0ZXBzLmZvckVhY2goKHN0ZXBzOiBhbnksIGluZDogYW55KSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmlsdGVyZWRPYmo6IGFueSA9IHN1YlF1ZXN0aW9uUmVzcG9uc2UuZmlsdGVyKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsnY2x1c3RlcklkJ10gPT09IHN0ZXBzKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc3RlcDogMTAwMCArIGluZCxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25zOiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkT2JqKSA/IGZpbHRlcmVkT2JqIDogW10sXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25OYW1lOiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkT2JqKSA/IGZpbHRlcmVkT2JqWzBdWyd0aXRsZSddIDogJycsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIGlzTWVkaWNhbFN1YlF1ZXN0aW9uOiB0cnVlLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzaG93U2VjdGlvbjogdHJ1ZSxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDogYW5zd2VyT2JqWydwZXJzb25VV0lkJ10udG9TdHJpbmcoKSxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAvLyBsZXQgTGFJbmRleDogYW55ID0gdGhpcy5wZXJzb25Vd01hc3Rlck9iai5maW5kSW5kZXgoXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAvLyAgIChzaW5nbGU6IGFueSkgPT4gc2luZ2xlWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvblsncm9sZSddXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAvLyApO1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkxpc3QucHVzaChvYmopO1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UgPSBzdWJRdWVzdGlvblJlc3BvbnNlO1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIC8vIGxldCBsYUluZGV4OiBhbnkgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZmluZEluZGV4KChzaW5nbGVQZXJzb25PYmo6IGFueSkgPT4gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvblsncm9sZSddKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVsncXVlc3Rpb25MaXN0J10gPSB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVsncXVlc3Rpb25MaXN0J10uY29uY2F0KHRoaXMubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZGlzYWJsZUNvbmZpcm1hdGlvbkJ1dHRvbiA9IGZhbHNlO1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIChlcnI6IGFueSkgPT4ge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmRpc2FibGVDb25maXJtYXRpb25CdXR0b24gPSB0cnVlO1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmxvYWRlclNlcnZpY2UuZGlzcGxheShmYWxzZSk7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB9XG4gICAgICAgIC8vICAgICAgICAgICAgICAgKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgfVxuICAgICAgICAvLyAgICAgICAgICAgICAvLyBlbHNlIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgLy8gICB0aGlzLmxvYWRlclNlcnZpY2UuZGlzcGxheShmYWxzZSk7XG4gICAgICAgIC8vICAgICAgICAgICAgIC8vIH1cblxuICAgICAgICAvLyAgICAgICAgICAgICBpZiAodHlwZW9mIGFuc3dlck9iai5hbnN3ZXIgPT09ICdzdHJpbmcnICYmIGFuc3dlck9iai5hbnN3ZXIgIT09ICdZJyAmJiBhbnN3ZXJPYmouYW5zd2VyICE9PSAnTicpIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAvLyBpZiAoYW5zd2VyT2JqLmFuc3dlci5pbmNsdWRlcygnLCcpKSB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICBhbnN3ZXJPYmouYW5zd2VyLnNwbGl0KCcsJykuZm9yRWFjaCgoYW5zd2VyOiBhbnkpID0+IHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyXSA9IHRydWU7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICB9KTtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAvLyB9XG4gICAgICAgIC8vICAgICAgICAgICAgICAgLy8gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyT2JqLmFuc3dlcl0gPSB0cnVlO1xuICAgICAgICAvLyAgICAgICAgICAgICB9XG4gICAgICAgIC8vICAgICAgICAgICAgIHRoaXMuICB1cGRhdGVQZXJzb25Vd0Fuc3dlcnMoYW5zd2VyT2JqKTtcbiAgICAgICAgLy8gICAgICAgICAgIH0pO1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgICAgfSk7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XG5cbiAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydoZWlnaHRPYmplY3RUeXBlcyddID0ge1xuICAgICAgY29udHJvbFN0eWxlOiB7XG4gICAgICAgIGNvbnRyb2xUeXBlOiAnc2VsZWN0JyxcbiAgICAgICAgYm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgYm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgIGJvcmRlclJhZGl1czogbnVsbCxcbiAgICAgICAgZm9udFNpemU6ICcxNnB4JyxcbiAgICAgICAgZm9udFdlaWdodDogJzQwMCcsXG4gICAgICAgIGZvbnRGYW1pbHk6ICdNdWxpc2gnLFxuICAgICAgICBjb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICBiYWNrZ3JvdW5kOiAnI0ZGRkZGRicsXG4gICAgICAgIGNhcmV0Q29sb3I6ICcjZmZiYjAwJyxcbiAgICAgICAgbnVkZ2VEaXNwbGF5SW1hZ2U6IG51bGwsXG4gICAgICAgIGRyb3Bkb3duT3B0aW9uQmdDb2xvcjogJyNGRkZGRkYnLFxuICAgICAgICBkcm9wZG93bk9wdGlvbkNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgIGRyb3Bkb3duT3B0aW9uRm9udFdlaWdodDogJzQwMCcsXG4gICAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgICBmb2N1c0JvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICBmb2N1c0JvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgIGZvY3VzQmFja2dyb3VuZDogbnVsbCxcbiAgICAgICAgZm9jdXNDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQmdDb2xvcjogbnVsbCxcbiAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkNvbG9yOiBudWxsLFxuICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uRm9udFdlaWdodDogbnVsbCxcbiAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlckxlZnQ6IG51bGwsXG4gICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJSYWRpdXM6IG51bGwsXG4gICAgICAgIGhvdmVyQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgaG92ZXJCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgaG92ZXJDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICBkaXNhYmxlQ29sb3I6ICcjRUNFQ0VDJyxcbiAgICAgICAgZGlzYWJsZUJhY2tncm91bmQ6ICcjRUNFQ0VDJyxcbiAgICAgICAgZXJyb3JCb3JkZXJDb2xvcjogJyNFRTAwMDAnLFxuICAgICAgICBlcnJvckJvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICBlcnJvckNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgIGNyZWF0ZWREYXRlOiBudWxsLFxuICAgICAgICBwYWRkaW5nOiBudWxsLFxuICAgICAgICBtYXJnaW46IG51bGwsXG4gICAgICAgIGlzTWFzdGVyQ3NzOiBudWxsLFxuICAgICAgICBjb250cm9sTWV0YUlkOiAnTElfQ09NX0dFTl9DVFJMX3NlbGVjdF9kb3dubG9hZERvY3VtZW50c19WMScsXG4gICAgICAgIGJvcmRlclN0eWxlOiBudWxsLFxuICAgICAgICBoZWlnaHQ6IG51bGwsXG4gICAgICAgIG1pbkhlaWdodDogbnVsbCxcbiAgICAgICAgbWF4SGVpZ2h0OiBudWxsLFxuICAgICAgICBtaW5XaWR0aDogbnVsbCxcbiAgICAgICAgbWF4V2lkdGg6IG51bGwsXG4gICAgICAgIGNzc0NsYXNzOiBudWxsLFxuICAgICAgfSxcbiAgICAgIGZpZWxkTmFtZTogbnVsbCxcbiAgICAgIGxhYmVsOiAnZmVldCAvIGluY2hlcycsXG4gICAgICBwbGFjZUhvbGRlcjogJycsXG4gICAgICBtZXRhSWQ6ICcnLFxuICAgICAgaXNWaXNpYmxlOiB0cnVlLFxuICAgICAgaXNEaXNhYmxlOiBpc0Rpc2FibGUsXG4gICAgICB2YWxpZGF0b3JzOiB7XG4gICAgICAgIGlzUmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICByZXF1aXJlZE1lc3NhZ2U6ICdUaGlzIGZpZWxkIGNhbm5vdCBiZSBlbXB0eScsXG4gICAgICAgIG1pbkxlbmd0aDogbnVsbCxcbiAgICAgICAgbWluTGVuZ3RoTWVzc2FnZTogbnVsbCxcbiAgICAgICAgbWF4TGVuZ3RoOiAxNTAsXG4gICAgICAgIG1heExlbmd0aE1lc3NhZ2U6IG51bGwsXG4gICAgICAgIHBhdHRlcm46IG51bGwsXG4gICAgICAgIHBhdHRlcm5NZXNzYWdlOiAnJyxcbiAgICAgIH0sXG4gICAgICBvcHRpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0NtJyxcbiAgICAgICAgICB2YWx1ZTogJ0NNJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnRmVldCcsXG4gICAgICAgICAgdmFsdWU6ICdGRUVUJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBjc3NDbGFzczogbnVsbCxcbiAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgc3R5bGU6IG51bGwsXG4gICAgICBpbWFnZVVybDogbnVsbCxcbiAgICAgIGNvbmZpZ0RhdGE6IHt9LFxuICAgICAgbWV0YURhdGFPYmo6IG51bGwsXG4gICAgICBpc1Nob3dMYWJlbDogZmFsc2UsXG4gICAgICBpc01hc3RlckNvbnRyb2w6IGZhbHNlLFxuICAgICAgY29udHJvbFR5cGU6ICdzZWxlY3QnLFxuICAgIH07XG4gIH1cblxuICB1cGRhdGVQZXJzb25Vd0Fuc3dlcnMoYW5zd2VyT2JqOiBhbnkpIHtcbiAgICBpZiAoYW5zd2VyT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUJykge1xuICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddID0gYW5zd2VyT2JqWydhbnN3ZXInXTtcbiAgICB9XG4gICAgaWYgKGFuc3dlck9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnKSB7XG4gICAgICBsZXQgZmVldEFuc3dlciA9IGFuc3dlck9ialsnYW5zd2VyJ10uc3BsaXQoJy4nKTtcbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShhbnN3ZXJPYmpbJ2Fuc3dlciddKSAmJlxuICAgICAgICBhbnN3ZXJPYmpbJ2Fuc3dlciddLmluY2x1ZGVzKCcuJylcbiAgICAgICkge1xuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10gPSBmZWV0QW5zd2VyWzBdO1xuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10gPSBmZWV0QW5zd2VyWzFdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddID0gZmVldEFuc3dlclswXTtcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddID0gJzAnO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBmaWx0ZXJlZFF1ZXN0aW9uOiBhbnkgPSB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVtcbiAgICAgICdxdWVzdGlvbnNSZXNwb25zZSdcbiAgICBdWzBdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoXG4gICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT5cbiAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT0gYW5zd2VyT2JqWydxdWVzdGlvbklkJ10sXG4gICAgKTtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb24pICYmXG4gICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb25bMF0pXG4gICAgKSB7XG4gICAgICBpZiAoZmlsdGVyZWRRdWVzdGlvblswXVsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyT2JqLnF1ZXN0aW9uSWRdID1cbiAgICAgICAgICBhbnN3ZXJPYmouYW5zd2VyLnNwbGl0KCcsJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmoucXVlc3Rpb25JZF0gPSBhbnN3ZXJPYmouYW5zd2VyO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShhbnN3ZXJPYmoucGVyc29uVVdBY3Rpdml0eVJlc3BvbnNlRW50aXR5KSkge1xuICAgICAgYW5zd2VyT2JqLnBlcnNvblVXQWN0aXZpdHlSZXNwb25zZUVudGl0eS5mb3JFYWNoKChzdWJxdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlUGVyc29uVXdBbnN3ZXJzKHN1YnF1ZXN0aW9uKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zYXZlUXVlc3Rpb25EZXRhaWxzKCk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVGaWVsZChxdWVzdGlvbklkOiBzdHJpbmcsIHF1ZXN0aW9uOiBhbnkpIHtcbiAgICB0aGlzLmZpZWxkVG91Y2hlZFtxdWVzdGlvbklkXSA9IHRydWU7XG5cbiAgICBjb25zdCB2YWxpZGF0b3JzID0gdGhpcy5nZXRGaWVsZChxdWVzdGlvbik/LnZhbGlkYXRvcnM7XG4gICAgbGV0IHZhbHVlO1xuICAgIGlmICh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSAhPT0gJ0ZFRVQnKSB7XG4gICAgICB2YWx1ZSA9IHRoaXMucGVyc29uVXdBbnN3ZXJzLm1lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSB0aGlzLnBlcnNvblV3QW5zd2Vyc1txdWVzdGlvbklkXTtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIGVycm9ycyBvYmplY3QgZm9yIHRoaXMgZmllbGRcbiAgICB0aGlzLmZpZWxkRXJyb3JzW3F1ZXN0aW9uSWRdID0ge307XG5cbiAgICAvLyBSZXF1aXJlZCB2YWxpZGF0aW9uXG4gICAgaWYgKFxuICAgICAgcXVlc3Rpb24ucXVlc3Rpb25UeXBlID09PSAnQ0hFQ0tCT1gnICYmXG4gICAgICB2YWxpZGF0b3JzPy5pc1JlcXVpcmVkICYmXG4gICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodmFsdWVbMF0pXG4gICAgKSB7XG4gICAgICB0aGlzLmZpZWxkRXJyb3JzW3F1ZXN0aW9uSWRdWydyZXF1aXJlZCddID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdmFsaWRhdG9ycz8uaXNSZXF1aXJlZCAmJlxuICAgICAgKHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh2YWx1ZSkgfHwgdmFsdWUgPT09IDAuMClcbiAgICApIHtcbiAgICAgIHRoaXMuZmllbGRFcnJvcnNbcXVlc3Rpb25JZF1bJ3JlcXVpcmVkJ10gPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIFNraXAgb3RoZXIgdmFsaWRhdGlvbnMgaWYgdmFsdWUgaXMgZW1wdHlcbiAgICBpZiAodGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgLy8gVHlwZSB2YWxpZGF0aW9uIGZyb20gSlNPTiAoTnVtZXJpYywgQWxwaGFOdW1lcmljKVxuICAgIGlmICh2YWxpZGF0b3JzPy5wYXR0ZXJuKSB7XG4gICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAodmFsaWRhdG9ycy5wYXR0ZXJuKTtcbiAgICAgIGlmICghcmVnZXgudGVzdCh2YWx1ZS50b1N0cmluZygpKSkge1xuICAgICAgICB0aGlzLmZpZWxkRXJyb3JzW3F1ZXN0aW9uSWRdWyd0eXBlJ10gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1pblZhbHVlIHZhbGlkYXRpb24gZnJvbSBKU09OXG4gICAgaWYgKHZhbGlkYXRvcnM/Lm1pbkxlbmd0aCAmJiB2YWxpZGF0b3JzLm1heExlbmd0aCAmJiB2YWx1ZSkge1xuICAgICAgY29uc3QgbWluVmFsID0gdmFsaWRhdG9ycy5taW5MZW5ndGg7XG4gICAgICBjb25zdCBtYXhWYWwgPSB2YWxpZGF0b3JzLm1heExlbmd0aDtcbiAgICAgIGlmICh2YWxpZGF0b3JzLnBhdHRlcm4gPT0gJ15bMC05XSskJykge1xuICAgICAgICAvLyBGb3IgbnVtZXJpYywgY29tcGFyZSBhcyBudW1iZXJzXG4gICAgICAgIGlmIChwYXJzZUludCh2YWx1ZSkgPCBtaW5WYWwgfHwgcGFyc2VJbnQodmFsdWUpID4gbWF4VmFsKSB7XG4gICAgICAgICAgdGhpcy5maWVsZEVycm9yc1txdWVzdGlvbklkXVsncmFuZ2UnXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZvciBvdGhlciB0eXBlcywgY29tcGFyZSBzdHJpbmcgbGVuZ3RoXG4gICAgICAgIGlmIChcbiAgICAgICAgICB2YWx1ZS50b1N0cmluZygpLmxlbmd0aCA8IG1pblZhbCB8fFxuICAgICAgICAgIHZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoID4gbWF4VmFsXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuZmllbGRFcnJvcnNbcXVlc3Rpb25JZF1bJ3JhbmdlJ10gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coXG4gICAgICAnVmFsaWRhdGlvbiBlcnJvcnMgZm9yJyxcbiAgICAgIHF1ZXN0aW9uSWQsXG4gICAgICB0aGlzLmZpZWxkRXJyb3JzW3F1ZXN0aW9uSWRdLFxuICAgICk7XG4gIH1cblxuICBoYXNBbnlGaWVsZEVycm9yKHF1ZXN0aW9uSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmZpZWxkVG91Y2hlZFtxdWVzdGlvbklkXSAmJlxuICAgICAgdGhpcy5maWVsZEVycm9yc1txdWVzdGlvbklkXSAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5maWVsZEVycm9yc1txdWVzdGlvbklkXSkubGVuZ3RoID4gMFxuICAgICk7XG4gIH1cblxuICBnZXRGaWVsZEVycm9yTWVzc2FnZShxdWVzdGlvbklkOiBzdHJpbmcsIHF1ZXN0aW9uOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5maWVsZFRvdWNoZWRbcXVlc3Rpb25JZF0gfHwgIXRoaXMuZmllbGRFcnJvcnNbcXVlc3Rpb25JZF0pXG4gICAgICByZXR1cm4gJyc7XG5cbiAgICBpZiAodGhpcy5maWVsZEVycm9yc1txdWVzdGlvbklkXSkge1xuICAgICAgY29uc3QgZXJyb3JzID0gdGhpcy5maWVsZEVycm9yc1txdWVzdGlvbklkXTtcbiAgICAgIGNvbnN0IHZhbGlkYXRvcnMgPSBxdWVzdGlvbj8uZmllbGQ/LnZhbGlkYXRvcnM7XG5cbiAgICAgIGlmIChlcnJvcnNbJ3JlcXVpcmVkJ10pIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHF1ZXN0aW9uPy5maWVsZD8uY29udHJvbFR5cGUgPT09ICdyYWRpbycgfHxcbiAgICAgICAgICBxdWVzdGlvbj8uZmllbGQ/LmNvbnRyb2xUeXBlID09PSAnY2hlY2tib3gnXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiB2YWxpZGF0b3JzPy5yZXF1aXJlZE1lc3NhZ2UgfHwgYFBsZWFzZSBzZWxlY3QgYW55IG9uZSBvcHRpb25gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNsZWFuVGV4dCA9XG4gICAgICAgICAgcXVlc3Rpb24/LnF1ZXN0aW9uVGV4dD8ucmVwbGFjZSgvXFwoZnRcXCl8XFwoa2dcXCkvZ2ksICcnKS50cmltKCkgfHxcbiAgICAgICAgICAndGhpcyBmaWVsZCc7XG4gICAgICAgIHJldHVybiB2YWxpZGF0b3JzPy5yZXF1aXJlZE1lc3NhZ2UgfHwgYFBsZWFzZSBlbnRlciAke2NsZWFuVGV4dH1gO1xuICAgICAgfVxuICAgICAgaWYgKGVycm9yc1sndHlwZSddKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0b3JzPy5wYXR0ZXJuTWVzc2FnZSB8fCAnSW52YWxpZCBpbnB1dCB0eXBlJztcbiAgICAgIH1cbiAgICAgIGlmIChlcnJvcnNbJ3JhbmdlJ10pIHtcbiAgICAgICAgY29uc3QgY2xlYW5UZXh0ID1cbiAgICAgICAgICBxdWVzdGlvbj8ucXVlc3Rpb25UZXh0Py5yZXBsYWNlKC9cXChmdFxcKXxcXChrZ1xcKS9naSwgJycpLnRyaW0oKSB8fFxuICAgICAgICAgICd2YWx1ZSc7XG4gICAgICAgIHJldHVybiBgUGxlYXNlIGVudGVyIGEgdmFsaWQgJHtjbGVhblRleHR9YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjaGVja0lmVmFsdWVJc0VtcHR5KHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50cmltKCk7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB2YWx1ZSA9PT0gbnVsbCB8fFxuICAgICAgdmFsdWUgPT09ICcnIHx8XG4gICAgICAodmFsdWUgaW5zdGFuY2VvZiBBcnJheSAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHx8XG4gICAgICBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgPT09ICd7fSdcbiAgICApO1xuICB9XG5cbiAgZ2V0VGl0bGVDYXNlKGhlYWRlcjogYW55KTogYW55IHtcbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBpZiAodGhpcy5xdWVzdGlvbkhlYWRlci5pbmNsdWRlcyhoZWFkZXIudG9Mb2NhbGVMb3dlckNhc2UoKSkpIHtcbiAgICAgICAgbGV0IHZhbCA9IGhlYWRlci5zcGxpdCgnICcpO1xuICAgICAgICByZXR1cm4gdmFsWzBdLnRvVXBwZXJDYXNlKCkgKyAnICcgKyB0aGlzLnRvVGl0bGVDYXNlKHZhbFsxXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaGVhZGVyLnRvVXBwZXJDYXNlKCkgPT09ICdGQVRDQSBERVRBSUxTJykge1xuICAgICAgICAgIHJldHVybiBoZWFkZXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudG9UaXRsZUNhc2UoaGVhZGVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0b1RpdGxlQ2FzZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgLnJlcGxhY2UoXG4gICAgICAgICAgL1xcd1xcUyovZyxcbiAgICAgICAgICAodHh0OiBhbnkpID0+IHR4dFswXS50b1VwcGVyQ2FzZSgpICsgdHh0LnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGdldEZpZWxkKHF1ZXN0aW9uT2JqOiBhbnkpIHtcbiAgICBsZXQgb3B0aW9uc09iajogYW55ID0gW107XG4gICAgbGV0IGNvbnRyb2xTdHlsZTogYW55ID0ge307XG4gICAgaWYgKHF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkge1xuICAgICAgcXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddLmZvckVhY2goKHNpbmdsZU9wdGlvblZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgb3B0aW9uc09iai5wdXNoKHtcbiAgICAgICAgICBsYWJlbDogc2luZ2xlT3B0aW9uVmFsdWVbJ2RvbWFpblVpVmFsdWUnXSxcbiAgICAgICAgICB2YWx1ZTogc2luZ2xlT3B0aW9uVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgbGV0IGlzRGlzYWJsZTogYW55ID0gZmFsc2U7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaXNEaXNhYmxlTWVkaWNhbFF1ZXN0aW9ucycpLFxuICAgICAgKVxuICAgICkge1xuICAgICAgbGV0IGlzRGlzYWJsZU1lZGljYWxRdWVzdGlvbnNpblVpOiBhbnkgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFxuICAgICAgICAnaXNEaXNhYmxlTWVkaWNhbFF1ZXN0aW9ucycsXG4gICAgICApO1xuICAgICAgaXNEaXNhYmxlID0gSlNPTi5wYXJzZShpc0Rpc2FibGVNZWRpY2FsUXVlc3Rpb25zaW5VaSkgPyB0cnVlIDogZmFsc2U7XG4gICAgfVxuICAgIGxldCBtaW5MZW5ndGg6IGFueSA9IG51bGw7XG4gICAgbGV0IG1heExlbmd0aDogYW55ID0gMjAwO1xuICAgIGxldCBwYXR0ZXJuOiBhbnkgPSBudWxsO1xuICAgIGxldCBwYXR0ZXJuTWVzc2FnZTogYW55ID0gbnVsbDtcbiAgICBsZXQgY29uZmlnRGF0YTogYW55ID0gIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLmZpZWxkKCk/LmNvbmZpZ0RhdGEpXG4gICAgICA/IHRoaXMuZmllbGQoKT8uY29uZmlnRGF0YVxuICAgICAgOiB7fTtcblxuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHF1ZXN0aW9uT2JqWydjb25maWdEYXRhJ10pKSB7XG4gICAgICBjb25maWdEYXRhID0geyAuLi5jb25maWdEYXRhLCAuLi5xdWVzdGlvbk9ialsnY29uZmlnRGF0YSddIH07XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnUkFESU8gQlVUVE9OJyB8fFxuICAgICAgcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnQURETU9SRSdcbiAgICApIHtcbiAgICAgIGNvbnRyb2xTdHlsZSA9IHtcbiAgICAgICAgY29udHJvbFR5cGU6ICdyYWRpbycsXG4gICAgICAgIGJvcmRlckNvbG9yOiAnI0RBREFEQScsXG4gICAgICAgIGJvcmRlcldpZHRoOiAnMXB4JyxcbiAgICAgICAgYm9yZGVyUmFkaXVzOiBudWxsLFxuICAgICAgICBmb250U2l6ZTogJzEycHgnLFxuICAgICAgICBmb250V2VpZ2h0OiAnNDAwJyxcbiAgICAgICAgZm9udEZhbWlseTogJ011bGlzaCcsXG4gICAgICAgIGNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgIGJhY2tncm91bmQ6ICcjRkZGRkZGJyxcbiAgICAgICAgY2FyZXRDb2xvcjogbnVsbCxcbiAgICAgICAgbnVkZ2VEaXNwbGF5SW1hZ2U6IG51bGwsXG4gICAgICAgIGRyb3Bkb3duT3B0aW9uQmdDb2xvcjogbnVsbCxcbiAgICAgICAgZHJvcGRvd25PcHRpb25Db2xvcjogbnVsbCxcbiAgICAgICAgZHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiBudWxsLFxuICAgICAgICB3aWR0aDogbnVsbCxcbiAgICAgICAgZm9jdXNCb3JkZXJXaWR0aDogJzFweCcsXG4gICAgICAgIGZvY3VzQm9yZGVyQ29sb3I6ICcjZmZiYjAwJyxcbiAgICAgICAgZm9jdXNCYWNrZ3JvdW5kOiBudWxsLFxuICAgICAgICBmb2N1c0NvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25CZ0NvbG9yOiBudWxsLFxuICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQ29sb3I6IG51bGwsXG4gICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiBudWxsLFxuICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyTGVmdDogbnVsbCxcbiAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlclJhZGl1czogbnVsbCxcbiAgICAgICAgaG92ZXJCb3JkZXJDb2xvcjogJyNEQURBREEnLFxuICAgICAgICBob3ZlckJvcmRlcldpZHRoOiAnMXB4JyxcbiAgICAgICAgaG92ZXJDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICBkaXNhYmxlQ29sb3I6ICcjRUNFQ0VDJyxcbiAgICAgICAgZGlzYWJsZUJhY2tncm91bmQ6ICcjRUNFQ0VDJyxcbiAgICAgICAgZXJyb3JCb3JkZXJDb2xvcjogJyNEQURBREEnLFxuICAgICAgICBlcnJvckJvcmRlcldpZHRoOiAnMXB4JyxcbiAgICAgICAgZXJyb3JDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICBjcmVhdGVkRGF0ZTogbnVsbCxcbiAgICAgICAgcGFkZGluZzogbnVsbCxcbiAgICAgICAgbWFyZ2luOiBudWxsLFxuICAgICAgICBpc01hc3RlckNzczogbnVsbCxcbiAgICAgICAgY29udHJvbE1ldGFJZDogJ0FMTF9DT01fR0VOX0NUUkxfcmFkaW9fbm9taW5lZUdlbmRlcl9WMScsXG4gICAgICAgIGJvcmRlclN0eWxlOiBudWxsLFxuICAgICAgICBoZWlnaHQ6IG51bGwsXG4gICAgICAgIG1pbkhlaWdodDogbnVsbCxcbiAgICAgICAgbWF4SGVpZ2h0OiBudWxsLFxuICAgICAgICBtaW5XaWR0aDogbnVsbCxcbiAgICAgICAgbWF4V2lkdGg6IG51bGwsXG4gICAgICAgIGNzc0NsYXNzOiBudWxsLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkocXVlc3Rpb25PYmpbJ3ZhbGlkYXRpb25zJ10pKSB7XG4gICAgICBsZXQgdmFsaWRhdGlvbk9iajogYW55ID0gSlNPTi5wYXJzZShxdWVzdGlvbk9ialsndmFsaWRhdGlvbnMnXSk7XG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh2YWxpZGF0aW9uT2JqWydNaW5WYWx1ZSddKSkge1xuICAgICAgICBtaW5MZW5ndGggPSB2YWxpZGF0aW9uT2JqWydNaW5WYWx1ZSddO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodmFsaWRhdGlvbk9ialsnTWF4VmFsdWUnXSkpIHtcbiAgICAgICAgbWF4TGVuZ3RoID0gdmFsaWRhdGlvbk9ialsnTWF4VmFsdWUnXTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHZhbGlkYXRpb25PYmpbJ1R5cGUnXSkpIHtcbiAgICAgICAgaWYgKHZhbGlkYXRpb25PYmpbJ1R5cGUnXSA9PT0gJ051bWVyaWMnKSB7XG4gICAgICAgICAgcGF0dGVybiA9ICdeWzAtOV0rJCc7XG4gICAgICAgICAgcGF0dGVybk1lc3NhZ2UgPSAnT25seSBudW1iZXJzIGFyZSBhbGxvd2VkLic7XG4gICAgICAgICAgY29uZmlnRGF0YVsnaXNBbGxvd051bWJlcnNJblRleHRGaWVsZHMnXSA9IHRydWU7XG4gICAgICAgICAgbWF4TGVuZ3RoID0gJzknLnJlcGVhdChOdW1iZXIobWF4TGVuZ3RoKSk7XG4gICAgICAgICAgY29uZmlnRGF0YVsnbWF4VmFsdWUnXSA9IG1heExlbmd0aDtcbiAgICAgICAgICBjb25maWdEYXRhWydtaW5WYWx1ZSddID0gMDtcbiAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uT2JqWydUeXBlJ10gPT09ICdBbHBoYU51bWVyaWMnKSB7XG4gICAgICAgICAgcGF0dGVybiA9ICdeW2EtekEtWjAtOVxcXFxzXSskJztcbiAgICAgICAgICBwYXR0ZXJuTWVzc2FnZSA9ICdPbmx5IGxldHRlcnMgYW5kIG51bWJlcnMgYXJlIGFsbG93ZWQuJztcbiAgICAgICAgICBjb25maWdEYXRhWydpc0FsbG93TnVtYmVyc0luVGV4dEZpZWxkcyddID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGF0dGVybiA9IG51bGw7XG4gICAgICAgICAgcGF0dGVybk1lc3NhZ2UgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZ0RhdGE6IGNvbmZpZ0RhdGEsXG4gICAgICBjb250cm9sU3R5bGU6IGNvbnRyb2xTdHlsZSxcbiAgICAgIGNvbnRyb2xUeXBlOlxuICAgICAgICBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdGUkVFIFRFWFQnXG4gICAgICAgICAgPyAndGV4dCdcbiAgICAgICAgICA6IHF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ1JBRElPIEJVVFRPTicgfHxcbiAgICAgICAgICAgICAgcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnQURETU9SRSdcbiAgICAgICAgICAgID8gJ3JhZGlvJ1xuICAgICAgICAgICAgOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgfHxcbiAgICAgICAgICAgICAgICBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdERUNMQVJBVElPTidcbiAgICAgICAgICAgICAgPyAnY2hlY2tib3gnXG4gICAgICAgICAgICAgIDogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInXG4gICAgICAgICAgICAgICAgPyAnZGF0ZSdcbiAgICAgICAgICAgICAgICA6IHF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0RST1BET1dOJ1xuICAgICAgICAgICAgICAgICAgPyAnc2VsZWN0J1xuICAgICAgICAgICAgICAgICAgOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdET0NVUExPQUQnXG4gICAgICAgICAgICAgICAgICAgID8gJ2ZpbGUnXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICBmaWVsZE5hbWU6IHF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ10sXG4gICAgICBpc0Rpc2FibGUsXG4gICAgICBsYWJlbDogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVGV4dCddLFxuICAgICAgcGxhY2VIb2xkZXI6IHF1ZXN0aW9uT2JqWydxdWVzdGlvblRleHQnXSxcbiAgICAgIHZhbGlkYXRvcnM6IHtcbiAgICAgICAgaXNSZXF1aXJlZDogcXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSA9PT0gJ04nID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICBtaW5MZW5ndGgsXG4gICAgICAgIG1heExlbmd0aCxcbiAgICAgICAgcGF0dGVybixcbiAgICAgICAgcGF0dGVybk1lc3NhZ2UsXG4gICAgICB9LFxuICAgICAgY3NzQ2xhc3M6ICdtYi0yJyxcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnNPYmosXG4gICAgICBpc1Nob3dMYWJlbDogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgcmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMocXVlc3Rpb24/OiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZygnc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzJywgdGhpcy5xdWVzdGlvbkxpc3QpO1xuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucXVlc3Rpb25MaXN0KSkge1xuICAgICAgdGhpcy5xdWVzdGlvbkxpc3QuZm9yRWFjaCgoc2luZ2xlU2VjdGlvbjogYW55KSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddKSkge1xuICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5zaG93UXVlc3Rpb24oc2luZ2xlUXVlc3Rpb24pKSB7XG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IGZhbHNlO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIERpc2FibGUgdGhlIHF1ZXN0aW9uIGlmIGl0IGhhcyBhIGRlZmF1bHQgdmFsdWVcbiAgICAgICAgICAgIGxldCBpc0VuYWJsZURlZmF1bHRRdWVzdGlvbnM6IGFueSA9IHRoaXMuZGVmYXVsdFZhbHVlcygpW1xuICAgICAgICAgICAgICAnaXNFbmFibGVEZWZhdWx0UXVlc3Rpb25zJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uSWQgPSBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddPy50b1N0cmluZygpO1xuICAgICAgICAgICAgY29uc3QgaGFzRGVmYXVsdFZhbHVlID1cbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLmRlZmF1bHRWYWx1ZXMoKSkgJiZcbiAgICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5kZWZhdWx0VmFsdWVzKCkpLmluY2x1ZGVzKHF1ZXN0aW9uSWQpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBoYXNEZWZhdWx0VmFsdWUgJiZcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2ZpZWxkJ10gJiZcbiAgICAgICAgICAgICAgIWlzRW5hYmxlRGVmYXVsdFF1ZXN0aW9uc1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydmaWVsZCddID0ge1xuICAgICAgICAgICAgICAgIC4uLnNpbmdsZVF1ZXN0aW9uWydmaWVsZCddLFxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJykge1xuICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10pKSB7XG4gICAgICAgICAgICAgICAgbGV0IGlzTm9uZUluRG9tYWluVmFsdWVzOiBhbnkgPSBzaW5nbGVRdWVzdGlvbltcbiAgICAgICAgICAgICAgICAgICdkb21haW5WYWx1ZXMnXG4gICAgICAgICAgICAgICAgXS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAoc2luZ2xlT2JqOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZU9ialsnZG9tYWluVWlWYWx1ZSddLnRvVXBwZXJDYXNlKCkgPT09ICdOT05FJyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKFxuICAgICAgICAgICAgICAgICAgKHNpbmdsZURvbWFpblZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaXNOb25lSW5Eb21haW5WYWx1ZXMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpc05vbmVJbkRvbWFpblZhbHVlc1swXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTm9uZUluRG9tYWluVmFsdWVzWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11cbiAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIG5vbmUgaXMgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaChcbiAgICAgICAgICAgICAgICAgICAgICAgIChzaW5nbGVEb21haW5WYWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBhbGwgc2VsZWN0ZWQgY2hlY2tib3ggcXVlc3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZS5kb21haW5VaVZhbHVlLnRvVXBwZXJDYXNlKCkgIT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05PTkUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlLmlzRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWUuaXNEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBsZXQgaXNTZWN0aW9uRXhpc3RzSW5CbG9ja2VkTGlzdDogYW55ID0gdGhpcy5pc0Jsb2NrZWRRdWVzdGlvbnNMaXN0LmZpbHRlcigoc2luZ2xlQmxvY2tlZE9iajogYW55KSA9PiBzaW5nbGVCbG9ja2VkT2JqWydzZWN0aW9uVGl0bGUnXS50cmltKCkgPT09IHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10udHJpbSgpKTtcbiAgICAgICAgc2luZ2xlU2VjdGlvblsnc2hvd1NlY3Rpb24nXSA9ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxuICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShpc1NlY3Rpb25FeGlzdHNJbkJsb2NrZWRMaXN0KSkge1xuICAgICAgICAvLyAgIGlmIChpc1NlY3Rpb25FeGlzdHNJbkJsb2NrZWRMaXN0WzBdLmlzQmxvY2tlZEZvckN1c3RvbWVyRmxvdyAmJiAhdGhpcy5sb2FkaW5nQWdlbnRwb3J0YWwpIHtcbiAgICAgICAgLy8gICAgIHNpbmdsZVNlY3Rpb25bJ3Nob3dTZWN0aW9uJ10gPSBmYWxzZTtcbiAgICAgICAgLy8gICAgIGxldCBmaWx0ZXJlZEluZGV4OiBhbnkgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZmluZEluZGV4KChzaW5nbGVQZXJzb25PYmo6IGFueSkgPT4gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKTtcbiAgICAgICAgLy8gICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uT2JqSW5TZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgLy8gICAgICAgbGV0IGZpbHRlcmVkUXVlc3Rpb246IGFueSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtmaWx0ZXJlZEluZGV4XVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PSBzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvblsncXVlc3Rpb25JZCddKTtcbiAgICAgICAgLy8gICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvbikpIHtcbiAgICAgICAgLy8gICAgICAgICBmaWx0ZXJlZFF1ZXN0aW9uWzBdWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IHNpbmdsZVNlY3Rpb25bJ3Nob3dTZWN0aW9uJ107XG4gICAgICAgIC8vICAgICAgIH1cbiAgICAgICAgLy8gICAgIH0pO1xuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gICBpZiAoKGlzU2VjdGlvbkV4aXN0c0luQmxvY2tlZExpc3RbMF0uaXNCbG9ja2VkRm9yQWdlbnRGbG93IHx8IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2FnZW50Q2hhbm5lbCcpID09PSAnRDIwJyB8fCBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdhZ2VudENoYW5uZWwnKSA9PT0gJ0QwNScgfHwgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnYWdlbnRDaGFubmVsJykgPT09ICdEMDYnKSAmJiB0aGlzLmxvYWRpbmdBZ2VudHBvcnRhbCkge1xuICAgICAgICAvLyAgICAgc2luZ2xlU2VjdGlvblsnc2hvd1NlY3Rpb24nXSA9IGZhbHNlO1xuICAgICAgICAvLyAgICAgbGV0IGZpbHRlcmVkSW5kZXg6IGFueSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXS5maW5kSW5kZXgoKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pO1xuICAgICAgICAvLyAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgICAvLyAgICAgICBsZXQgZmlsdGVyZWRRdWVzdGlvbjogYW55ID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW2ZpbHRlcmVkSW5kZXhdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gPT09IHNpbmdsZVF1ZXN0aW9uT2JqSW5TZWN0aW9uWydxdWVzdGlvbklkJ10pO1xuICAgICAgICAvLyAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uKSkge1xuICAgICAgICAvLyAgICAgICAgIGZpbHRlcmVkUXVlc3Rpb25bMF1bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gc2luZ2xlU2VjdGlvblsnc2hvd1NlY3Rpb24nXTtcbiAgICAgICAgLy8gICAgICAgfVxuICAgICAgICAvLyAgICAgfSk7XG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyB9XG4gICAgICAgIGxldCBoaWRkZW5RdWVzdGlvbnM6IGFueSA9IHRoaXMucXVlc3Rpb25MaXN0LmZpbHRlcihcbiAgICAgICAgICAoc2luZ2xlU2VjdGlvbk9iajogYW55KSA9PiAhc2luZ2xlU2VjdGlvbk9ialsnc2hvd1NlY3Rpb24nXSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoaWRkZW5RdWVzdGlvbnMpKSB7XG4gICAgICAgICAgaGlkZGVuUXVlc3Rpb25zLmZvckVhY2goKHNpbmdsZVNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaChcbiAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uT2JqSW5TZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBsZXQgZmlsdGVyZWRRdWVzdGlvbjogYW55ID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddWzBdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gPT09IHNpbmdsZVF1ZXN0aW9uT2JqSW5TZWN0aW9uWydxdWVzdGlvbklkJ10pO1xuICAgICAgICAgICAgICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgLy8gICBmaWx0ZXJlZFF1ZXN0aW9uWzBdWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMucXVlc3Rpb25MaXN0LnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiBhWydzdGVwJ10gLSBiWydzdGVwJ10pO1xuXG4gICAgY29uc29sZS5sb2coJ3F1ZXN0aW9ucyBsaXN0JywgdGhpcy5xdWVzdGlvbkxpc3QpO1xuXG4gICAgaWYgKHRoaXMucGVyc29uVXdBbnN3ZXJzKSB7XG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnBlcnNvblV3QW5zd2VycykuZm9yRWFjaCgocXVlc3Rpb25JZDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9yc0ZvckZpZWxkID0gdGhpcy5maWVsZEVycm9yc1txdWVzdGlvbklkXTtcbiAgICAgICAgaWYgKGVycm9yc0ZvckZpZWxkICYmIE9iamVjdC5rZXlzKGVycm9yc0ZvckZpZWxkKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25JZF0gPSAnJztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ3F1ZXN0aW9ucyBhbnN3ZXJzJywgdGhpcy5wZXJzb25Vd0Fuc3dlcnMpO1xuICAgIHRoaXMuc2F2ZVF1ZXN0aW9uRGV0YWlscygpO1xuXG4gICAgdGhpcy5xdWVzdGlvbnNWYWx1ZUNoYW5nZS5lbWl0KHRoaXMucGVyc29uVXdBbnN3ZXJzKTtcbiAgfVxuXG4gIHNob3dRdWVzdGlvbihjdXJyZW50UXVlc3Rpb246IGFueSkge1xuICAgIGxldCBzaG93UXVlc3Rpb246IGFueSA9IGZhbHNlO1xuICAgIGxldCBzdWJRdWVzdGlvbnM6IGFueSA9IFtdO1xuICAgIC8vIGxldCBjdXJyZW50U2VjdGlvbkluZGV4OiBhbnkgPSBxdWVzdGlvbnNSZXNwb25zZVsncXVlc3Rpb25zUmVzcG9uc2UnXS5maW5kSW5kZXgoKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gcGVyc29uUm9sZSlcbiAgICAvLyBsZXQgcm9sZSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtjdXJyZW50U2VjdGlvbkluZGV4XVsncm9sZSddXG5cbiAgICB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbMF0ucXVlc3Rpb25MaXN0LmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHtcbiAgICAgIGxldCBpc1N1YlF1ZXN0aW9uT2JqZWN0OiBhbnkgPSBbXTtcbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10pKSB7XG4gICAgICAgIGlzU3ViUXVlc3Rpb25PYmplY3QgPSBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddLmZpbHRlcihcbiAgICAgICAgICAocXVlc3Rpb25SZWxhdGlvbk9iajogYW55KSA9PlxuICAgICAgICAgICAgcXVlc3Rpb25SZWxhdGlvbk9ialsnbmV4dFF1ZXN0aW9uSWQnXSA9PT1cbiAgICAgICAgICAgIGN1cnJlbnRRdWVzdGlvblsncXVlc3Rpb25JZCddLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGlzU3ViUXVlc3Rpb25PYmplY3QubGVuZ3RoID4gMCkge1xuICAgICAgICBzdWJRdWVzdGlvbnMucHVzaChzaW5nbGVRdWVzdGlvbik7XG4gICAgICAgIGlzU3ViUXVlc3Rpb25PYmplY3QuZm9yRWFjaCgoc2luZ2xlU3ViUXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcbiAgICAgICAgICAgICAgc2luZ2xlU3ViUXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXS50b1N0cmluZygpWzBdICE9PSAnIScgJiZcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0gPT09XG4gICAgICAgICAgICAgICAgc2luZ2xlU3ViUXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXSkgfHxcbiAgICAgICAgICAgIChzaW5nbGVTdWJRdWVzdGlvblsncGFyZW50UXVlc3Rpb25WYWx1ZSddLnRvU3RyaW5nKClbMF0gPT09ICchJyAmJlxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dLFxuICAgICAgICAgICAgICApICYmXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dICE9PVxuICAgICAgICAgICAgICAgIHNpbmdsZVN1YlF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblZhbHVlJ11cbiAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAuc3BsaXQoJyEnKVsxXSkgfHxcbiAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiZcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSxcbiAgICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXT8uaW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgc2luZ2xlU3ViUXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXSxcbiAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgIC8vIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dPy5maWx0ZXIoXG4gICAgICAgICAgICAvLyAgIChzaW5nbGVPYmo6IGFueSkgPT5cbiAgICAgICAgICAgIC8vICAgICBzaW5nbGVPYmogPT09XG4gICAgICAgICAgICAvLyAgICAgc2luZ2xlU3ViUXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXVxuICAgICAgICAgICAgLy8gKS5sZW5ndGggPiAwXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBzaG93UXVlc3Rpb24gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc3ViUXVlc3Rpb25zKSAmJlxuICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddKVxuICAgICkge1xuICAgICAgc2hvd1F1ZXN0aW9uID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShjdXJyZW50UXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uUmVsYXRpb24nXSkgJiZcbiAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgIGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddWydwYXJlbnRRdWVzdGlvbklkJ10sXG4gICAgICApICYmXG4gICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICBjdXJyZW50UXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uUmVsYXRpb24nXVsncGFyZW50UXVlc3Rpb25JZCddXG4gICAgICAgIF0sXG4gICAgICApICYmXG4gICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgY3VycmVudFF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblJlbGF0aW9uJ11bJ3BhcmVudFF1ZXN0aW9uSWQnXVxuICAgICAgXSA9PT0gY3VycmVudFF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblJlbGF0aW9uJ11bJ3BhcmVudFF1ZXN0aW9uQW5zd2VyJ11cbiAgICApIHtcbiAgICAgIHNob3dRdWVzdGlvbiA9IHRydWU7XG4gICAgfVxuICAgIGlmIChjdXJyZW50UXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnTk9ESVNQTEFZJykge1xuICAgICAgc2hvd1F1ZXN0aW9uID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBzaG93UXVlc3Rpb247XG4gIH1cblxuICBzYXZlUXVlc3Rpb25EZXRhaWxzKCkge1xuICAgIC8vIHJlbW92ZSBhbGwgY2hlY2tib3ggcXVlc3Rpb25zIHByZXNlbnQgaW4gdmFsdWVzXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5saXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveCkpIHtcbiAgICAgIC8vIGxldCBsaWZlQXNzdXJlZGtleXM6IGFueSA9IE9iamVjdC5rZXlzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddKTtcbiAgICAgIC8vIGxldCBwb2xpY3lBc3N1cmVkS2V5czogYW55ID0gT2JqZWN0LmtleXModGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ3BvbGljeUhvbGRlciddKTtcbiAgICAgIC8vIGxldCBsaWZlQXNzdXJlZE9uZUtleXM6IGFueSA9IE9iamVjdC5rZXlzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZE9uZSddKTtcbiAgICAgIC8vIGxldCBsaWZlQXNzdXJlZFR3b0tleXM6IGFueSA9IE9iamVjdC5rZXlzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZFR3byddKTtcbiAgICAgIC8vIHRoaXMucGVyc29uVXdBbnN3ZXJzLmZvckVhY2goKHNpbmdsZUtleTogYW55KSA9PiB7XG4gICAgICAvLyAgIGlmIChpc05hTihOdW1iZXIoc2luZ2xlS2V5KSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXVtzaW5nbGVLZXldKSAmJiB0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94LmluY2x1ZGVzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddW3NpbmdsZUtleV0pKSB7XG4gICAgICAvLyAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddW3NpbmdsZUtleV07XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH0pO1xuICAgICAgLy8gcG9saWN5QXNzdXJlZEtleXMuZm9yRWFjaCgoc2luZ2xlS2V5OiBhbnkpID0+IHtcbiAgICAgIC8vICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkJ11bc2luZ2xlS2V5XSkgJiYgdGhpcy5saXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveC5pbmNsdWRlcyh0aGlzLnBlcnNvblV3QW5zd2Vyc1sncG9saWN5SG9sZGVyJ11bc2luZ2xlS2V5XSkpIHtcbiAgICAgIC8vICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ3BvbGljeUhvbGRlciddW3NpbmdsZUtleV07XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH0pO1xuICAgICAgLy8gbGlmZUFzc3VyZWRPbmVLZXlzLmZvckVhY2goKHNpbmdsZUtleTogYW55KSA9PiB7XG4gICAgICAvLyAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZE9uZSddW3NpbmdsZUtleV0pICYmIHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3guaW5jbHVkZXModGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkT25lJ11bc2luZ2xlS2V5XSkpIHtcbiAgICAgIC8vICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ3BvbGljeUhvbGRlciddW3NpbmdsZUtleV07XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH0pO1xuICAgICAgLy8gbGlmZUFzc3VyZWRUd29LZXlzLmZvckVhY2goKHNpbmdsZUtleTogYW55KSA9PiB7XG4gICAgICAvLyAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZFR3byddW3NpbmdsZUtleV0pICYmIHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3guaW5jbHVkZXModGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkVHdvJ11bc2luZ2xlS2V5XSkpIHtcbiAgICAgIC8vICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ3BvbGljeUhvbGRlciddW3NpbmdsZUtleV07XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH0pO1xuICAgIH1cbiAgICAvLyBsZXQgaGVpZ2h0SW5JbmNoZXNPYmo6IGFueSA9IFtdO1xuICAgIC8vIGxldCBoZWlnaHRJbkZlZXRPYmo6IGFueSA9IFtdO1xuICAgIC8vIGxldCBoZWlnaHRJbkNlbnRpbWV0ZXJPYmo6IGFueSA9IFtdO1xuICAgIGxldCBpc1ZhbGlkOiBhbnkgPSB0cnVlO1xuICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddKSkge1xuICAgIC8vICAgbGV0IGxhSW5kZXg6IGFueSA9IHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSAnbGlmZUFzc3VyZWQnKTtcbiAgICAvLyAgIGlmIChsYUluZGV4ICE9PSAtMSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW2xhSW5kZXhdKSkge1xuICAgIC8vICAgICBoZWlnaHRJbkluY2hlc09iaiA9IHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW2xhSW5kZXhdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRJJyk7XG4gICAgLy8gICAgIGhlaWdodEluRmVldE9iaiA9IHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW2xhSW5kZXhdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJyk7XG4gICAgLy8gICAgIGhlaWdodEluQ2VudGltZXRlck9iaiA9IHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW2xhSW5kZXhdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFQnKTtcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyB2YWxpZGF0aW9uIGZvciBtZWRpY2FsIGFuZCBub24gbWVkaWNhbCBxdWVzdGlvbnMgOlxuICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd01hc3Rlck9iaikgJiYgaXNWYWxpZCkge1xuICAgIC8vICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3TWFzdGVyT2JqLmZvckVhY2goKHNpbmdsZVBlcnNvbk9iajogYW55LCBzaW5nbGVQZXJzb25JbmRleDogYW55KSA9PiB7XG4gICAgLy8gICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVBlcnNvbk9ialsncXVlc3Rpb25MaXN0J10pICYmIGlzVmFsaWQpIHtcbiAgICAvLyAgICAgICBsZXQgcm9sZTogYW55ID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09ICdsaWZlQXNzdXJlZCcgPyBcImxpZmUgYXNzdXJlZFwiIDogc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09ICdwb2xpY3lIb2xkZXInID8gXCJwb2xpY3kgaG9sZGVyXCIgOiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gJ2xpZmVBc3N1cmVkT25lJyA/IFwiSm9pbnQgTGlmZSAxXCIgOiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gJ2xpZmVBc3N1cmVkVHdvJyA/IFwiSm9pbnQgTGlmZSAyXCIgOiBcIlwiO1xuICAgIC8vICAgICAgIHNpbmdsZVBlcnNvbk9ialsncXVlc3Rpb25MaXN0J10uZm9yRWFjaCgoc2luZ2xlU2VjdGlvbjogYW55KSA9PiB7XG4gICAgLy8gICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXSkgJiYgaXNWYWxpZCkge1xuICAgIC8vICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddKSAmJiAoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50b1VwcGVyQ2FzZSgpLnJlcGxhY2VBbGwoJyAnLCAnXycpID09PSAnVEVMTF9VU19NT1JFJyB8fCBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRvVXBwZXJDYXNlKCkucmVwbGFjZUFsbCgnICcsICdfJykgPT09ICdCQVNJQ19ERVRBSUxTJykgJiYgaXNWYWxpZCkge1xuXG4gICAgLy8gICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgaGVpZ2h0IGVudGVyZWQgaW4gZmVldFxuICAgIC8vICAgICAgICAgICAgIGlmICh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0ZFRVQnKSB7XG4gICAgLy8gICAgICAgICAgICAgICBsZXQgaGVpZ2h0SW5JbmNoZXNPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRJJyk7XG4gICAgLy8gICAgICAgICAgICAgICBsZXQgaGVpZ2h0SW5GZWV0T2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicpO1xuICAgIC8vICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5JbmNoZXNPYmopICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0T2JqKSAmJiAodGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSkgfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSkpKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5pc01hbmRhdG9yeUZpZWxkICYmICFzYXZlZHJhZnQgJiYgcmVkaXJlY3QpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgIT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiA9IHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWJJbmRleCA9IHNpbmdsZVBlcnNvbkluZGV4O1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICAgIGxldCBxdWVzdGlvbklkOiBhbnkgPSBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSArICdfJyArIHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIEZlZXQgYW5kIEluY2hlcyBmb3IgJyArIHJvbGVcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIGVudGVyIEhlaWdodCBpbiBGZWV0IGFuZCBJbmNoZXMgZm9yICcgKyByb2xlLCAnQ2xvc2UnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmICF0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT09ICdsaWZlIGFzc3VyZWQnKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ3BvbGljeSBob2xkZXInKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfUEgnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ2pvaW50bGlmZScpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT09ICdKb2ludCBMaWZlIDEnKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ0pPSU5UTElGRU9ORScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb2xlID09PSAnSm9pbnQgTGlmZSAyJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDEpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdKT0lOVExJRkVUV08nKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgIC8vICAgICAgICAgICAgICAgICAgIH1cblxuICAgIC8vICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBoZWlnaHQgaW4gY21cbiAgICAvLyAgICAgICAgICAgICBsZXQgaGVpZ2h0SW5DZW50aW1ldGVyT2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUJyk7XG4gICAgLy8gICAgICAgICAgICAgaWYgKHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnQ00nICYmXG4gICAgLy8gICAgICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddKSAmJlxuICAgIC8vICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmopICYmIGlzVmFsaWQpIHtcbiAgICAvLyAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJiAhc2F2ZWRyYWZ0ICYmIHJlZGlyZWN0KSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiAhPT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiA9IHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiSW5kZXggPSBzaW5nbGVQZXJzb25JbmRleDtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JZDogYW55ID0gaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ10gKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xuICAgIC8vICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIENNICcgKyByb2xlXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSk7XG4gICAgLy8gICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5vcGVuU25hY2tCYXIoJ1BsZWFzZSBlbnRlciBIZWlnaHQgaW4gQ00gJyArIHJvbGUsICdDbG9zZScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmICF0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09PSAnbGlmZSBhc3N1cmVkJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvbGUgPT09ICdwb2xpY3kgaG9sZGVyJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX1BIJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnam9pbnRsaWZlJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT09ICdKb2ludCBMaWZlIDEnKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ0pPSU5UTElGRU9ORScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb2xlID09PSAnSm9pbnQgTGlmZSAyJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigxKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdKT0lOVExJRkVUV08nKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgIH1cblxuICAgIC8vICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgfVxuXG4gICAgLy8gICAgICAgICAgIH1cblxuICAgIC8vICAgICAgICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iajogYW55KSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgYmFzaWMgcXVlc3Rpb25zXG4gICAgLy8gICAgICAgICAgICAgaWYgKFxuICAgIC8vICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9iaikgJiZcbiAgICAvLyAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSkgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxuICAgIC8vICAgICAgICAgICAgICAgaXNWYWxpZCAmJlxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddICE9PSAnSU1BR0UgVEVYVCcgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnUUhUJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddICE9PSAnREVDTEFSQVRJT04nICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ2hhcmRDb3B5TGFuZycgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ1BBU1NQT1JUX1VQTE9BRCcgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnUUhURicgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnUUhUSScgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10udG9TdHJpbmcoKSA9PT0gJ04nICYmXG4gICAgLy8gICAgICAgICAgICAgICAoKHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ0NIRUNLQk9YJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV0pKSB8fFxuICAgIC8vICAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmICF0aGlzLnZhbGlkYXRlQ2hlY2tCb3hGaWVsZChzaW5nbGVRdWVzdGlvbk9iaiwgc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pKSkgJiYgaXNWYWxpZFxuICAgIC8vICAgICAgICAgICAgICkge1xuICAgIC8vICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgIC8vICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5pc01hbmRhdG9yeUZpZWxkICYmICFzYXZlZHJhZnQgJiYgcmVkaXJlY3QpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ10gKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xuICAgIC8vICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgIT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYkluZGV4ID0gc2luZ2xlUGVyc29uSW5kZXg7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIGVudGVyIGFsbCB0aGUgZGV0YWlscyBpbiAnICsgc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSArICcgZm9yICcgKyByb2xlXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSk7XG4gICAgLy8gICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5vcGVuU25hY2tCYXIoJ1BsZWFzZSBlbnRlciBhbGwgdGhlIGRldGFpbHMgaW4gJyArIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10gKyAnIGZvciAnICsgcm9sZSwgJ0Nsb3NlJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgIXRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT09ICdsaWZlIGFzc3VyZWQnKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ3BvbGljeSBob2xkZXInKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDEpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfUEgnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdqb2ludGxpZmUnKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImpvaW50IGxpZmUgY2FzZVwiKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgIH1cblxuICAgIC8vICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgfVxuXG4gICAgLy8gICAgICAgICAgICAgaWYgKFxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnUEFTU1BPUlRfVVBMT0FEJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSA9PT0gJ04nICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcbiAgICAvLyAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5pc01hbmRhdG9yeUZpZWxkICYmXG4gICAgLy8gICAgICAgICAgICAgICByZWRpcmVjdFxuICAgIC8vICAgICAgICAgICAgICkge1xuICAgIC8vICAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmo6IGFueSA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UucXVlc3Rpb25zUGFzc3BvcnRVcGxvYWRPYmouZmlsdGVyKChzaW5nbGVPYmo6IGFueSkgPT4gKHNpbmdsZU9ialsncGVyc29uVHlwZSddID09PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSAmJiB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlT2JqWydkbXNJZCddKSkpO1xuICAgIC8vICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9iaikpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KGAke2ZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ3F1ZXN0aW9uVHlwZSddfV8ke2ZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ3R5cGUnXX1fJHtmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydwZXJzb25UeXBlJ119YCk7XG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSB1cGxvYWQgcGFzc3BvcnQgJyArIGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ2xhYmVsJ10gKyAnIGRvY3VtZW50IGZvciAnICsgcm9sZVxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0pO1xuICAgIC8vICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uub3BlblNuYWNrQmFyKCdQbGVhc2UgdXBsb2FkIHBhc3Nwb3J0ICcgKyBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydsYWJlbCddICsgJyBkb2N1bWVudCBmb3IgJyArIHJvbGUsICdDbG9zZScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiAhdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBpZiAocm9sZSA9PT0gJ2xpZmUgYXNzdXJlZCcpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb2xlID09PSAncG9saWN5IGhvbGRlcicpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX1BIJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ2pvaW50bGlmZScpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiam9pbnQgbGlmZSBjYXNlXCIpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgLy8gICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgICAgIH1cblxuICAgIC8vICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBkZWNsYXJhdGlvbiBxdWVzdGlvbnNcbiAgICAvLyAgICAgICAgICAgICBpZiAoaXNWYWxpZCAmJiBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvblR5cGUgPT09ICdERUNMQVJBVElPTicgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxuICAgIC8vICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddKSAmJlxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSA9PT0gJ04nXG4gICAgLy8gICAgICAgICAgICAgKSB7XG4gICAgLy8gICAgICAgICAgICAgICBpZiAoaXNWYWxpZCAmJlxuICAgIC8vICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzKSAmJlxuICAgIC8vICAgICAgICAgICAgICAgICAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pICYmXG4gICAgLy8gICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF0pICYmXG4gICAgLy8gICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXSkgJiZcbiAgICAvLyAgICAgICAgICAgICAgICAgICAoKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSAmJlxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dID09PSAnTicpIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pKSkgfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkpIHtcblxuICAgIC8vICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgIT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYkluZGV4ID0gc2luZ2xlUGVyc29uSW5kZXg7XG4gICAgLy8gICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgIC8vICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmlzTWFuZGF0b3J5RmllbGQgJiYgIXNhdmVkcmFmdCAmJiByZWRpcmVjdCkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgIGxldCBxdWVzdGlvbklkOiBhbnkgPSBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvbklkICsgJ18nICsgc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBzZWxlY3QgYWxsIHRoZSBkZXRhaWxzIGluICcgKyBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddICsgJyBmb3IgJyArIHJvbGVcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICB9XG5cbiAgICAvLyAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBtZWRpY2FsIHN1YiBxdWVzdGlvbnNcbiAgICAvLyAgICAgICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlKSkge1xuICAgIC8vICAgICAgICAgICAgIC8vICAgdGhpcy5zaGFyZWRTZXJ2aWNlLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZS5mb3JFYWNoKChxdWVzdGlvbjogYW55KSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgLy8gICAgIGlmIChcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICB0aGlzLnNob3dTdWJRdWVzdGlvbihxdWVzdGlvbikgJiZcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICBxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdJTUFHRSBURVhUJyAmJlxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgIHF1ZXN0aW9uWydvcHRpb25hbFF1ZXN0aW9uJ10udG9TdHJpbmcoKSA9PT0gJ04nICYmXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgKChxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXVtxdWVzdGlvblsncXVlc3Rpb25JZCddXSkpIHx8XG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgICAocXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmICF0aGlzLnZhbGlkYXRlQ2hlY2tCb3hGaWVsZChxdWVzdGlvbiwgJ2xpZmVBc3N1cmVkJykpKVxuICAgIC8vICAgICAgICAgICAgIC8vICAgICApIHtcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UubG9hZGluZ0FnZW50cG9ydGFsICYmICFzYXZlZHJhZnQpIHtcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIGFuc3dlciBhbGwgbWVkaWNhbCBzdWIgcXVlc3Rpb25zICcgKyBxdWVzdGlvblsncXVlc3Rpb25JZCddICsgJyAnICsgcXVlc3Rpb25bJ3F1ZXN0aW9uVGV4dCddXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgICB9KTtcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgLy8gICAgIH1cbiAgICAvLyAgICAgICAgICAgICAvLyAgIH0pO1xuICAgIC8vICAgICAgICAgICAgIC8vIH1cbiAgICAvLyAgICAgICAgICAgfSk7XG5cbiAgICAvLyAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgZmF0Y2ggZGVjbGFyYXRpb25cbiAgICAvLyAgICAgICAgICAgLy8gaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uLnF1ZXN0aW9ucykgJiYgaXNWYWxpZCl7XG4gICAgLy8gICAgICAgICAgIC8vIHNpbmdsZVNlY3Rpb24ucXVlc3Rpb25zLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uT2JqOmFueSkgPT4ge1xuICAgIC8vICAgICAgICAgICAvLyAgIGlmKGlzVmFsaWQgJiYgc2luZ2xlUXVlc3Rpb25PYmoucXVlc3Rpb25UeXBlID09PSAnREVDTEFSQVRJT04nICYmIHNpbmdsZVF1ZXN0aW9uT2JqWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10pICYmXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJ1xuICAgIC8vICAgICAgICAgICAvLyAgICAgKXtcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgaWYoIGlzVmFsaWQgJiZcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzKSAmJlxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkgJiZcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdKSAmJlxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXSkgICYmXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICAoKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSAmJlxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dID09PSAnTicpIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pKSkgfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkpIHtcblxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiAhPT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pIHtcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYkluZGV4ID0gc2luZ2xlUGVyc29uSW5kZXg7XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UubG9hZGluZ0FnZW50cG9ydGFsICYmICFzYXZlZHJhZnQpIHtcbiAgICAvLyAgICAgICAgICAgLy8gbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IHNpbmdsZVF1ZXN0aW9uT2JqLnF1ZXN0aW9uSWQgKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIHNlbGVjdCBhbGwgdGhlIGRldGFpbHMgaW4gJyArIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10gKyAnIGZvciAnICsgcm9sZVxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgfSk7XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAvLyAgICAgICB9XG4gICAgLy8gICAgICAgICAgIC8vICAgfVxuICAgIC8vICAgICAgICAgICAvLyB9KTtcbiAgICAvLyAgICAgICAgICAgLy8gfVxuXG4gICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgICAgfSk7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgIH0pO1xuICAgIC8vIH1cblxuICAgIC8vIGlmICgoaXNWYWxpZCB8fCBzYXZlZHJhZnQpIHx8IHRoaXMuc2hhcmVkU2VydmljZS5sb2FkaW5nQWdlbnRwb3J0YWwpIHtcbiAgICAvLyBpZiAoaXNWYWxpZCkge1xuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAvLyB0aGlzLmxvYWRlclNlcnZpY2UuZGlzcGxheSh0cnVlKTtcbiAgICAgIC8vIGxldCByZXF1ZXN0OiBhbnkgPSBbXTtcbiAgICAgIGxldCBtYWluUmVxT2JqOiBhbnkgPSBbXTtcbiAgICAgIGxldCBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zOiBhbnkgPSBbXTtcbiAgICAgIGxldCBtYWluUmVxdWVzdEZvckxhOiBhbnkgPSBbXTtcbiAgICAgIGxldCBtYWluUmVxdWVzdEZvclBoOiBhbnkgPSBbXTtcbiAgICAgIHRoaXMucXVlc3Rpb25MaXN0LmZvckVhY2goKHNpbmdsZVNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVQZXJzb25PYmpbJ3F1ZXN0aW9uTGlzdCddKSkge1xuICAgICAgICAvLyBzaW5nbGVQZXJzb25PYmpbJ3F1ZXN0aW9uTGlzdCddLmZvckVhY2goKHNpbmdsZVNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgICAvLyBpZiAoXG4gICAgICAgIC8vICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddKSAmJlxuICAgICAgICAvLyAgIChzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRvVXBwZXJDYXNlKCkucmVwbGFjZUFsbCgnICcsICdfJykgPT09XG4gICAgICAgIC8vICAgICAnVEVMTF9VU19NT1JFJyB8fFxuICAgICAgICAvLyAgICAgc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50b1VwcGVyQ2FzZSgpLnJlcGxhY2VBbGwoJyAnLCAnXycpID09PVxuICAgICAgICAvLyAgICAgICAnQkFTSUNfREVUQUlMUycpXG4gICAgICAgIC8vICkge1xuICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBoZWlnaHQgaW4gY21cbiAgICAgICAgbGV0IGhlaWdodEluQ2VudGltZXRlck9iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcbiAgICAgICAgICAob2JqOiBhbnkpID0+XG4gICAgICAgICAgICBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFQnIHx8XG4gICAgICAgICAgICBvYmpbJ3F1ZXN0aW9uSWQnXSA9PT1cbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddLFxuICAgICAgICApO1xuICAgICAgICBsZXQgaGVpZ2h0SW5JbmNoZXNPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXG4gICAgICAgICAgKG9iajogYW55KSA9PlxuICAgICAgICAgICAgb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUSScgfHxcbiAgICAgICAgICAgIG9ialsncXVlc3Rpb25JZCddID09PVxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10sXG4gICAgICAgICk7XG4gICAgICAgIGxldCBoZWlnaHRJbkZlZXRPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXG4gICAgICAgICAgKG9iajogYW55KSA9PlxuICAgICAgICAgICAgb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicgfHxcbiAgICAgICAgICAgIG9ialsncXVlc3Rpb25JZCddID09PVxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10sXG4gICAgICAgICk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0NNJyAmJlxuICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DZW50aW1ldGVyT2JqKSAmJlxuICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DZW50aW1ldGVyT2JqKSAmJlxuICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J10sXG4gICAgICAgICAgKSAmJlxuICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10sXG4gICAgICAgICAgKSAmJlxuICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10sXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBwYXNzIGhlaWdodCBpbiBjbSBvYmpcbiAgICAgICAgICBsZXQgY21PYmpJbkFuc3dlcnNpbmRleDogYW55ID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXG4gICAgICAgICAgICAob2JqOiBhbnkpID0+XG4gICAgICAgICAgICAgIG9iai5xdWVzdGlvbklkID09PSBoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXSAmJlxuICAgICAgICAgICAgICBvYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGNtT2JqSW5BbnN3ZXJzaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW2NtT2JqSW5BbnN3ZXJzaW5kZXhdWydhbnN3ZXInXSA9IHBhcnNlSW50KFxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J10sXG4gICAgICAgICAgICApLnRvU3RyaW5nKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaCh7XG4gICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgICAgcXVlc3Rpb25JZDogaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgIGFuc3dlcjogcGFyc2VJbnQoXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddLFxuICAgICAgICAgICAgICApLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXG4gICAgICAgICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcbiAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ2NsdXN0ZXJJZCddLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gaGVpZ2h0IGluIGluY2hlc1xuICAgICAgICAgIGxldCBoZWlnaHRJbkluY2hlczogYW55ID0gKFxuICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddICogMC4zOTM3MDFcbiAgICAgICAgICApLnRvRml4ZWQoMik7XG4gICAgICAgICAgbGV0IGhlaWdodEluRmVldDogYW55ID1cbiAgICAgICAgICAgIHBhcnNlRmxvYXQoKGhlaWdodEluSW5jaGVzIC8gMTIpLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXSkgPiAxMlxuICAgICAgICAgICAgICA/IChoZWlnaHRJbkluY2hlcyAvIDEyKS50b0ZpeGVkKDEpXG4gICAgICAgICAgICAgIDogKGhlaWdodEluSW5jaGVzIC8gMTIpLnRvRml4ZWQoMik7XG4gICAgICAgICAgbGV0IGluY2hlc29iakluQW5zd2Vyc2luZGV4OiBhbnkgPVxuICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgIChvYmo6IGFueSkgPT5cbiAgICAgICAgICAgICAgICBvYmoucXVlc3Rpb25JZCA9PT0gaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXSAmJlxuICAgICAgICAgICAgICAgIG9ialsncGVyc29uVVdJZCddID09PSBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGlmIChpbmNoZXNvYmpJbkFuc3dlcnNpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbaW5jaGVzb2JqSW5BbnN3ZXJzaW5kZXhdWydhbnN3ZXInXSA9XG4gICAgICAgICAgICAgIHBhcnNlSW50KGhlaWdodEluSW5jaGVzKS50b1N0cmluZygpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2goe1xuICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXG4gICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGhlaWdodEluSW5jaGVzT2JqWzBdWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgIGFuc3dlcjogcGFyc2VJbnQoaGVpZ2h0SW5JbmNoZXMpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXG4gICAgICAgICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcbiAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkluY2hlc09ialswXVsnY2x1c3RlcklkJ10sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gaGVpZ2h0IGluIGZlZXRcblxuICAgICAgICAgIGxldCBmZWV0T2JqSW5BbnN3ZXJzaW5kZXg6IGFueSA9IG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgKG9iajogYW55KSA9PlxuICAgICAgICAgICAgICBvYmoucXVlc3Rpb25JZCA9PT0gaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ10gJiZcbiAgICAgICAgICAgICAgb2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChmZWV0T2JqSW5BbnN3ZXJzaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW2ZlZXRPYmpJbkFuc3dlcnNpbmRleF1bJ2Fuc3dlciddID1cbiAgICAgICAgICAgICAgcGFyc2VGbG9hdChoZWlnaHRJbkZlZXQpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaCh7XG4gICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgICAgcXVlc3Rpb25JZDogaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgIGFuc3dlcjogcGFyc2VGbG9hdChoZWlnaHRJbkZlZXQpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXG4gICAgICAgICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcbiAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkZlZXRPYmpbMF1bJ2NsdXN0ZXJJZCddLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnRkVFVCcgJiZcbiAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddLFxuICAgICAgICAgICkgJiZcbiAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddLFxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0T2JqKSkge1xuICAgICAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzOiBhbnkgPVxuICAgICAgICAgICAgICBwYXJzZUZsb2F0KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSkgKlxuICAgICAgICAgICAgICAgIDEyICtcbiAgICAgICAgICAgICAgcGFyc2VGbG9hdCh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10pO1xuICAgICAgICAgICAgbGV0IGhlaWdodEluQ206IGFueSA9IChcbiAgICAgICAgICAgICAgcGFyc2VGbG9hdChoZWlnaHRJbkluY2hlcykgLyAwLjM5MzcwMVxuICAgICAgICAgICAgKS50b0ZpeGVkKDIpO1xuICAgICAgICAgICAgbGV0IGZlZXRPYmpJbkFuc3dlcnNpbmRleDogYW55ID1cbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgKG9iajogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgb2JqLnF1ZXN0aW9uSWQgPT09IGhlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddICYmXG4gICAgICAgICAgICAgICAgICBvYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGZlZXRPYmpJbkFuc3dlcnNpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tmZWV0T2JqSW5BbnN3ZXJzaW5kZXhdWydhbnN3ZXInXSA9XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddLnRvU3RyaW5nKCkgK1xuICAgICAgICAgICAgICAgICcuJyArXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J11cbiAgICAgICAgICAgICAgICBdLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICBhbnN3ZXI6XG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10udG9TdHJpbmcoKSArXG4gICAgICAgICAgICAgICAgICAnLicgK1xuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXG4gICAgICAgICAgICAgICAgICBdLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcbiAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXG4gICAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkZlZXRPYmpbMF1bJ2NsdXN0ZXJJZCddLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBpbmNoZXNvYmpJbkFuc3dlcnNpbmRleDogYW55ID1cbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgKG9iajogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgb2JqLnF1ZXN0aW9uSWQgPT09IGhlaWdodEluSW5jaGVzT2JqWzBdWydxdWVzdGlvbklkJ10gJiZcbiAgICAgICAgICAgICAgICAgIG9ialsncGVyc29uVVdJZCddID09PSBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoaW5jaGVzb2JqSW5BbnN3ZXJzaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbaW5jaGVzb2JqSW5BbnN3ZXJzaW5kZXhdWydhbnN3ZXInXSA9XG4gICAgICAgICAgICAgICAgcGFyc2VJbnQoaGVpZ2h0SW5JbmNoZXMpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBoZWlnaHRJbkluY2hlc09ialswXVsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgIGFuc3dlcjogcGFyc2VJbnQoaGVpZ2h0SW5JbmNoZXMpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcbiAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXG4gICAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkluY2hlc09ialswXVsnY2x1c3RlcklkJ10sXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGNtT2JqSW5BbnN3ZXJzaW5kZXg6IGFueSA9IG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAob2JqOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgb2JqLnF1ZXN0aW9uSWQgPT09IGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddICYmXG4gICAgICAgICAgICAgICAgb2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoY21PYmpJbkFuc3dlcnNpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tjbU9iakluQW5zd2Vyc2luZGV4XVsnYW5zd2VyJ10gPVxuICAgICAgICAgICAgICAgIHBhcnNlSW50KGhlaWdodEluQ20pLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICBhbnN3ZXI6IHBhcnNlSW50KGhlaWdodEluQ20pLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcbiAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXG4gICAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ2NsdXN0ZXJJZCddLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmopICYmXG4gICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgbGV0IGhlaWdodEluQ21BbnN3ZXJPYmplY3Q6IGFueSA9IG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmlsdGVyKFxuICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+XG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gPT09XG4gICAgICAgICAgICAgIGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNtQW5zd2VyT2JqZWN0KSAmJlxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNtQW5zd2VyT2JqZWN0WzBdWydhbnN3ZXInXSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2hlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddXSA9XG4gICAgICAgICAgICAgIGhlaWdodEluQ21BbnN3ZXJPYmplY3RbMF1bJ2Fuc3dlciddO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluSW5jaGVzT2JqKSAmJlxuICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzQW5zd2VyT2JqZWN0OiBhbnkgPVxuICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXG4gICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PlxuICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gPT09XG4gICAgICAgICAgICAgICAgaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkluY2hlc0Fuc3dlck9iamVjdCkgJiZcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5JbmNoZXNBbnN3ZXJPYmplY3RbMF1bJ2Fuc3dlciddKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXV0gPVxuICAgICAgICAgICAgICBoZWlnaHRJbkluY2hlc0Fuc3dlck9iamVjdFswXVsnYW5zd2VyJ107XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0T2JqKSAmJlxuICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ10pXG4gICAgICAgICkge1xuICAgICAgICAgIGxldCBoZWlnaHRJbkZlZXRBbnN3ZXJPYmplY3Q6IGFueSA9IG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmlsdGVyKFxuICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+XG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gPT09IGhlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkZlZXRBbnN3ZXJPYmplY3QpICYmXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluRmVldEFuc3dlck9iamVjdFswXVsnYW5zd2VyJ10pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1toZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXV0gPVxuICAgICAgICAgICAgICBoZWlnaHRJbkZlZXRBbnN3ZXJPYmplY3RbMF1bJ2Fuc3dlciddO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyB9XG4gICAgICAgIGxldCBpc05vRGlzcGxheVF1ZXN0aW9uSW5TZWN0aW9uOiBhbnkgPSAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLFxuICAgICAgICApXG4gICAgICAgICAgPyBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXG4gICAgICAgICAgICAgIChzaW5nbGVEYXRhOiBhbnkpID0+IHNpbmdsZURhdGFbJ3F1ZXN0aW9uVHlwZSddID09PSAnTk9ESVNQTEFZJyxcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IFtdO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKHNpbmdsZVNlY3Rpb25bJ3Nob3dTZWN0aW9uJ10gfHxcbiAgICAgICAgICAgIGlzTm9EaXNwbGF5UXVlc3Rpb25JblNlY3Rpb24ubGVuZ3RoID4gMCkgJiZcbiAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddKVxuICAgICAgICApIHtcbiAgICAgICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoc2luZ2xlUXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdoYXJkQ29weUxhbmcnKSB7XG4gICAgICAgICAgICAgIGlmIChzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSA9ICdFbmdsaXNoJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBjaGVja2VkT3B0aW9uc0FycjogYW55ID0gW107XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10pKSB7XG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKFxuICAgICAgICAgICAgICAgIChzaW5nbGVEb21haW5WYWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXG4gICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBjaGVja2VkT3B0aW9uc0Fyci5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ10sXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJlxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgLy8gZm9yIGNoZWNrYm94IHF1ZXN0aW9uXG5cbiAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0OiBhbnkgPVxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgKHNpbmdsZUFuc3dlck9iajogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVBbnN3ZXJPYmpbJ3F1ZXN0aW9uSWQnXSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddICYmXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZUFuc3dlck9ialsncGVyc29uVVdJZCddID09PVxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAocXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3QgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge1xuICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICAgIGFuc3dlcjogJycsXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxuICAgICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxuICAgICAgICAgICAgICAgICAgY2x1c3RlcklkOiBzaW5nbGVRdWVzdGlvblsnY2x1c3RlcklkJ10sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBvYmpbJ2Fuc3dlciddID1cbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKG9iaik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1txdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdF1bXG4gICAgICAgICAgICAgICAgICAnYW5zd2VyJ1xuICAgICAgICAgICAgICAgIF0gPVxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0udG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSAhPT0gJ0NIRUNLQk9YJyAmJlxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgLy8gbm9uIGNoZWNrYm94IHF1ZXN0aW9uXG4gICAgICAgICAgICAgIGxldCBxdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdDogYW55ID1cbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVBbnN3ZXJPYmo6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlQW5zd2VyT2JqWydxdWVzdGlvbklkJ10gPT09XG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSAmJlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVBbnN3ZXJPYmpbJ3BlcnNvblVXSWQnXSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHtcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgICBhbnN3ZXI6XG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NBTEVOREFSJ1xuICAgICAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dLFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0sXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxuICAgICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxuICAgICAgICAgICAgICAgICAgY2x1c3RlcklkOiBzaW5nbGVRdWVzdGlvblsnY2x1c3RlcklkJ10sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW3F1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0XVtcbiAgICAgICAgICAgICAgICAgICdhbnN3ZXInXG4gICAgICAgICAgICAgICAgXSA9XG4gICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDQUxFTkRBUidcbiAgICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dLFxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYoc2luZ2xlUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0pKSB7XG4gICAgICAgICAgICAvLyAgIGxldCBxdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdCA6IGFueSA9IG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KChzaW5nbGVBbnN3ZXJPYmogOiBhbnkpID0+IChzaW5nbGVBbnN3ZXJPYmpbJ3F1ZXN0aW9uSWQnXSA9PT0gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSAgJiYgc2luZ2xlQW5zd2VyT2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSkpXG4gICAgICAgICAgICAvLyAgIGlmKHF1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0ID09PSAtMSkge1xuICAgICAgICAgICAgLy8gICAgIGxldCBvYmo6IGFueSA9IHtcbiAgICAgICAgICAgIC8vICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgIC8vICAgICAgIHF1ZXN0aW9uSWQ6IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAvLyAgICAgICBhbnN3ZXI6IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NBTEVOREFSJyA/IHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKG5ldyBEYXRlKHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dKSwgJ3l5eXktTU0tZGQnKSA6IHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dLFxuICAgICAgICAgICAgLy8gICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcbiAgICAgICAgICAgIC8vICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcbiAgICAgICAgICAgIC8vICAgICAgIGNsdXN0ZXJJZDogc2luZ2xlUXVlc3Rpb25bJ2NsdXN0ZXJJZCddLFxuICAgICAgICAgICAgLy8gICAgIH07XG4gICAgICAgICAgICAvLyAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKG9iaik7XG4gICAgICAgICAgICAvLyAgICAgaWYoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnKSB7XG4gICAgICAgICAgICAvLyAgICAgICBsZXQgY2hlY2tlZE9wdGlvbnNBcnIgOiBhbnkgPSBbXTtcbiAgICAgICAgICAgIC8vICAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddKSkge1xuICAgICAgICAgICAgLy8gICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaCgoc2luZ2xlRG9tYWluVmFsdWUgOiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSAmJiB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkge1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgY2hlY2tlZE9wdGlvbnNBcnIucHVzaChzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddKTtcbiAgICAgICAgICAgIC8vICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gICAgICAgfVxuICAgICAgICAgICAgLy8gICAgICAgb2JqWydhbnN3ZXInXSA9IGNoZWNrZWRPcHRpb25zQXJyLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gICAgIC8vIG9iamVjdCBhbHJlYWR5IHRoZXJlIHNvIG92ZXIgcmlkZSB0aGUgbmV3IGFuc3dlclxuICAgICAgICAgICAgLy8gICAgIGlmKHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJykge1xuICAgICAgICAgICAgLy8gICAgICAgbGV0IGNoZWNrZWRPcHRpb25zQXJyIDogYW55ID0gW107XG4gICAgICAgICAgICAvLyAgICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSkpIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLmZvckVhY2goKHNpbmdsZURvbWFpblZhbHVlIDogYW55KSA9PiB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkgJiYgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIGNoZWNrZWRPcHRpb25zQXJyLnB1c2goc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXSk7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vICAgICAgIH1cbiAgICAgICAgICAgIC8vICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbcXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3RdWydhbnN3ZXInXSA9IGNoZWNrZWRPcHRpb25zQXJyLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbcXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3RdWydhbnN3ZXInXSA9ICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDQUxFTkRBUicgPyB0aGlzLmRhdGVwaXBlLnRyYW5zZm9ybShuZXcgRGF0ZSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSksICd5eXl5LU1NLWRkJykgOiB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXTtcbiAgICAgICAgICAgIC8vICAgICB9XG5cbiAgICAgICAgICAgIC8vICAgfVxuXG4gICAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAgIC8vIGlmIChzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ3JldEZpbmFuY0VsZ2JsJykge1xuICAgICAgICAgICAgLy8gICBsZXQgZmluYW5jaWFsRWxpZ2liaWxpdHlBbnN3ZXJJbmRleDogYW55ID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoKHNpbmdsZUFuc3dlck9iajogYW55KSA9PiAoc2luZ2xlQW5zd2VyT2JqWydxdWVzdGlvbklkJ10gPT09IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gJiYgc2luZ2xlQW5zd2VyT2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSkpXG4gICAgICAgICAgICAvLyAgIGxldCBvYmo6IGFueSA9IHtcbiAgICAgICAgICAgIC8vICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXG4gICAgICAgICAgICAvLyAgICAgcXVlc3Rpb25JZDogc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgIC8vICAgICBhbnN3ZXI6IHRoaXMuc2hhcmVkU2VydmljZS5maW5hbmNpYWxFbGlnaWJpbGl0eSxcbiAgICAgICAgICAgIC8vICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxuICAgICAgICAgICAgLy8gICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcbiAgICAgICAgICAgIC8vICAgICBjbHVzdGVySWQ6IHNpbmdsZVF1ZXN0aW9uWydjbHVzdGVySWQnXSxcbiAgICAgICAgICAgIC8vICAgfTtcbiAgICAgICAgICAgIC8vICAgaWYgKGZpbmFuY2lhbEVsaWdpYmlsaXR5QW5zd2VySW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAvLyAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKG9iaik7XG4gICAgICAgICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tmaW5hbmNpYWxFbGlnaWJpbGl0eUFuc3dlckluZGV4XVsnYW5zd2VyJ10gPSB0aGlzLnNoYXJlZFNlcnZpY2UuZmluYW5jaWFsRWxpZ2liaWxpdHk7XG4gICAgICAgICAgICAvLyAgIH1cbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyB9KTtcbiAgICAgICAgLy8gfVxuICAgICAgfSk7XG4gICAgICBsZXQgZGlzdGluY3RQZXJzb25JZEZyb21SZXF1ZXN0OiBhbnkgPSBbXG4gICAgICAgIC4uLm5ldyBTZXQoXG4gICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5tYXAoKGl0ZW06IGFueSkgPT5cbiAgICAgICAgICAgIGl0ZW0ucGVyc29uVVdJZC50b1N0cmluZygpLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICBdO1xuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZGlzdGluY3RQZXJzb25JZEZyb21SZXF1ZXN0KSkge1xuICAgICAgICBtYWluUmVxdWVzdEZvckxhID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXG4gICAgICAgICAgKHNpbmdsZUFuc3dlcjogYW55KSA9PlxuICAgICAgICAgICAgc2luZ2xlQW5zd2VyWydwZXJzb25VV0lkJ10gPT09IGRpc3RpbmN0UGVyc29uSWRGcm9tUmVxdWVzdFswXSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGRpc3RpbmN0UGVyc29uSWRGcm9tUmVxdWVzdC5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICBtYWluUmVxdWVzdEZvclBoID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXG4gICAgICAgICAgICAoc2luZ2xlQW5zd2VyOiBhbnkpID0+XG4gICAgICAgICAgICAgIHNpbmdsZUFuc3dlclsncGVyc29uVVdJZCddID09PSBkaXN0aW5jdFBlcnNvbklkRnJvbVJlcXVlc3RbMV0sXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV0IHNhdmVSZXF1ZXN0c0FycmF5OiBhbnkgPSBbXTtcbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShtYWluUmVxdWVzdEZvckxhKSAmJlxuICAgICAgICB0aGlzLnBlcnNvblR5cGUoKSAhPT0gJ1BIJ1xuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc2F2ZVF1ZXN0aW9uUmVxdWVzdExhID0gbWFpblJlcXVlc3RGb3JMYTtcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgICAgICAnc2F2ZVF1ZXN0aW9uUmVxdWVzdExhJyxcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShtYWluUmVxdWVzdEZvckxhKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5jbHVzdGVySWQoKSkpIHtcbiAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgICAgICAgYExBXyR7dGhpcy5jbHVzdGVySWQoKX1gLFxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkobWFpblJlcXVlc3RGb3JMYSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzYXZlUmVxdWVzdHNBcnJheS5wdXNoKHRoaXMuY29tbW9uU2VydmljZS5zYXZlQW5zd2VycyhtYWluUmVxdWVzdEZvckxhLCAhY2FsbGVkRnJvbUNvbmZpcm1hdGlvbikpO1xuICAgICAgICAvLyBzYXZlUmVxdWVzdHNBcnJheS5wdXNoKHRoaXMuY29tbW9uU2VydmljZS5zYXZlQW5zd2VycyhtYWluUmVxdWVzdEZvckxhLCAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlLmlzRWRpdEFsbG93ZWRGb3JBZ2VudCkgJiYgdGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlLmlzRWRpdEFsbG93ZWRGb3JBZ2VudCAmJiB0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UuaXNFZGl0QWxsb3dlZEZvckFnZW50LnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJykgPyB0cnVlIDogIWNhbGxlZEZyb21Db25maXJtYXRpb24pKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShtYWluUmVxdWVzdEZvckxhKSAmJlxuICAgICAgICB0aGlzLnBlcnNvblR5cGUoKSA9PT0gJ1BIJ1xuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc2F2ZVF1ZXN0aW9uUmVxdWVzdFBoID0gbWFpblJlcXVlc3RGb3JMYTtcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgICAgICAnc2F2ZVF1ZXN0aW9uUmVxdWVzdFBoJyxcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShtYWluUmVxdWVzdEZvckxhKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5jbHVzdGVySWQoKSkpIHtcbiAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgICAgICAgYFBIXyR7dGhpcy5jbHVzdGVySWQoKX1gLFxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkobWFpblJlcXVlc3RGb3JMYSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyAgc2F2ZVJlcXVlc3RzQXJyYXkucHVzaCh0aGlzLmNvbW1vblNlcnZpY2Uuc2F2ZUFuc3dlcnMobWFpblJlcXVlc3RGb3JQaCwgIWNhbGxlZEZyb21Db25maXJtYXRpb24pKTtcbiAgICAgICAgLy8gc2F2ZVJlcXVlc3RzQXJyYXkucHVzaCh0aGlzLmNvbW1vblNlcnZpY2Uuc2F2ZUFuc3dlcnMobWFpblJlcXVlc3RGb3JQaCwgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZS5pc0VkaXRBbGxvd2VkRm9yQWdlbnQpICYmIHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZS5pc0VkaXRBbGxvd2VkRm9yQWdlbnQgJiYgdGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlLmlzRWRpdEFsbG93ZWRGb3JBZ2VudC50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpID8gdHJ1ZSA6ICFjYWxsZWRGcm9tQ29uZmlybWF0aW9uKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudmFsaWRhdGVNZWRpY2FsUXVlc3Rpb25zKCk7XG4gIH1cblxuICBnZXRDb29raWVWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvb2tpZSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpO1xuICAgIGxldCB0b2tlbk5hbWUgPSAnJztcbiAgICBsZXQgdG9rZW5WYWx1ZSA9ICcnO1xuICAgIGNvbnN0IGluZGV4MiA9IDI7XG4gICAgY29va2llLmZvckVhY2goKGRhdGEpID0+IHtcbiAgICAgIGlmIChkYXRhLnNwbGl0KCc9JylbMF0uaW5jbHVkZXMobmFtZSkgJiYgISFkYXRhLnNwbGl0KCc9JylbMV0pIHtcbiAgICAgICAgdG9rZW5OYW1lID0gZGF0YS5zcGxpdCgnPScpWzBdLnRyaW0oKTtcbiAgICAgICAgdG9rZW5WYWx1ZSA9IGRhdGEuc3BsaXQoJz0nKVsxXTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbmFtZSA9PT0gJ2xpbmsnICYmXG4gICAgICAgIGRhdGEuc3BsaXQoJz0nKVswXS5pbmNsdWRlcyhuYW1lKSAmJlxuICAgICAgICBkYXRhLnNwbGl0KCc9JylbaW5kZXgyXSAhPT0gbnVsbCAmJlxuICAgICAgICBkYXRhLnNwbGl0KCc9JylbaW5kZXgyXSAhPT0gdW5kZWZpbmVkXG4gICAgICApIHtcbiAgICAgICAgdG9rZW5WYWx1ZSA9IHRva2VuVmFsdWUgKyAnPScgKyBkYXRhLnNwbGl0KCc9JylbaW5kZXgyXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdG9rZW5WYWx1ZTtcbiAgfVxuXG4gIHZhbGlkYXRlTWVkaWNhbFF1ZXN0aW9ucyhmb2N1c09uSW5WYWxpZDogYW55ID0gZmFsc2UpIHtcbiAgICBsZXQgaXNWYWxpZDogYW55ID0gdHJ1ZTtcbiAgICBsZXQgdmFsaWRhdGlvbk1lc3NhZ2U6IGFueSA9ICcnO1xuICAgIHRoaXMucXVlc3Rpb25MaXN0LmZvckVhY2goKHNpbmdsZVNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10pICYmIGlzVmFsaWQpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSkgJiZcbiAgICAgICAgICAoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50b1VwcGVyQ2FzZSgpLnJlcGxhY2VBbGwoJyAnLCAnXycpID09PVxuICAgICAgICAgICAgJ1RFTExfVVNfTU9SRScgfHxcbiAgICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10udG9VcHBlckNhc2UoKS5yZXBsYWNlQWxsKCcgJywgJ18nKSA9PT1cbiAgICAgICAgICAgICAgJ0JBU0lDX0RFVEFJTFMnIHx8XG4gICAgICAgICAgICBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRvVXBwZXJDYXNlKCkucmVwbGFjZUFsbCgnICcsICdfJykgPT09XG4gICAgICAgICAgICAgICdQRVJTT05BTF9ERVRBSUxTJykgJiZcbiAgICAgICAgICBpc1ZhbGlkXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGhlaWdodCBlbnRlcmVkIGluIGZlZXRcbiAgICAgICAgICBpZiAodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J10gPT09ICdGRUVUJykge1xuICAgICAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzT2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxuICAgICAgICAgICAgICAob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEknLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxldCBoZWlnaHRJbkZlZXRPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXG4gICAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluSW5jaGVzT2JqKSAmJlxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluRmVldE9iaikgJiZcbiAgICAgICAgICAgICAgKHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10sXG4gICAgICAgICAgICAgICkgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10sXG4gICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgIHZhbGlkYXRpb25NZXNzYWdlID0gYFBsZWFzZSBlbnRlciBIZWlnaHQgaW4gRmVldCBhbmQgSW5jaGVzYDtcbiAgICAgICAgICAgICAgaWYgKGZvY3VzT25JblZhbGlkKSB7XG4gICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9ICdtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gaWYgKHRoaXMuc2hhcmVkU2VydmljZS5pc01hbmRhdG9yeUZpZWxkICYmICFzYXZlZHJhZnQgJiYgcmVkaXJlY3QpIHtcbiAgICAgICAgICAgICAgLy8gaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xuICAgICAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgICAgICAgICAgIC8vICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWJJbmRleCA9IHNpbmdsZVBlcnNvbkluZGV4O1xuICAgICAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xuICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgIC8vIGxldCBxdWVzdGlvbklkOiBhbnkgPSBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSArICdfJyArIHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgICAgICAgICAgICAvLyB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgICAgICAgICAgIC8vIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XG4gICAgICAgICAgICAgIC8vICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xuICAgICAgICAgICAgICAvLyAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgICAgICAgICAgICAvLyAgICAgbWVzc2FnZTogJ1BsZWFzZSBlbnRlciBIZWlnaHQgaW4gRmVldCBhbmQgSW5jaGVzIGZvciAnICsgcm9sZVxuICAgICAgICAgICAgICAvLyAgIH0pO1xuICAgICAgICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIGVudGVyIEhlaWdodCBpbiBGZWV0IGFuZCBJbmNoZXMgZm9yICcgKyByb2xlLCAnQ2xvc2UnKTtcblxuICAgICAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAgICAgLy8gcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGhlaWdodCBpbiBjbVxuICAgICAgICAgIGxldCBoZWlnaHRJbkNlbnRpbWV0ZXJPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXG4gICAgICAgICAgICAob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVCcsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0NNJyAmJlxuICAgICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J10sXG4gICAgICAgICAgICApICYmXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ2VudGltZXRlck9iaikgJiZcbiAgICAgICAgICAgIGlzVmFsaWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhbGlkYXRpb25NZXNzYWdlID0gYFBsZWFzZSBlbnRlciBIZWlnaHQgaW4gY2VudGltZXRlcmA7XG5cbiAgICAgICAgICAgIGlmIChmb2N1c09uSW5WYWxpZCkge1xuICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JZDogYW55ID0gJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCc7XG4gICAgICAgICAgICAgIHRoaXMuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25PYmo6IGFueSkgPT4ge1xuICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGJhc2ljIHF1ZXN0aW9uc1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmopICYmXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10pICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcbiAgICAgICAgICAgIGlzVmFsaWQgJiZcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ0lNQUdFIFRFWFQnICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVCcgJiZcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ0RFQ0xBUkFUSU9OJyAmJlxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdoYXJkQ29weUxhbmcnICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdQQVNTUE9SVF9VUExPQUQnICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVEYnICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVEknICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddLnRvU3RyaW5nKCkgPT09ICdOJyAmJlxuICAgICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddXSxcbiAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgIC8vICgoc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddICE9PSAnQ0hFQ0tCT1gnICYmXG4gICAgICAgICAgICAvLyAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV1bc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV0pKSB8fFxuICAgICAgICAgICAgLy8gICAoc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmICF0aGlzLnZhbGlkYXRlQ2hlY2tCb3hGaWVsZChzaW5nbGVRdWVzdGlvbk9iaiwgc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pKSlcbiAgICAgICAgICAgIGlzVmFsaWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhbGlkYXRpb25NZXNzYWdlID0gYFBsZWFzZSBlbnRlciBhbGwgdGhlIGRldGFpbHMgaW4gJHtzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddfWA7XG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChmb2N1c09uSW5WYWxpZCkge1xuICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JZDogYW55ID0gc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXTtcbiAgICAgICAgICAgICAgdGhpcy5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBpZiAoXG4gICAgICAgICAgLy8gICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdQQVNTUE9SVF9VUExPQUQnICYmXG4gICAgICAgICAgLy8gICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddID09PSAnTicgJiZcbiAgICAgICAgICAvLyAgIHNpbmdsZVF1ZXN0aW9uT2JqWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxuICAgICAgICAgIC8vICkge1xuICAgICAgICAgIC8vICAgbGV0IGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmo6IGFueSA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UucXVlc3Rpb25zUGFzc3BvcnRVcGxvYWRPYmouZmlsdGVyKChzaW5nbGVPYmo6IGFueSkgPT4gKHNpbmdsZU9ialsncGVyc29uVHlwZSddID09PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSAmJiB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlT2JqWydkbXNJZCddKSkpO1xuICAgICAgICAgIC8vICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9iaikpIHtcbiAgICAgICAgICAvLyAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KGAke2ZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ3F1ZXN0aW9uVHlwZSddfV8ke2ZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ3R5cGUnXX1fJHtmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydwZXJzb25UeXBlJ119YCk7XG4gICAgICAgICAgLy8gICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XG4gICAgICAgICAgLy8gICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xuICAgICAgICAgIC8vICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgICAgICAgIC8vICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSB1cGxvYWQgcGFzc3BvcnQgJyArIGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ2xhYmVsJ10gKyAnIGRvY3VtZW50IGZvciAnICsgcm9sZVxuICAgICAgICAgIC8vICAgICAgIH0pO1xuICAgICAgICAgIC8vICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uub3BlblNuYWNrQmFyKCdQbGVhc2UgdXBsb2FkIHBhc3Nwb3J0ICcgKyBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydsYWJlbCddICsgJyBkb2N1bWVudCBmb3IgJyArIHJvbGUsICdDbG9zZScpO1xuICAgICAgICAgIC8vICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XG4gICAgICAgICAgLy8gICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcbiAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgICAgICAgIC8vICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAgICAgICAvLyAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiAhdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XG4gICAgICAgICAgLy8gICAgICAgICBpZiAocm9sZSA9PT0gJ2xpZmUgYXNzdXJlZCcpIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgICAgICAgIC8vICAgICAgICAgfSBlbHNlIGlmIChyb2xlID09PSAncG9saWN5IGhvbGRlcicpIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX1BIJyk7XG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAgIC8vICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ2pvaW50bGlmZScpIHtcbiAgICAgICAgICAvLyAgICAgICAgIGNvbnNvbGUubG9nKFwiam9pbnQgbGlmZSBjYXNlXCIpO1xuICAgICAgICAgIC8vICAgICAgIH1cbiAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgIC8vICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgLy8gICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAvLyAgIH1cblxuICAgICAgICAgIC8vIH1cbiAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBkZWNsYXJhdGlvbiBxdWVzdGlvbnNcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc1ZhbGlkICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvblR5cGUgPT09ICdERUNMQVJBVElPTicgJiZcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddKSAmJlxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSA9PT0gJ04nXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIChpc1ZhbGlkICYmXG4gICAgICAgICAgICAgICAgLy8gIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV0pICYmXG4gICAgICAgICAgICAgICAgLy8gKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKSAmJlxuICAgICAgICAgICAgICAgIC8vICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF0pICYmXG4gICAgICAgICAgICAgICAgLy8gICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddKSAmJlxuICAgICAgICAgICAgICAgIC8vICAgKCghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9ialsncm9sZSddXVtzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pICYmXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV0gPT09XG4gICAgICAgICAgICAgICAgICAnTicpIHx8XG4gICAgICAgICAgICAgICF0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddXSB8fFxuICAgICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLy8gKVxuICAgICAgICAgICAgICAvLyB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIGFsbCB0aGUgZGV0YWlscyBpbiAke3NpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ119YDtcblxuICAgICAgICAgICAgICBpZiAoZm9jdXNPbkluVmFsaWQpIHtcbiAgICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JZDogYW55ID0gc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgbWVkaWNhbCBzdWIgcXVlc3Rpb25zXG4gICAgICAgICAgLy8gaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZSkpIHtcbiAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UuZm9yRWFjaCgocXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgIC8vICAgICBpZiAoXG4gICAgICAgICAgLy8gICAgICAgdGhpcy5zaG93U3ViUXVlc3Rpb24ocXVlc3Rpb24pICYmXG4gICAgICAgICAgLy8gICAgICAgcXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddICE9PSAnSU1BR0UgVEVYVCcgJiZcbiAgICAgICAgICAvLyAgICAgICBxdWVzdGlvblsnb3B0aW9uYWxRdWVzdGlvbiddLnRvU3RyaW5nKCkgPT09ICdOJyAmJlxuICAgICAgICAgIC8vICAgICAgICgocXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddICE9PSAnQ0hFQ0tCT1gnICYmXG4gICAgICAgICAgLy8gICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkJ11bcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0pKSB8fFxuICAgICAgICAgIC8vICAgICAgICAgKHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJiAhdGhpcy52YWxpZGF0ZUNoZWNrQm94RmllbGQocXVlc3Rpb24sICdsaWZlQXNzdXJlZCcpKSlcbiAgICAgICAgICAvLyAgICAgKSB7XG4gICAgICAgICAgLy8gICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgIC8vICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmxvYWRpbmdBZ2VudHBvcnRhbCAmJiAhc2F2ZWRyYWZ0KSB7XG4gICAgICAgICAgLy8gICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XG4gICAgICAgICAgLy8gICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAgICAgICAvLyAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBhbnN3ZXIgYWxsIG1lZGljYWwgc3ViIHF1ZXN0aW9ucyAnICsgcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSArICcgJyArIHF1ZXN0aW9uWydxdWVzdGlvblRleHQnXVxuICAgICAgICAgIC8vICAgICAgICAgfSk7XG4gICAgICAgICAgLy8gICAgICAgfVxuICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgLy8gICB9KTtcbiAgICAgICAgICAvLyB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGZhdGNoIGRlY2xhcmF0aW9uXG4gICAgICAgIC8vIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvbi5xdWVzdGlvbnMpICYmIGlzVmFsaWQpe1xuICAgICAgICAvLyBzaW5nbGVTZWN0aW9uLnF1ZXN0aW9ucy5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iajphbnkpID0+IHtcbiAgICAgICAgLy8gICBpZihpc1ZhbGlkICYmIHNpbmdsZVF1ZXN0aW9uT2JqLnF1ZXN0aW9uVHlwZSA9PT0gJ0RFQ0xBUkFUSU9OJyAmJiBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcbiAgICAgICAgLy8gICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddKSAmJlxuICAgICAgICAvLyAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddID09PSAnTidcbiAgICAgICAgLy8gICAgICl7XG4gICAgICAgIC8vICAgICAgIGlmKCBpc1ZhbGlkICYmXG4gICAgICAgIC8vICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV0pICYmXG4gICAgICAgIC8vICAgICAgICAgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKSAmJlxuICAgICAgICAvLyAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF0pICYmXG4gICAgICAgIC8vICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddKSAgJiZcbiAgICAgICAgLy8gICAgICAgICAgICgoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV1bc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSAmJlxuICAgICAgICAvLyAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqWydyb2xlJ11dW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSA9PT0gJ04nKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqWydyb2xlJ11dW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkpKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKSkge1xuXG4gICAgICAgIC8vICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xuICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiSW5kZXggPSBzaW5nbGVQZXJzb25JbmRleDtcbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAvLyAgICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5sb2FkaW5nQWdlbnRwb3J0YWwgJiYgIXNhdmVkcmFmdCkge1xuICAgICAgICAvLyBsZXQgcXVlc3Rpb25JZDogYW55ID0gc2luZ2xlUXVlc3Rpb25PYmoucXVlc3Rpb25JZCArICdfJyArIHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgICAgICAvLyAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcbiAgICAgICAgLy8gICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xuICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xuICAgICAgICAvLyAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgICAgIC8vICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2Ugc2VsZWN0IGFsbCB0aGUgZGV0YWlscyBpbiAnICsgc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSArICcgZm9yICcgKyByb2xlXG4gICAgICAgIC8vICAgICAgICAgICB9KTtcbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyAgICAgICAgICB9XG4gICAgICAgIC8vICAgICAgIH1cbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vIH0pO1xuICAgICAgICAvLyB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoXG4gICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVHlwZSgpKSAmJlxuICAgICAgdGhpcy5wZXJzb25UeXBlKCkgPT09ICdQSCdcbiAgICApIHtcbiAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2lzTWVkaWNhbFF1ZXN0aW9uc1ZhbGlkRm9yUEgnLCBpc1ZhbGlkKTtcbiAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXG4gICAgICAgICd2YWxpZGF0aW9uTWVzc2FnZUZvck1lZGljYWxRdWVzdGlvbnNGb3JQSCcsXG4gICAgICAgIHZhbGlkYXRpb25NZXNzYWdlLFxuICAgICAgKTtcbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuY2x1c3RlcklkKCkpKSB7XG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oYFBIXyR7dGhpcy5jbHVzdGVySWQoKX1faXNWYWxpZGAsIGlzVmFsaWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdpc01lZGljYWxRdWVzdGlvbnNWYWxpZCcsIGlzVmFsaWQpO1xuICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgICAgJ3ZhbGlkYXRpb25NZXNzYWdlRm9yTWVkaWNhbFF1ZXN0aW9ucycsXG4gICAgICAgIHZhbGlkYXRpb25NZXNzYWdlLFxuICAgICAgKTtcblxuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5jbHVzdGVySWQoKSkpIHtcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShgTEFfJHt0aGlzLmNsdXN0ZXJJZCgpfV9pc1ZhbGlkYCwgaXNWYWxpZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFsdWVDaGFuZ2VGb3JNdWx0aXNlbGVjdChxdWVzdGlvbjogYW55KSB7XG4gICAgaWYgKFxuICAgICAgcXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdMaWZlTWVkaUNuZHRuJyB8fFxuICAgICAgcXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdNZWRpQ25kdG4nXG4gICAgKSB7XG4gICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1txdWVzdGlvblsncXVlc3Rpb25JZCddXS5sZW5ndGggPiAwO1xuXG4gICAgICAvLyBpZiBub25lIGlzIHNlbGVjdGVkIHRoZW4gcmVtb3ZlIGFsbCBhbmQgY2FsbCBBUElcbiAgICAgIGxldCBpc05vbmVTZWxlY3RlZDogYW55ID0gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgIHF1ZXN0aW9uWydxdWVzdGlvbklkJ11cbiAgICAgIF0uZmluZEluZGV4KChzaW5nbGVPYmo6IGFueSkgPT4gc2luZ2xlT2JqID09PSAnTm9NZWRIaXN0cnknKTtcblxuICAgICAgaWYgKGlzTm9uZVNlbGVjdGVkICE9PSAtMSkge1xuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1txdWVzdGlvblsncXVlc3Rpb25JZCddXSA9IHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgIHF1ZXN0aW9uWydxdWVzdGlvbklkJ11cbiAgICAgICAgXSA9IHRoaXMucGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dLmZpbHRlcihcbiAgICAgICAgICAoc2luZ2xlT2JqOiBhbnkpID0+IHNpbmdsZU9iaiA9PT0gJ05vTWVkSGlzdHJ5JyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlID0gW107XG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnF1ZXN0aW9uTGlzdCkpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkxpc3QgPSB0aGlzLnF1ZXN0aW9uTGlzdC5maWx0ZXIoXG4gICAgICAgICAgKHNpbmdsZVNlY3Rpb246IGFueSkgPT5cbiAgICAgICAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddKSB8fFxuICAgICAgICAgICAgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSkgJiZcbiAgICAgICAgICAgICAgIXNpbmdsZVNlY3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10pLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgLy8gbGV0IGN1cnJlbnRTZWN0aW9uSW5kZXg6IGFueSA9IHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleChcbiAgICAgIC8vICAgKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PlxuICAgICAgLy8gICAgIHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PVxuICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd01hc3Rlck9ialtzaW5nbGVQZXJzb25JbmRleF1bJ3JvbGUnXVxuICAgICAgLy8gKTtcbiAgICAgIC8vIHJlbW92ZSBtZWRpY2FsIHN1YiBxdWVzdGlvbnMgZnJvbSBxdWVzdGlvbnMgcmVzcG9uc2UgbGlzdFxuICAgICAgLy8gaWYgKFxuICAgICAgLy8gICBjdXJyZW50U2VjdGlvbkluZGV4ICE9PSB0aGlzLm51bWJlckNvbnN0YW50Lm51bWJlcm1pbnVzMSAmJlxuICAgICAgLy8gICAhdGhpcy5zaGFyZWRjaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW1xuICAgICAgLy8gICAgICAgY3VycmVudFNlY3Rpb25JbmRleFxuICAgICAgLy8gICAgIF1cbiAgICAgIC8vICAgKSAmJlxuICAgICAgLy8gICAhdGhpcy5zaGFyZWRjaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW1xuICAgICAgLy8gICAgICAgY3VycmVudFNlY3Rpb25JbmRleFxuICAgICAgLy8gICAgIF1bJ3F1ZXN0aW9uTGlzdCddXG4gICAgICAvLyAgIClcbiAgICAgIC8vICkge1xuICAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bXG4gICAgICAvLyAgIGN1cnJlbnRTZWN0aW9uSW5kZXhcbiAgICAgIC8vIF1bJ3F1ZXN0aW9uTGlzdCddID0gdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbXG4gICAgICAvLyAgICdxdWVzdGlvbnNSZXNwb25zZSdcbiAgICAgIC8vIF1bY3VycmVudFNlY3Rpb25JbmRleF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcihcbiAgICAgIC8vICAgKHNpbmdsZUxpc3RJdGVtOiBhbnkpID0+XG4gICAgICAvLyAgICAgdGhpcy5zaGFyZWRjaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgLy8gICAgICAgc2luZ2xlTGlzdEl0ZW1bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ11cbiAgICAgIC8vICAgICApIHx8XG4gICAgICAvLyAgICAgKCF0aGlzLnNoYXJlZGNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAvLyAgICAgICBzaW5nbGVMaXN0SXRlbVsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXVxuICAgICAgLy8gICAgICkgJiZcbiAgICAgIC8vICAgICAgICFzaW5nbGVMaXN0SXRlbVsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSlcbiAgICAgIC8vICk7XG4gICAgICAvLyB9XG4gICAgICAvLyB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVtcbiAgICAgIC8vICAgJ3F1ZXN0aW9uTGlzdCdcbiAgICAgIC8vIF0uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgICAgLy8gICBpZiAoc2luZ2xlUXVlc3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10pIHtcbiAgICAgIC8vICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVtcbiAgICAgIC8vICAgICAgICdxdWVzdGlvbkxpc3QnXG4gICAgICAvLyAgICAgXS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9KTtcblxuICAgICAgLy8gdGhpcy5xdWVzdGlvbkxpc3QgPSB0aGlzLnF1ZXN0aW9uTGlzdC5maWx0ZXIoKHNpbmdsZVNlY3Rpb24gOiBhbnkpID0+ICghc2luZ2xlU2VjdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSkpKTtcbiAgICAgIC8vIHRoaXMucXVlc3Rpb25MaXN0LmZvckVhY2goKHNpbmdsZU1hc3Rlck9iajogYW55LCBpOiBudW1iZXIpID0+IHtcbiAgICAgIC8vICAgaWYgKHNpbmdsZU1hc3Rlck9ialsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSkge1xuICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd01hc3Rlck9ialtzaW5nbGVQZXJzb25JbmRleF1bXG4gICAgICAvLyAgICAgICAncXVlc3Rpb25MaXN0J1xuICAgICAgLy8gICAgIF1bJ3F1ZXN0aW9ucyddID0gW107XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH0pO1xuICAgICAgLy8gdGhpcy5sb2FkZXIuZGlzcGxheSh0cnVlKTtcblxuICAgICAgbGV0IHNlbGVjdGVkRGlzZWFzZXM6IGFueSA9XG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dLnRvU3RyaW5nKCk7XG4gICAgICAvLyBsZXQgcmVxdWVzdDogYW55ID0gSlNPTi5wYXJzZShcbiAgICAgIC8vICAgSlNPTi5zdHJpbmdpZnkoXG4gICAgICAvLyAgICAgdGhpcy5mZXRjaFN1YlF1ZXN0aW9uc0xpc3RbXG4gICAgICAvLyAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdNYXN0ZXJPYmpbc2luZ2xlUGVyc29uSW5kZXhdWydyb2xlJ11cbiAgICAgIC8vICAgICBdLnRvU3RyaW5nKClcbiAgICAgIC8vICAgKVxuICAgICAgLy8gKTtcbiAgICAgIGlmIChcbiAgICAgICAgcXVlc3Rpb25bJ2ZpZWxkJ11bJ2NvbmZpZ0RhdGEnXS5oYXNPd25Qcm9wZXJ0eSgnYXBpVXJsJykgJiZcbiAgICAgICAgcXVlc3Rpb25bJ2ZpZWxkJ11bJ2NvbmZpZ0RhdGEnXS5oYXNPd25Qcm9wZXJ0eSgndXJsUGFyYW1Gb3JEaXNlYXNlJykgJiZcbiAgICAgICAgcXVlc3Rpb25bJ2ZpZWxkJ11bJ2NvbmZpZ0RhdGEnXS5oYXNPd25Qcm9wZXJ0eShcbiAgICAgICAgICAndXJsUGFyYW1Gb3JQZXJzb25Vd0lkJyxcbiAgICAgICAgKSAmJlxuICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHF1ZXN0aW9uWydmaWVsZCddWydjb25maWdEYXRhJ11bJ2FwaVVybCddKSAmJlxuICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgIHF1ZXN0aW9uWydmaWVsZCddWydjb25maWdEYXRhJ11bJ3VybFBhcmFtRm9yRGlzZWFzZSddLFxuICAgICAgICApICYmXG4gICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgcXVlc3Rpb25bJ2ZpZWxkJ11bJ2NvbmZpZ0RhdGEnXVsndXJsUGFyYW1Gb3JQZXJzb25Vd0lkJ10sXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICB0aGlzLm1hc3RlclNlcnZpY2VcbiAgICAgICAgICAuZ2V0U3ViUXVlc3Rpb25zKFxuICAgICAgICAgICAgcXVlc3Rpb25bJ2ZpZWxkJ11bJ2NvbmZpZ0RhdGEnXSxcbiAgICAgICAgICAgIHNlbGVjdGVkRGlzZWFzZXMsXG4gICAgICAgICAgICB0aGlzLnBlcnNvblV3SWQsXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIC8vIHRoaXMubG9hZGVyLmRpc3BsYXkoZmFsc2UpO1xuICAgICAgICAgICAgICBsZXQgZGlzdGluY3RTdGVwczogYW55ID0gW107XG4gICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgZGF0YS5mb3JFYWNoKChzdWJRdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10gPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsnZG9tYWluVmFsdWVzJ11bXG4gICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2RvbWFpbk5hbWUnXVxuICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXSxcbiAgICAgICAgICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheShzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddKVxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10gPSBbXG4gICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXSxcbiAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmXG4gICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXSlcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddLmZvckVhY2goXG4gICAgICAgICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmo6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5leHRRdWVzdGlvbk9iamVjdDogYW55ID0gZGF0YS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChvYmplY3Q6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RbJ3F1ZXN0aW9uSWQnXSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqWyduZXh0UXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0UXVlc3Rpb25PYmplY3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0UXVlc3Rpb25PYmplY3RbMF1bJ2Fuc3dlcmVkVmFsdWUnXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9ialsncGFyZW50UXVlc3Rpb25WYWx1ZSddO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAvLyBpZiAoXG4gICAgICAgICAgICAgICAgICAvLyAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICAvLyAgICAgc3ViUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddXG4gICAgICAgICAgICAgICAgICAvLyAgIClcbiAgICAgICAgICAgICAgICAgIC8vICkge1xuICAgICAgICAgICAgICAgICAgLy8gICBzdWJRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaCgoc3ViRG9tYWluOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc3ViTWVkaWNhbFF1ZXN0aW9uc0RvbWFpbkludGVybmFsVmFsdWVzTGlzdC5wdXNoKFxuICAgICAgICAgICAgICAgICAgLy8gICAgICAgc3ViRG9tYWluWydkb21haW5JbnRlcm5hbFZhbHVlJ11cbiAgICAgICAgICAgICAgICAgIC8vICAgICApO1xuICAgICAgICAgICAgICAgICAgLy8gICB9KTtcbiAgICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICAgIGlmICghZGlzdGluY3RTdGVwcy5pbmNsdWRlcyhzdWJRdWVzdGlvblsnY2x1c3RlcklkJ10pKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0U3RlcHMucHVzaChzdWJRdWVzdGlvblsnY2x1c3RlcklkJ10pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2ZpZWxkJ10gPSB0aGlzLmdldEZpZWxkKHN1YlF1ZXN0aW9uKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBkYXRhLnNvcnQoXG4gICAgICAgICAgICAgICAgICAoYTogYW55LCBiOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgIGFbJ3N0ZXAnXSAtIGJbJ3N0ZXAnXSB8fFxuICAgICAgICAgICAgICAgICAgICBhWydkaXNwbGF5T3JkZXInXSAtIGJbJ2Rpc3BsYXlPcmRlciddLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5mb3JFYWNoKChzdGVwczogYW55LCBpbmQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkT2JqOiBhbnkgPSBkYXRhLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2NsdXN0ZXJJZCddID09PSBzdGVwcyxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ZXA6IDEwMDAgKyBpbmQsXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uczogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iailcbiAgICAgICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkT2JqXG4gICAgICAgICAgICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbk5hbWU6ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRPYmopXG4gICAgICAgICAgICAgICAgICAgICAgPyBmaWx0ZXJlZE9ialswXVsndGl0bGUnXVxuICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHRoaXMucGVyc29uVXdJZCxcbiAgICAgICAgICAgICAgICAgICAgaXNNZWRpY2FsU3ViUXVlc3Rpb246IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHNob3dTZWN0aW9uOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25MaXN0LnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgLy8gbWVyZ2UgbWVkaWNhbCBzdWIgcXVlc3Rpb25zIGludG8gcGVyc29uIHV3IG1haW4gcXVlc3Rpb25zIHJlc3BvbnNlIChyZXF1aXJlZCBmb3Igc2hvdyBxdWVzdGlvbiBmdW5jdGlvbiB0byB3b3JrKVxuICAgICAgICAgICAgICAgIC8vIGNsZWFyaW5nIG9uIHRvcCBiZWZvcmUgYXBpIGNhbGxcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbMF1bJ3F1ZXN0aW9uTGlzdCddID1cbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdSZXNwb25zZU9ialswXVsncXVlc3Rpb25MaXN0J10uY29uY2F0KFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAvLyB0aGlzLmxvYWRlci5kaXNwbGF5KGZhbHNlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xuICB9XG4gIG9uRG9jdW1lbnRGaWxlUHJldmlldyhldmVudDogeyBmaWxlOiBGaWxlOyBpbmRleDogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnUHJldmlldyByZXF1ZXN0ZWQgZm9yOicsIGV2ZW50LmZpbGUubmFtZSk7XG4gICAgdGhpcy5wcmV2aWV3RmlsZSA9IGV2ZW50LmZpbGU7XG4gIH1cblxuICBjbG9zZUZpbGVQcmV2aWV3KCk6IHZvaWQge1xuICAgIHRoaXMucHJldmlld0ZpbGUgPSBudWxsO1xuICB9XG5cbiAgY2hlY2tBbmRVcGRhdGVIZWlnaHRVbml0KCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnRkVFVCcgJiZcbiAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXSxcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGxldCBoZWlnaHRJbkluY2hlczogYW55ID0gKFxuICAgICAgICBwYXJzZUZsb2F0KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXSkgKlxuICAgICAgICAwLjM5MzcwMVxuICAgICAgKS50b0ZpeGVkKDIpO1xuICAgICAgbGV0IGhlaWdodEluRmVldDogYW55ID1cbiAgICAgICAgcGFyc2VGbG9hdCgoaGVpZ2h0SW5JbmNoZXMgLyAxMikudG9TdHJpbmcoKS5zcGxpdCgnLicpWzFdKSA+IDEyXG4gICAgICAgICAgPyAoaGVpZ2h0SW5JbmNoZXMgLyAxMikudG9GaXhlZCgxKVxuICAgICAgICAgIDogKGhlaWdodEluSW5jaGVzIC8gMTIpLnRvRml4ZWQoMik7XG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkZlZXQudG9TdHJpbmcoKS5zcGxpdCgnLicpWzBdKSkge1xuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10gPSBoZWlnaHRJbkZlZXRcbiAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgIC5zcGxpdCgnLicpWzBdO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0LnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXSkpIHtcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddID1cbiAgICAgICAgICBoZWlnaHRJbkZlZXQudG9TdHJpbmcoKS5zcGxpdCgnLicpWzFdICE9PSAnMTEnICYmXG4gICAgICAgICAgaGVpZ2h0SW5GZWV0LnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXSAhPT0gJzEyJyAmJlxuICAgICAgICAgIGhlaWdodEluRmVldC50b1N0cmluZygpLnNwbGl0KCcuJylbMV0gIT09ICcxMydcbiAgICAgICAgICAgID8gaGVpZ2h0SW5GZWV0LnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXS5jaGFyQXQoMClcbiAgICAgICAgICAgIDogaGVpZ2h0SW5GZWV0LnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J10gPT09ICdDTScgJiZcbiAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSxcbiAgICAgICkgJiZcbiAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSxcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGxldCBoZWlnaHRJbkluY2hlczogYW55ID1cbiAgICAgICAgcGFyc2VGbG9hdChcbiAgICAgICAgICBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddLFxuICAgICAgICAgICkudG9TdHJpbmcoKSArXG4gICAgICAgICAgICAnLicgK1xuICAgICAgICAgICAgcGFyc2VGbG9hdChcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddLFxuICAgICAgICAgICAgKS50b1N0cmluZygpLFxuICAgICAgICApICogMTI7XG4gICAgICBsZXQgaGVpZ2h0SW5DbTogYW55ID0gKHBhcnNlRmxvYXQoaGVpZ2h0SW5JbmNoZXMpIC8gMC4zOTM3MDEpLnRvRml4ZWQoMik7XG4gICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J10gPSBoZWlnaHRJbkNtO1xuICAgIH1cbiAgICB0aGlzLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XG4gIH1cblxuICBmb2N1c1RvRWxlbWVudChlbGVtZW50SWQ6IGFueSkge1xuICAgIGNvbnN0IGVsZW1lbnRDb2xsZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlbGVtZW50SWQpO1xuICAgIGNvbnN0IGhlYWRlck9mZnNldCA9IDEyMDtcbiAgICBpZiAoIWVsZW1lbnRDb2xsZWN0aW9uIHx8IGVsZW1lbnRDb2xsZWN0aW9uLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlbGVtZW50ID0gZWxlbWVudENvbGxlY3Rpb25bMF0gYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBjb25zdCBzY3JvbGxDb250YWluZXI6IGFueSA9IHRoaXMuZ2V0U2Nyb2xsYWJsZVBhcmVudChlbGVtZW50KTtcblxuICAgIC8vIFdhaXQgZm9yIHRoZSBuZXh0IGZyYW1lIHNvIGxheW91dCBpcyBzZXR0bGVkIGJlZm9yZSBzY3JvbGxpbmcuXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnRSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPVxuICAgICAgICBzY3JvbGxDb250YWluZXIgPT09IHdpbmRvd1xuICAgICAgICAgID8geyB0b3A6IDAgfVxuICAgICAgICAgIDogKHNjcm9sbENvbnRhaW5lciBhcyBIVE1MRWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRTY3JvbGwgPVxuICAgICAgICBzY3JvbGxDb250YWluZXIgPT09IHdpbmRvd1xuICAgICAgICAgID8gd2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgfHwgMFxuICAgICAgICAgIDogKHNjcm9sbENvbnRhaW5lciBhcyBIVE1MRWxlbWVudCkuc2Nyb2xsVG9wO1xuXG4gICAgICBjb25zdCB0YXJnZXRQb3NpdGlvbiA9XG4gICAgICAgIGVsZW1lbnRSZWN0LnRvcCAtIGNvbnRhaW5lclJlY3QudG9wICsgY3VycmVudFNjcm9sbCAtIGhlYWRlck9mZnNldDtcblxuICAgICAgaWYgKHNjcm9sbENvbnRhaW5lciA9PT0gd2luZG93KSB7XG4gICAgICAgIHdpbmRvdy5zY3JvbGxUbyh7IHRvcDogdGFyZ2V0UG9zaXRpb24sIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIChzY3JvbGxDb250YWluZXIgYXMgSFRNTEVsZW1lbnQpLnNjcm9sbFRvKHtcbiAgICAgICAgICB0b3A6IHRhcmdldFBvc2l0aW9uLFxuICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGVsZW1lbnQuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdibGlua19tZScsICdpbnZhbGlkLWZpZWxkLW9uZS11aScpO1xuXG4gICAgICAvLyBSZW1vdmUgYmxpbmsgYW5pbWF0aW9uIGFmdGVyIGR1cmF0aW9uXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdibGlua19tZScpO1xuICAgICAgfSwgMzUwMCk7XG5cbiAgICAgIC8vIFJlbW92ZSBpbnZhbGlkLWZpZWxkLW9uZS11aSBjbGFzcyB3aGVuIHVzZXIgaW50ZXJhY3RzIHdpdGggdGhlIGZpZWxkXG4gICAgICBjb25zdCByZW1vdmVJbnZhbGlkQ2xhc3MgPSAoZXZlbnQ/OiBhbnkpID0+IHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdpbnZhbGlkLWZpZWxkLW9uZS11aScpO1xuICAgICAgICAvLyBDbGVhbiB1cCBhbGwgZXZlbnQgbGlzdGVuZXJzIGZyb20gbWFpbiBlbGVtZW50XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignaW5wdXQnLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHJlbW92ZUludmFsaWRDbGFzcyk7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW1vdmVJbnZhbGlkQ2xhc3MsIHRydWUpO1xuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ25nTW9kZWxDaGFuZ2UnLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuXG4gICAgICAgIC8vIENsZWFuIHVwIGV2ZW50IGxpc3RlbmVycyBmcm9tIGNoaWxkIHJhZGlvL2NoZWNrYm94IGlucHV0c1xuICAgICAgICBjb25zdCByYWRpb0lucHV0cyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbdHlwZT1cInJhZGlvXCJdJyk7XG4gICAgICAgIGNvbnN0IGNoZWNrYm94SW5wdXRzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAgICdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nLFxuICAgICAgICApO1xuICAgICAgICByYWRpb0lucHV0cy5mb3JFYWNoKChyYWRpbzogYW55KSA9PiB7XG4gICAgICAgICAgcmFkaW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgcmVtb3ZlSW52YWxpZENsYXNzKTtcbiAgICAgICAgICByYWRpby5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHJlbW92ZUludmFsaWRDbGFzcyk7XG4gICAgICAgIH0pO1xuICAgICAgICBjaGVja2JveElucHV0cy5mb3JFYWNoKChjaGVja2JveDogYW55KSA9PiB7XG4gICAgICAgICAgY2hlY2tib3gucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgcmVtb3ZlSW52YWxpZENsYXNzKTtcbiAgICAgICAgICBjaGVja2JveC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHJlbW92ZUludmFsaWRDbGFzcyk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgLy8gRm9yIHRleHRib3ggLSB0cmlnZ2VycyBvbiB0eXBpbmdcbiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuXG4gICAgICAvLyBGb3Igc2VsZWN0IGRyb3Bkb3duIC0gdHJpZ2dlcnMgb24gdmFsdWUgY2hhbmdlXG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHJlbW92ZUludmFsaWRDbGFzcyk7XG5cbiAgICAgIC8vIEZvciBkaXJlY3QgY2xpY2sgb24gdGhlIGVsZW1lbnQgLSB1c2UgY2FwdHVyZSBwaGFzZSB0byBjYXRjaCBjaGlsZCBldmVudHNcbiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW1vdmVJbnZhbGlkQ2xhc3MsIHRydWUpO1xuXG4gICAgICAvLyBGb3IgQW5ndWxhciBuZ01vZGVsIGNoYW5nZXNcbiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbmdNb2RlbENoYW5nZScsIHJlbW92ZUludmFsaWRDbGFzcyk7XG5cbiAgICAgIC8vIEhhbmRsZSByYWRpbyBidXR0b25zIHdpdGhpbiB0aGUgZWxlbWVudCAoY29tbW9uIGluIEFuZ3VsYXIgZm9ybXMpXG4gICAgICBjb25zdCByYWRpb0lucHV0cyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbdHlwZT1cInJhZGlvXCJdJyk7XG4gICAgICByYWRpb0lucHV0cy5mb3JFYWNoKChyYWRpbzogYW55KSA9PiB7XG4gICAgICAgIHJhZGlvLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHJlbW92ZUludmFsaWRDbGFzcyk7XG4gICAgICAgIHJhZGlvLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVtb3ZlSW52YWxpZENsYXNzKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBIYW5kbGUgY2hlY2tib3hlcyB3aXRoaW4gdGhlIGVsZW1lbnQgKGZvciBtdWx0aS1zZWxlY3QpXG4gICAgICBjb25zdCBjaGVja2JveElucHV0cyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJyk7XG4gICAgICBjaGVja2JveElucHV0cy5mb3JFYWNoKChjaGVja2JveDogYW55KSA9PiB7XG4gICAgICAgIGNoZWNrYm94LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHJlbW92ZUludmFsaWRDbGFzcyk7XG4gICAgICAgIGNoZWNrYm94LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVtb3ZlSW52YWxpZENsYXNzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTY3JvbGxhYmxlUGFyZW50KG5vZGU6IEhUTUxFbGVtZW50IHwgbnVsbCk6IEhUTUxFbGVtZW50IHwgV2luZG93IHtcbiAgICBsZXQgcGFyZW50ID0gbm9kZT8ucGFyZW50RWxlbWVudDtcbiAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICBjb25zdCBvdmVyZmxvd1kgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnQpLm92ZXJmbG93WTtcbiAgICAgIGlmIChvdmVyZmxvd1kgPT09ICdhdXRvJyB8fCBvdmVyZmxvd1kgPT09ICdzY3JvbGwnKSB7XG4gICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICB9XG4gICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50RWxlbWVudDtcbiAgICB9XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxufVxuIiwiPGRpdiAqbmdGb3I9XCJsZXQgc2VjdGlvbiBvZiBxdWVzdGlvbkxpc3RcIj5cbiAgPGRpdiAqbmdJZj1cIlxuICAgICAgICAhY2hlY2tJZlZhbHVlSXNFbXB0eShzZWN0aW9uWydxdWVzdGlvbnMnXSkgJiZcbiAgICAgICAgc2VjdGlvblsnc2hvd1NlY3Rpb24nXVxuICAgICAgXCIgY2xhc3M9XCJjYXJkIHAtMyBtYi00XCIgaWQ9XCJwZXJzb25Vd01lZGljYWxRdWVzdGlvbnNcIj5cbiAgICA8aDYgY2xhc3M9XCJwYWdlLXRpdGxlIGJvbGQtbGFiZWxcIj5cbiAgICAgIHt7IGdldFRpdGxlQ2FzZShzZWN0aW9uW1wic2VjdGlvbk5hbWVcIl0pIH19XG4gICAgPC9oNj5cbiAgICA8bGliLWhyLWxpbmUgW2ZpZWxkXT1cImhvcml6b250YWxMaW5lT2JqXCIgLz5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBxdWVzdGlvbnMgb2Ygc2VjdGlvblsncXVlc3Rpb25zJ11cIiBjbGFzcz1cInJvd1wiPlxuICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0lNQUdFIFRFWFQnXCI+XG4gICAgICAgICAgPGltZyBbc3JjXT1cInF1ZXN0aW9uc1snc2FtcGxlUzNMaW5rJ11cIiBjbGFzcz1cImQtYmxvY2sgbXgtYXV0b1wiIFthbHRdPVwicXVlc3Rpb25zWyd0aXRsZSddXCI+XG4gICAgICAgICAgPGgzIFtpbm5lckhUTUxdPVwicXVlc3Rpb25zWydxdWVzdGlvblRleHQnXVwiPjwvaDM+XG4gICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgPGRpdiBbbmdDbGFzc109XCJxdWVzdGlvbnM/LmZpZWxkPy5jc3NDbGFzc1wiICpuZ0lmPVwiXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnRlJFRSBURVhUJyAmJlxuICAgICAgICAgICAgcXVlc3Rpb25zWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnUUhUJyAmJlxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxuICAgICAgICAgIFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIHB4LTAgbXktMVwiPlxuICAgICAgICAgIDxsaWItdGV4dGJveCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1txdWVzdGlvbnMucXVlc3Rpb25JZF1cIiBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCJcbiAgICAgICAgICAgIChibHVyKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucyk7IHJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIiAvPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJlcnJvci1tZXNzYWdlIHRleHQtZGFuZ2VyIG10LTFcIiAqbmdJZj1cImhhc0FueUZpZWxkRXJyb3IocXVlc3Rpb25zLnF1ZXN0aW9uSWQpXCI+XG4gICAgICAgICAgICB7eyBnZXRGaWVsZEVycm9yTWVzc2FnZShxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IFtuZ0NsYXNzXT1cInF1ZXN0aW9ucz8uZmllbGQ/LmNzc0NsYXNzXCIgKm5nSWY9XCJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdIRUlHSFRJTlBVVCcgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImNhcmQtdG9waWMgZC1ibG9jayBmaWVsZC1sYWJsZVwiPkhlaWdodFxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6ICNlZTAwMDBcIj4mIzQyOzwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGRpdiBbY2xhc3NdPVwiICdjb2wtYXV0byBweC0wIG15LTAgcHktMCBoZWlnaHRpbnB1dCBtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXCJcbiAgICAgICAgICBpZD1cIm1lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dFwiIChmb2N1c291dCk9XCJ2YWxpZGF0ZUZpZWxkKHF1ZXN0aW9ucy5xdWVzdGlvbklkLCBxdWVzdGlvbnMpXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBjb2wtMTIgbXktMVwiICpuZ0lmPVwicGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnQ00nXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgcHktMCBoZWlnaHRJbnB1dHNcIj5cbiAgICAgICAgICAgICAgPGxpYi10ZXh0Ym94IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXVwiXG4gICAgICAgICAgICAgICAgKGJsdXIpPVwidmFsaWRhdGVGaWVsZChxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKVwiIChuZ01vZGVsQ2hhbmdlKT1cInJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIlxuICAgICAgICAgICAgICAgIFtmaWVsZF09XCJtZWRRdWVzdGlvbk9ialsnUUhUJ11bJ2ZpZWxkJ11cIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTVcIj5cbiAgICAgICAgICAgICAgPGxpYi1zZWxlY3QgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J11cIlxuICAgICAgICAgICAgICAgIFtmaWVsZF09XCJtZWRRdWVzdGlvbk9ialsnaGVpZ2h0T2JqZWN0VHlwZXMnXVwiIChibHVyKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucylcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucyk7IGNoZWNrQW5kVXBkYXRlSGVpZ2h0VW5pdCgpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIHBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCdcbiAgICAgICAgICAgICAgICBdID09PSAnRkVFVCdcbiAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgcHktMCBteS0xXCI+XG4gICAgICAgICAgICAgIDxsaWItc2VsZWN0IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXVwiXG4gICAgICAgICAgICAgICAgKGJsdXIpPVwidmFsaWRhdGVGaWVsZChxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKVwiIChuZ01vZGVsQ2hhbmdlKT1cInJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIlxuICAgICAgICAgICAgICAgIFtmaWVsZF09XCJtZWRRdWVzdGlvbk9ialsnUUhURiddWydmaWVsZCddXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IHB5LTAgbXktMVwiPlxuICAgICAgICAgICAgICA8bGliLXNlbGVjdCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J11cIlxuICAgICAgICAgICAgICAgIChibHVyKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucylcIiAobmdNb2RlbENoYW5nZSk9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCJcbiAgICAgICAgICAgICAgICBbZmllbGRdPVwibWVkUXVlc3Rpb25PYmpbJ1FIVEknXVsnZmllbGQnXVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBweS0wIG15LTFcIj5cbiAgICAgICAgICAgICAgPGxpYi1zZWxlY3QgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J11cIlxuICAgICAgICAgICAgICAgIFtmaWVsZF09XCJtZWRRdWVzdGlvbk9ialsnaGVpZ2h0T2JqZWN0VHlwZXMnXVwiIChibHVyKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucylcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoZWNrQW5kVXBkYXRlSGVpZ2h0VW5pdCgpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXJyb3ItbWVzc2FnZSB0ZXh0LWRhbmdlciBtdC0xXCIgKm5nSWY9XCJoYXNBbnlGaWVsZEVycm9yKHF1ZXN0aW9ucy5xdWVzdGlvbklkKVwiPlxuICAgICAgICAgICAge3sgZ2V0RmllbGRFcnJvck1lc3NhZ2UocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucykgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBtdC0wIHB0LTBcIiAqbmdJZj1cIlxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ01BUCcgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cbiAgICAgICAgICBcIj5cblxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYXAtY29udGFpbmVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFkZHJlc3Mtc2VhcmNoLWNvbnRhaW5lciBtYi0zXCI+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGNhcmQtdG9waWNcIj5Mb25naXR1ZGU8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBbKG5nTW9kZWwpXT1cImxvbmdpdHVkZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIGxvbmdpdHVkZVwiIHN0ZXA9XCJhbnlcIiByZWFkb25seVxuICAgICAgICAgICAgICAgICAgKGJsdXIpPVwidmFsaWRhdGVGaWVsZChxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKVwiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBjYXJkLXRvcGljXCI+TGF0aXR1ZGU8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBbKG5nTW9kZWwpXT1cImxhdGl0dWRlXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgbGF0aXR1ZGVcIiBzdGVwPVwiYW55XCIgcmVhZG9ubHlcbiAgICAgICAgICAgICAgICAgIChibHVyKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucylcIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGlucHV0ICNhZGRyZXNzSW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGZvciBhZGRyZXNzXCJcbiAgICAgICAgICAgICAgKGtleXVwKT1cIm9uQWRkcmVzc0lucHV0S2V5dXAoJGV2ZW50KVwiIChmb2N1cyk9XCJzaG93RHJvcGRvd24gPSB0cnVlXCIgKGJsdXIpPVwib25JbnB1dEJsdXIoKVwiXG4gICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dEcm9wZG93biAmJiBhZGRyZXNzU3VnZ2VzdGlvbnMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYXV0b2NvbXBsZXRlLWRyb3Bkb3duIHBvc2l0aW9uLWFic29sdXRlIHctMTAwIG10LTFcIlxuICAgICAgICAgICAgICBzdHlsZT1cInotaW5kZXg6IDEwMDA7IG1heC1oZWlnaHQ6IDIwMHB4OyBvdmVyZmxvdy15OiBhdXRvOyBiYWNrZ3JvdW5kOiB3aGl0ZTsgYm9yZGVyOiAxcHggc29saWQgI2NjYzsgYm9yZGVyLXJhZGl1czogNHB4OyBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLDAsMCwwLjEpO1wiPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzdWdnZXN0aW9uIG9mIGFkZHJlc3NTdWdnZXN0aW9uczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwiZHJvcGRvd24taXRlbSBwLTJcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZTtcIiAobW91c2Vkb3duKT1cInNlbGVjdEFkZHJlc3Moc3VnZ2VzdGlvbilcIlxuICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cImhvdmVyZWRJbmRleCA9IGlcIiBbY2xhc3MuYmctbGlnaHRdPVwiaG92ZXJlZEluZGV4ID09PSBpXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LWJvbGRcIj57eyBzdWdnZXN0aW9uLm1haW5fdGV4dCB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWRcIj57eyBzdWdnZXN0aW9uLnNlY29uZGFyeV90ZXh0IH19PC9zbWFsbD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWRcIj5TdGFydCB0eXBpbmcgdG8gc2VhcmNoIGZvciBhZGRyZXNzZXM8L3NtYWxsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxnb29nbGUtbWFwIFtjZW50ZXJdPVwiY2VudGVyXCIgW3pvb21dPVwiem9vbVwiPlxuICAgICAgICAgICAgPG1hcC1tYXJrZXIgW3Bvc2l0aW9uXT1cImN1cnJlbnRDb29yZGluYXRlc1wiPjwvbWFwLW1hcmtlcj5cbiAgICAgICAgICA8L2dvb2dsZS1tYXA+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cblxuICAgICAgPGRpdiBbbmdDbGFzc109XCJxdWVzdGlvbnM/LmZpZWxkPy5jc3NDbGFzc1wiICpuZ0lmPVwiXG4gICAgICAgICAgICAocXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ1JBRElPIEJVVFRPTicgfHxcbiAgICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0FERE1PUkUnKSAmJlxuICAgICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCI+XG4gICAgICAgIDxsaWItcmFkaW8gWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25zLnF1ZXN0aW9uSWRdXCJcbiAgICAgICAgICAoYmx1cik9XCJ2YWxpZGF0ZUZpZWxkKHF1ZXN0aW9ucy5xdWVzdGlvbklkLCBxdWVzdGlvbnMpXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZUZpZWxkKHF1ZXN0aW9ucy5xdWVzdGlvbklkLCBxdWVzdGlvbnMpOyByZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCJcbiAgICAgICAgICBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCIgLz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVycm9yLW1lc3NhZ2UgdGV4dC1kYW5nZXIgbXQtMVwiICpuZ0lmPVwiaGFzQW55RmllbGRFcnJvcihxdWVzdGlvbnMucXVlc3Rpb25JZClcIj5cbiAgICAgICAgICB7eyBnZXRGaWVsZEVycm9yTWVzc2FnZShxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwibXktMVwiIFtuZ0NsYXNzXT1cInF1ZXN0aW9ucz8uZmllbGQ/LmNzc0NsYXNzXCIgKm5nSWY9XCJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cbiAgICAgICAgICBcIj5cbiAgICAgICAgPGxpYi1tdWx0aXBsZS1zZWxlY3QgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25zLnF1ZXN0aW9uSWRdXCJcbiAgICAgICAgICAoY2xpY2spPVwidmFsaWRhdGVGaWVsZChxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiXG4gICAgICAgICAgICB2YWxpZGF0ZUZpZWxkKHF1ZXN0aW9ucy5xdWVzdGlvbklkLCBxdWVzdGlvbnMpO1xuICAgICAgICAgICAgdmFsdWVDaGFuZ2VGb3JNdWx0aXNlbGVjdChxdWVzdGlvbnMpXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCJcbiAgICAgICAgLz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVycm9yLW1lc3NhZ2UgdGV4dC1kYW5nZXIgbXQtMVwiICpuZ0lmPVwiaGFzQW55RmllbGRFcnJvcihxdWVzdGlvbnMucXVlc3Rpb25JZClcIj5cbiAgICAgICAgICB7eyBnZXRGaWVsZEVycm9yTWVzc2FnZShxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwibXktMVwiIFtuZ0NsYXNzXT1cInF1ZXN0aW9ucz8uZmllbGQ/LmNzc0NsYXNzXCIgKm5nSWY9XCJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdERUNMQVJBVElPTicgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cbiAgICAgICAgICBcIj5cbiAgICAgICAgPGxpYi1jaGVja2JveCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1txdWVzdGlvbnMucXVlc3Rpb25JZF1cIlxuICAgICAgICAgIChibHVyKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucylcIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucyk7IHJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIlxuICAgICAgICAgIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAvPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXJyb3ItbWVzc2FnZSB0ZXh0LWRhbmdlciBtdC0xXCIgKm5nSWY9XCJoYXNBbnlGaWVsZEVycm9yKHF1ZXN0aW9ucy5xdWVzdGlvbklkKVwiPlxuICAgICAgICAgIHt7IGdldEZpZWxkRXJyb3JNZXNzYWdlKHF1ZXN0aW9ucy5xdWVzdGlvbklkLCBxdWVzdGlvbnMpIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJteS0xXCIgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIiAqbmdJZj1cIlxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0RST1BET1dOJyAmJlxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxuICAgICAgICAgXCIgKGZvY3Vzb3V0KT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucylcIj5cbiAgICAgICAgPGxpYi1zZWxlY3QgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25zLnF1ZXN0aW9uSWRdXCIgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiXG4gICAgICAgICAgKGJsdXIpPVwidmFsaWRhdGVGaWVsZChxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVGaWVsZChxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKTsgcmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKVwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJlcnJvci1tZXNzYWdlIHRleHQtZGFuZ2VyIG10LTFcIiAqbmdJZj1cImhhc0FueUZpZWxkRXJyb3IocXVlc3Rpb25zLnF1ZXN0aW9uSWQpXCI+XG4gICAgICAgICAge3sgZ2V0RmllbGRFcnJvck1lc3NhZ2UocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucykgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cIm15LTFcIiBbbmdDbGFzc109XCJxdWVzdGlvbnM/LmZpZWxkPy5jc3NDbGFzc1wiICpuZ0lmPVwiXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCI+XG4gICAgICAgIDxsaWItZG9iIFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIlxuICAgICAgICAgIChibHVyKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucylcIiAobmdNb2RlbENoYW5nZSk9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgLz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVycm9yLW1lc3NhZ2UgdGV4dC1kYW5nZXIgbXQtMVwiICpuZ0lmPVwiaGFzQW55RmllbGRFcnJvcihxdWVzdGlvbnMucXVlc3Rpb25JZClcIj5cbiAgICAgICAgICB7eyBnZXRGaWVsZEVycm9yTWVzc2FnZShxdWVzdGlvbnMucXVlc3Rpb25JZCwgcXVlc3Rpb25zKSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIDxkaXZcbiAgICAgICAgICBjbGFzcz1cIlwiXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdIRUlHSFRJTlBVVCcgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwibXktMVwiIFtuZ0NsYXNzXT1cInF1ZXN0aW9ucz8uZmllbGQ/LmNzc0NsYXNzXCIgKm5nSWY9XCJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdET0NVUExPQUQnICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCI+XG4gICAgICAgIDxsaWItdXBsb2FkIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAoZmlsZVByZXZpZXcpPVwib25Eb2N1bWVudEZpbGVQcmV2aWV3KCRldmVudClcIlxuICAgICAgICAgIChibHVyKT1cInZhbGlkYXRlRmllbGQocXVlc3Rpb25zLnF1ZXN0aW9uSWQsIHF1ZXN0aW9ucyk7XCIgLz5cbiAgICAgICAgPGxpYi1maWxlLXByZXZpZXcgKm5nSWY9XCIgcHJldmlld0ZpbGVcIiBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCIgW2ZpbGVdPVwicHJldmlld0ZpbGVcIlxuICAgICAgICAgIChjbG9zZWQpPVwiY2xvc2VGaWxlUHJldmlldygpXCI+XG4gICAgICAgIDwvbGliLWZpbGUtcHJldmlldz5cbiAgICAgIDwvZGl2PlxuXG5cbiAgICAgIDxkaXYgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIiAqbmdJZj1cIlxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ1BBU1NQT1JUX1VQTE9BRCcgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cbiAgICAgICAgICBcIj5cbiAgICAgICAgPCEtLSBwZW5kaW5nIC0tPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+Il19