ms-data-grid 0.0.139 → 0.0.140

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.
@@ -1082,7 +1082,7 @@ export class DataGridComponent {
1082
1082
  this.showVerticalBorder = this.defaultConfig.showVerticalBorder || false;
1083
1083
  this.fontFaimly = this.defaultConfig.fontFaimly || 'Inter';
1084
1084
  this.headerTextFontsSize = this.defaultConfig.headerTextFontsSize || 14;
1085
- this.selectedTableLayout = this.defaultConfig.selectedTableLayout || 'medium';
1085
+ this.selectedTableLayout = this.defaultConfig.selectedTableLayout;
1086
1086
  this.bodyTextFontsSize = this.defaultConfig.bodyTextFontsSize || 14;
1087
1087
  this.globalSearchText = this.defaultConfig.globalSearch;
1088
1088
  this.setTableLayout(this.selectedTableLayout);
@@ -1097,7 +1097,7 @@ export class DataGridComponent {
1097
1097
  this.showVerticalBorder = false;
1098
1098
  this.fontFaimly = 'Inter';
1099
1099
  this.headerTextFontsSize = 14;
1100
- this.selectedTableLayout = 'medium';
1100
+ this.selectedTableLayout = this.selectedTableLayout || 'medium';
1101
1101
  this.bodyTextFontsSize = 14;
1102
1102
  this.globalSearchText = '';
1103
1103
  this.presetName = '';
@@ -1344,7 +1344,7 @@ export class DataGridComponent {
1344
1344
  showVerticalBorder: this.showVerticalBorder || false,
1345
1345
  fontFaimly: this.fontFaimly || 'Inter',
1346
1346
  headerTextFontsSize: Number(this.headerTextFontsSize) || 14,
1347
- selectedTableLayout: this.selectedTableLayout || 'mediumd',
1347
+ selectedTableLayout: this.selectedTableLayout || 'medium',
1348
1348
  bodyTextFontsSize: Number(this.bodyTextFontsSize) || 14,
1349
1349
  globalSearch: this.globalSearchText,
1350
1350
  filterNames: '',
@@ -6050,4 +6050,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
6050
6050
  type: ViewChild,
6051
6051
  args: ['fullscreenImageTemplate']
6052
6052
  }] } });
6053
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEtZ3JpZC9zcmMvbGliL2RhdGEtZ3JpZC9kYXRhLWdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1ncmlkL3NyYy9saWIvZGF0YS1ncmlkL2RhdGEtZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBSU4sU0FBUyxFQUVULFlBQVksRUFFWixZQUFZLEVBTVosdUJBQXVCLEVBRXZCLFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFVTCxlQUFlLEdBQ2hCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUNMLE9BQU8sRUFDUCxLQUFLLEVBQ0wsS0FBSyxFQUNMLFVBQVUsRUFDVixPQUFPLEVBQ1AsS0FBSyxFQUNMLE9BQU8sR0FDUixNQUFNLHFCQUFxQixDQUFDO0FBSTdCLE9BQU8sRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzVDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBR3JFLE9BQU8sMkNBQTJDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE0Qm5ELE1BQU0sQ0FBTixJQUFZLGdCQVFYO0FBUkQsV0FBWSxnQkFBZ0I7SUFDMUIsaUNBQWEsQ0FBQTtJQUNiLDhDQUEwQixDQUFBO0lBQzFCLDhDQUEwQixDQUFBO0lBQzFCLGlEQUE2QixDQUFBO0lBQzdCLDBDQUFzQixDQUFBO0lBQ3RCLDBDQUFzQixDQUFBO0lBQ3RCLGlEQUE2QixDQUFBO0FBQy9CLENBQUMsRUFSVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBUTNCO0FBR0QsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLFVBQVUsRUFBRTtJQUNsRCxVQUFVLENBQUMsUUFBUSxFQUFFO1FBQ25CLHlDQUF5QztRQUN6QyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUUzRixnREFBZ0Q7UUFDaEQsS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUNkLE9BQU8sQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ2hGLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFFdEIsc0RBQXNEO1FBQ3RELEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFDZCxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3BELE9BQU8sQ0FBQyxFQUFFLEVBQUU7Z0JBQ1YsT0FBTyxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDN0UsQ0FBQztTQUNILEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7S0FDdkIsQ0FBQztDQUNILENBQUMsQ0FBQztBQStKSCxNQUFNLE9BQU8saUJBQWlCO0lBaWE1QixZQUNVLGFBQWtDLEVBQ25DLEdBQXNCLEVBQ3RCLFlBQTJCLEVBQzFCLFVBQXNCLEVBQ3RCLE1BQWMsRUFDZCxXQUErQixFQUMvQixRQUFtQixFQUNuQixTQUF1QixFQUN2QixhQUE0QixFQUM1QixRQUFrQixFQUNsQixjQUFrQyxFQUNsQyxlQUFrQyxFQUNsQyxrQkFBdUMsRUFDdkMsb0JBQWtEO1FBYmxELGtCQUFhLEdBQWIsYUFBYSxDQUFxQjtRQUNuQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBZTtRQUMxQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFDL0IsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3ZCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsbUJBQWMsR0FBZCxjQUFjLENBQW9CO1FBQ2xDLG9CQUFlLEdBQWYsZUFBZSxDQUFtQjtRQUNsQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQXFCO1FBQ3ZDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBOEI7UUE5YTVELDRDQUE0QztRQUM1Qyw0Q0FBNEM7UUFDNUMsNkNBQTZDO1FBQzdDLDRDQUE0QztRQUM1Qyw0Q0FBNEM7UUFHbkMsaUJBQVksR0FBcUIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1FBRWhFLCtCQUErQjtRQUN0QixxQkFBZ0IsR0FBUSxJQUFJLENBQUM7UUFFdEMsMEJBQTBCO1FBQ2pCLFlBQU8sR0FBVSxFQUFFLENBQUM7UUFFN0IseUJBQXlCO1FBQ2hCLFlBQU8sR0FBVSxFQUFFLENBQUM7UUFFN0IsY0FBYztRQUNMLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFFaEMscUJBQXFCO1FBQ1osb0JBQWUsR0FBVyxFQUFFLENBQUM7UUFFdEMseUJBQXlCO1FBQ2hCLHVCQUFrQixHQUFZLEtBQUssQ0FBQztRQUU3Qyw4QkFBOEI7UUFDckIsNEJBQXVCLEdBQXVCLEVBQUUsQ0FBQztRQUUxRCw4QkFBOEI7UUFDckIsMkJBQXNCLEdBQXVCLFNBQVMsQ0FBQztRQUVoRSxnQ0FBZ0M7UUFDdkIsMEJBQXFCLEdBQVcsU0FBUyxDQUFDO1FBRW5ELGdDQUFnQztRQUN2Qiw4QkFBeUIsR0FBVyxTQUFTLENBQUM7UUFFdkQseUJBQXlCO1FBQ2hCLHdCQUFtQixHQUFZLEtBQUssQ0FBQztRQUU5QyxnQ0FBZ0M7UUFDdkIsa0JBQWEsR0FBdUIsd0JBQXdCLENBQUM7UUFFdEUsK0JBQStCO1FBQ3RCLDhCQUF5QixHQUF1QixTQUFTLENBQUM7UUFFbkUseUJBQXlCO1FBQ2hCLHdCQUFtQixHQUF1QixTQUFTLENBQUM7UUFFN0QsaUNBQWlDO1FBQ3hCLCtCQUEwQixHQUF1QixTQUFTLENBQUM7UUFFcEUsOEJBQThCO1FBQ3JCLDRCQUF1QixHQUF1QixTQUFTLENBQUM7UUFFakUsbUJBQW1CO1FBQ1Ysa0JBQWEsR0FBdUIsU0FBUyxDQUFDO1FBRXZELHFCQUFxQjtRQUNaLG9CQUFlLEdBQXVCLFNBQVMsQ0FBQztRQUV6RCxxQkFBcUI7UUFDWixvQkFBZSxHQUF1QixTQUFTLENBQUM7UUFFekQsb0JBQW9CO1FBQ1gsd0JBQW1CLEdBQXVCLEVBQUUsQ0FBQztRQUV0RCxtQkFBbUI7UUFDVixzQkFBaUIsR0FBdUIsRUFBRSxDQUFDO1FBRXBELHNCQUFzQjtRQUNiLHFCQUFnQixHQUF1QixHQUFHLENBQUM7UUFFcEQsb0JBQW9CO1FBQ1gsbUJBQWMsR0FBdUIsR0FBRyxDQUFDO1FBRWxELGdDQUFnQztRQUN2Qiw4QkFBeUIsR0FBdUIsV0FBVyxDQUFDO1FBRXJFLDhCQUE4QjtRQUNyQiw2QkFBd0IsR0FBdUIsU0FBUyxDQUFDO1FBR3pELDZCQUF3QixHQUF1QixFQUFFLENBQUM7UUFFM0QscUJBQXFCO1FBQ1osb0JBQWUsR0FBVyxFQUFFLENBQUM7UUFFdEMscUJBQXFCO1FBQ1osb0NBQStCLEdBQXVCLEVBQUUsQ0FBQztRQUVsRSwwQkFBMEI7UUFDakIscUJBQWdCLEdBQXdCLEtBQUssQ0FBQztRQUV2RCwwQkFBMEI7UUFDakIsa0JBQWEsR0FBd0IsS0FBSyxDQUFDO1FBRXBELDBCQUEwQjtRQUNqQixlQUFVLEdBQXVCLFlBQVksQ0FBQztRQUV2RCxtQkFBbUI7UUFDVixpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUV2QyxpQkFBaUI7UUFDUixrQkFBYSxHQUFXLENBQUMsQ0FBQTtRQUdsQyxpQkFBaUI7UUFDUix1QkFBa0IsR0FBVyxFQUFFLENBQUM7UUFFekMsb0JBQW9CO1FBQ1gsc0JBQWlCLEdBQVksS0FBSyxDQUFDO1FBRTVDLG9CQUFvQjtRQUNYLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUUzQyxpQ0FBaUM7UUFDeEIsd0JBQW1CLEdBQVcsU0FBUyxDQUFDO1FBR2pELGtCQUFrQjtRQUNULGtCQUFhLEdBQVUsRUFBRSxDQUFDO1FBR25DLGtCQUFrQjtRQUNULFlBQU8sR0FBWSxLQUFLLENBQUM7UUFFbEMsMEJBQTBCO1FBQ2pCLDJCQUFzQixHQUFvQixNQUFNLENBQUM7UUFFMUQsNEJBQTRCO1FBQ25CLDZCQUF3QixHQUFvQixNQUFNLENBQUM7UUFFNUQsd0JBQXdCO1FBQ2YsdUJBQWtCLEdBQVksS0FBSyxDQUFDO1FBRTdDLGFBQWE7UUFFSixlQUFVLEdBQVcsRUFBRSxDQUFBO1FBRWhDLGFBQWE7UUFDSixnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUdsQyxhQUFhO1FBQ0osWUFBTyxHQUFVLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBTXBDLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBRWxDLHFCQUFxQjtRQUNaLGdCQUFXLEdBQUcsS0FBSyxDQUFBO1FBRTVCLDhCQUE4QjtRQUNyQixjQUFTLEdBQUcsSUFBSSxDQUFBO1FBR3pCLGVBQWU7UUFDTixnQkFBVyxHQUFxQixFQUFFLENBQUM7UUFFNUMsZUFBZTtRQUVOLGtCQUFhLEdBQXVCO1lBQzNDLEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQTtRQUVELGtCQUFrQjtRQUNULG1CQUFjLEdBQVUsRUFBRSxDQUFBO1FBR25DLG9DQUFvQztRQUMzQixrQkFBYSxHQUErQyxJQUFJLENBQUM7UUFHakUsc0JBQWlCLEdBQVEsRUFBRSxDQUFDO1FBRzVCLHdCQUFtQixHQUFRLFFBQVEsQ0FBQTtRQUVuQyxrQkFBYSxHQUFzRCxFQUFFLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7UUFFMUgsYUFBYTtRQUViLGVBQWU7UUFDTixxQkFBZ0IsR0FBVyxFQUFFLENBQUM7UUFFdkMsNEJBQTRCO1FBQ25CLDJCQUFzQixHQUFHLEVBQUUsQ0FBQztRQUVyQyxxQ0FBcUM7UUFDNUIsK0JBQTBCLEdBQUcsRUFBRSxDQUFDO1FBRXpDLDBCQUEwQjtRQUNqQix5QkFBb0IsR0FBRyxFQUFFLENBQUM7UUFFMUIsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFJN0IsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUV0QixtQkFBYyxHQUFXLEVBQUUsQ0FBQztRQUU1QixtQkFBYyxHQUFXLEVBQUUsQ0FBQztRQUU1Qix3QkFBbUIsR0FBVyxFQUFFLENBQUM7UUFFakMseUJBQW9CLEdBQVcsRUFBRSxDQUFDO1FBRTNDLGVBQWU7UUFDTixnQ0FBMkIsR0FBVyxTQUFTLENBQUM7UUFFekQsZUFBZTtRQUNOLHFDQUFnQyxHQUFXLFNBQVMsQ0FBQztRQUdyRCxrQ0FBNkIsR0FBVyxTQUFTLENBQUM7UUFFbEQsY0FBUyxHQUFVLEVBQUUsQ0FBQztRQUV0QixZQUFPLEdBQW9GLEVBQUUsQ0FBQztRQUU5RixnQ0FBMkIsR0FBRyxLQUFLLENBQUM7UUFHcEMsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBRzNCLHVCQUFrQixHQUFHLElBQUksQ0FBQztRQUcxQixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBR2YsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFHckIseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBRzdCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFHbEIsU0FBSSxHQUFhLEVBQUUsQ0FBQztRQUVwQixtQkFBYyxHQUFHLElBQUksQ0FBQztRQUV0QixvQkFBZSxHQUFHLElBQUksQ0FBQztRQUd2QixvQkFBZSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFHakUsb0JBQWUsR0FBRyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUV0QyxrQkFBYSxHQUEwQixJQUFJLENBQUM7UUFHNUMsOEJBQXlCLEdBQUc7WUFDbkMsV0FBVyxFQUFFLElBQUk7WUFDakIsWUFBWSxFQUFFLElBQUk7WUFDbEIsYUFBYSxFQUFFLElBQUk7WUFDbkIsY0FBYyxFQUFFLElBQUk7WUFDcEIsVUFBVSxFQUFFLElBQUk7WUFDaEIsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUN2QyxzQkFBc0IsRUFBRSxJQUFJO1lBQzVCLHNCQUFzQixFQUFFLEtBQUs7WUFDN0IsZ0JBQWdCLEVBQUUsS0FBSztZQUN2QixnQkFBZ0IsRUFBRSxLQUFLO1NBQ3hCLENBQUM7UUFFSix5QkFBeUI7UUFDZCxpQkFBWSxHQUFhLEtBQUssQ0FBQztRQWN2QixpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFdkMsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRTNELHNCQUFzQjtRQUNMLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUUvQyxpQkFBWSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXJELHNCQUFpQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRTFELHdCQUFtQixHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBRWpFLDhCQUF5QixHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBT2pGLG9CQUFlLEdBQVcsRUFBRSxDQUFDO1FBQzdCLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLGNBQVMsR0FBa0IsSUFBSSxDQUFDO1FBQ2hDLG1CQUFjLEdBQVUsRUFBRSxDQUFDO1FBQzNCLGNBQVMsR0FBUSxJQUFJLENBQUM7UUFDdEIscUJBQWdCLEdBQVEsSUFBSSxDQUFDO1FBQzdCLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUM1QixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUN4QixjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLGlCQUFZLEdBQVcsRUFBRSxDQUFDO1FBQzFCLHdCQUFtQixHQUFHLElBQUksQ0FBQztRQUMzQiwyQkFBc0IsR0FBNkIsSUFBSSxDQUFDO1FBQ3hELG9CQUFlLEdBQVUsRUFBRSxDQUFDO1FBQzVCLG9CQUFlLEdBQVUsRUFBRSxDQUFDO1FBQzVCLG9CQUFlLEdBQWtCLEVBQUUsQ0FBQztRQUNwQyxzQkFBaUIsR0FBVSxFQUFFLENBQUM7UUFDOUIsb0JBQWUsR0FBRyxHQUFHLENBQUM7UUFDdEIsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUN4QixpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUM5QiwwQkFBcUIsR0FBRyxFQUFFLENBQUM7UUFDM0IseUJBQW9CLEdBQUcsRUFBRSxDQUFDO1FBQzFCLHFCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUNkLGNBQVMsR0FBRyxnQkFBZ0IsQ0FBQTtRQUNwQyw0QkFBdUIsR0FBRyxFQUFFLENBQUE7UUFDNUIsdUJBQWtCLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLHVCQUFrQixHQUFHLEVBQUUsQ0FBQTtRQUN2QiwyQkFBc0IsR0FBRyxFQUFFLENBQUE7UUFDM0IseUJBQW9CLEdBQUcsRUFBRSxDQUFDO1FBQzFCLDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQUM5QixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUNkLG9CQUFlLEdBQWEsRUFBRSxDQUFDO1FBQ3ZDLGlCQUFZLEdBQWE7WUFDdkIscUJBQXFCO1lBQ3JCLE9BQU87WUFDUCxhQUFhO1lBQ2IsYUFBYTtZQUNiLFNBQVM7WUFDVCxTQUFTO1lBQ1QsY0FBYztZQUNkLE1BQU07WUFDTixTQUFTO1lBQ1QsZUFBZTtZQUNmLFVBQVU7WUFDVixZQUFZO1lBQ1osUUFBUTtZQUNSLGFBQWE7WUFDYixRQUFRO1lBQ1Isd0JBQXdCO1lBQ3hCLFVBQVU7WUFDVixRQUFRO1lBQ1IsU0FBUztZQUNULFFBQVE7WUFDUixVQUFVO1lBQ1YsZUFBZTtZQUNmLGVBQWU7WUFDZixnQkFBZ0I7WUFDaEIscUJBQXFCO1lBQ3JCLGVBQWU7WUFDZixvQkFBb0I7WUFDcEIsb0JBQW9CO1lBQ3BCLHVCQUF1QjtZQUN2QixtQkFBbUI7WUFDbkIsc0JBQXNCO1lBQ3RCLGtCQUFrQjtZQUNsQixpQkFBaUI7WUFDakIsb0JBQW9CO1lBQ3BCLGlCQUFpQjtZQUNqQixXQUFXO1lBQ1gsWUFBWTtZQUNaLGNBQWM7WUFDZCxTQUFTO1lBQ1QsWUFBWTtZQUNaLG1CQUFtQjtZQUNuQixhQUFhO1lBQ2IsY0FBYztZQUNkLFVBQVU7WUFDVixtQkFBbUI7WUFDbkIsZ0JBQWdCO1lBQ2hCLGlCQUFpQjtZQUNqQixRQUFRO1lBQ1IsYUFBYTtZQUNiLFNBQVM7WUFDVCxRQUFRO1lBQ1IsUUFBUTtZQUNSLGlCQUFpQjtZQUNqQixjQUFjO1lBQ2QsU0FBUztZQUNULFVBQVU7WUFDVixXQUFXO1lBQ1gsV0FBVztZQUNYLFlBQVk7WUFDWixPQUFPO1lBQ1AsV0FBVztZQUNYLE9BQU87U0FDUixDQUFDO1FBRUYsY0FBUyxHQUFhO1lBQ3BCLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7U0FDekQsQ0FBQztRQUVGLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFpRFYsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQTBDckMsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBc0QzQixrQ0FBa0M7UUFDbEMsOENBQThDO1FBQzlDLFlBQVk7UUFDWiw2R0FBNkc7UUFDN0csb0JBQW9CO1FBQ3BCLHFCQUFxQjtRQUNyQixRQUFRO1FBQ1IsTUFBTTtRQUVOLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBK1B2QixzQkFBaUIsR0FBVSxFQUFFLENBQUM7UUFDOUIsa0JBQWEsR0FBVSxFQUFFLENBQUM7UUFDMUIsdUJBQWtCLEdBQVUsRUFBRSxDQUFDO1FBRS9CLDZCQUF3QixHQUFVLEVBQUUsQ0FBQztRQUNyQyx5QkFBb0IsR0FBVSxFQUFFLENBQUM7UUFDakMsOEJBQXlCLEdBQVUsRUFBRSxDQUFDO1FBc0h0QywrQkFBK0I7UUFDL0IscUVBQXFFO1FBQ3JFLHVFQUF1RTtRQUV2RSw0REFBNEQ7UUFDNUQsNkRBQTZEO1FBQzdELDhEQUE4RDtRQUU5RCxpREFBaUQ7UUFDakQsbUVBQW1FO1FBQ25FLG9FQUFvRTtRQUNwRSxJQUFJO1FBRUosNkJBQTZCO1FBQzdCLG1FQUFtRTtRQUNuRSwrREFBK0Q7UUFDL0QsOERBQThEO1FBQzlELElBQUk7UUFDSiw4QkFBOEI7UUFDOUIsb0VBQW9FO1FBQ3BFLCtEQUErRDtRQUMvRCw2REFBNkQ7UUFDN0QsSUFBSTtRQUVKLDRCQUF1QixHQUFHLENBQUMsQ0FBQztRQStWNUIsdUJBQXVCO1FBQ3ZCLGlCQUFZLEdBQTJCLElBQUksQ0FBQztRQXlGNUMsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUEyRmQsMEJBQXFCLEdBQUcsQ0FBQyxPQUFjLEVBQVMsRUFBRTtZQUN4RCxNQUFNLE1BQU0sR0FBVSxFQUFFLENBQUM7WUFDekIsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUU7Z0JBQzVCLElBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDckQsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztpQkFDN0Q7cUJBQU0sSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFO29CQUM1QixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUNyQjthQUNGO1lBQ0QsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQyxDQUFDO1FBNE1GLGlDQUFpQztRQUVqQyxpQkFBWSxHQUFnQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBaVd0QyxvQkFBZSxHQUFHLEtBQUssQ0FBQztRQW1IeEIsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBRzVCLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixnQkFBVyxHQUFVLEVBQUUsQ0FBQztRQW1FeEIseUJBQW9CLEdBQUcsQ0FBQyxDQUFTLEVBQUUsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUU5RCxzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDMUIsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzFCLGtCQUFhLEdBQWtCLElBQUksQ0FBQztRQU01QyxrQkFBYSxHQUFVLEVBQUUsQ0FBQztRQVMxQiw0QkFBNEI7UUFDcEIsa0JBQWEsR0FBa0IsSUFBSSxDQUFDO1FBRzVDLCtCQUErQjtRQUMvQixnQ0FBZ0M7UUFDaEMsK0RBQStEO1FBQy9ELDZDQUE2QztRQUM3Qyw2QkFBNkI7UUFDN0Isa0NBQWtDO1FBQ2xDLGdCQUFnQjtRQUNoQixRQUFRO1FBQ1IsMENBQTBDO1FBQzFDLGdFQUFnRTtRQUNoRSw2REFBNkQ7UUFDN0QsdUdBQXVHO1FBQ3ZHLCtEQUErRDtRQUMvRCxnQ0FBZ0M7UUFDaEMsSUFBSTtRQUNKLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFFZixrQkFBYSxHQUFHLENBQUMsQ0FBQztRQUNsQiwwQkFBcUIsR0FBa0IsSUFBSSxDQUFDO1FBd0Y1QyxtQ0FBbUM7UUFDbkMsa0NBQWtDO1FBQ2xDLHNDQUFzQztRQUN0QyxjQUFjO1FBQ2QsTUFBTTtRQUNOLDJDQUEyQztRQUMzQywyQkFBMkI7UUFDM0IsZ0NBQWdDO1FBQ2hDLGNBQWM7UUFDZCxNQUFNO1FBQ04sK0RBQStEO1FBQy9ELHNFQUFzRTtRQUN0RSx1REFBdUQ7UUFDdkQscUNBQXFDO1FBQ3JDLDJEQUEyRDtRQUMzRCwyQ0FBMkM7UUFDM0MsZ0VBQWdFO1FBQ2hFLDZEQUE2RDtRQUM3RCw0QkFBNEI7UUFDNUIsbUNBQW1DO1FBQ25DLHVEQUF1RDtRQUN2RCxTQUFTO1FBQ1QsK0RBQStEO1FBQy9ELGdDQUFnQztRQUNoQyxRQUFRO1FBQ1IsSUFBSTtRQU1KLGlCQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsMkNBQTJDO1FBQzdELGVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQywyQ0FBMkM7UUFDM0QsZ0JBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxtRUFBbUU7UUFFNUUsY0FBUyxHQUFrQixJQUFJLENBQUM7UUFDaEMscUJBQWdCLEdBQUcsQ0FBQyxDQUFDO1FBUXJCLGFBQVEsR0FBRyxFQUFFLENBQUMsQ0FBQyw4QkFBOEI7UUEyRHJELG1CQUFjLEdBQVEsQ0FBQyxDQUFDO1FBQ3hCLDBDQUEwQztRQUMxQyx1Q0FBdUM7UUFDdkMsaUNBQWlDO1FBQ2pDLElBQUk7UUFDSiwwQkFBMEI7UUFDMUIsNkNBQTZDO1FBQzdDLGdDQUFnQztRQUNoQyx5REFBeUQ7UUFDekQsd0JBQXdCO1FBRXhCLHlDQUF5QztRQUN6QyxxREFBcUQ7UUFDckQsV0FBVztRQUNYLHVDQUF1QztRQUN2QywrQkFBK0I7UUFDL0IsZ0NBQWdDO1FBQ2hDLDhCQUE4QjtRQUM5Qiw4QkFBOEI7UUFDOUIsVUFBVTtRQUNWLGdDQUFnQztRQUNoQyxpRUFBaUU7UUFDakUsMERBQTBEO1FBQzFELHdEQUF3RDtRQUN4RCwwREFBMEQ7UUFDMUQsUUFBUTtRQUNSLFFBQVE7UUFDUixJQUFJO1FBRUosMkRBQTJEO1FBQzNELG1EQUFtRDtRQUNuRCx5REFBeUQ7UUFFekQseURBQXlEO1FBQ3pELDhCQUE4QjtRQUM5QixPQUFPO1FBQ1AsK0RBQStEO1FBQy9ELCtEQUErRDtRQUUvRCxvREFBb0Q7UUFDcEQsbURBQW1EO1FBQ25ELElBQUk7UUFFSix5QkFBeUI7UUFDekIsZ0NBQWdDO1FBQ2hDLGdDQUFnQztRQUNoQyxJQUFJO1FBRUosZ0NBQWdDO1FBR2hDLDJCQUFzQixHQUFHLENBQUMsSUFBa0IsRUFBRSxJQUFzQixFQUFFLEVBQUU7WUFDdEUsd0NBQXdDO1lBQ3hDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDdkIsSUFBSSxJQUFJLEVBQUUsUUFBUSxJQUFJLElBQUksRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFO2dCQUMzQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUN2QixDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUMsWUFBWSxDQUNqRCxDQUFDO2FBQ0g7WUFDRCxPQUFPLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQztRQUM5QyxDQUFDLENBQUM7UUFvTEYsaUNBQTRCLEdBQUcsS0FBSyxDQUFDO1FBQ3JDLDRCQUF1QixHQUFHLEtBQUssQ0FBQztRQWFoQywwQkFBcUIsR0FBUSxJQUFJLENBQUM7UUFLbEMsZ0JBQVcsR0FBRyxLQUFLLEVBQUUsS0FBNEIsRUFBRSxPQUFlLEVBQUUsRUFBRTtZQUNwRSxNQUFNLE9BQU8sR0FBSSxJQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdkMsSUFBSSxLQUFLLENBQUMsYUFBYSxLQUFLLEtBQUssQ0FBQyxZQUFZO2dCQUFFLE9BQU87WUFDdkQsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNqRCxJQUFJLEdBQUcsRUFBRSxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQ2hELE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDNUQ7Z0JBQ0QsT0FBTyxHQUFHLENBQUMsVUFBVSxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxjQUFjLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDbEUsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDaEUsTUFBTSxnQkFBZ0IsR0FBRyxjQUFjLENBQUMsU0FBUyxDQUMvQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxjQUFjLENBQzVDLENBQUM7WUFDRixNQUFNLGdCQUFnQixHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQy9DLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFLLGFBQWEsQ0FDM0MsQ0FBQztZQUNGLE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBUyxFQUFZLEVBQUU7Z0JBQ3hDLElBQUksSUFBSSxFQUFFLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDbEQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUN2RDtnQkFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RCLENBQUMsQ0FBQztZQUNGLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1lBQy9ELE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1lBQy9ELE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBRyxVQUFVLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQztZQUNqRCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsTUFBTTtnQkFDNUIsQ0FBQyxDQUFFLEVBQW9CLENBQUMsTUFBTSxDQUM1QixHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUN6QixLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLENBQWtCLENBQzdFLENBQ0Y7Z0JBQ0QsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNQLE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxFQUF1QixDQUFDO1lBQ3RELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDL0UsZUFBZSxDQUFFLElBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzVFLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLGNBQWMsQ0FBQyxDQUFDO1lBQzdGLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLGFBQWEsQ0FBQyxDQUFDO1lBQzVGLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLHFCQUFxQixDQUFDLENBQUM7WUFDNUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN6QixxQkFBcUIsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3pCLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDMUIsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FDN0IsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsQ0FDL0IsQ0FBQztvQkFFbkIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO3dCQUMxQixNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUN2QyxJQUFJLE9BQU8sSUFBSSxJQUFJOzRCQUFFLE9BQU87d0JBRTVCLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLElBQUksQ0FBQzt3QkFDaEQsTUFBTSxNQUFNLEdBQUcsT0FBTyxHQUFHLE9BQU8sQ0FBQzt3QkFFakMsSUFBSSxNQUFNLEtBQUssQ0FBQyxFQUFFOzRCQUNoQixFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUM7NEJBQ2xDLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQzs0QkFDN0IsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsY0FBYyxNQUFNLEtBQUssQ0FBQzs0QkFFL0MsZUFBZTs0QkFDZixLQUFLLEVBQUUsQ0FBQyxXQUFXLENBQUM7NEJBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7NEJBRXpCLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLDhDQUE4QyxDQUFDOzRCQUNyRSxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxlQUFlLENBQUM7NEJBRXJDLE1BQU0sTUFBTSxHQUFHLEdBQUcsRUFBRTtnQ0FDbEIsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO2dDQUN6QixFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7Z0NBQ3hCLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztnQ0FDekIsRUFBRSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQzs0QkFDbEQsQ0FBQyxDQUFDOzRCQUNGLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7eUJBQzlDO29CQUNILENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDSCxNQUFNO1FBQ1IsQ0FBQyxDQUFBO1FBMklELHVCQUF1QjtRQUN2QixjQUFjO1FBQ2QsSUFBSTtRQUVKLDhCQUE4QjtRQUU5QiwwQkFBMEI7UUFDMUIsMkJBQTJCO1FBRTNCLDBCQUEwQjtRQUMxQiwyQkFBMkI7UUFDM0IsdUJBQXVCO1FBQ3ZCLDRCQUE0QjtRQUM1QixPQUFPO1FBRVAsMENBQTBDO1FBQzFDLHFEQUFxRDtRQUVyRCxzREFBc0Q7UUFDdEQseUNBQXlDO1FBQ3pDLHFFQUFxRTtRQUNyRSw0REFBNEQ7UUFDNUQsOENBQThDO1FBQzlDLHlDQUF5QztRQUN6QyxjQUFjO1FBQ2QsY0FBYztRQUNkLDJEQUEyRDtRQUMzRCwwQ0FBMEM7UUFDMUMscUNBQXFDO1FBQ3JDLFVBQVU7UUFDVixVQUFVO1FBQ1YsUUFBUTtRQUNSLElBQUk7UUFFSiwwQkFBcUIsR0FBRyxLQUFLLEVBQUUsS0FBNEIsRUFBRSxPQUFlLEVBQUUsRUFBRTtZQUM5RSxJQUFJLEtBQUssQ0FBQyxhQUFhLEtBQUssS0FBSyxDQUFDLFlBQVk7Z0JBQUUsT0FBTztZQUV2RCxNQUFNLE1BQU0sR0FDVixPQUFPLElBQUksMEJBQTBCO2dCQUNuQyxDQUFDLENBQUMsTUFBTTtnQkFDUixDQUFDLENBQUMsT0FBTyxJQUFJLDJCQUEyQjtvQkFDdEMsQ0FBQyxDQUFDLE9BQU87b0JBQ1QsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUVYLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQy9CLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUMzQixDQUFDLEdBQVEsRUFBRSxFQUFFLENBQ1gsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO2dCQUMzQixHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssS0FBSyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQ3BFLENBQUM7WUFDRixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FDdkMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU0sQ0FDckMsQ0FBQztZQUNGLE1BQU0sYUFBYSxHQUFHLEtBQUssRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ3hELE1BQU0sYUFBYSxHQUNqQixDQUFDLE1BQU0sS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLElBQUksR0FBRyxFQUFFLE1BQU0sS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxNQUFNLEtBQUssTUFBTSxDQUFDO2dCQUNwRixPQUFPLGFBQWEsSUFBSSxHQUFHLEVBQUUsVUFBVSxDQUFDO1lBQzFDLENBQUMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDL0QsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDN0QsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FDL0MsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksYUFBYSxDQUN6QyxDQUFDO1lBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FDL0MsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksWUFBWSxDQUN4QyxDQUFDO1lBQ0YsTUFBTSxTQUFTLEdBQUcsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDaEQsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE1BQU07Z0JBQzVCLENBQUMsQ0FBRSxFQUFvQixDQUFDLE1BQU0sQ0FDNUIsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDekIsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxLQUFLLElBQUksQ0FBQyxDQUFrQixDQUM3RSxDQUNGO2dCQUNELENBQUMsQ0FBQyxFQUFFLENBQUM7WUFFUCxNQUFNLGNBQWMsR0FBSSxJQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUNoRCxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQ1gsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO2dCQUMzQixHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssS0FBSyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQ3BFLENBQUM7WUFFRixNQUFNLG9CQUFvQixHQUFJLElBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQ3RELENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FDWCxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7Z0JBQzNCLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxLQUFLLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FDcEUsQ0FBQztZQUVGLE1BQU0sbUJBQW1CLEdBQUksSUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FDMUQsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUssY0FBYyxDQUFDLE1BQU0sQ0FDbkQsQ0FBQztZQUVGLE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxFQUF1QixDQUFDO1lBQ3RELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDL0UsZUFBZSxDQUNiLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsUUFBUSxFQUNsQyxnQkFBZ0IsRUFDaEIsZ0JBQWdCLENBQ2pCLENBQUM7WUFFRixlQUFlLENBQ1osSUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxRQUFRLEVBQ3RELEtBQUssQ0FBQyxhQUFhLEVBQ25CLEtBQUssQ0FBQyxZQUFZLENBQ25CLENBQUM7WUFFRixzQ0FBc0M7WUFDdEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUV6QixNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzNDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDMUIsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FDN0IsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsQ0FDL0IsQ0FBQztnQkFDbkIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO29CQUMxQixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxJQUFJLENBQUM7b0JBQ2hELE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFFLENBQUM7b0JBQ3hDLE1BQU0sTUFBTSxHQUFHLE9BQU8sR0FBRyxPQUFPLENBQUM7b0JBQ2pDLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRTt3QkFDaEIsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDO3dCQUNsQyxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7d0JBQzdCLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLGNBQWMsTUFBTSxLQUFLLENBQUM7d0JBQy9DLEtBQUssRUFBRSxDQUFDLFdBQVcsQ0FBQzt3QkFDcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQzt3QkFDekIsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsOENBQThDLENBQUM7d0JBQ3JFLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLGVBQWUsQ0FBQzt3QkFFckMsTUFBTSxNQUFNLEdBQUcsR0FBRyxFQUFFOzRCQUNsQixFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7NEJBQ3pCLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQzs0QkFDeEIsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDOzRCQUN6QixFQUFFLENBQUMsbUJBQW1CLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO3dCQUNsRCxDQUFDLENBQUM7d0JBQ0YsRUFBRSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztxQkFDOUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO2dCQUNqQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBQzFCLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQzdCLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLENBQy9CLENBQUM7b0JBRW5CLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTt3QkFDMUIsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDdkMsSUFBSSxPQUFPLElBQUksSUFBSTs0QkFBRSxPQUFPLENBQUMsZUFBZTt3QkFFNUMsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLHFCQUFxQixFQUFFLENBQUMsSUFBSSxDQUFDO3dCQUNoRCxNQUFNLE1BQU0sR0FBRyxPQUFPLEdBQUcsT0FBTyxDQUFDO3dCQUVqQyxJQUFJLE1BQU0sS0FBSyxDQUFDLEVBQUU7NEJBQ2hCLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQzs0QkFDbEMsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDOzRCQUM3QixFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxjQUFjLE1BQU0sS0FBSyxDQUFDOzRCQUUvQyxlQUFlOzRCQUNmLEtBQUssRUFBRSxDQUFDLFdBQVcsQ0FBQzs0QkFFcEIsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsOENBQThDLENBQUM7NEJBQ3JFLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLGVBQWUsQ0FBQzs0QkFFckMsTUFBTSxNQUFNLEdBQUcsR0FBRyxFQUFFO2dDQUNsQixFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7Z0NBQ3pCLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztnQ0FDeEIsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO2dDQUN6QixFQUFFLENBQUMsbUJBQW1CLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDOzRCQUNsRCxDQUFDLENBQUM7NEJBQ0YsRUFBRSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQzt5QkFDOUM7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVILG1DQUFtQztRQUNyQyxDQUFDLENBQUE7UUErR0QsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBYTNCLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBMEZyQixnQ0FBMkIsR0FBRyxFQUFFLENBQUM7UUFxRGpDLGlCQUFZLEdBQUcsS0FBSyxDQUFBO1FBRXBCLGdCQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUE2Q2hELGVBQVUsR0FBUSxFQUFFLENBQUM7UUFDckIsbUJBQWMsR0FBRyxFQUFFLENBQUM7UUFDcEIsZ0JBQVcsR0FBUSxFQUFFLENBQUM7UUFDdEIsb0JBQWUsR0FBa0IsSUFBSSxDQUFDO1FBQ3RDLGNBQVMsR0FBa0IsRUFBRSxDQUFDO1FBa0I5QiwwQkFBcUIsR0FBVSxFQUFFLENBQUE7UUFFakMsNkJBQXdCLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQXNaN0MsK0JBQStCO1FBRS9CLGVBQVUsR0FBa0IsSUFBSSxDQUFDO1FBQ2pDLGVBQVUsR0FBa0IsSUFBSSxDQUFDO1FBWWpDLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFpSWxCLGVBQVUsR0FBRyxrREFBa0QsQ0FBQztRQWtJaEUsaUJBQVksR0FBRyxJQUFJLEdBQUcsRUFBaUIsQ0FBQztRQXVMeEMsNkJBQXdCLEdBQUcsRUFBRSxDQUFDO1FBRTlCLGVBQVUsR0FBRztZQUNYLEVBQUUsRUFBRSxFQUFFO1lBQ04sT0FBTyxFQUFFLEtBQUs7U0FDZixDQUFBO1FBdUpELGtCQUFhLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7UUFDbEMsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUV0QixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQTJIdkIscUJBQXFCO1FBQ3JCLHFCQUFnQixHQUFHLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQWUzRCxlQUFVLEdBQVksSUFBSSxDQUFDO1FBQzNCLFNBQUksR0FBRyxDQUFDLENBQUM7UUFDVCxTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ1QsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUdsQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQTBXdEIsNEVBQTRFO1FBQzVFLDRFQUE0RTtRQUM1RSw0RUFBNEU7UUFDNUUsNEVBQTRFO1FBQzVFLG1EQUFtRDtRQUNuRCw0RUFBNEU7UUFDNUUsNEVBQTRFO1FBQzVFLDRFQUE0RTtRQUM1RSw0RUFBNEU7UUFFNUUsa0JBQWEsR0FBVSxFQUFFLENBQUM7UUFDMUIsaUJBQVksR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN0QyxtQkFBYyxHQUFRLElBQUksQ0FBQztRQUMzQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQTRKWixvQkFBZSxHQUtuQixFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQWlGekQsb0NBQStCLEdBQVEsSUFBSSxDQUFDO1FBQ3BDLGdCQUFXLEdBQUcsR0FBRyxDQUFDO1FBQ2xCLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBMEMxQiw0RUFBNEU7UUFDNUUsNEVBQTRFO1FBQzVFLDRFQUE0RTtRQUM1RSw0RUFBNEU7UUFDNUUsbURBQW1EO1FBQ25ELDRFQUE0RTtRQUM1RSw0RUFBNEU7UUFDNUUsNEVBQTRFO1FBQzVFLDRFQUE0RTtRQUU1RSx1QkFBa0IsR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUM1QyxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQiwyQkFBc0IsR0FBa0IsSUFBSSxDQUFDO1FBQzdDLHVCQUFrQixHQUFRLElBQUksQ0FBQztRQW9GL0Isc0NBQXNDO1FBQ3RDLG9DQUFvQztRQUNwQyxzREFBc0Q7UUFDdEQsa0VBQWtFO1FBQ2xFLHVFQUF1RTtRQUN2RSxnRkFBZ0Y7UUFDaEYsNENBQTRDO1FBQzVDLG1EQUFtRDtRQUNuRCw0QkFBNEI7UUFDNUIsc0RBQXNEO1FBQ3RELHNEQUFzRDtRQUN0RCx5REFBeUQ7UUFDekQsd0RBQXdEO1FBQ3hELGdCQUFnQjtRQUNoQix3REFBd0Q7UUFDeEQsV0FBVztRQUNYLG9DQUFvQztRQUNwQyxRQUFRO1FBQ1IsTUFBTTtRQUVOLCtEQUErRDtRQUMvRCxnREFBZ0Q7UUFDaEQsK0NBQStDO1FBQy9DLDBEQUEwRDtRQUMxRCw0QkFBNEI7UUFFNUIsaURBQWlEO1FBQ2pELG9DQUFvQztRQUNwQywrREFBK0Q7UUFDL0QsNERBQTREO1FBQzVELFVBQVU7UUFDVixpRUFBaUU7UUFFakUseUVBQXlFO1FBQ3pFLGlEQUFpRDtRQUNqRCxRQUFRO1FBRVIsaURBQWlEO1FBQ2pELG1DQUFtQztRQUNuQyw2QkFBNkI7UUFFN0IsdUNBQXVDO1FBQ3ZDLE1BQU07UUFFTixtQ0FBbUM7UUFDbkMsaUVBQWlFO1FBQ2pFLHVFQUF1RTtRQUN2RSxNQUFNO1FBQ04sbUZBQW1GO1FBQ25GLCtDQUErQztRQUMvQywrQkFBK0I7UUFDL0Isd0RBQXdEO1FBQ3hELHFCQUFxQjtRQUNyQixRQUFRO1FBQ1IsdUJBQXVCO1FBQ3ZCLElBQUk7UUFHSixjQUFTLEdBQVksRUFBRSxDQUFDO1FBQ3hCLGNBQVMsR0FBWSxFQUFFLENBQUM7UUFxQ3hCLG1CQUFjLEdBQTJCLEVBQUUsQ0FBQztRQXVZNUMsa0VBQWtFO1FBQ2xFLHlCQUFvQixHQUEwQyxFQUFFLENBQUM7UUFzRGpFLGNBQVMsR0FBa0IsSUFBSSxDQUFDO1FBbUNoQyx5QkFBb0IsR0FBa0IsSUFBSSxDQUFDLENBQUMsZ0JBQWdCO1FBQzVELHlCQUFvQixHQUFtQixLQUFLLENBQUMsQ0FBQyxtQkFBbUI7UUFnRGpFLG9CQUFlLEdBQWtCLElBQUksQ0FBQztRQWtDdEMsc0JBQWlCLEdBQVUsRUFBRSxDQUFDO1FBNkQ5Qix1QkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDbkIsa0JBQWEsR0FBbUIsSUFBSSxDQUFDO1FBZ043QyxpQkFBWSxHQUFrQixFQUFFLENBQUM7UUEyQnpCLHNCQUFpQixHQUFnQyxJQUFJLENBQUM7UUFFOUQsWUFBTyxHQUFtRDtZQUN4RCxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsaUNBQWlDO1lBQ3JGLGFBQWEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsOEJBQThCO1lBQzlFLFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtnQkFDckIsTUFBTSxHQUFHLEdBQ1AsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUs7b0JBQzFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJO29CQUN6QyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRXRDLE9BQU8sQ0FDTCxJQUFJLENBQUMsbUJBQW1CO29CQUN4QixrQkFBa0I7b0JBQ2xCLENBQUMsR0FBRyxJQUFJLFNBQVMsQ0FBQztvQkFDbEIsTUFBTSxDQUNQLENBQUM7WUFDSixDQUFDO1NBQ0YsQ0FBQztRQWtMRixnQkFBVyxHQUFHO1lBQ1osV0FBVyxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDO1lBQ3hELFdBQVcsRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQztTQUM1RCxDQUFDO0lBNytMRSxDQUFDO0lBS0wsS0FBSyxDQUFDLGVBQWU7UUFDbEIsVUFBVSxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ3JCLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDcEMsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFFL0MsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNqQixNQUFNLFFBQVEsR0FBRyxJQUFJLGNBQWMsQ0FBQyxHQUFHLEVBQUU7b0JBQ3ZDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzNCLENBQUMsQ0FBQyxDQUFDO2dCQUNILFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUMvQztZQUVELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDMUIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRVosQ0FBQztJQUlELGtCQUFrQixDQUFDLEdBQVEsRUFBRSxHQUFRO1FBQ25DLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUNyQixTQUFTLEVBQUU7Z0JBQ1QsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUU7Z0JBQ3JDLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFO2FBQ3RDO1lBQ0QsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQ3RCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFHTyxpQkFBaUI7UUFDdkIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN2QyxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFFbEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2xDLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDOUIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWTtvQkFBRSxTQUFTO2dCQUV6QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7Z0JBQzVDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFFdEIsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBRWhFLE1BQU0sTUFBTSxHQUFHO29CQUNiLEdBQUc7b0JBQ0gsR0FBRztvQkFDSCxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQztvQkFDMUMsR0FBRyxFQUFFLElBQUk7aUJBQ1YsQ0FBQztnQkFFRixJQUFLLE9BQU8sQ0FBQyxRQUFnQixDQUFDLFFBQVEsRUFBRTtvQkFDckMsT0FBTyxDQUFDLFFBQWdCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUM1QzthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBSUQsa0JBQWtCO1FBQ2QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUMvQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3ZCLElBQ0YsSUFBSSxDQUFDLG1CQUFtQjtZQUN4QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsYUFBYSxFQUN4QztZQUNBLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQztnQkFDakQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUMxRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0JBQ3hELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7WUFDbkMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ1Y7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLDRCQUE0QjtRQUM1QixtQ0FBbUM7UUFDbkMsSUFBSTtRQUNKLDZCQUE2QjtRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFO1lBQ3JDLGlDQUFpQztTQUNsQztRQUVELHdDQUF3QztRQUN4QywrQ0FBK0M7UUFDL0MsK0NBQStDO1FBQy9DLHVDQUF1QztRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNwQixNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDNUQsSUFBSSxnQkFBZ0IsRUFBRTtnQkFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7YUFDbEY7U0FDRjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3hCLE1BQU0sb0JBQW9CLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3BFLElBQUksb0JBQW9CLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxjQUFjLEdBQUcsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO2FBQ2hHO1NBQ0Y7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN4QixNQUFNLG9CQUFvQixHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUNwRSxJQUFJLG9CQUFvQixFQUFFO2dCQUN4QixJQUFJLENBQUMsY0FBYyxHQUFHLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQzthQUNyRjtTQUNGO0lBRUgsQ0FBQztJQVlELEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBc0I7UUFDdEMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDdEIsTUFBTSxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztTQUU1QztRQUVELElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ25CLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNuQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7Z0JBQ3RFLElBQUksUUFBUSxDQUFBO2dCQUNaLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUUsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBRSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO2dCQUMzRiw0Q0FBNEM7Z0JBQzVDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtvQkFDeEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksZ0JBQWdCLENBQUM7aUJBQ3JEO3FCQUFNO29CQUNMLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDN0M7Z0JBRUQsd0JBQXdCO2dCQUN4Qix1Q0FBdUM7Z0JBQ3ZDLElBQUk7YUFDTDtTQUNGO1FBQ0QsSUFBSSxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUU7WUFDNUIsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDaEMsTUFBTSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztTQUNwQztRQUVELElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUU7WUFDNUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFFbkMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzlDLEdBQUcsR0FBRztnQkFDTixLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDMUMscUJBQXFCLEVBQUUsR0FBRyxDQUFDLHFCQUFxQjtvQkFDOUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMscUJBQXFCLENBQUM7b0JBQ2hDLENBQUMsQ0FBQyxFQUFFO2FBQ1AsQ0FBQyxDQUFDLENBQUM7WUFHSixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFO2dCQUN0RCxNQUFNLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2dCQUNwQyxNQUFNLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO2dCQUN6QyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQzthQUN6QjtZQUVELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNoRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzNCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDNUMsR0FBRyxHQUFHO2dCQUNOLGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQzthQUN0QixDQUFDLENBQUMsQ0FBQztZQUNKLElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBRTNCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNoRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixJQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLEdBQUcsR0FBRztvQkFDNUMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztnQkFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMzQixDQUFDLENBQUMsQ0FBQztZQUVILElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLGFBQWEsRUFBRTtnQkFDMUMsS0FBSyxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQztnQkFFdkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBQzNCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsYUFBYSxFQUFFO3dCQUM1QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDLFVBQVU7NEJBQ2hELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDO3FCQUNwRDtvQkFDRCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztvQkFDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDM0IsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2FBQ1Q7WUFFRCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUUvQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsTUFBTSxFQUFFO2dCQUMvQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMzRCxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtvQkFDekMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMzRCxDQUFDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUV2RSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDaEQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7b0JBQzNCLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO29CQUNuQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztvQkFDN0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMxQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztvQkFDckIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsYUFBYSxDQUFDLFdBQVcsQ0FBQztvQkFDekUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDM0IsQ0FBQyxDQUFDLENBQUM7YUFDSjtTQUNGO1FBRUQsSUFBSSxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRTtZQUNqRCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFekMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDMUMsTUFBTSxLQUFLLEdBQUc7Z0JBQ1osSUFBSSxFQUFFO29CQUNKLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztvQkFDN0IsR0FBRyxFQUFFLEdBQUc7aUJBQ1Q7Z0JBQ0QsU0FBUyxFQUFFLGFBQWE7YUFDekIsQ0FBQztZQUVGLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRTlCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNoRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzNCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDaEUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDNUIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7U0FDdEI7UUFFRCwyQ0FBMkM7UUFDM0MsNERBQTREO1FBQzVELElBQUk7UUFFSixJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFO1lBQy9ELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUN4QjtRQUVELElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ3hCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDakMsSUFBSSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztvQkFDN0MsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO29CQUN0QyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUVULElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtvQkFDckIsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7d0JBQ3pDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQzt3QkFDekMsQ0FBQyxDQUFDLElBQUksQ0FBQztpQkFDVjtnQkFFRCxJQUFJLENBQUMsMkJBQTJCLEdBQUcsZ0JBQWdCLElBQUksSUFBSSxDQUFDO2dCQUM1RCxJQUFJLENBQUMsVUFBVSxHQUFHLGdCQUFnQixFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxlQUFlLEdBQUcsZ0JBQWdCLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLFlBQVksR0FBRyxnQkFBZ0IsRUFBRSxhQUFhLElBQUksS0FBSyxDQUFDO2dCQUM3RCxJQUFJLElBQUksQ0FBQywyQkFBMkIsRUFBRTtvQkFDcEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztvQkFDbkUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztvQkFDckUsSUFBSSxDQUFDLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO29CQUNyRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDO29CQUN2RSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDO29CQUN2RSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDO29CQUNuRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztvQkFDN0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztvQkFDOUMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxzQkFBc0IsSUFBSSxTQUFTLENBQUM7b0JBQzVGLE1BQU0sY0FBYyxHQUFHLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxjQUFjLENBQUM7b0JBQ2hFLElBQUcsY0FBYyxFQUFFLE1BQU0sRUFBQzt3QkFDeEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUM7d0JBQ3RELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7cUJBQ3hEO29CQUNELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7aUJBQzFCO3FCQUFPLElBQUcsSUFBSSxDQUFDLGFBQWEsRUFBQztvQkFDNUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLElBQUksS0FBSyxDQUFDO29CQUN2RSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsSUFBSSxLQUFLLENBQUM7b0JBQ3pFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDO29CQUMzRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsSUFBSSxFQUFFLENBQUM7b0JBQ3hFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixJQUFJLFFBQVEsQ0FBQztvQkFDOUUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDO29CQUNwRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUM7b0JBQ3hELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7b0JBQzlDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsY0FBYyxDQUFDO29CQUMxRCxJQUFHLGNBQWMsRUFBRSxNQUFNLEVBQUM7d0JBQ3hCLElBQUksQ0FBQyxjQUFjLEdBQUcsZUFBZSxDQUFDLGNBQWMsQ0FBQyxDQUFDO3dCQUN0RCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO3FCQUN4RDtpQkFDRjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO29CQUMvQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO29CQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQztvQkFDMUIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFFBQVEsQ0FBQztvQkFDcEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztvQkFDNUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztvQkFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUE7aUJBQ3RCO2dCQUNELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDM0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ1A7UUFFRCxJQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFlBQVksRUFBQztZQUN4RSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztTQUM1QjtJQUVILENBQUM7SUFLRCxLQUFLLENBQUMsNkJBQTZCO1FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFDMUIsMkRBQTJEO1FBQzNELDhCQUE4QjtRQUM5QixnRkFBZ0Y7UUFDaEYsSUFBSTtRQUNKLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBS0QsdUJBQXVCO1FBQ3JCLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuRSxJQUFJLG9CQUFvQixDQUFDLElBQUksR0FBRyxDQUFDLEVBQUU7WUFDakMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDMUMsTUFBTSxLQUFLLEdBQUc7Z0JBQ1osSUFBSSxFQUFFO29CQUNKLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztvQkFDN0IsR0FBRyxFQUFFLEdBQUc7aUJBQ1Q7Z0JBQ0QsU0FBUyxFQUFFLGFBQWE7YUFDekIsQ0FBQTtZQUNELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUVELG1CQUFtQixDQUFDLFNBQWlCO1FBQ25DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLHNCQUFzQixDQUFDLENBQUM7UUFDakcsSUFBSSxNQUFNLENBQUMsWUFBWSxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDekQsT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3ZDO1FBQ0QsWUFBWSxDQUFDLE9BQU8sQ0FDbEIscUJBQXFCLEVBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQ3ZCLENBQUM7SUFDSixDQUFDO0lBSUQsS0FBSyxDQUFDLHFCQUFxQjtRQUN6QixNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdkcsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBeUNELEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxVQUFlLElBQUk7UUFDbkQsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUI7WUFBRSxPQUFPO1FBQ3BDLElBQUksY0FBYyxHQUNoQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLFdBQVcsSUFBSSxDQUFDLENBQUM7UUFDMUQsb0NBQW9DO1FBQ3BDLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFRLE1BQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDL0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQ2hELE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUNoQyxjQUFjLENBQ2YsQ0FBQztZQUNGLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDOUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7UUFDNUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztRQUNoQyxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxVQUFlLElBQUk7UUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUI7WUFBRSxPQUFPO1FBRXBDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDO1FBRXhFLHdEQUF3RDtRQUN4RCxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBUSxNQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQy9ELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUNoRCxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFDaEMsY0FBYyxDQUNmLENBQUM7WUFDRixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxNQUFNLENBQUM7UUFDbkMsSUFBSSxDQUFDLHlCQUF5QixHQUFHLEtBQUssQ0FBQztRQUN2QyxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUdELEtBQUssQ0FBQyxzQkFBc0I7UUFDMUIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRSxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDO1FBRTNDLElBQUksWUFBWSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBRS9CLElBQUksY0FBYyxHQUNoQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLFdBQVcsSUFBSSxDQUFDLENBQUM7UUFDMUQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCO1lBQUUsY0FBYyxJQUFJLEVBQUUsQ0FBQztRQUNoRCxJQUFJLElBQUksQ0FBQyxZQUFZO1lBQUUsY0FBYyxJQUFJLEVBQUUsQ0FBQztRQUM1QyxtRkFBbUY7UUFDbkYsd0JBQXdCO1FBQ3hCLG1EQUFtRDtRQUNuRCwrQ0FBK0M7UUFDL0MsbUZBQW1GO1FBQ25GLHVCQUF1QjtRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQ25ELElBQUksQ0FBQyxPQUFPLEVBQ1osY0FBYyxDQUNmLENBQUM7UUFDRixNQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUdELGdCQUFnQjtRQUNkLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQWdCLENBQUM7UUFDeEUsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FDbkMseUJBQXlCLENBQ1gsQ0FBQztRQUNqQixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFnQixDQUFDO1FBQzFFLElBQUksSUFBSSxFQUFFO1lBQ1IsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQzVFO1FBQ0QsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDOUU7UUFDRCxJQUFJLEtBQUssRUFBRTtZQUNULElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUM3RTtJQUNILENBQUM7SUEyQkQsK0JBQStCO0lBQy9CLGdEQUFnRDtJQUNoRCxzREFBc0Q7SUFDdEQsd0VBQXdFO0lBQ3hFLDBFQUEwRTtJQUMxRSxJQUFJO0lBS0osaURBQWlEO0lBQ2pELDJFQUEyRTtJQUMzRSxJQUFJO0lBQ04sY0FBYyxDQUFDLEdBQVEsRUFBRSxLQUFhO1FBQ3BDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFaEMsb0JBQW9CO1FBQ3BCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUU1RSxpREFBaUQ7UUFDakQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssRUFBRTtZQUN0QywyQ0FBMkM7WUFDM0MsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3hFLE9BQU87b0JBQ0wsR0FBRyxLQUFLO29CQUNSLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSztvQkFDckUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJO2lCQUNsRSxDQUFDO2FBQ0g7WUFFRCxvQ0FBb0M7WUFDcEMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO2dCQUMxRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNyQztTQUNGO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0Msa0JBQWtCLENBQUMsR0FBUSxFQUFFLEtBQWE7UUFDeEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNqQyxNQUFNLEtBQUssR0FBRyxLQUFLO2FBQ2hCLEtBQUssQ0FBQyxHQUFHLENBQUM7YUFDVixNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3hGLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQWlCLEVBQUUsR0FBUSxFQUFFLGFBQXVCO1FBQ2hFLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFeEIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM3QixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBRTdCLE1BQU0sV0FBVyxHQUF1QyxRQUFRLENBQUMsR0FBRyxDQUNsRSxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ2IsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FDL0IsV0FBVyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQ1osQ0FBQztZQUNqQixPQUFPO2dCQUNMLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztnQkFDbEIsS0FBSyxFQUFFLEVBQUUsRUFBRSxXQUFXLElBQUksQ0FBQzthQUM1QixDQUFDO1FBQ0osQ0FBQyxDQUNGLENBQUM7UUFFRixNQUFNLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQzFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQzdCLENBQUMsQ0FDRixDQUFDO1FBRUYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxTQUFxQixFQUFFLEVBQUU7WUFDNUMsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7WUFFeEMsSUFBSSxhQUFhLEVBQUU7Z0JBQ2pCLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQzthQUNsQjtZQUVELDhCQUE4QjtZQUM5QixJQUFJLGlCQUFpQixHQUFHLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLEVBQUU7Z0JBQUUsT0FBTztZQUU5RCxJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7WUFFdEIsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUM1QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLGlCQUFpQixDQUFDO2dCQUM5QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDNUQsYUFBYSxJQUFJLFFBQVEsQ0FBQztnQkFFMUIsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7Z0JBQ3ZFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFXLEVBQUUsRUFBRTtvQkFDL0IsTUFBTSxNQUFNLEdBQUcsRUFBaUIsQ0FBQztvQkFDakMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsR0FBRyxRQUFRLElBQUksQ0FBQztvQkFDeEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxRQUFRLElBQUksQ0FBQztnQkFDdkMsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDL0QsQ0FBQyxDQUFDLENBQUM7WUFFSCxxQ0FBcUM7WUFDckMsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FDMUMsV0FBVyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQ1gsQ0FBQztZQUNqQixJQUFJLGFBQWEsRUFBRTtnQkFDakIsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxhQUFhLElBQUksQ0FBQzthQUNsRDtRQUNILENBQUMsQ0FBQztRQUVGLE1BQU0sU0FBUyxHQUFHLEdBQUcsRUFBRTtZQUNyQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUM1QjtZQUNELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixNQUFNLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDakQsTUFBTSxRQUFRLEdBQUc7Z0JBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztnQkFDeEMsT0FBTyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtnQkFDbkMsYUFBYSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRO2dCQUM3QyxZQUFZLEVBQUU7b0JBQ1gsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixJQUFJLEtBQUs7b0JBQ2xELGtCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxLQUFLO29CQUNwRCxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsSUFBSSxPQUFPO29CQUN0QyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsZUFBZSxJQUFJLEVBQUU7b0JBQy9DLG1CQUFtQixFQUFFLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxTQUFTO29CQUMxRCxpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCLElBQUksRUFBRTtvQkFDL0MsWUFBWSxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7b0JBQ25DLFdBQVcsRUFBRSxFQUFFO29CQUNmLFVBQVUsRUFBRSxDQUFDO29CQUNiLGFBQWEsRUFBRSxJQUFJO29CQUNuQixzQkFBc0IsRUFBRSxTQUFTO2lCQUNuQztnQkFDRCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVM7YUFDckIsQ0FBQztZQUNGLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDckUsQ0FBQyxDQUFDO1FBRUYsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNsRCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFTyxnQ0FBZ0MsQ0FBQyxLQUFhLEVBQUUsS0FBYTtRQUNuRSxNQUFNLE1BQU0sR0FBRyxDQUFDLE9BQWMsRUFBRSxFQUFFO1lBQ2hDLEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFO2dCQUN6QixJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFO29CQUN4QixNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUN0QjtxQkFBTSxJQUFJLEdBQUcsQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFO29CQUM5QixHQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztpQkFDbkI7YUFDRjtRQUNILENBQUMsQ0FBQztRQUVGLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSx3QkFBd0I7UUFDMUIsT0FBTztZQUNKLE9BQU8sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDdkMsT0FBTyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUNuQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVE7WUFDN0MsWUFBWSxFQUFFO2dCQUNKLGlCQUFpQixFQUFFLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxLQUFLO2dCQUNsRCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCLElBQUksS0FBSztnQkFDcEQsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLElBQUssT0FBTztnQkFDdkMsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUU7Z0JBQzNELG1CQUFtQixFQUFFLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxTQUFTO2dCQUMxRCxpQkFBaUIsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRTtnQkFDdkQsWUFBWSxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ25DLFdBQVcsRUFBRSxFQUFFO2dCQUNmLFVBQVUsRUFBRSxDQUFDO2dCQUNiLGFBQWEsRUFBRSxJQUFJO2dCQUNuQixzQkFBc0IsRUFBRSxTQUFTO2FBQ2xDO1lBQ1QsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQ3ZCLENBQUE7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLE9BQWM7UUFDekIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDekIsTUFBTSxFQUNKLFVBQVUsRUFDVixHQUFHLEVBQ0gscUJBQXFCLEVBQ3JCLFdBQVcsRUFDWCxjQUFjLEVBQ2QsWUFBWSxFQUNaLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsS0FBSyxFQUNMLFlBQVksRUFDWixHQUFHLElBQUksRUFDUixHQUFHLEdBQUcsQ0FBQztZQUVSLDZDQUE2QztZQUM3QyxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDO2dCQUMxRCxDQUFDLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDO2dCQUNoRSxDQUFDLENBQUMscUJBQXFCO29CQUNyQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLEdBQUcsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLHFCQUFxQixDQUFDO29CQUM5RCxDQUFDLENBQUMsSUFBSSxDQUFDO1lBRVgsbUNBQW1DO1lBQ25DLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUN2QyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLEdBQUcsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQztnQkFDaEQsQ0FBQyxDQUFDLEtBQUs7b0JBQ0wsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDO29CQUNwRCxDQUFDLENBQUMsSUFBSSxDQUFDO1lBRVgsT0FBTztnQkFDTCxHQUFHLElBQUk7Z0JBQ1AscUJBQXFCLEVBQUUsZUFBZTtnQkFDdEMsS0FBSyxFQUFFLFlBQVk7YUFDcEIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFpQixFQUFFLEdBQVE7UUFDeEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV4QixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBRTdCLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQ3JDLFdBQVcsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUNWLENBQUM7UUFDakIsTUFBTSxZQUFZLEdBQUcsUUFBUSxFQUFFLFdBQVcsSUFBSSxHQUFHLENBQUM7UUFFbEQsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7UUFFeEUsa0NBQWtDO1FBQ2xDLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxPQUFPLEVBQUU7WUFDMUIsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQVcsRUFBRSxFQUFFO2dCQUNqQyxFQUFrQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUNoRSxDQUFDLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBVyxFQUFFLEVBQUU7Z0JBQ2pDLEVBQWtCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQzFELENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxNQUFNLFdBQVcsR0FBRyxDQUFDLFNBQXFCLEVBQUUsRUFBRTtZQUM1QyxJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztZQUV4QyxrREFBa0Q7WUFDbEQsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLE9BQU8sRUFBRTtnQkFDMUIsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDO2FBQ2xCO1lBRUQsSUFBSSxRQUFRLEdBQUcsWUFBWSxHQUFHLE1BQU0sQ0FBQztZQUNyQyxJQUFJLFFBQVEsR0FBRyxFQUFFO2dCQUFFLE9BQU87WUFFMUIsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQVcsRUFBRSxFQUFFO2dCQUNsQyxNQUFNLE9BQU8sR0FBRyxFQUFpQixDQUFDO2dCQUNsQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxHQUFHLFFBQVEsSUFBSSxDQUFDO2dCQUN6QyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLFFBQVEsSUFBSSxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDM0QsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7WUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUNqRCxDQUFDLENBQUM7UUFFRixNQUFNLFNBQVMsR0FBRyxHQUFHLEVBQUU7WUFDckIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDNUI7WUFDRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsTUFBTSxRQUFRLEdBQUc7Z0JBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztnQkFDeEMsT0FBTyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtnQkFDbkMsYUFBYSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRO2dCQUM3QyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVM7YUFDckIsQ0FBQztZQUNGLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFFbkUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQVcsRUFBRSxFQUFFO2dCQUNqQyxFQUFrQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDMUQsRUFBa0IsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFDbkUsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbkQsQ0FBQyxDQUFDO1FBRUYsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNsRCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFJRCxnQkFBZ0IsQ0FBQyxLQUFpQjtRQUNoQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXhCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFFN0IsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzlELE1BQU0sWUFBWSxHQUFHLFFBQVEsRUFBRSxXQUFXLElBQUksR0FBRyxDQUFDO1FBRWxELE1BQU0sV0FBVyxHQUFHLENBQUMsU0FBcUIsRUFBRSxFQUFFO1lBQzVDLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1lBRTFDLElBQUksUUFBUSxHQUFHLFlBQVksR0FBRyxNQUFNLENBQUM7WUFDckMsSUFBSSxRQUFRLEdBQUcsR0FBRztnQkFBRSxRQUFRLEdBQUcsR0FBRyxDQUFDO1lBRW5DLElBQUksUUFBUSxFQUFFO2dCQUNaLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsUUFBUSxJQUFJLENBQUM7Z0JBQ3ZDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLEdBQUcsUUFBUSxJQUFJLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDO2FBQ2pDO1FBQ0gsQ0FBQyxDQUFDO1FBRUYsTUFBTSxTQUFTLEdBQUcsR0FBRyxFQUFFO1lBQ3JCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQUM7UUFFRixNQUFNLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELHdCQUF3QixDQUFDLEtBQXFCLEVBQUUsR0FBUTtRQUN0RCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxjQUFjLENBQUMsR0FBUTtRQUNyQixNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN6RCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsR0FBRyxDQUFDO1FBQ25DLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFO1lBQ2YsR0FBRyxDQUFDLEtBQUssR0FBRztnQkFDVixlQUFlLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUztnQkFDekQsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLGdCQUFnQixFQUFFLElBQUk7Z0JBQ3RCLFlBQVksRUFBRSxJQUFJO2dCQUNsQixTQUFTLEVBQUUsSUFBSTthQUNoQixDQUFBO1NBQ0Y7UUFDRCxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDcEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUM7SUFDaEMsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFJLGlCQUFpQjtRQUNuQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNILE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RSxPQUFPLGVBQWUsTUFBTSxLQUFLLENBQUM7SUFDcEMsQ0FBQztJQUlELFVBQVUsQ0FBQyxHQUFRO1FBQ2pCLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7SUFDM0IsQ0FBQztJQUdELGVBQWUsQ0FBQyxLQUFpQjtRQUMvQixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBcUIsQ0FBQztRQUMzQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUNFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRTtZQUMvQixZQUFZO1lBQ1oscUJBQXFCO1lBQ3JCLGFBQWE7WUFDYixhQUFhO1NBQ2QsQ0FBQyxFQUNGO1lBQ0EsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztTQUM5QjtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3pELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7U0FDbEM7UUFDRCxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQztZQUNwRyxNQUFNLENBQUMsT0FBTyxDQUFDLDBCQUEwQixDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDaEksTUFBTSw4QkFBOEIsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3hILElBQUksQ0FBQyw4QkFBOEIsRUFBRTtZQUNuQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztTQUNqQztRQUNELElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUN2QixJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbEM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO1lBQzFDLFFBQVEsQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzFFO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsRUFBRTtZQUNyRixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztTQUNqQztRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLDBCQUEwQixDQUFDLEVBQUU7WUFDL0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztTQUN0QjtRQUVBLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUU7WUFDdkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7U0FDeEI7UUFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFHRCx3QkFBd0I7UUFDdEIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztJQUNyQyxDQUFDO0lBR0Qsb0JBQW9CLENBQUMsS0FBaUI7UUFDcEMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztRQUNoQyxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0lBQy9CLENBQUM7SUFFTyxrQkFBa0IsQ0FDeEIsT0FBb0IsRUFDcEIsU0FBbUI7UUFFbkIsSUFBSSxFQUFFLEdBQXVCLE9BQU8sQ0FBQztRQUVyQyxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDbEIsSUFDRSxFQUFFLENBQUMsU0FBUztnQkFDWixTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFHLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUNoRTtnQkFDQSxPQUFPLElBQUksQ0FBQzthQUNiO1lBQ0QsRUFBRSxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUM7U0FDdkI7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFHRCxpQkFBaUIsQ0FBQyxLQUFpQixFQUFFLEtBQVUsRUFBRSxvQkFBb0IsR0FBRyxLQUFLO1FBQzNFLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxXQUFXLENBQUM7UUFDMUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUM3QixNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ3hCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBZ0IsQ0FBQztZQUN0RSxJQUFJLE9BQU8sRUFBRTtnQkFDWCxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7aUJBQ3JDO3FCQUFNO29CQUNMLE9BQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7aUJBQ2hDO2FBQ0Y7WUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzNCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFDRCwyRkFBMkY7SUFDM0YsMkZBQTJGO0lBQzNGLDRCQUE0QjtJQUM1Qix5RkFBeUY7SUFDekYseUZBQXlGO0lBQ3pGLE9BQU8sQ0FBQyxHQUFRO1FBQ2QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUM3QixHQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixNQUFNLEtBQUssR0FBRztZQUNaLEtBQUssRUFBRSxLQUFLO1lBQ1osTUFBTSxFQUFFLEdBQUc7U0FDWixDQUFBO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxRQUFRLENBQUMsR0FBUTtRQUNmLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVztZQUFFLE9BQU87UUFDN0IsR0FBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7UUFDdkIsTUFBTSxLQUFLLEdBQUc7WUFDWixLQUFLLEVBQUUsTUFBTTtZQUNiLE1BQU0sRUFBRSxHQUFHO1NBQ1osQ0FBQTtRQUNELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQVE7UUFDaEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ2pELE1BQU0sS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUE7UUFDN0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFHRCxLQUFLLENBQUMsOEJBQThCLENBQ2xDLE1BQVcsRUFDWCxNQUErQixFQUMvQixnQkFBcUIsS0FBSyxFQUMxQixPQUFhO1FBRWIsUUFBUSxDQUFBO1FBQ1IsSUFBSSxhQUFhLEVBQUU7WUFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzVDLE9BQU87U0FDUjtRQUNELE1BQU0sTUFBTSxHQUFHLENBQUMsT0FBYyxFQUFFLEVBQUU7WUFDaEMsS0FBSyxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUU7Z0JBQ3pCLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUU7b0JBQ3hCLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ3RCO3FCQUFNLElBQUksR0FBRyxDQUFDLEtBQUssS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFO29CQUNyQyxHQUFHLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztpQkFDckI7YUFDRjtRQUNILENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixNQUFNLFFBQVEsR0FBRztZQUNmLE9BQU8sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDeEMsT0FBTyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUNuQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVE7WUFDN0MsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQ3JCLENBQUM7UUFDRixJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFjRCxjQUFjLENBQUMsSUFBaUI7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFFdEIsOEJBQThCO1FBQzlCLE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU1RCwyQ0FBMkM7UUFDM0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRSxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDO1FBRTNDLElBQUksWUFBWSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBRS9CLElBQUksY0FBYyxHQUNoQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLFdBQVcsSUFBSSxDQUFDLENBQUM7UUFDMUQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCO1lBQUUsY0FBYyxJQUFJLEVBQUUsQ0FBQztRQUNoRCxJQUFJLElBQUksQ0FBQyxZQUFZO1lBQUUsY0FBYyxJQUFJLEVBQUUsQ0FBQztRQUM1QyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksT0FBTztZQUFFLGNBQWMsSUFBSSxFQUFFLENBQUM7UUFDaEYsSUFBRyxJQUFJLENBQUMsY0FBYztZQUFFLGNBQWMsSUFBSSxFQUFFLENBQUM7UUFDN0MsY0FBYyxJQUFJLENBQUMsQ0FBQztRQUNwQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxZQUFZLENBQUMsQ0FBQztRQUU3RCw0QkFBNEI7UUFDNUIsS0FBSyxNQUFNLEdBQUcsSUFBSSxlQUFlLEVBQUU7WUFDakMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRTtnQkFDcEIsR0FBRyxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2FBQzlEO1NBQ0Y7UUFFRCxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUVuQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsTUFBTSxRQUFRLEdBQUc7Z0JBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztnQkFDeEMsT0FBTyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtnQkFDbkMsYUFBYSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRO2dCQUM3QyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVM7YUFDckIsQ0FBQztZQUNGLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDckUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ1QsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFVO1FBQ3RCLE9BQU8sQ0FDTCxLQUFLLEVBQUUsUUFBUTtZQUNiLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDO1lBQ3ZDLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBVyxFQUFFLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQ3ZFLENBQUM7SUFDSixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBRXRCLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxPQUFjLEVBQVMsRUFBRTtZQUN0RCxNQUFNLE1BQU0sR0FBVSxFQUFFLENBQUM7WUFFekIsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUU7Z0JBQzVCLElBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDckQsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2lCQUN4RDtxQkFBTSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEtBQUssS0FBSyxFQUFFO29CQUN0QyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUNyQjthQUNGO1lBRUQsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQyxDQUFDO1FBRUYsTUFBTSxjQUFjLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNELE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUM7UUFFM0MsSUFBSSxZQUFZLEtBQUssQ0FBQztZQUFFLE9BQU87UUFFL0IsSUFBSSxjQUFjLEdBQ2hCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsV0FBVyxJQUFJLENBQUMsQ0FBQztRQUMxRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0I7WUFBRSxjQUFjLElBQUksRUFBRSxDQUFDO1FBQ2hELElBQUksSUFBSSxDQUFDLFlBQVk7WUFBRSxjQUFjLElBQUksRUFBRSxDQUFDO1FBQzVDLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxPQUFPO1lBQUUsY0FBYyxJQUFJLEVBQUUsQ0FBQztRQUMvRSxJQUFHLElBQUksQ0FBQyxjQUFjO1lBQUUsY0FBYyxJQUFJLEVBQUUsQ0FBQztRQUM3QyxjQUFjLElBQUksQ0FBQyxDQUFDO1FBQ3JCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsWUFBWSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFNUUsd0NBQXdDO1FBQ3hDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUM3QixHQUFHLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQztZQUN2QixJQUFJLENBQUMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQy9DLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLE1BQU0sUUFBUSxHQUFHO2dCQUNmLE9BQU8sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7Z0JBQ3hDLE9BQU8sRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7Z0JBQ25DLGFBQWEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUTtnQkFDN0MsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTO2FBQ3JCLENBQUM7WUFDRixJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3JFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxPQUFjLEVBQUUsS0FBYTtRQUN2RCxLQUFLLE1BQU0sR0FBRyxJQUFJLE9BQU8sRUFBRTtZQUN6QixJQUFJLEdBQUcsQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFO2dCQUN2QixHQUFHLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDeEIsT0FBTzthQUNSO1lBQ0QsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRTtnQkFDeEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDL0M7U0FDRjtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQVE7UUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTztRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLElBQUksR0FBRyxFQUFFLFlBQVksRUFBRTtZQUNyQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbkQ7UUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdkUsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzNCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVSLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxhQUFhLENBQUMsV0FBVyxDQUFDO1lBQ3pFLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDMUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRVAsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFXLEVBQUUsV0FBcUI7UUFDckQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUMzQixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO2dCQUNqRCxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBS0QsYUFBYTtRQUNYLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUV0Qix3REFBd0Q7UUFDeEQsb0RBQW9EO1FBQ3BELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLEdBQUcsR0FBRztZQUNOLG9EQUFvRDtZQUNwRCxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUMxQyxxQkFBcUIsRUFBRSxHQUFHLENBQUMscUJBQXFCO2dCQUM5QyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQztnQkFDaEMsQ0FBQyxDQUFDLEVBQUU7U0FDUCxDQUFDLENBQUMsQ0FBQztRQUVKLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzlCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzNCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCxXQUFXLENBQUMsR0FBUTtRQUNsQixHQUFHLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNwQixHQUFHLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUNyQixHQUFHLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztRQUMvQixHQUFHLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUMzQixHQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNsQixHQUFHLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN0QixHQUFHLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUN6QixHQUFHLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUV2QixDQUFDO0lBR0QsV0FBVyxDQUFDLEdBQVE7UUFDbEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBTUQ7O09BRUc7SUFDSyxRQUFRLENBQUMsR0FBUTtRQUN2QixPQUFPLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQztJQUMzQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxrQkFBa0IsQ0FBQyxHQUFRO1FBQ3pCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFOUIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUM5QjthQUFNO1lBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDM0I7UUFFRCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUUxQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFeEMsTUFBTSxLQUFLLEdBQUc7WUFDWixJQUFJLEVBQUU7Z0JBQ0osV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUM3QixHQUFHLEVBQUUsR0FBRzthQUNUO1lBQ0QsU0FBUyxFQUFFLGFBQWE7U0FDekIsQ0FBQztRQUNGLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFJRCxlQUFlLENBQUMsSUFBVztRQUN6QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbkQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFbEUsSUFBSSxXQUFXLEVBQUU7WUFDZixNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNwRDthQUFNO1lBQ0wsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDakQ7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzFDLE1BQU0sS0FBSyxHQUFHO1lBQ1osSUFBSSxFQUFFO2dCQUNKLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDN0IsR0FBRyxFQUFFLEdBQUc7YUFDVDtZQUNELFNBQVMsRUFBRSxhQUFhO1NBQ3pCLENBQUE7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELGFBQWEsQ0FBQyxHQUFRO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxhQUFhLENBQUMsSUFBVztRQUN2QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLE9BQU8sUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFHRCxvQkFBb0IsQ0FBQyxJQUFXO1FBQzlCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUUzRixPQUFPLGFBQWEsR0FBRyxDQUFDLElBQUksYUFBYSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFDOUQsQ0FBQztJQUdELGNBQWMsQ0FBQyxJQUFXO1FBQ3hCLE1BQU0sSUFBSSxHQUFVLEVBQUUsQ0FBQztRQUV2QixNQUFNLFFBQVEsR0FBRyxDQUFDLElBQVMsRUFBRSxFQUFFO1lBQzdCLElBQUksQ0FBQyxJQUFJO2dCQUFFLE9BQU87WUFFbEIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNoQixJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNsQztpQkFBTTtnQkFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2pCO1FBQ0gsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFLRCw4QkFBOEI7SUFDOUIsY0FBYyxDQUFDLFNBQTRCO1FBQ3pDLElBQUksSUFBSSxDQUFDLHNCQUFzQixJQUFJLFNBQVMsRUFBRTtZQUM1QyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsU0FBUyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO1NBQzlDO2FBQU0sSUFDTCxJQUFJLENBQUMsZUFBZTtZQUNwQixTQUFTLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUN4QztZQUNBLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxTQUFTLENBQUM7WUFDeEMsT0FBTztTQUNSO2FBQU07WUFDTCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsU0FBUyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO1NBQzlDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUMvQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxHQUFRO1FBQzVCLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDeEUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDdkUsTUFBTSxRQUFRLEdBQUc7WUFDZixPQUFPLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ3hDLE9BQU8sRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDbkMsYUFBYSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRO1lBQzdDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUztTQUNyQixDQUFDO1FBQ0YsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUNuRSxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDVCxDQUFDO0lBRUQsZUFBZSxDQUFDLE9BQVk7UUFDMUIsSUFBSSxPQUFPLEVBQUUsUUFBUSxFQUFFO1lBQ3JCLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNyRTtRQUVELE9BQU8sT0FBTyxFQUFFLFVBQVUsQ0FBQztJQUM3QixDQUFDO0lBRUQsa0NBQWtDO0lBQ2xDLHVEQUF1RDtJQUN2RCxtREFBbUQ7SUFDbkQsSUFBSTtJQUNOLGtCQUFrQjtRQUNoQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsRCxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRXZFLDREQUE0RDtRQUM1RCxPQUFPLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFUyxpQkFBaUIsQ0FBQyxLQUFhLEVBQUUsSUFBVztRQUNsRCxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRTtZQUN0QixJQUFJLEdBQUcsQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFO2dCQUN2QixPQUFPLEdBQUcsQ0FBQzthQUNaO1lBQ0QsSUFBSSxHQUFHLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUMvQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDMUQsSUFBSSxLQUFLO29CQUFFLE9BQU8sS0FBSyxDQUFDO2FBQ3pCO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFJRCxLQUFLLENBQUMsc0JBQXNCLENBQUMsTUFBVyxFQUFFLFNBQWtCO1FBQzFELElBQUksU0FBUyxFQUFFO1lBQ2IsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLENBQUMsTUFBTSxFQUFFLGlCQUFpQixDQUFDLEVBQUU7Z0JBQzFGLE9BQU87YUFDUjtTQUNGO1FBQ0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9ELElBQUksR0FBRyxFQUFFO1lBQ1AsR0FBRyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7U0FDNUI7UUFDRCxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sUUFBUSxHQUFHO1lBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUN4QyxPQUFPLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQ25DLGFBQWEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUTtZQUM3QyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVM7U0FDckIsQ0FBQztRQUNGLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDbkUsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUM1QjtJQUNILENBQUM7SUFFSCxLQUFLLENBQUMsMEJBQTBCO1FBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBRXBCLElBQUk7WUFDRixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNsRCxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRTdELDBDQUEwQztZQUMxQyxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBRXZFLGdFQUFnRTtZQUNoRSxNQUFNLDZCQUE2QixHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUVwRixJQUFJLDZCQUE2QixFQUFFO2dCQUNqQyx3Q0FBd0M7Z0JBQ3hDLDZDQUE2QztnQkFDN0MsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUM3QixHQUFHLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztnQkFDekIsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsaUZBQWlGO2dCQUNqRixNQUFNLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxNQUFNLENBQUM7Z0JBQy9FLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDO2dCQUUxRCxJQUFJLGFBQWEsR0FBRyxDQUFDLEVBQUU7b0JBQ3JCLDREQUE0RDtvQkFDNUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUN6RSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO3FCQUN2QztpQkFDRjthQUNGO2lCQUFNO2dCQUNMLHNDQUFzQztnQkFDdEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDcEIsR0FBRyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0JBQ3hCLENBQUMsQ0FBQyxDQUFDO2FBQ0o7WUFFRCxNQUFNLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFFbkMsTUFBTSxRQUFRLEdBQUc7Z0JBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztnQkFDeEMsT0FBTyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtnQkFDbkMsYUFBYSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRO2dCQUM3QyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVM7YUFDckIsQ0FBQztZQUNGLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7U0FFcEU7Z0JBQVM7WUFDUixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUVTLElBQUksQ0FBQyxFQUFVO1FBQ3JCLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUlELGNBQWM7UUFDWixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsRCxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEUsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFXO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQVUsRUFBRSxHQUFRLEVBQUUsRUFBRTtZQUMxQyxJQUFJLEdBQUcsRUFBRSxRQUFRLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3hDLCtCQUErQjtnQkFDL0IsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7YUFDdEQ7aUJBQU07Z0JBQ0wsY0FBYztnQkFDZCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDeEI7UUFDSCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDVCxDQUFDO0lBR0QsZUFBZSxDQUFDLElBQVc7UUFDekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMvQyxPQUFPLElBQUk7YUFDUixHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNYLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRTtnQkFDaEIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDNUQsSUFDRSxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7b0JBQ3pDLGdCQUFnQixDQUFDLE1BQU0sRUFDdkI7b0JBQ0EsT0FBTyxFQUFFLEdBQUcsR0FBRyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO2lCQUMvQztnQkFDRCxPQUFPLElBQUksQ0FBQzthQUNiO2lCQUFNO2dCQUNMLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2FBQy9EO1FBQ0gsQ0FBQyxDQUFDO2FBQ0QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyRCxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDO1FBRWxFLElBQUksYUFBYSxLQUFLLENBQUM7WUFBRSxPQUFPLE1BQU0sQ0FBQztRQUN2QyxJQUFJLGFBQWEsS0FBSyxNQUFNLENBQUMsTUFBTTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ2xELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxJQUFJLG9CQUFvQjtRQUN0QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JELE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFFeEUsSUFBSSxhQUFhLEtBQUssQ0FBQztZQUFFLE9BQU8sTUFBTSxDQUFDO1FBQ3ZDLElBQUksYUFBYSxLQUFLLE1BQU0sQ0FBQyxNQUFNO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDbEQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELHdDQUF3QztJQUNoQyxrQkFBa0IsQ0FBQyxJQUFXO1FBQ3BDLElBQUksTUFBTSxHQUFVLEVBQUUsQ0FBQztRQUN2QixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRTtZQUN0QixJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFO2dCQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNqQixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7YUFDL0Q7U0FDRjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxnQ0FBZ0M7SUFDaEMsbUJBQW1CO1FBQ2pCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUMvRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQseUJBQXlCO1FBQ3ZCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3JFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxJQUFXLEVBQUUsS0FBYztRQUNuRCxLQUFLLElBQUksR0FBRyxJQUFJLElBQUksRUFBRTtZQUNwQixJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFO2dCQUN4QixHQUFHLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztnQkFDckIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyw0QkFBNEI7YUFDMUU7U0FDRjtRQUNELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUNPLHVCQUF1QixDQUFDLElBQVcsRUFBRSxLQUFjO1FBQ3pELEtBQUssSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFO1lBQ3BCLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUU7Z0JBQ3hCLEdBQUcsQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO2dCQUMzQixJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLDRCQUE0QjthQUNoRjtTQUNGO0lBQ0gsQ0FBQztJQUlELHFCQUFxQjtRQUNuQixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFHRCxRQUFRLENBQUMsS0FBWTtRQUNuQixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQseUNBQXlDO0lBQ3pDLElBQUkscUJBQXFCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELElBQUksb0JBQW9CO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUtELFFBQVEsQ0FBQyxLQUFjO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsMkJBQTJCO1lBQUUsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDckUsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUUsWUFBWSxJQUFJLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQy9DLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsc0JBQXNCLENBQUMseUJBQXlCLEdBQUcsS0FBSztRQUN0RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUV0QixNQUFNLHFCQUFxQixHQUFHLENBQUMsT0FBYyxFQUFTLEVBQUU7WUFDdEQsTUFBTSxNQUFNLEdBQVUsRUFBRSxDQUFDO1lBQ3pCLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO2dCQUM1QixJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFO29CQUMzQixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcscUJBQXFCLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7aUJBQ3hEO3FCQUFNLElBQUksTUFBTSxDQUFDLFVBQVUsS0FBSyxLQUFLLEVBQUU7b0JBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ3JCO2FBQ0Y7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUM7UUFFRixNQUFNLGNBQWMsR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUVuQyxJQUFJLGNBQWMsR0FDaEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxXQUFXLElBQUksQ0FBQyxDQUFDO1FBRTFELElBQUksSUFBSSxDQUFDLGdCQUFnQjtZQUFFLGNBQWMsSUFBSSxFQUFFLENBQUM7UUFDaEQsSUFBSSxJQUFJLENBQUMsWUFBWTtZQUFFLGNBQWMsSUFBSSxFQUFFLENBQUM7UUFDNUMsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLE9BQU87WUFBRSxjQUFjLElBQUksRUFBRSxDQUFDO1FBQ2xGLElBQUksSUFBSSxDQUFDLGNBQWM7WUFBRSxjQUFjLElBQUksRUFBRSxDQUFDO1FBQzlDLGNBQWMsSUFBSSxDQUFDLENBQUM7UUFFcEIsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FDekMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUNwQyxDQUFDLENBQ0YsQ0FBQztRQUVGLElBQUksYUFBYSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBRWhDLElBQUkseUJBQXlCLElBQUksQ0FBQyxjQUFjLElBQUksYUFBYSxDQUFDO1lBQUUsT0FBTztRQUUzRSxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDN0IsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssR0FBRyxhQUFhLENBQUM7WUFDeEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUVuRSxHQUFHLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztZQUNyQixJQUFJLENBQUMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQy9DLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUlELEtBQUssQ0FBQyxjQUFjO1FBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDdkMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6QyxNQUFNLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFFbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQUksbUJBQW1CO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELElBQUkscUJBQXFCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELHdCQUF3QjtRQUN0QixPQUFPLGVBQWUsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDO0lBQ2hELENBQUM7SUFTTyxrQkFBa0IsQ0FDeEIsT0FBYyxFQUFFLEVBQ2hCLEtBQUssR0FBRyxDQUFDLEVBQ1QsU0FBZ0IsRUFBRTtRQUVsQixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRTtZQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDeEMsSUFBSSxHQUFHLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxRQUFRLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUU7Z0JBQ3ZELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDdEQ7U0FDRjtRQUNELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDNUMsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELG9CQUFvQixDQUFDLElBQVc7UUFDOUIsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBWSxFQUFRLEVBQUU7WUFDbEMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxjQUFjLEdBQUcsWUFBWSxFQUFFLENBQUM7Z0JBQ3JDLElBQUksSUFBSSxFQUFFLE9BQU8sRUFBRTtvQkFDakIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDO29CQUNuQixJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUU7d0JBQ25ELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7cUJBQ3RCO2lCQUNGO2FBQ0Y7UUFDSCxDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDWCxrREFBa0Q7UUFDbEQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBR0QsaUJBQWlCLENBQUMsU0FBaUI7UUFFakMsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLE1BQU0sRUFBRTtZQUMvQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDaEMsT0FBTztTQUNSO1FBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV2RCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxJQUFJLEVBQUUsRUFBRTtZQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQztZQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztZQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztZQUNwQixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztZQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3pCLE9BQU87U0FDUjtRQUNELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDOUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN4RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN6RSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNqQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXZELElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFTRCxTQUFTLENBQUMsS0FBYSxFQUFFLElBQVM7UUFDaEMsT0FBTyxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDN0IsQ0FBQztJQUlELG1CQUFtQjtRQUNqQixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDM0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1QsQ0FBQztJQTBCRCxZQUFZLENBQUMsS0FBWTtRQUN2QixNQUFNLFNBQVMsR0FBSSxLQUFLLENBQUMsTUFBc0IsQ0FBQyxTQUFTLENBQUM7UUFDMUQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFBRSxPQUFPO1FBQzVELElBQUksSUFBSSxDQUFDLHFCQUFxQjtZQUFFLG9CQUFvQixDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ2pGLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDekIsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDLEdBQUcsRUFBRTtZQUN0RCxNQUFNLGFBQWEsR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUNyRCxJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztZQUUvQixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUM7WUFDbkIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzdELE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFFNUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsYUFBYSxHQUFHLGVBQWUsQ0FBQyxDQUFDO1lBQzNELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQ2xCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUN6QixhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxlQUFlLENBQ3BELENBQUM7WUFDRixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ3pDLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUssR0FBRyxHQUFHLEtBQUssRUFBRTtnQkFDeEUsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNsRCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ3pCO1lBRUQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFHRCxxQ0FBcUM7SUFDckMsZ0NBQWdDO0lBQ2hDLGtDQUFrQztJQUNsQyxzQ0FBc0M7SUFDdEMsY0FBYztJQUNkLE1BQU07SUFDTiwrREFBK0Q7SUFDL0QsK0VBQStFO0lBQy9FLG9DQUFvQztJQUVwQyxzRUFBc0U7SUFFdEUsdURBQXVEO0lBQ3ZELDZDQUE2QztJQUM3Qyw2QkFBNkI7SUFDN0Isa0NBQWtDO0lBQ2xDLGdCQUFnQjtJQUNoQixRQUFRO0lBQ1IsOERBQThEO0lBQzlELHlDQUF5QztJQUN6QyxvRUFBb0U7SUFDcEUsc0VBQXNFO0lBQ3RFLGdHQUFnRztJQUVoRyxnREFBZ0Q7SUFDaEQsK0JBQStCO0lBQy9CLHFEQUFxRDtJQUNyRCxnQ0FBZ0M7SUFDaEMsUUFBUTtJQUNSLElBQUk7SUFHSixJQUFJLGtCQUFrQjtRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNuQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztRQUN6QyxPQUFPLEVBQUUsQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQztJQUMzQyxDQUFDO0lBRUQsWUFBWSxDQUFDLEdBQVE7UUFDbkIsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO1lBQ2YsR0FBRyxDQUFDLGVBQWUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUM7U0FDNUM7YUFBTTtZQUNMLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1NBQzlCO1FBQ0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNCLDRCQUE0QjtRQUM1QixxQkFBcUI7UUFDckIsOEJBQThCO1FBQzlCLFdBQVc7SUFDYixDQUFDO0lBZ0RELG1CQUFtQjtRQUNqQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsYUFBYSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7U0FDN0M7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsYUFBYSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDNUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQztZQUUxRCwyQkFBMkI7WUFDM0IsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFFbEUsNkJBQTZCO1lBQzdCLElBQUksQ0FBQyxZQUFZLEdBQUcsY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFFbkQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUMxQjtJQUNILENBQUM7SUFHRCxzQkFBc0IsQ0FBQyxLQUFZO1FBQ2pDLE1BQU0sVUFBVSxHQUFJLEtBQUssQ0FBQyxNQUFzQixDQUFDLFVBQVUsQ0FBQztRQUM1RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDOUQsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsYUFBYSxFQUFFO1lBQzVDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztTQUNqRTtJQUNILENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFZO1FBQzdCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFxQixDQUFDO1FBQzNDLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLGFBQWEsRUFBRTtZQUM1QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO1NBQ3hFO1FBQ0QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDM0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztTQUN0RTtRQUNELElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLGFBQWEsRUFBRTtZQUM1QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO1NBQ3hFO1FBQ0QsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsb0JBQW9CLENBQUMsS0FBWTtRQUMvQixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBcUIsQ0FBQztRQUMzQyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxhQUFhLEVBQUU7WUFDNUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztTQUN4RTtRQUNELElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLGFBQWEsRUFBRTtZQUM1QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO1NBQ3hFO0lBQ0gsQ0FBQztJQW9FRCx5Q0FBeUM7SUFDekMsOENBQThDO0lBQzlDLDhDQUE4QztJQUU5QyxtREFBbUQ7SUFDbkQsb0NBQW9DO0lBQ3BDLE9BQU87SUFFUCx5QkFBeUI7SUFDekIsMERBQTBEO0lBRTFELDJCQUEyQjtJQUMzQixpQ0FBaUM7SUFDakMsa0NBQWtDO0lBQ2xDLGdDQUFnQztJQUNoQyxpQ0FBaUM7SUFFakMsMEJBQTBCO0lBQzFCLHlDQUF5QztJQUN6QyxlQUFlO0lBQ2YsMENBQTBDO0lBQzFDLFFBQVE7SUFDUixNQUFNO0lBQ04sSUFBSTtJQUVKLHFCQUFxQixDQUFDLFFBQTJCO1FBQy9DLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7UUFDaEMsd0NBQXdDO1FBQ3hDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFekIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsRUFBRTtZQUN6QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDbkMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUssWUFBWSxDQUFDLE1BQU0sQ0FDNUMsQ0FBQztZQUNGLElBQUksV0FBVyxFQUFFO2dCQUNmLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBaUIsRUFBRSxFQUFFO29CQUNsRCxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDN0MsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssWUFBWSxDQUFDLEtBQUssQ0FDbkQsQ0FBQztvQkFDRixJQUFJLGFBQWEsRUFBRTt3QkFDakIsYUFBYSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQztxQkFDM0Q7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtTQUNGO2FBQ0k7WUFDSCw0Q0FBNEM7WUFDNUMsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ2xDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLFlBQVksQ0FBQyxLQUFLLENBQy9DLENBQUM7WUFFRixJQUFJLFlBQVksRUFBRTtnQkFDaEIsWUFBWSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQzthQUN6RDtpQkFBTTtnQkFDTCxLQUFLLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7b0JBQzlCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUU7d0JBQ2pDLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUN2QyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxZQUFZLENBQUMsS0FBSyxDQUNuRCxDQUFDO3dCQUNGLElBQUksYUFBYSxFQUFFOzRCQUNqQixhQUFhLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDOzRCQUMxRCxNQUFNO3lCQUNQO3FCQUNGO2lCQUNGO2FBQ0Y7U0FDRjtRQUVELGVBQWU7UUFDZixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxlQUFlLENBQ2IsUUFBMkIsRUFDM0IsT0FBb0M7UUFFcEMsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFFeEMsTUFBTSxZQUFZLEdBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3pDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQzNDLENBQUM7UUFFRixJQUFJLENBQUMsWUFBWTtZQUFFLE9BQU87UUFFMUIsSUFDRSxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUM7WUFDckMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLEVBQ3JDO1lBQ0EsWUFBWSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFpQixFQUFFLEVBQUU7Z0JBQ2xELE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUM5QyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxZQUFZLENBQUMsS0FBSyxDQUNuRCxDQUFDO2dCQUNGLElBQUksYUFBYSxFQUFFO29CQUNqQixhQUFhLENBQUMsTUFBTSxHQUFHLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO29CQUM3RCxhQUFhLENBQUMsY0FBYyxDQUFDLEdBQUcsS0FBSyxDQUFDO2lCQUN2QztZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLFlBQVksQ0FBQyxNQUFNLEdBQUcsT0FBTyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDNUQsWUFBWSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEtBQUssQ0FBQztTQUN0QztRQUVELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELHVEQUF1RDtJQUN2RCxzRUFBc0U7SUFDdEUscUNBQXFDO0lBQ3JDLDhCQUE4QjtJQUM5QiwrQ0FBK0M7SUFDL0Msd0NBQXdDO0lBQ3hDLEtBQUs7SUFDTCxzQkFBc0I7SUFDdEIsMENBQTBDO0lBQzFDLElBQUk7SUFFSixxRUFBcUU7SUFDckUsb0NBQW9DO0lBQ3BDLDREQUE0RDtJQUM1RCwwQ0FBMEM7SUFDMUMsNENBQTRDO0lBQzVDLHNDQUFzQztJQUN0QyxVQUFVO0lBQ1YsVUFBVTtJQUNWLCtDQUErQztJQUMvQyxrQ0FBa0M7SUFDbEMsTUFBTTtJQUNOLE1BQU07SUFDTiw4QkFBOEI7SUFDOUIsSUFBSTtJQUVKLG1CQUFtQixDQUFDLFFBQTBCO1FBQzVDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDakMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQztRQUNyQyxJQUFJLENBQUMsNEJBQTRCLEdBQUcsS0FBSyxDQUFDO1FBQzFDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3hDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLEVBQUU7WUFDekMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ25DLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFLLFlBQVksQ0FBQyxNQUFNLENBQzVDLENBQUM7WUFDRixJQUFJLFdBQVcsRUFBRTtnQkFDZixZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQWlCLEVBQUUsRUFBRTtvQkFDbEQsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQzdDLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLFlBQVksQ0FBQyxLQUFLLENBQ25ELENBQUM7b0JBQ0YsSUFBSSxhQUFhLEVBQUU7d0JBQ2pCLGFBQWEsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO3FCQUNwQztnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO1NBQ0Y7YUFBTTtZQUNMLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNsQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxZQUFZLENBQUMsS0FBSyxDQUMvQyxDQUFDO1lBRUYsSUFBSSxZQUFZLEVBQUU7Z0JBQ2hCLFlBQVksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO2FBQ25DO2lCQUFNO2dCQUNMLEtBQUssSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtvQkFDOUIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRTt3QkFDakMsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ3ZDLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLFlBQVksQ0FBQyxLQUFLLENBQ25ELENBQUM7d0JBQ0YsSUFBSSxhQUFhLEVBQUU7NEJBQ2pCLGFBQWEsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDOzRCQUNuQyxNQUFNO3lCQUNQO3FCQUNGO2lCQUNGO2FBQ0Y7U0FDRjtRQUNELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUlELHlCQUF5QixDQUFDLEdBQVE7UUFDaEMsSUFBSSxHQUFHLEVBQUUsUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2hELE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQzVDLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxLQUFLLEtBQUssQ0FDN0MsQ0FBQztZQUNGLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxtQkFBbUIsQ0FBQztTQUNwRDthQUFNO1lBQ0wsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEdBQUcsQ0FBQyxZQUFZLEtBQUssS0FBSyxDQUFDO1NBQzNEO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBR0QsZ0JBQWdCLENBQUMsR0FBUTtRQUN2QixJQUFJLENBQUMscUJBQXFCLEdBQUcsR0FBRyxDQUFDO0lBQ25DLENBQUM7SUFrRkQsV0FBVztRQUNULElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDOUUsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUNoRixNQUFNLFFBQVEsR0FBRztZQUNmLE9BQU8sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDeEMsT0FBTyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUNuQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVE7WUFDN0MsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQ3JCLENBQUM7UUFDRixJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBRW5FLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVPLGdCQUFnQixDQUFDLE9BQWM7UUFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFFdkMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6QixHQUFHLEdBQUc7WUFDTixLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUMxQyxxQkFBcUIsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQztnQkFDN0QsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMscUJBQXFCLENBQUM7Z0JBQ2hDLENBQUMsQ0FBQyxFQUFFO1lBQ04sNkNBQTZDO1lBQzdDLFFBQVEsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7Z0JBQ25DLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztnQkFDckMsQ0FBQyxDQUFDLFNBQVM7U0FDZCxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFHRCxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQXVCO1FBQzFDLElBQUksSUFBSSxDQUFDLGtCQUFrQjtZQUFFLE9BQU87UUFDcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3BDLElBQUksV0FBVyxFQUFFLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNoRSxXQUFXLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUN4QyxJQUFJLEdBQUcsQ0FBQyxVQUFVLElBQUksR0FBRyxDQUFDLFlBQVksRUFBRTtvQkFDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQy9CO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjthQUFNO1lBQ0wsSUFBSSxXQUFXLENBQUMsVUFBVSxJQUFJLFdBQVcsQ0FBQyxZQUFZLEVBQUU7Z0JBQ3RELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ3ZDO1NBQ0Y7UUFDRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDM0IsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ1QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUF5QjtRQUM1QyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM5RSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdkUsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzNCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVSLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxhQUFhLENBQUMsV0FBVyxDQUFDO1lBQ3pFLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDMUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1QsQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBVztRQUM3QixJQUFJO1lBQ0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN6QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FDekMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDLEtBQUssQ0FDcEMsQ0FBQztZQUNGLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUNoQixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDdEM7WUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDdkUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDN0IsSUFBSSxLQUFLLEVBQUUsUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUNwRCxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO3dCQUNwQyxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDLEtBQUssRUFBRTs0QkFDaEMsS0FBSyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7eUJBQzVCO29CQUNILENBQUMsQ0FBQyxDQUFDO2lCQUNKO3FCQUFNLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFO29CQUN2QyxLQUFLLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztpQkFDNUI7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMzQixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FFVjtRQUFDLE9BQU8sR0FBRyxFQUFFO1lBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztTQUN0QjtRQUNELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUdELHdCQUF3QixDQUFDLEtBQVU7UUFDakMsSUFBSSxLQUFLLEVBQUUsUUFBUSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO1lBQzVDLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ3hCLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FDbkQsQ0FBQztTQUNIO1FBQ0QsT0FBTyxLQUFLLEVBQUUsVUFBVSxJQUFJLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQztJQUNuRCxDQUFDO0lBcUxELHFCQUFxQixDQUFDLGdCQUFrQztRQUN0RCxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUNuQyxNQUFNLFFBQVEsR0FBRztZQUNmLE9BQU8sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDeEMsT0FBTyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUNuQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVE7WUFDN0MsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQ3JCLENBQUM7UUFDRixJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBRW5FLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzNCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRCxnQ0FBZ0M7SUFFaEMsU0FBUyxDQUFDLElBQVcsRUFBRSxXQUFxQjtRQUMxQyxJQUFJLE9BQU8sR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDckMsTUFBTSxDQUFDLFlBQVksRUFBRSxHQUFHLFVBQVUsQ0FBQyxHQUFHLFdBQVcsQ0FBQztRQUNsRCxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBaUIsQ0FBQztRQUM1QyxLQUFLLE1BQU0sSUFBSSxJQUFJLE9BQU8sRUFBRTtZQUMxQixJQUFJLFFBQVEsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzFFLElBQUksUUFBZ0IsQ0FBQztZQUNwQix3Q0FBd0M7WUFDekMsSUFBSSxZQUFZLEtBQUssWUFBWSxJQUFJLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQ3hGLElBQUksUUFBUSxLQUFLLElBQUksSUFBSSxRQUFRLEtBQUssTUFBTSxFQUFFO29CQUM1QyxRQUFRLEdBQUcsVUFBVSxDQUFDO2lCQUN2QjtxQkFBTSxJQUFJLFFBQVEsS0FBSyxLQUFLLElBQUksUUFBUSxLQUFLLE9BQU8sRUFBRTtvQkFDckQsUUFBUSxHQUFHLFlBQVksQ0FBQztpQkFDekI7cUJBQU07b0JBQ0wsUUFBUSxHQUFHLFFBQVEsQ0FBQztpQkFDckI7YUFDQztpQkFDRSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQy9CLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7b0JBQ3pCLFFBQVEsR0FBRyxRQUFRLENBQUM7aUJBQ3JCO3FCQUFNLElBQUksT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO29CQUMxQyxRQUFRLEdBQUcsUUFBUTt5QkFDaEIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsZUFBZSxJQUFJLEdBQUcsQ0FBQyxRQUFRLElBQUksR0FBRyxFQUFFLFNBQVMsSUFBSyxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUM7eUJBQzVHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDZDtxQkFBTTtvQkFDTCxRQUFRLEdBQUcsUUFBUTt5QkFDaEIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQzt5QkFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNkO2FBQ0Y7WUFDQSx1Q0FBdUM7aUJBQ3JDLElBQUksUUFBUSxZQUFZLElBQUksSUFBSSxDQUFDLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDbkcsTUFBTSxPQUFPLEdBQUcsUUFBUSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDekUsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLFlBQVksQ0FBQyxDQUFDO2FBQ3hGO1lBQ0EsMkNBQTJDO2lCQUN2QyxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxRQUFRLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDdEYsd0NBQXdDO2dCQUN4QyxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUs7b0JBQ2QsUUFBUSxDQUFDLElBQUk7b0JBQ2IsUUFBUSxDQUFDLEVBQUU7b0JBQ1gsUUFBUSxDQUFDLEtBQUs7b0JBQ2QsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2xDLFFBQVEsQ0FBQztnQkFFcEIsOERBQThEO2dCQUM5RCxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRTtvQkFDaEMsUUFBUSxHQUFHLFFBQVEsQ0FBQztpQkFDckI7cUJBQU07b0JBQ0wsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7aUJBQ3REO2FBQ0Y7aUJBQ007Z0JBQ0gsUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO2FBQzVFO1lBRUQsc0VBQXNFO1lBQ3RFLHdDQUF3QztZQUN4Qyw0RkFBNEY7WUFDNUYsSUFBSTtZQUVKLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztnQkFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM1RCxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN0QztRQUNELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN6RSxPQUFPLEVBQUUsSUFBSTtZQUNiLFVBQVUsRUFBRSxZQUFZO1lBQ3hCLFVBQVU7WUFDVixRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDO1lBQ2hELFFBQVEsRUFBRSxLQUFLO1NBQ2hCLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFXO1FBQ3JCLE9BQU8sR0FBRztZQUNSLEVBQUUsV0FBVyxFQUFFO1lBQ2YsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDO1lBQ1osRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0QsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUdELGFBQWEsQ0FBQyxLQUFVO1FBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFFeEQsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQWEsRUFBRSxLQUFVLEVBQUUsRUFBRTtZQUN6RCxPQUFPLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFHRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ3JELENBQUM7SUFFRCxhQUFhLENBQUMsSUFBWTtRQUN4QixJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsZUFBZTtZQUFFLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDOztZQUMxRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUNqQyxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFHRCxnQkFBZ0IsQ0FBQyxJQUFZO1FBQzNCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxVQUFVLEdBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBQ25HLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxlQUFlO1lBQUUsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7O1lBQ3hELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFDckQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBSUQsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQVksRUFBRSxVQUFrQjtRQUN0RCxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBMEIsQ0FBQztRQUU5QyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUU7WUFDbEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFVBQVUsQ0FBQztZQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBQy9CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNsRSxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUM3QjtRQUNELElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDNUI7UUFDRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7SUFDckIsQ0FBQztJQUVELGNBQWMsQ0FBQyxVQUFrQjtRQUMvQixJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFDeEIsSUFBSSxVQUFVLEtBQUssT0FBTyxFQUFFO1lBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDO1lBQ3RELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLElBQUksRUFBRSxDQUFDO1NBRTNEO2FBQU0sSUFBSSxVQUFVLEtBQUssUUFBUSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDO1lBQ3RELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLElBQUksRUFBRSxDQUFDO1NBRTNEO2FBQU07WUFDTCxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixJQUFJLEVBQUUsQ0FBQztZQUN0RCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixJQUFJLEVBQUUsQ0FBQztTQUMzRDtRQUNELHNFQUFzRTtJQUN4RSxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7SUFDeEUsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxNQUFNLEtBQUssR0FBd0IsRUFBRSxDQUFDO1FBRXRDLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsSUFBSSxDQUFDLEVBQUU7WUFDekMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzFELEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDZjtTQUNGO2FBQU07WUFDTCxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2QsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRTtnQkFDbEMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNuQjtZQUNELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDeEQsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRXpGLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2pDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDZjtZQUVELElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRTtnQkFDckUsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNuQjtZQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzlDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBSUQsNEJBQTRCLENBQUMsR0FBUTtJQUVyQyxDQUFDO0lBRUQsc0JBQXNCLENBQUMsTUFBVztJQUVsQyxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQVk7UUFDMUIsc0NBQXNDO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsMkJBQTJCLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRTtZQUMxRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMvRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDcEM7SUFDSCxDQUFDO0lBS0QsMEJBQTBCLENBQUMsR0FBUTtRQUNqQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjO1lBQUUsT0FBTztRQUNyRSxJQUFJLENBQUMsdUJBQXVCLEdBQUcsR0FBRyxDQUFDO1FBQ25DLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztRQUMvQixJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssVUFBVSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO1lBQ25ELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN0QyxNQUFNLFFBQVEsR0FBRyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7WUFDeEMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQVUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRXhFLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxDQUN0RixDQUFDLE1BQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLENBQ3hGLENBQUM7WUFDRixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFO29CQUMvQixJQUFJLENBQUMsc0JBQXNCLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2lCQUNuRDtZQUNILENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNUO2FBQU0sSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbEUsSUFBSSxDQUFDLGNBQWMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3pLLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxXQUFXLElBQUksRUFBRSxDQUFDO1lBQ2hELElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLElBQUksTUFBTSxDQUFDO1lBQ2pELElBQUksQ0FBQyxlQUFlLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDaEwsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLEVBQUUsS0FBSyxFQUFFLFlBQVksSUFBSSxFQUFFLENBQUM7WUFDbEQsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBQztvQkFDOUIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztpQkFDbkQ7WUFDSCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDVDtRQUNELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQU9ELG1DQUFtQyxDQUFDLEdBQVE7UUFDMUMsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLFVBQVUsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjO1lBQUUsT0FBTztRQUNuRixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxVQUFVLENBQUMsR0FBUTtRQUNqQixJQUFHLENBQUMsR0FBRyxDQUFDLGNBQWM7WUFBRSxPQUFPO1FBQy9CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUM7UUFDNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUE7UUFDckIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLDJCQUEyQixHQUFHLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxHQUFHLENBQUM7UUFFbkMsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLFVBQVUsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLE9BQU8sRUFBRTtZQUNsRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEMsTUFBTSxRQUFRLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3hDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFVLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUV4RSxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixFQUFFLHFCQUFxQixFQUFFLE1BQU0sQ0FDdEYsQ0FBQyxNQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUN4RixDQUFDO1NBQ0g7YUFBTSxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNsRSxJQUFJLENBQUMsY0FBYztnQkFDakIsR0FBRyxFQUFFLEtBQUssRUFBRSxlQUFlO29CQUMzQixDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUM7d0JBQ3BFLENBQUMsQ0FBQyxPQUFPO3dCQUNULENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUVqQixJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsV0FBVyxJQUFJLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxJQUFJLE1BQU0sQ0FBQztZQUNqRCxJQUFJLENBQUMsZUFBZTtnQkFDaEIsR0FBRyxFQUFFLEtBQUssRUFBRSxnQkFBZ0I7b0JBQzVCLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQzt3QkFDcEUsQ0FBQyxDQUFDLE9BQU87d0JBQ1QsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxZQUFZLElBQUksRUFBRSxDQUFDO1NBQ25EO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBU0Qsc0JBQXNCO1FBQ3BCLElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDaEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELHVDQUF1QyxDQUFDLE1BQVc7SUFFbkQsQ0FBQztJQU9ELHVCQUF1QixDQUFDLE1BQVc7UUFDakMsUUFBUSxDQUFBO1FBQ1IsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQztRQUM3QyxJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDekMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUMxQzthQUFNO1lBQ0wsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUN2QztRQUNELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUUscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBQzlLLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLHFCQUFzQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztRQUNoQyxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixpRkFBaUY7UUFDakYsMERBQTBEO0lBQzVELENBQUM7SUFFRCxtQkFBbUI7UUFDWixxQ0FBcUM7UUFDNUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRixJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFFdEIsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLFVBQVUsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtZQUM3RCxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO2dCQUM5RSxPQUFPO2FBQ1I7U0FDRjtRQUVELElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2hFLE1BQU0sT0FBTyxHQUNYLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSTtnQkFDeEIsSUFBSSxDQUFDLFVBQVUsS0FBSyxTQUFTO2dCQUM3QixJQUFJLENBQUMsVUFBVSxLQUFLLEVBQUUsQ0FBQztZQUV6QixJQUFJLE9BQU8sRUFBRTtnQkFDWCxPQUFPO2FBQ1I7U0FDRjtRQUNDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakYsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssVUFBVSxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksT0FBTyxFQUFFO2dCQUN4RCxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUNsQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBRTVDLHdDQUF3QztnQkFDeEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUMxQyxDQUFDLEVBQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBRyxpQkFBaUI7aUJBQ3ZFLENBQUM7Z0JBRUYsMEJBQTBCO2dCQUMxQixJQUFJLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO29CQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFO3dCQUNuQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7cUJBQzVCO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBRUo7aUJBQU0sSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3JFLE1BQU0sQ0FBQyxLQUFLLEdBQUc7b0JBQ2IsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjLElBQUksU0FBUztvQkFDakQsV0FBVyxFQUFFLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSTtvQkFDcEMsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU07b0JBQ3JELGdCQUFnQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUk7b0JBQ2hFLFlBQVksRUFBRSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUk7aUJBQ3ZDLENBQUM7YUFDSDtTQUNGO1FBRUQsTUFBTSxNQUFNLEdBQUc7WUFDYixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7WUFDbkIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1lBQ3JCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztZQUNuQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7WUFDakIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1NBQ2xCLENBQUM7UUFFRixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWxGLElBQUksYUFBYSxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ3hCLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO1NBQzVDO2FBQU07WUFDTCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNqQztRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDaEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUM3QixJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQ25DLE1BQU0sUUFBUSxHQUFHO1lBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUN4QyxPQUFPLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQ25DLGFBQWEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQztZQUNsRCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVM7U0FDckIsQ0FBQztRQUNGLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFFbkUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUE7UUFDMUMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUM7WUFDekYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUNLLFVBQVUsQ0FBQyxPQUFjLEVBQUUsS0FBYTtRQUM5QyxLQUFLLE1BQU0sR0FBRyxJQUFJLE9BQU8sRUFBRTtZQUN6QixJQUFJLEdBQUcsQ0FBQyxLQUFLLEtBQUssS0FBSztnQkFBRSxPQUFPLEdBQUcsQ0FBQztZQUNwQyxJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFO2dCQUN4QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ25ELElBQUksS0FBSztvQkFBRSxPQUFPLEtBQUssQ0FBQzthQUN6QjtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0MsMENBQTBDO0lBQzFDLHFCQUFxQjtJQUNyQiwyQkFBMkI7SUFDM0IsNkJBQTZCO0lBQzdCLDJCQUEyQjtJQUMzQix5QkFBeUI7SUFDekIsd0JBQXdCO0lBQ3hCLE9BQU87SUFDUCxxQ0FBcUM7SUFDckMsK0JBQStCO0lBQy9CLHFDQUFxQztJQUNyQywrQkFBK0I7SUFDL0Isa0NBQWtDO0lBQ2xDLHdDQUF3QztJQUN4Qyx1R0FBdUc7SUFDdkcsOENBQThDO0lBQzlDLElBQUk7SUFFSix1QkFBdUIsQ0FBQyxNQUFXO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsNkJBQTZCO0lBRTdCLDBCQUEwQixDQUFDLEdBQVEsRUFBRSxLQUFZO1FBQy9DLE1BQU0sT0FBTyxHQUFJLEtBQUssRUFBRSxNQUEyQixFQUFFLE9BQU8sQ0FBQztRQUU3RCxJQUFJLE9BQU8sRUFBRTtZQUNYLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsRUFBRSxxQkFBcUIsRUFBRSxHQUFHLENBQzlDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUN2QyxDQUFDO1lBQ0YsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksR0FBRyxDQUFTLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDakU7YUFBTTtZQUNMLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDdkM7SUFDSCxDQUFDO0lBR0QsOEJBQThCLENBQUMsR0FBUTtRQUNyQyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ2pGLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUM7SUFDcEUsQ0FBQztJQUVELGNBQWMsQ0FBQyxHQUFRLEVBQUUsTUFBVztRQUNsQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDO1FBQ25ELElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRTtZQUNuQixHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7U0FDckI7UUFDRCxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0MsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDWixHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQy9CO2FBQU07WUFDTCxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDL0I7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFLRCxlQUFlLENBQUMsR0FBUTtRQUN0QixNQUFNLHNCQUFzQixHQUFHLENBQUMsT0FBYyxFQUFXLEVBQUU7WUFDekQsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUU7Z0JBQzVCLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUMsS0FBSyxFQUFFO29CQUM5QixNQUFNLENBQUMsS0FBSyxHQUFHO3dCQUNiLElBQUksRUFBRSxFQUFFO3dCQUNSLGVBQWUsRUFBRSxTQUFTO3dCQUMxQixXQUFXLEVBQUUsSUFBSTt3QkFDakIsU0FBUyxFQUFFLE1BQU07d0JBQ2pCLGdCQUFnQixFQUFFLFNBQVM7d0JBQzNCLFlBQVksRUFBRSxJQUFJO3FCQUNuQixDQUFDO29CQUNGLE9BQU8sSUFBSSxDQUFDO2lCQUNiO2dCQUNELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLElBQUksTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUU7b0JBQy9ELElBQUksc0JBQXNCLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO3dCQUMzQyxPQUFPLElBQUksQ0FBQztxQkFDYjtpQkFDRjthQUNGO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUM7UUFDRixzQkFBc0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlFLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNyQztRQUNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixNQUFNLFFBQVEsR0FBRztZQUNmLE9BQU8sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDeEMsT0FBTyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUNuQyxhQUFhLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7WUFDbEQsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQ3JCLENBQUM7UUFDRixJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBRW5FLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFBO1FBQzFDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDO1lBQ3pGLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFHRCxlQUFlLENBQUMseUJBQXlCLEdBQUcsS0FBSztRQUMvQyxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxRCxNQUFNLG1CQUFtQixHQUFHLENBQUMsT0FBYyxFQUFFLEVBQUU7WUFDN0MsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUU7Z0JBQzVCLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRTtvQkFDaEIsTUFBTSxDQUFDLEtBQUssR0FBRzt3QkFDYixJQUFJLEVBQUUsRUFBRTt3QkFDUixlQUFlLEVBQUUsU0FBUzt3QkFDMUIsV0FBVyxFQUFFLElBQUk7d0JBQ2pCLFNBQVMsRUFBRSxNQUFNO3dCQUNqQixnQkFBZ0IsRUFBRSxTQUFTO3dCQUMzQixZQUFZLEVBQUUsSUFBSTtxQkFDbkIsQ0FBQztpQkFDSDtnQkFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO29CQUM3RCxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ3RDO2FBQ0Y7UUFDSCxDQUFDLENBQUM7UUFDRixtQkFBbUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUM3QixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLGtDQUFrQztRQUNsQyxtQ0FBbUM7UUFDbkMsNkJBQTZCO1FBQzdCLGlDQUFpQztRQUNqQyx3Q0FBd0M7UUFDeEMsK0JBQStCO1FBQy9CLDhCQUE4QjtRQUM5QixNQUFNLEtBQUssR0FBRyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1FBQzFFLE1BQU0sUUFBUSxHQUFHO1lBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUN4QyxPQUFPLEVBQUUsRUFBRTtZQUNYLGFBQWEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQztZQUNsRCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVM7U0FDckIsQ0FBQztRQUNGLElBQUcsQ0FBQyx5QkFBeUIsRUFBQztZQUM1QixJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1NBQ3BFO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQztRQUN6RixJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDO1FBQ3pGLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUNuRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixJQUFHLENBQUMseUJBQXlCLEVBQUM7Z0JBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2FBQ3hDO1FBQ0gsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ1IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBR0QsZUFBZSxDQUFDLE1BQVc7UUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDckUsa0RBQWtEO1FBQ3BELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBRTFCLE1BQU0sTUFBTSxHQUFHO1lBQ2IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1lBQ25CLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtZQUNyQixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7WUFDbkIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1lBQ2pCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUU7U0FDeEIsQ0FBQztRQUVGLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbEYsSUFBSSxhQUFhLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDeEIsOEJBQThCO1lBQzlCLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO1NBQzVDO2FBQU07WUFDTCxpQkFBaUI7WUFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDakM7UUFDRCxNQUFNLFFBQVEsR0FBRztZQUNmLE9BQU8sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDeEMsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxFQUFFO2dCQUM1RyxJQUFJLEtBQUssRUFBRTtvQkFDVCxPQUFPLEtBQUssQ0FBQyxVQUFVLENBQUM7aUJBQ3pCO2dCQUNELE9BQU87b0JBQ0wsS0FBSztvQkFDTCxHQUFHLElBQUk7aUJBQ1IsQ0FBQTtZQUNILENBQUMsQ0FBQztZQUNGLGFBQWEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQztZQUNsRCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVM7U0FDckIsQ0FBQztRQUNGLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFFbkUsSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQztRQUN6RixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDM0MsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUdELGdCQUFnQixDQUFDLE1BQVc7UUFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDckUsNkNBQTZDO1FBQzdDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBRTVCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEYsSUFBSSxhQUFhLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDeEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsTUFBTSxRQUFRLEdBQUc7WUFDZixPQUFPLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ3hDLE9BQU8sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRTtnQkFDNUcsSUFBSSxLQUFLLEVBQUU7b0JBQ1QsT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFDO2lCQUN6QjtnQkFDRCxPQUFPO29CQUNMLEtBQUs7b0JBQ0wsR0FBRyxJQUFJO2lCQUNSLENBQUM7WUFDSixDQUFDLENBQUM7WUFDRixhQUFhLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7WUFDbEQsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQ3JCLENBQUM7UUFDRixJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUM7UUFDekYsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ25ELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzNDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCx3QkFBd0I7UUFDdEIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUU7WUFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUlELFlBQVksQ0FBQyxLQUFhLEVBQUUsR0FBUTtRQUNsQyxPQUFPLEdBQUcsRUFBRSxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQUkscUJBQXFCO1FBQ3ZCLE1BQU0sZUFBZSxHQUFHLENBQUMsT0FBYyxFQUFTLEVBQUU7WUFDaEQsSUFBSSxNQUFNLEdBQVUsRUFBRSxDQUFDO1lBRXZCLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3JCLElBQUksR0FBRyxDQUFDLFFBQVEsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtvQkFDdkMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2lCQUN2RDtnQkFFRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzlFLElBQUksaUJBQWlCLEVBQUU7b0JBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ2xCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUM7UUFFRixPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUtELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQVVELGFBQWEsQ0FBQyxHQUFRLEVBQUUsTUFBVztRQUNqQyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFlBQVksQ0FBQyxHQUFRLEVBQUUsR0FBUTtRQUM3QixPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUlELFVBQVUsQ0FBQyxHQUFRLEVBQUUsTUFBVyxFQUFFLHFCQUFxQixHQUFHLEtBQUssRUFBRSxhQUEyQjtRQUMxRixJQUFJLENBQUMsb0JBQW9CLEdBQUcsRUFBRSxDQUFDO1FBQy9CLElBQUksR0FBRyxFQUFFLGNBQWMsSUFBSSxDQUFDO1lBQUUsT0FBTztRQUNyQyxJQUFJLENBQUMsTUFBTSxFQUFFLFdBQVc7WUFBRSxPQUFPO1FBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0QsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFVBQVUsSUFBRyxNQUFNLENBQUMsSUFBSSxJQUFJLE9BQU8sRUFBRTtZQUN2RCxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsNkJBQTZCLENBQWdCLENBQUM7Z0JBQzFGLElBQUksWUFBWSxFQUFFO29CQUNoQixNQUFNLElBQUksR0FBRyxZQUFZLENBQUMscUJBQXFCLEVBQUUsQ0FBQztvQkFDbEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUM7b0JBRXhFLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxZQUFZLEVBQUU7d0JBQzlCLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDO3FCQUM5Qzt5QkFBTTt3QkFDTCxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7cUJBQ2pDO2lCQUNGO2dCQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzNCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxJQUFJLENBQUMscUJBQXFCLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sR0FBRyxFQUFFLEVBQUU7WUFDakYsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQTtTQUNsRTtRQUNELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsYUFBYTtnQkFBRSxPQUFPO1lBRTNCLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxhQUFhLENBQzNDLG9CQUFvQixDQUNNLENBQUM7WUFFN0Isd0RBQXdEO1lBQ3hELElBQUksU0FBUyxFQUFFO2dCQUNiLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDbEIsT0FBTzthQUNSO1lBRUQscUNBQXFDO1lBQ3JDLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxhQUFhLENBQzNDLHNFQUFzRSxDQUNqRCxDQUFDO1lBRXhCLElBQUksU0FBUyxFQUFFO2dCQUNiLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztnQkFDbEMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUVsQixJQUNFLFNBQVMsWUFBWSxnQkFBZ0I7b0JBQ3JDLFNBQVMsWUFBWSxtQkFBbUIsRUFDeEM7b0JBQ0EsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO2lCQUNwQjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRixZQUFZLENBQUMsR0FBUSxFQUFFLE1BQVcsRUFBRSxPQUFZO1FBQzdDLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDbkYsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFRLEVBQUUsTUFBVyxFQUFFLE9BQWE7UUFDOUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU07UUFDNUIsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRTtZQUMvQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixPQUFPO1NBQ1I7UUFDRCxNQUFNLEtBQUssR0FBRyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQztRQUN0QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN6RyxJQUFJLFVBQVUsRUFBRTtZQUNkLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztTQUMzRDtRQUNELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1osSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNwQyxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7UUFDN0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO1lBQ3hFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzSCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDakUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQVksRUFBRSxHQUFRLEVBQUUsR0FBUTtRQUM1QyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBMEIsQ0FBQztRQUMvQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUFFLE9BQU87UUFFaEQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU1QixzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ25DLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLE9BQU87U0FDUjtRQUVELG1CQUFtQjtRQUNuQixNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO1lBQ25CLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdkQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDL0UsQ0FBQyxDQUFDO1FBQ0YsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsa0JBQWtCLENBQUMsR0FBUSxFQUFFLElBQVksRUFBRSxLQUFVO1FBQ25ELElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTztRQUUxQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUcsQ0FBQztRQUM1QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ3RDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO2dCQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDN0IsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRVIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBR0QsYUFBYSxDQUFDLEtBQWE7UUFDekIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsS0FBb0I7UUFDbkMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUMzRCxJQUFJLFFBQVEsR0FBRyxFQUFFLElBQUksUUFBUSxHQUFHLEVBQUUsRUFBRTtZQUNsQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDeEI7SUFDSCxDQUFDO0lBRUQsd0JBQXdCLENBQUMsR0FBUSxFQUFFLE1BQVcsRUFBRSxLQUFXO1FBQ3pELHFCQUFxQjtRQUNyQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FDNUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQ3RFLENBQUM7UUFDRixJQUFJLENBQUMsV0FBVztZQUFFLE9BQU87UUFDekIsK0RBQStEO1FBQy9ELCtEQUErRDtRQUMvRCx3RUFBd0U7UUFDeEUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM5RyxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQztRQUNuRCw0QkFBNEI7UUFDNUIsa0dBQWtHO1FBQ2xHLDJCQUEyQjtRQUMzQixtREFBbUQ7UUFFbkQsTUFBTSxPQUFPLEdBQUc7WUFDZCxJQUFJLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFBRTtZQUN4QixTQUFTLEVBQUUsWUFBWTtZQUN2QixLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUztZQUNsRCxNQUFNLEVBQUUsTUFBTTtZQUNkLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUztZQUNwQixNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUztTQUNuRCxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUN0QyxXQUFXO0lBQ2IsQ0FBQztJQUdELFNBQVMsQ0FBQyxHQUFRLEVBQUUsR0FBUTtRQUMxQixPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELGNBQWMsQ0FBQyxHQUFRLEVBQUUsTUFBVyxFQUFFLE1BQVcsRUFBRSxlQUFlLEdBQUcsS0FBSztRQUN2RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsNkJBQTZCLE1BQU0sRUFBRSxDQUFDLENBQUE7WUFDcEQsT0FBTztTQUNSO1FBQ0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUMxQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMzQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBUSxFQUFFLEdBQW9CLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFckYsSUFBSSxNQUFNLElBQUksT0FBTyxFQUFFO1lBQ3JCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDekIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixJQUFJLEVBQUUsQ0FBQztnQkFDbEQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUU7b0JBQzFDLE1BQU0sVUFBVSxHQUFHLE9BQU8sWUFBWSxLQUFLLFFBQVE7d0JBQ2pELENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLFlBQVksQ0FBQyxHQUFHLElBQUksWUFBWSxDQUFDLEtBQUssSUFBSSxZQUFZLENBQUMsSUFBSSxJQUFJLFlBQVk7d0JBQ2hHLENBQUMsQ0FBQyxZQUFZLENBQUM7b0JBRWpCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUNyQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsS0FBSyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsQ0FDekUsQ0FBQztvQkFFRixPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDO2dCQUN0RSxDQUFDLENBQUMsQ0FBQzthQUNKO2lCQUFNLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUU7Z0JBQ3hELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsSUFBSSxFQUFFLENBQUM7Z0JBQ2xELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDO2dCQUNwRixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsS0FBSyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUVsSCxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLENBQUM7YUFDaEY7aUJBQU07Z0JBQ0wsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUM7YUFDakQ7U0FDRjtRQUVELElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRTtZQUMvRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQzFELENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQ3JDLENBQUM7WUFDRixJQUFJLGdCQUFnQixLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUMzQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBUSxFQUFFLEdBQW9CLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hJLElBQUksY0FBYyxJQUFJLE9BQU8sRUFBRTtvQkFDN0IsY0FBYyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDM0M7YUFDRjtTQUNGO1FBRUQsNEJBQTRCO1FBQzVCLDZCQUE2QjtRQUM3Qiw0QkFBNEI7UUFDNUIsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQy9DLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ2pELENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQ3JDLENBQUM7WUFDRixJQUFJLGVBQWUsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDMUIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQVEsRUFBRSxHQUFvQixFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztnQkFDdEgsSUFBSSxhQUFhLElBQUksT0FBTyxFQUFFO29CQUM1QixhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUMxQzthQUNGO1NBQ0Y7UUFFRCxJQUFJLGVBQWUsRUFBRTtZQUNuQixJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNwRDtRQUVELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELGlCQUFpQixDQUFDLEdBQVEsRUFBRSxNQUFXO1FBQ3JDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUM1QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckcsSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBRXpCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVyRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEcsSUFBSSxVQUFVO1lBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxhQUFhLENBQUM7UUFFekQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pGLElBQUksT0FBTztZQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsYUFBYSxDQUFDO1FBQ25ELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUtPLFFBQVEsQ0FBQyxHQUFRLEVBQUUsR0FBUTtRQUNqQyxPQUFPLEdBQUcsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBVztRQUMxQixJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFO1lBQ2pELE9BQU8sTUFBTSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDO1NBQ2hDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELG1CQUFtQixDQUFDLE1BQVc7UUFDN0IsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksTUFBTSxLQUFLLElBQUksRUFBRTtZQUNqRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7U0FDMUM7UUFDRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsWUFBWSxDQUFDLEdBQVEsRUFBRSxHQUFRO1FBQzdCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRXBDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMvQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFcEQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7Z0JBQ3ZDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1QyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBRVAsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1NBQ3hDO1FBRUQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUUsQ0FBQztJQUNyQyxDQUFDO0lBR0QsZUFBZSxDQUFDLEdBQVEsRUFBRSxHQUFRLEVBQUUsTUFBVztRQUM3QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELGVBQWUsQ0FBQyxHQUFRLEVBQUUsR0FBUSxFQUFFLE1BQVc7UUFDN0MsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRXpDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsQ0FDL0QsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXLENBQUMsR0FBUSxFQUFFLEdBQVE7UUFDNUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBR0QsV0FBVyxDQUFDLEdBQVEsRUFBRSxHQUFRO1FBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFHRCxZQUFZLENBQUMsR0FBUSxFQUFFLEdBQVE7UUFDN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztJQUN6QixDQUFDO0lBR0Qsa0JBQWtCLENBQUMsR0FBVSxFQUFFLEdBQVM7UUFDdEMsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFaEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQVksQ0FBQztRQUNoQyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNyRCxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sR0FBRzthQUNQLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQzthQUN4RCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVELGtCQUFrQixDQUFDLEdBQVEsRUFBRSxHQUFRO1FBQ25DLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRXhDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBRTNCLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxFQUFZLENBQUM7UUFDaEMsQ0FBQyxHQUFHLENBQUMscUJBQXFCLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDckQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLEdBQUc7YUFDUCxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7YUFDeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFNRCxRQUFRLENBQUMsSUFBUztRQUNoQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLElBQUksSUFBSTtZQUFFLE9BQU87UUFDaEQsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVTtZQUFFLE9BQU87UUFDaEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbEMsTUFBTSxLQUFLLEdBQUc7WUFDWixHQUFHLEVBQUU7Z0JBQ0gsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLO2dCQUNsQyxJQUFJLEVBQUUsSUFBSTthQUNYO1lBQ0QsU0FBUyxFQUFFLFlBQVk7U0FDeEIsQ0FBQztRQUNGLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUM7UUFDekYsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDL0IsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sUUFBUSxHQUFHO1lBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUN4QyxPQUFPLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEVBQUU7Z0JBQzVHLElBQUksS0FBSyxFQUFFO29CQUNULE9BQU8sS0FBSyxDQUFDLFVBQVUsQ0FBQztpQkFDekI7Z0JBQ0QsT0FBTztvQkFDTCxLQUFLO29CQUNMLEdBQUcsSUFBSTtpQkFDUixDQUFBO1lBQ0gsQ0FBQyxDQUFDO1lBQ0YsYUFBYSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO1lBQ2xELElBQUksRUFBRSxJQUFJLENBQUMsU0FBUztTQUNyQixDQUFDO1FBQ0YsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUNuRSxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsTUFBTSxLQUFLLEdBQUc7Z0JBQ1osR0FBRyxFQUFFO29CQUNILEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSztvQkFDbEMsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJO2lCQUNqQztnQkFDRCxTQUFTLEVBQUUsWUFBWTthQUN4QixDQUFDO1lBQ0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDL0IsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFTLEVBQUUsSUFBUztRQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxFQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xJLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTFEO1lBQ0UsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCO2dCQUNwRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVTtnQkFDeEMsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTtvQkFDdEMsT0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDO29CQUMxQixJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUU7d0JBQ2pCLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7d0JBQ2hDLElBQ0UsT0FBTyxPQUFPLENBQUMsS0FBSyxLQUFLLFFBQVE7NEJBQ2pDLE9BQU8sQ0FBQyxLQUFLLEtBQUssSUFBSTs0QkFDdEIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFDdkM7NEJBQ0EsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7eUJBQ3RCO3FCQUNGO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CO2dCQUN4RCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUI7Z0JBQzFELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQjtnQkFDeEQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQ25DO1FBQ0QsT0FBTyxJQUFJLEVBQUUsVUFBVSxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxFQUFFLE9BQU8sQ0FBQztRQUNyQixPQUFPLElBQUksRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDO1FBQy9CLE1BQU0sS0FBSyxHQUFHO1lBQ1osR0FBRyxFQUFFO2dCQUNILElBQUksRUFBRSxJQUFJO2FBQ1g7WUFDRCxTQUFTLEVBQUUsSUFBSTtTQUNoQixDQUFBO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDL0IsQ0FBQztJQVFELEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBUztRQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHO1lBQ2hCLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNYLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQTtRQUNELElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzNDLEdBQUcsSUFBSTtZQUNQLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFO1NBQzdCLENBQUMsQ0FBQyxDQUFDO1FBQ0osSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzVCO1lBQ0UsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCO2dCQUNwRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVTtnQkFDeEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTtvQkFDcEMsT0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDO29CQUUxQixJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUU7d0JBQ2pCLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7d0JBQ2hDLElBQ0UsT0FBTyxPQUFPLENBQUMsS0FBSyxLQUFLLFFBQVE7NEJBQ2pDLE9BQU8sQ0FBQyxLQUFLLEtBQUssSUFBSTs0QkFDdEIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFDdkM7NEJBQ0EsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7eUJBQ3RCO3FCQUNGO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBRUwscURBQXFEO1lBQ3JELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQjtnQkFDeEQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CO2dCQUMxRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0I7Z0JBQ3hELElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQywyQkFBMkIsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEVBQUUsSUFBSSxDQUFDO1lBQzdCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxFQUFFLGFBQWEsSUFBSSxLQUFLLENBQUM7WUFDakQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ2xDLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMvQyxPQUFPLElBQUksRUFBRSxVQUFVLENBQUM7WUFDeEIsT0FBTyxJQUFJLEVBQUUsT0FBTyxDQUFDO1lBQ3JCLE9BQU8sSUFBSSxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUM7U0FDaEM7UUFDRCxJQUFJLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDcEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQTtTQUM1QztRQUNELE1BQU0sS0FBSyxHQUFHO1lBQ1osR0FBRyxFQUFFO2dCQUNILElBQUksRUFBRSxJQUFJO2FBQ1g7WUFDRCxTQUFTLEVBQUUsUUFBUTtTQUNwQixDQUFBO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDL0IsQ0FBQztJQUVELFVBQVUsQ0FBQyxPQUFhO1FBQ3RCLElBQUksT0FBTyxFQUFFLE9BQU8sRUFBRTtZQUNwQixPQUFPLEVBQUUsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ2pDLE9BQU87U0FDUjtRQUNELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ3RFLElBQUksWUFBWSxHQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksTUFBTSxHQUFHO1lBQ1gsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDO1lBQ2xELG1CQUFtQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLElBQUksRUFBRSxDQUFDO1lBQ3RELHNCQUFzQixFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQ3hGLGtCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0I7WUFDM0MsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjtZQUM3QyxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDOUIsV0FBVyxFQUFFLEtBQUs7WUFDbEIsVUFBVSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZO1lBQzlDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxpQkFBaUI7U0FFMUMsQ0FBQTtRQUNELE1BQU0sS0FBSyxHQUFHO1lBQ1osR0FBRyxFQUFFO2dCQUNILElBQUksRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVO2dCQUNuRSxhQUFhLEVBQUUsSUFBSSxDQUFDLFlBQVk7Z0JBQ2hDLE9BQU8sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7Z0JBQ3hDLE9BQU8sRUFBRSxJQUFJLENBQUMsWUFBWTtvQkFDeEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRTt3QkFDM0QsTUFBTSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxVQUFVLEVBQUUsR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO3dCQUMzRCxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDO29CQUN4QyxDQUFDLENBQUM7b0JBQ0YsQ0FBQyxDQUFDLEVBQUU7Z0JBQ04sTUFBTSxFQUFFLE1BQU07Z0JBQ2QsRUFBRSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsMkJBQTJCLEVBQUUsRUFBRTtnQkFDbEUsV0FBVyxFQUFFLE9BQU8sSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDaEQsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTO2FBQ3JCO1lBQ0QsU0FBUyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxjQUFjO1NBQ3JHLENBQUE7UUFFRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2xHLE1BQU0sc0JBQXNCLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUN4RSxJQUFJLEtBQUssRUFBRTtnQkFDVCxPQUFPLEtBQUssQ0FBQyxVQUFVLENBQUM7YUFDekI7WUFDRCxPQUFPO2dCQUNMLEtBQUs7Z0JBQ0wsR0FBRyxJQUFJO2FBQ1IsQ0FBQTtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxRQUFRLEdBQUc7WUFDZixPQUFPLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ3hDLE9BQU8sRUFBRSxzQkFBc0I7WUFDL0IsYUFBYSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO1lBQ2xELElBQUksRUFBRSxJQUFJLENBQUMsU0FBUztTQUNyQixDQUFDO1FBQ0YsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUNuRSxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDL0IsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUdELGdCQUFnQixDQUFDLE9BQWMsRUFBRSxPQUFjO1FBQzdDLE1BQU0sY0FBYyxHQUFHLE9BQU87YUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ1AsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RELE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDdkMsQ0FBQyxDQUFDO2FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTlCLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBR0QsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDN0UsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYTtRQUN4QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFJRCw4REFBOEQ7SUFFOUQsVUFBVSxDQUFDLEdBQVEsRUFBRSxHQUFRO1FBQzNCLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBT0QsMEJBQTBCLENBQ3hCLEdBQVEsRUFDUixHQUFRLEVBQ1IsT0FBYyxFQUNkLGNBQWMsR0FBRyxLQUFLO1FBRXRCLE1BQU0sV0FBVyxHQUFHLENBQUMsU0FBYyxFQUFFLEVBQUU7WUFDckMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU87b0JBQUUsT0FBTztnQkFDL0IsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFaEMsSUFBSSxDQUFDLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFO29CQUMvRixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO29CQUNyRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2hCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQzVDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7UUFHRixNQUFNLGlCQUFpQixHQUFHLENBQUMsU0FBYyxFQUFFLEVBQUU7WUFDM0MsTUFBTSxJQUFJLEdBQWEsRUFBRSxDQUFDO1lBQzFCLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxPQUFPO29CQUFFLE9BQU87Z0JBRS9CLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFO29CQUM3RixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDckQ7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDO1FBRUYsSUFBSSxjQUFjLEVBQUU7WUFDbEIsSUFBSSxPQUFPLEdBQWEsRUFBRSxDQUFDO1lBQzNCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNsRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzFDLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDakMsR0FBRyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtvQkFDcEMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQzVDLENBQUMsQ0FBQyxDQUFDO2FBQ0o7aUJBQU07Z0JBQ0wsT0FBTyxHQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ2xDO1lBQ0QsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNoQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDMUQsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNqQixHQUFHLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7aUJBQzVEO3FCQUFNO29CQUNMLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDbEI7YUFDRjtTQUNGO2FBQU07WUFDTCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQ2pELElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxPQUFPO2dCQUFFLE9BQU87WUFFakMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNoQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2hCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDNUM7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDaEM7U0FDRjtRQUVELElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3ZCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNOLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFRO1FBQ2xCLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQXVCLENBQUM7UUFDaEYsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2hDLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0QsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsR0FBRztnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUN2QixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUM1QyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUNwRCxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztZQUNoRSxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQztZQUN2RCxJQUFJLG1CQUFtQixJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQzVDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDO2dCQUN4QyxNQUFNLE1BQU0sR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDO2dCQUM3QixHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUM7YUFFaEM7aUJBQU07Z0JBQ0wsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO2dCQUMxQixHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7Z0JBQ3ZCLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLGVBQWUsQ0FBQzthQUN2QztZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQU9ELFVBQVUsQ0FBQyxHQUFRLEVBQUUsR0FBUTtRQUMzQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQVEsRUFBRSxHQUFRO1FBQzFCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM1RSxDQUFDO0lBRUQsYUFBYSxDQUFDLE9BQTJCO1FBQ3ZDLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDM0IsT0FBTyxPQUFPLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7SUFDbkQsQ0FBQztJQUtELGVBQWUsQ0FBQyxJQUFZO1FBQzFCLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0MsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNqRixNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQztRQUNuRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQVk7UUFDdEIsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN2QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzdELENBQUM7SUFXRixZQUFZLENBQUMsS0FBb0MsRUFBRSxXQUFnQjtRQUMvRCx1RUFBdUU7UUFDMUUsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUMzRCxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxpQ0FBaUM7U0FDNUU7UUFDQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZO1lBQzlCLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQztZQUNuQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXhFLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxVQUFVLENBQUMsRUFBRTtZQUNsQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDeEI7UUFDRCxJQUFJLFdBQVcsQ0FBQyxjQUFjLElBQUksQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRWxELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV2QixpQ0FBaUM7UUFDakMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFLLFlBQVksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ3hGLE1BQU0sTUFBTSxHQUFHLENBQUMsS0FBSyxZQUFZLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUV4RixJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztRQUNuQixJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztRQUNuQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUUvQixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQWdCLENBQUM7WUFDM0UsSUFBSSxDQUFDLFdBQVc7Z0JBQUUsT0FBTztZQUN6QixNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDO1lBQzFDLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUM7WUFDNUMsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztZQUV4Qyw2QkFBNkI7WUFDN0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQy9FLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUM7WUFDL0IsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztZQUNyQyxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1lBRXJDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztZQUNmLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztZQUVmLG1EQUFtRDtZQUNuRCxJQUFJLENBQUMsR0FBRyxTQUFTLEdBQUcsYUFBYSxFQUFFO2dCQUNqQyxDQUFDLEdBQUcsYUFBYSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUM7YUFDcEM7WUFFRCx1REFBdUQ7WUFDdkQsNENBQTRDO1lBQzVDLElBQUksQ0FBQyxHQUFHLFVBQVUsR0FBRyxXQUFXLEVBQUU7Z0JBQ2hDLG9DQUFvQztnQkFDcEMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxVQUFVLENBQUM7Z0JBRXhCLHlEQUF5RDtnQkFDekQsSUFBSSxDQUFDLEdBQUcsUUFBUSxFQUFFO29CQUNoQixDQUFDLEdBQUcsV0FBVyxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUM7aUJBQ25DO2FBQ0Y7WUFFRCx5Q0FBeUM7WUFDekMsSUFBSSxDQUFDLEdBQUcsUUFBUSxFQUFFO2dCQUNoQixDQUFDLEdBQUcsUUFBUSxHQUFHLEVBQUUsQ0FBQzthQUNuQjtZQUNELElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQ2QsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7WUFDZCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUV0QixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO2dCQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzNCLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVDLGFBQWEsQ0FBQyxNQUFjO1FBQzFCLE1BQU0sT0FBTyxHQUFHO1lBQ2QsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQ3JCLFNBQVMsRUFBRSxNQUFNO1NBQ2xCLENBQUM7UUFDRixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFHRCxhQUFhLENBQUMsSUFBWTtRQUN4QixNQUFNLElBQUksR0FBRyxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDakMsSUFBSSxJQUFJLElBQUksU0FBUyxJQUFJLElBQUksSUFBSSxXQUFXO1FBQzFDLHFKQUFxSjtRQUNySixvTkFBb047UUFDcE4sb05BQW9OO1FBQ3BOLCtPQUErTztRQUMvTyxnUEFBZ1A7UUFDaFAseU9BQXlPO1FBQ3pPLHFTQUFxUztVQUNyUztZQUNBLDRDQUE0QztZQUM1Qyw2QkFBNkI7U0FDOUI7UUFDRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMvQyxNQUFNLDJCQUEyQixHQUFVLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUM3QiwyQkFBMkIsQ0FBQyxJQUFJLENBQUM7Z0JBQy9CLEVBQUUsRUFBRSxFQUFFO2dCQUNOLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVzthQUM5QixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHO1lBQ2QsSUFBSSxFQUFFO2dCQUNKLEdBQUcsRUFBRSxRQUFRO2dCQUNiLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztnQkFDekIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO2FBQzlCO1lBQ0QsU0FBUyxFQUFFLElBQUk7U0FDaEIsQ0FBQztRQUNGLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ2pDLENBQUM7SUFHRCxjQUFjLENBQUMsTUFBVyxFQUFFLEtBQVU7UUFDcEMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUdELDRCQUE0QixDQUFDLE1BQVc7UUFDdEMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFNO1FBQ25CLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxVQUFVLElBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxPQUFPLEVBQUU7WUFDdkQsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1NBQ3hCO2FBQU0sSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM3RCxNQUFNLENBQUMsS0FBSyxHQUFHO2dCQUNiLGVBQWUsRUFBRSxTQUFTO2dCQUMxQixXQUFXLEVBQUUsSUFBSTtnQkFDakIsU0FBUyxFQUFFLE1BQU07Z0JBQ2pCLGdCQUFnQixFQUFFLElBQUk7Z0JBQ3RCLFlBQVksRUFBRSxJQUFJO2FBQ25CLENBQUE7U0FDRjtRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRixJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNoQixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDckM7UUFFRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2xHLE1BQU0sc0JBQXNCLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUN4RSxJQUFJLEtBQUssRUFBRTtnQkFDVCxPQUFPLEtBQUssQ0FBQyxVQUFVLENBQUM7YUFDekI7WUFDRCxPQUFPO2dCQUNMLEtBQUs7Z0JBQ0wsR0FBRyxJQUFJO2FBQ1IsQ0FBQTtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxRQUFRLEdBQUc7WUFDZixPQUFPLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ3hDLE9BQU8sRUFBRSxzQkFBc0I7WUFDL0IsYUFBYSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO1lBQ2xELElBQUksRUFBRSxJQUFJLENBQUMsU0FBUztTQUNyQixDQUFDO1FBQ0YsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUNuRSxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsTUFBTSxlQUFlLEdBQUcsc0JBQXNCLENBQUM7WUFDL0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDM0MsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVELGlDQUFpQztRQUMvQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsTUFBTSxRQUFRLEdBQUc7WUFDZixPQUFPLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ3hDLE9BQU8sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRTtnQkFDNUcsSUFBSSxLQUFLLEVBQUU7b0JBQ1QsT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFDO2lCQUN6QjtnQkFDRCxPQUFPO29CQUNMLEtBQUs7b0JBQ0wsR0FBRyxJQUFJO2lCQUNSLENBQUE7WUFDSCxDQUFDLENBQUM7WUFDRixhQUFhLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVE7WUFDN0MsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQ3JCLENBQUM7UUFDRixJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNsRyxNQUFNLHNCQUFzQixHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEVBQUU7WUFDeEUsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFDO2FBQ3pCO1lBQ0QsT0FBTztnQkFDTCxLQUFLO2dCQUNMLEdBQUcsSUFBSTthQUNSLENBQUE7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sc0JBQXNCLENBQUM7SUFDaEMsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFvQjtRQUM5QixNQUFNLE1BQU0sR0FBUTtZQUNsQixhQUFhLEVBQUUsSUFBSSxDQUFDLHFCQUFxQjtZQUN6QyxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWU7WUFDckMsYUFBYSxFQUFFLFNBQVM7WUFDeEIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLFVBQVUsRUFBRSxRQUFRO1lBQ3BCLFNBQVMsRUFBRSxHQUFHO1lBQ2QsZUFBZSxFQUFFLEVBQUU7U0FDcEIsQ0FBQTtRQUNELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2xELE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN2RCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDL0IsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDbkQsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDckQsTUFBTSxTQUFTLEdBQ2IsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUV0RCxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRXZCLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUM3RztRQUNELE1BQU0sS0FBSyxHQUFHO1lBQ1osR0FBRyxFQUFFO2dCQUNILE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDckIsT0FBTyxFQUFFLEVBQUU7YUFDWjtZQUNELFNBQVMsRUFBRSxhQUFhO1NBQ3pCLENBQUE7UUFDRCxJQUFJLElBQUksSUFBSSxNQUFNLEVBQUU7WUFDbEIsT0FBTTtTQUNQO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFL0IsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQ2xELE1BQU0sTUFBTSxHQUFHO1lBQ2IsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLGlCQUFpQixFQUFFLElBQUksQ0FBQyxpQkFBaUI7WUFDekMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjtZQUM3QyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsU0FBUztZQUN4RixrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCO1lBQzNDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxtQkFBbUI7WUFDN0MsWUFBWSxFQUFFLElBQUksQ0FBQyxXQUFXO1NBQy9CLENBQUE7UUFDRCxNQUFNLEtBQUssR0FBRztZQUNaLEdBQUcsRUFBRTtnQkFDSCxJQUFJLEVBQUUsTUFBTTthQUNiO1lBQ0QsU0FBUyxFQUFFLFFBQVE7U0FDcEIsQ0FBQTtRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBRTdCLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELGNBQWM7UUFDWix1Q0FBdUM7UUFDekMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFFMUIsTUFBTSxLQUFLLEdBQUc7WUFDWixHQUFHLEVBQUU7Z0JBQ0gsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO2FBQzlCO1lBQ0QsU0FBUyxFQUFFLFFBQVE7U0FDcEIsQ0FBQTtRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzdCLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDNUI7UUFDQSxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBWTtRQUN4QixNQUFNLEtBQUssR0FBSSxLQUFLLENBQUMsTUFBMkIsQ0FBQyxLQUFLLENBQUM7UUFDdkQsdUNBQXVDO1FBRXZDLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRTtZQUNoQixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkI7SUFDSCxDQUFDO0lBRUQsd0JBQXdCO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCO1lBQUUsT0FBTyxJQUFJLENBQUE7UUFDeEMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNoRyxNQUFNLGdCQUFnQixHQUFHLENBQUMsT0FBMEIsRUFBUyxFQUFFO1lBQzdELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztnQkFBRSxPQUFPLEVBQUUsQ0FBQztZQUN2QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUM3QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7b0JBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFFLEVBQUU7b0JBQ3BELElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVE7d0JBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNqRSxPQUFPLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hDLENBQUMsQ0FBQyxDQUFDO2dCQUVILElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUU7aUJBQ3hCO3FCQUFNLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRTtvQkFDekMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7d0JBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO29CQUMxRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFFLEVBQUU7d0JBQ2hFLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVE7NEJBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNqRSxPQUFPLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ3hDLENBQUMsQ0FBQyxDQUFDO2lCQUNKO2dCQUVELE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQyxDQUFDLENBQUM7WUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLENBQU0sRUFBRSxFQUFFO2dCQUM3QixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDbEQsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ2xELE9BQU8sRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM5QixDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQztRQUVGLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBTSxFQUFFLENBQU0sRUFBVyxFQUFFO1lBQzVDLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFFekIsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtnQkFDOUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2hCO1lBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBRXhELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDcEIsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxNQUFNO29CQUFFLE9BQU8sS0FBSyxDQUFDO2dCQUN4QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUFFLE9BQU8sS0FBSyxDQUFDO2lCQUMxQztnQkFDRCxPQUFPLElBQUksQ0FBQzthQUNiO1lBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTTtnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUVoRCxLQUFLLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBRTtnQkFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO29CQUFFLE9BQU8sS0FBSyxDQUFDO2dCQUN2QyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQUUsT0FBTyxLQUFLLENBQUM7YUFDOUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQztRQUNGLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN6RCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ25ELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFrQkQsY0FBYyxDQUNaLFFBQWdCLEVBQ2hCLFFBQWdCLEVBQ2hCLFdBQTBCLEVBQzFCLEtBQWEsRUFDYixLQUFpQixFQUNqQixPQUFlO1FBRWYsMEJBQTBCO1FBQzFCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNoQyxNQUFNLE9BQU8sR0FBRyxXQUFXLElBQUksQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsUUFBUSxJQUFJLFFBQVEsSUFBSSxPQUFPLElBQUksS0FBSyxFQUFFLENBQUM7UUFFMUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDL0UsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sY0FBYyxHQUFHLEdBQUcsRUFBRTtZQUMxQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEIsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUMxRCxDQUFDLENBQUM7UUFDRixRQUFRLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFBO0lBQ2xDLENBQUM7SUFHRCxlQUFlLENBQ2IsUUFBZ0IsRUFDaEIsUUFBZ0IsRUFDaEIsV0FBMEIsRUFDMUIsS0FBYSxFQUNiLEtBQWlCLEVBQ2pCLE9BQWU7UUFFZixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjO1lBQUUsT0FBTztRQUV0RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ2xDLE1BQU0saUJBQWlCLEdBQUcsV0FBVyxJQUFJLENBQUMsQ0FBQztRQUMzQyxNQUFNLE9BQU8sR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN2QyxNQUFNLFFBQVEsR0FBVSxFQUFFLENBQUM7UUFDM0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNsRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBRXJILEtBQUssSUFBSSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDckMsS0FBSyxNQUFNLE9BQU8sSUFBSSxlQUFlLEVBQUU7Z0JBQ3JDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLFdBQVcsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDdkUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDZixRQUFRLENBQUMsSUFBSSxDQUFDO29CQUNaLFFBQVEsRUFBRSxDQUFDO29CQUNYLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtvQkFDMUIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO29CQUNoQyxLQUFLO29CQUNMLEdBQUcsRUFBRSxDQUFDO2lCQUNQLENBQUMsQ0FBQzthQUNKO1NBQ0Y7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQztRQUM1QixJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQztRQUM5QixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXpCLDJCQUEyQjtRQUMzQixJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUtELHVCQUF1QixDQUNyQixRQUFnQixFQUNoQixNQUFjLEVBQ2QsUUFBZ0IsRUFDaEIsTUFBYztRQUVkLE1BQU0sTUFBTSxHQUFnRCxFQUFFLENBQUM7UUFDL0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDMUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFMUMsTUFBTSxhQUFhLEdBQUcsUUFBUSxJQUFJLE1BQU0sQ0FBQztRQUN6QyxLQUFLLElBQUksQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUU5QyxJQUFJLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLE1BQU0sRUFBRTtnQkFDbEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQzFDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUMxQyxLQUFLLElBQUksQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksTUFBTSxJQUFJLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ3hELE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUM5QzthQUNGO2lCQUNJLElBQUksQ0FBQyxLQUFLLFFBQVEsRUFBRTtnQkFDdkIsSUFBSSxhQUFhLEVBQUU7b0JBQ2pCLEtBQUssSUFBSSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUU7d0JBQzNDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3FCQUM5QztpQkFDRjtxQkFBTTtvQkFDTCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksUUFBUSxJQUFJLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUU7d0JBQ3JELE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3FCQUM5QztpQkFDRjthQUNGO2lCQUNJLElBQUksQ0FBQyxLQUFLLE1BQU0sRUFBRTtnQkFDckIsSUFBSSxhQUFhLEVBQUU7b0JBQ2pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxNQUFNLElBQUksQ0FBQyxHQUFHLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRTt3QkFDbkQsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7cUJBQzlDO2lCQUNGO3FCQUFNO29CQUNMLEtBQUssSUFBSSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUU7d0JBQ3pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3FCQUM5QztpQkFDRjthQUNGO2lCQUNJO2dCQUNILEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ3BDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUM5QzthQUNGO1NBQ0Y7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsUUFBZ0I7UUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksUUFBUSxHQUFHLENBQUMsSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDcEUsT0FBTyxDQUFDLENBQUM7U0FDVjtRQUNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEMsSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3JELE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7U0FDL0I7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFDRCxhQUFhLENBQUMsUUFBZ0I7UUFDNUIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFDRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFDRCxVQUFVLENBQ1IsUUFBZ0IsRUFDaEIsUUFBZ0IsRUFDaEIsV0FBMEIsRUFDMUIsS0FBYSxFQUNiLE9BQWU7UUFFZixNQUFNLE9BQU8sR0FBRyxXQUFXLElBQUksQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsUUFBUSxJQUFJLFFBQVEsSUFBSSxPQUFPLElBQUksT0FBTyxFQUFFLENBQUM7UUFDNUQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBVUQseUJBQXlCO1FBQ3ZCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ25DLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDNUUsT0FBTztTQUNSO1FBRUQsOENBQThDO1FBQzlDLE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0UsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztRQUV0RCwrRUFBK0U7UUFDL0UsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDekMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFM0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztJQUN6QyxDQUFDO0lBQ0QsZ0JBQWdCO1FBQ2QsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFakQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDL0UsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLFdBQVcsQ0FBQyxDQUFDO1FBQ3RGLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFFL0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxDQUFDO0lBQ2hFLENBQUM7SUFDRCxpQkFBaUI7UUFDZixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUVqRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMvRSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssV0FBVyxDQUFDLENBQUM7UUFDdkYsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUVoRixPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLENBQUM7SUFDaEUsQ0FBQztJQUNELFdBQVcsQ0FBQyxRQUFnQixFQUFFLFFBQWdCLEVBQUUsV0FBMEIsRUFBRSxPQUFlO1FBQ3pGLE1BQU0sT0FBTyxHQUFHLFdBQVcsSUFBSSxDQUFDLENBQUM7UUFDakMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLElBQUksUUFBUSxJQUFJLE9BQU8sSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzFGLE9BQU8sVUFBVSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxLQUFLLElBQUksSUFBSSxRQUFRLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUM7SUFDbEcsQ0FBQztJQUNELGNBQWMsQ0FBQyxRQUFnQixFQUFFLFFBQWdCLEVBQUUsV0FBMEIsRUFBRSxPQUFlO1FBQzVGLE1BQU0sT0FBTyxHQUFHLFdBQVcsSUFBSSxDQUFDLENBQUM7UUFDakMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLElBQUksUUFBUSxJQUFJLE9BQU8sSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzFGLE9BQU8sVUFBVSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxLQUFLLElBQUksSUFBSSxRQUFRLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUM7SUFDeEcsQ0FBQztJQUNELFlBQVksQ0FBQyxRQUFnQixFQUFFLFFBQWdCLEVBQUUsV0FBMEIsRUFBRSxPQUFlO1FBQzFGLE1BQU0sT0FBTyxHQUFHLFdBQVcsSUFBSSxDQUFDLENBQUM7UUFDakMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLElBQUksUUFBUSxJQUFJLE9BQU8sSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzFGLE9BQU8sVUFBVSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxLQUFLLElBQUk7WUFDckQsUUFBUSxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFDL0MsT0FBTyxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUN0RCxDQUFDO0lBRUQsYUFBYSxDQUFDLFFBQWdCLEVBQUUsUUFBZ0IsRUFBRSxXQUEwQixFQUFFLE9BQWU7UUFDM0YsTUFBTSxPQUFPLEdBQUcsV0FBVyxJQUFJLENBQUMsQ0FBQztRQUNqQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsSUFBSSxRQUFRLElBQUksT0FBTyxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDMUYsT0FBTyxVQUFVLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEtBQUssSUFBSTtZQUN0RCxRQUFRLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsUUFBUTtZQUNoRCxPQUFPLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxlQUFlLENBQUMsUUFBZ0IsRUFBRSxRQUFnQixFQUFFLFdBQTBCLEVBQUUsT0FBZTtRQUM3RixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNuSSxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsUUFBZ0IsRUFBRSxRQUFnQixFQUFFLFdBQTBCLEVBQUUsT0FBZTtRQUM5RixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNwSSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsUUFBZ0IsRUFBRSxRQUFnQixFQUFFLFdBQTBCLEVBQUUsT0FBZTtRQUNoRyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN0SSxDQUFDO0lBRUQsbUJBQW1CLENBQUMsUUFBZ0IsRUFBRSxRQUFnQixFQUFFLFdBQTBCLEVBQUUsT0FBZTtRQUNqRyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2SSxDQUFDO0lBTUQsb0JBQW9CLENBQUMsS0FBaUI7UUFDcEMsSUFBSSxJQUFJLENBQUMsK0JBQStCLEVBQUU7WUFDeEMsYUFBYSxDQUFDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQywrQkFBK0IsR0FBRyxJQUFJLENBQUM7U0FDN0M7UUFDRCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUM7UUFDcEUsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztRQUN4RCxJQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQyxpQkFBaUI7WUFBRSxPQUFPO1FBQ3ZELE1BQU0sY0FBYyxHQUFHLG1CQUFtQixDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDbkUsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM3QixNQUFNLFlBQVksR0FBRyxpQkFBaUIsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQy9ELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDN0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxHQUFHLFlBQVksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUM5RCxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ3BFLE1BQU0sUUFBUSxHQUFHLE1BQU0sR0FBRyxjQUFjLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDbEUsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLEtBQUssR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUNwRSxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDaEIsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLElBQUksT0FBTztZQUFFLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDekMsSUFBSSxVQUFVO1lBQUUsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDM0MsSUFBSSxRQUFRO1lBQUUsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMxQyxJQUFJLFNBQVM7WUFBRSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMxQyxJQUFJLE9BQU8sS0FBSyxDQUFDLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRTtZQUNsQyxJQUFJLENBQUMsK0JBQStCLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRTtnQkFDdEQsSUFBSSxPQUFPLEtBQUssQ0FBQyxFQUFFO29CQUNqQixtQkFBbUIsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUMxQztnQkFDRCxJQUFJLE9BQU8sS0FBSyxDQUFDLEVBQUU7b0JBQ2pCLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7aUJBQ3hDO1lBQ0gsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ1A7SUFDSCxDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksSUFBSSxDQUFDLCtCQUErQixFQUFFO1lBQ3hDLGFBQWEsQ0FBQyxJQUFJLENBQUMsK0JBQStCLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsK0JBQStCLEdBQUcsSUFBSSxDQUFDO1NBQzdDO0lBQ0gsQ0FBQztJQWlCRCxJQUFJLGdCQUFnQjtRQUNsQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEtBQUssQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3BELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxLQUFLLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUNwRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBR0QsY0FBYyxDQUFDLEtBQWEsRUFBRSxLQUFpQjtRQUM3QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsc0JBQXNCLEdBQUcsS0FBSyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFekIsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sY0FBYyxHQUFHLEdBQUcsRUFBRTtZQUMxQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEIsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUN4RCxRQUFRLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFDNUQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7Z0JBQzNCLG9CQUFvQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO2FBQ2hDO1FBQ0gsQ0FBQyxDQUFDO1FBRUYsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNyRCxRQUFRLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFhLEVBQUUsS0FBaUI7UUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLHNCQUFzQixLQUFLLElBQUk7WUFBRSxPQUFPO1FBQ3ZFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNoQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6RCxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDaEM7UUFDRCw2Q0FBNkM7SUFDL0MsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO0lBQ3JDLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxDQUFhO1FBQzVCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsYUFBNEIsQ0FBQztRQUNoRSxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU87UUFFdkIsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDL0MsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFBO1FBQ25CLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztRQUVyQixJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxRQUFRLEVBQUU7WUFDbkMsWUFBWSxHQUFHLENBQUMsR0FBRyxDQUFDO1NBQ3JCO2FBQU0sSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxFQUFFO1lBQzdDLFlBQVksR0FBRyxHQUFHLENBQUM7U0FDcEI7UUFFRCxJQUFJLFlBQVksS0FBSyxDQUFDLEVBQUU7WUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtnQkFDNUIsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFO29CQUNoQixTQUFTLENBQUMsU0FBUyxJQUFJLFlBQVksQ0FBQztvQkFDcEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN4RCxDQUFDLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLGtCQUFrQixHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3ZEO1NBQ0Y7YUFBTTtZQUNMLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO2dCQUMzQixvQkFBb0IsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQzthQUNoQztTQUNGO0lBQ0gsQ0FBQztJQWdFTyxTQUFTLENBQUMsSUFBVztRQUMzQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxVQUFVLENBQUMsWUFBcUI7UUFDOUIsOEJBQThCO1FBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsQ0FBQyxpQ0FBaUM7UUFFdEQsY0FBYztRQUNkLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDaEQsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsdUJBQXVCLENBQzlELElBQUksQ0FBQyxXQUFXLEVBQ2hCLElBQUksQ0FBQyxrQkFBa0IsRUFDdkIsSUFBSSxDQUFDLGFBQWEsRUFDbEIsSUFBSSxDQUFDLE9BQU8sRUFDWixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDL0IsQ0FBQztRQUVGLDhDQUE4QztJQUNoRCxDQUFDO0lBSUQsc0JBQXNCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FDNUMsSUFBSSxDQUFDLE9BQU8sRUFDWixJQUFJLENBQUMsT0FBTyxFQUNaLElBQUksQ0FBQyxrQkFBa0IsRUFDdkIsSUFBSSxDQUFDLGFBQWEsRUFDbEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQy9CLENBQUM7SUFDSixDQUFDO0lBSU8sbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBRXpCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzNDLGtDQUFrQztZQUNsQyxNQUFNLEdBQUcsR0FDUCxLQUFLLEdBQUcsQ0FBQztnQkFDUCxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQ25CLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQztvQkFDYixDQUFDLENBQUMsR0FBRztvQkFDTCxDQUFDLENBQUMsSUFBSSxDQUFDO1lBRVgsSUFBSSxHQUFHLEVBQUU7Z0JBQ1AsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7YUFDakM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFJRCxTQUFTLENBQUMsS0FBb0I7UUFDNUIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQXFCLENBQUM7UUFDM0MsTUFBTSxXQUFXLEdBQ2YsTUFBTSxDQUFDLE9BQU8sS0FBSyxPQUFPO1lBQzFCLE1BQU0sQ0FBQyxPQUFPLEtBQUssVUFBVTtZQUM3QixNQUFNLENBQUMsaUJBQWlCLENBQUM7UUFDM0IsSUFBSSxXQUFXLElBQUksSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBRXhDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxZQUFZLEVBQUU7WUFDdkYsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixPQUFPO1NBQ1I7UUFFRCxvQ0FBb0M7UUFDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFdBQVcsRUFBRTtZQUNwRixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEIsT0FBTztTQUNSO1FBRUQseUNBQXlDO1FBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssWUFBWSxFQUFFO1lBQ3BGLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEIsT0FBTztTQUNSO1FBQ0QseUNBQXlDO1FBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssV0FBVyxFQUFFO1lBQ25GLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsT0FBTztTQUNSO1FBRUQseUNBQXlDO1FBQ3pDLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFNBQVMsRUFBRTtZQUNqRixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7WUFDcEIsT0FBTztTQUNSO1FBRUQseUNBQXlDO1FBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssV0FBVyxFQUFFO1lBQ25GLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3pELE9BQU87U0FDUjtRQUlGLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRTtZQUN4RCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7Z0JBQzFCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUM7Z0JBQ3JELE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7Z0JBQzlDLE1BQU0saUJBQWlCLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7Z0JBQ2xELE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDdEUsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLHFCQUFxQixFQUFFLFdBQVcsQ0FBQyxDQUFDO2dCQUM3RSxVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxlQUFlLElBQUksRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO29CQUN6RSxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLElBQUksRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO2dCQUNoRixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFHVjtZQUNELE9BQU87U0FDUjtRQUVBLElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEtBQUssR0FBRyxFQUFFO1lBQ25FLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMxQixPQUFNO1NBQ1A7UUFFSCxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEdBQUcsRUFBRTtZQUN4RCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUE7WUFDN0IsT0FBTztTQUNWO1FBRUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxHQUFHLEVBQUU7WUFDeEYsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEIsT0FBTztTQUNSO1FBRUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxHQUFHLEVBQUU7WUFDeEYsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDekIsT0FBTztTQUNSO1FBQ0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxHQUFHLEVBQUU7WUFDeEYsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUNuRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEIsT0FBTztTQUNSO1FBQ0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxHQUFHLEVBQUU7WUFDeEYsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztZQUNqRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEIsT0FBTztTQUNSO1FBRUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxHQUFHLEVBQUU7WUFDeEYsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDNUIsT0FBTztTQUNSO1FBQ0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxHQUFHLEVBQUU7WUFDeEYsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDN0IsT0FBTztTQUNSO1FBQ0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxHQUFHLEVBQUU7WUFDeEYsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDNUIsT0FBTztTQUNSO1FBS0YsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ2xCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9DLElBQUksUUFBUSxFQUFFO2dCQUNaLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRTtvQkFDNUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7b0JBQ3ZDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2lCQUN6QjthQUNGO1NBQ0Y7UUFJRCxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDekUsSUFBSSxjQUFjLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUFFLE9BQU87UUFDL0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEtBQUssR0FBRyxFQUFFO1lBQ3ZFLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJO2dCQUFFLE9BQU07WUFDeEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDbkQsMEJBQTBCO1lBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBRWhEO2FBQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEtBQUssR0FBRyxFQUFFO1lBQzlFLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTO2dCQUFFLE9BQU07WUFDMUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDbkQsMEJBQTBCO1lBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7U0FFL0I7YUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxHQUFHLEVBQUU7WUFDOUUsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsTUFBTTtnQkFBRSxPQUFNO1lBQ3ZDLDBCQUEwQjtZQUMxQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7U0FFYjthQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLEdBQUcsRUFBRTtZQUM5RSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxNQUFNO2dCQUFFLE9BQU07WUFDdkMsMEJBQTBCO1lBQzFCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNiO2FBQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssR0FBRyxFQUFFO1lBQ2hFLHFCQUFxQjtZQUNyQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3JCO0lBQ0wsQ0FBQztJQUVELFlBQVk7UUFDVixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1FBQy9DLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUM7UUFDcEQsSUFBSSxXQUFXLElBQUksVUFBVTtZQUFFLE9BQU87UUFDdEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELGdCQUFnQjtRQUNaLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7UUFDL0MsSUFBSSxXQUFXLElBQUksQ0FBQztZQUFFLE9BQU87UUFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELGFBQWE7UUFDYixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEtBQUssQ0FBQztZQUFFLE9BQU87UUFDN0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRUQsWUFBWTtRQUNWLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUM7UUFDbEQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxLQUFLLFFBQVE7WUFBRSxPQUFPO1FBQ3BELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUtELGNBQWM7UUFDWixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUVoQyx5REFBeUQ7UUFDekQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUM5QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNqRSxJQUFJLENBQUMsY0FBYyxHQUFHO2dCQUNwQixRQUFRLEVBQUUsQ0FBQztnQkFDWCxRQUFRLEVBQUUsQ0FBQztnQkFDWCxXQUFXLEVBQUUsQ0FBQztnQkFDZCxLQUFLLEVBQUUsVUFBVTtnQkFDakIsR0FBRyxFQUFFLFNBQVMsVUFBVSxFQUFFO2FBQzNCLENBQUM7U0FDSDtRQUVELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBRXhCLEtBQUssSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsRUFBRTtZQUNuRSxJQUFJLENBQUMsUUFBUTtnQkFBRSxTQUFTO1lBQ3hCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUV0Qyx1RUFBdUU7WUFDdkUsd0NBQXdDO1lBQ3hDLHlDQUF5QztZQUN6QyxrQ0FBa0M7WUFFbEMsZ0NBQWdDO1lBQ2hDLGdFQUFnRTtZQUNoRSx1RUFBdUU7WUFDdkUsb0NBQW9DO1lBQ3BDLGtDQUFrQztZQUNsQyxvQkFBb0I7WUFDcEIsb0JBQW9CO1lBQ3BCLHVCQUF1QjtZQUN2QixpQkFBaUI7WUFDakIsZUFBZTtZQUNmLFlBQVk7WUFDWixVQUFVO1lBQ1YsYUFBYTtZQUNiLHdEQUF3RDtZQUN4RCxrQ0FBa0M7WUFDbEMsZ0NBQWdDO1lBQ2hDLGtCQUFrQjtZQUNsQixrQkFBa0I7WUFDbEIsd0JBQXdCO1lBQ3hCLGVBQWU7WUFDZixhQUFhO1lBQ2IsVUFBVTtZQUNWLE1BQU07WUFDTixJQUFJO1NBQ0w7UUFFRCw2QkFBNkI7UUFDN0IsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFFakMseURBQXlEO1FBQ3pELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFJRCxJQUFJO1FBQ0YsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDN0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUcsQ0FBQztZQUN4QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUM5QztJQUNILENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDN0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUcsQ0FBQztZQUN4QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUM5QztJQUNILENBQUM7SUFLRCxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQXFCO1FBQ2pDLElBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU87UUFDM0IsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQXFCLENBQUM7UUFDM0MsTUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUMzQyxJQUFJLEdBQUcsS0FBSyxPQUFPLElBQUksR0FBRyxLQUFLLFVBQVUsSUFBSSxNQUFNLEVBQUUsWUFBWSxDQUFDLGlCQUFpQixDQUFDLEtBQUssTUFBTSxFQUFFO1lBQy9GLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTztRQUU1RCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU87UUFDbEIsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQ3BELGlEQUFpRCxDQUNsRCxDQUFDO1FBRUYsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNsQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsT0FBTztTQUNSO1FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTztRQUV2QixNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLENBQy9ELElBQUksRUFDSixJQUFJLENBQUMsV0FBVyxFQUNoQixJQUFJLENBQUMsT0FBTyxFQUNaLFNBQVMsQ0FBQyxRQUFRLEVBQ2xCLFNBQVMsQ0FBQyxRQUFRLEVBQ2xCLFNBQVMsQ0FBQyxXQUFXLENBQ3RCLENBQUM7UUFFRixJQUFJLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFO1lBQ25DLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUNyQixJQUFJLEVBQUUsV0FBVyxFQUFFLFVBQVU7Z0JBQzdCLFNBQVMsRUFBRSxZQUFZO2dCQUN2QixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVM7Z0JBQ3BCLE1BQU0sRUFBRSxXQUFXLEVBQUUsYUFBYTthQUNuQyxDQUFDLENBQUM7U0FDSjtRQUVELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELHFCQUFxQixDQUFDLE9BQWU7UUFDbkMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUMzQixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFDaEQsT0FBTyxDQUFDLFNBQVMsR0FBRzs7Ozt1Q0FJYSxPQUFPOzs7Ozs7OztLQVF6QyxDQUFDO1lBRUEsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQWdCLENBQUM7WUFDeEUsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQWdCLENBQUM7WUFDdEUsTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFO2dCQUNuQixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNyQyxDQUFDLENBQUM7WUFDRixVQUFVLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtnQkFDeEMsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hCLENBQUMsQ0FBQyxDQUFDO1lBRUgsU0FBUyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7Z0JBQ3ZDLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQU1ELE1BQU0sQ0FBQyxLQUFVO1FBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFNRCxxQkFBcUIsQ0FBQyxHQUFRO1FBQzVCLE1BQU0sRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUMvQixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFO1lBQ3RELEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO2dCQUN2QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQTtZQUM3RyxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNwRTtRQUNELElBQUksSUFBSSxDQUFDLDJCQUEyQixFQUFFO1lBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFO2dCQUM3QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsRUFBRSxDQUFDO2FBQ2hDO1lBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLG9CQUEyQyxDQUFDO1lBQ2xFLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFbkMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2QsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDM0I7aUJBQU07Z0JBQ0wsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUNuQjtTQUNGO2FBQU07WUFDTCxJQUFJLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxFQUFFLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7YUFDaEM7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQzthQUNoQztTQUNGO1FBRUQsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLEtBQUssSUFBSSxDQUFDLGlCQUFpQixFQUFFLGFBQWEsQ0FBQyxXQUFXLENBQUM7WUFDdkQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLGFBQWEsQ0FBQyxXQUFXLENBQUM7WUFDakQsSUFBSSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUMsV0FBVyxDQUFDO1lBQ2hELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDM0IsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBQ1QsQ0FBQztJQUVELGlCQUFpQixDQUFDLEdBQVE7UUFDeEIsTUFBTSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBRS9CLElBQUksSUFBSSxDQUFDLDJCQUEyQixFQUFFO1lBQ3BDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDMUM7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixLQUFLLEVBQUUsQ0FBQztTQUN6QztJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsTUFBVztRQUN4QixPQUFPLE1BQU0sRUFBRSxLQUFLLElBQUksTUFBTSxDQUFDO0lBQ2pDLENBQUM7SUFJRCxVQUFVLENBQUMsQ0FBUyxFQUFFLEtBQWtCO1FBQ3RDLElBQUksS0FBSyxFQUFFO1lBQUUsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQUU7UUFDdkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUlELElBQUksaUJBQWlCO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQztJQUNuRyxDQUFDO0lBRUQsSUFBSSxtQkFBbUI7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDcEMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUM7UUFDMUMsT0FBTyxFQUFFLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUM7SUFDekMsQ0FBQztJQUdELGNBQWMsQ0FBQyxNQUFXO1FBQ3hCLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUztZQUFFLE9BQU87UUFDL0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDckQsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckMsT0FBTyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNOLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLE9BQU8sQ0FBQTtRQUNoRCxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7SUFDL0YsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUF5QixFQUFFLEdBQVE7UUFDNUMsNEJBQTRCO1FBQzVCLGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBS0QsYUFBYSxDQUFDLEdBQVEsRUFBRSxHQUFRO1FBQzlCLE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDO1FBQ3BDLElBQUksSUFBSSxDQUFDLG9CQUFvQixLQUFLLEdBQUcsQ0FBQyxLQUFLLEVBQUU7WUFDM0MsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1NBQ2xGO2FBQU07WUFDTCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUN0QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1NBQ25DO1FBQ0QsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUM7UUFFekMsZ0NBQWdDO1FBQ2hDLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QixJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hCLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNoQyxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFFaEMsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtnQkFDdkIsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNoQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDakM7WUFFRCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUIsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlCLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRWpELElBQUksV0FBVyxFQUFFO2dCQUNmLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQzthQUN4RTtpQkFBTTtnQkFDTCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUN0RCxPQUFPLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7YUFDM0Q7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUUzQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFHRCxnQkFBZ0IsQ0FBQyxHQUFRLEVBQUUsR0FBUTtRQUNqQyxJQUFJLEdBQUcsQ0FBQyxLQUFLO1lBQUUsT0FBTyxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUN2QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsYUFBYSxFQUFFLFdBQVcsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDbEcsT0FBTyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLENBQUM7SUFLRCw2Q0FBNkM7SUFFN0MsYUFBYSxDQUFDLEdBQVEsRUFBRSxLQUE4QixFQUFFLE9BQWM7UUFDcEUsR0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDbkIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLENBQUM7UUFDdEQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ25FLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLE9BQU8sQ0FBQyxDQUFDO1FBQ3hELE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsR0FBRyxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUN4QixDQUFDO0lBRUQsa0JBQWtCLENBQUMsT0FBYztRQUMvQixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN6RCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsT0FBYztRQUNoQyxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMxRCxDQUFDO0lBRUQsYUFBYSxDQUFDLE9BQWMsRUFBRSxLQUFhO1FBQ3pDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNiLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDOUIsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNCLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxNQUFNLEVBQUU7Z0JBQzdCLElBQUksSUFBSSxPQUFPLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQzthQUM5QjtTQUNGO1FBQ0QsT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFHRCxlQUFlLENBQUMsS0FBOEIsRUFBRSxPQUFjO1FBQzVELElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUMvQixNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBdUIsQ0FBQztRQUN0RCxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDdEIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBa0IsQ0FBQztZQUNsRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3BGLENBQUMsQ0FBQyxDQUFDO1FBQ0gsZUFBZSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLHFCQUFxQixDQUFDLEdBQUcsRUFBRTtZQUN6QixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ3RCLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQWtCLENBQUM7Z0JBQ3RHLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtvQkFDMUIsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLHFCQUFxQixFQUFFLENBQUMsSUFBSSxDQUFDO29CQUNoRCxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQztvQkFDbEQsTUFBTSxNQUFNLEdBQUcsT0FBTyxHQUFHLE9BQU8sQ0FBQztvQkFFakMsSUFBSSxNQUFNLEtBQUssQ0FBQyxFQUFFO3dCQUNoQixFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7d0JBQzdCLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLGNBQWMsTUFBTSxLQUFLLENBQUM7d0JBQy9DLEtBQUssRUFBRSxDQUFDLFdBQVcsQ0FBQzt3QkFDcEIsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsc0JBQXNCLENBQUM7d0JBQzdDLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLGVBQWUsQ0FBQzt3QkFDckMsTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFOzRCQUNuQixFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7NEJBQ3pCLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQzs0QkFDeEIsRUFBRSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQzt3QkFDbkQsQ0FBQyxDQUFDO3dCQUNGLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUM7cUJBQy9DO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFHRCxhQUFhLENBQUMsV0FBcUIsRUFBRSxTQUFpQjtRQUNwRCxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU87UUFDdkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLElBQUksc0JBQXNCLENBQUMsQ0FBQztRQUNqRyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztRQUM5QyxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQ3JDLFlBQVksQ0FBQyxPQUFPLENBQ2xCLHFCQUFxQixFQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ2IsWUFBWSxFQUFFLFdBQVc7WUFDekIsV0FBVyxFQUFFLFNBQVM7U0FDdkIsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBR0QsZ0JBQWdCLENBQUMsU0FBaUI7UUFDaEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7UUFDL0UsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNuRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBUUQsYUFBYSxDQUFDLEdBQVE7UUFDcEIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEdBQUcsQ0FBQztRQUNqQyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxJQUFJLENBQUM7SUFDbEUsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFrQjtRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWE7WUFBRSxPQUFPO1FBRWhDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQztRQUN2QyxNQUFNLFNBQVMsR0FDYixDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJO1lBQzNCLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUs7WUFDNUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRztZQUMxQixDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7UUFFaEMsK0NBQStDO1FBQy9DLHlDQUF5QztRQUN6QyxJQUFJO0lBQ04sQ0FBQztJQUVELFdBQVc7UUFDVCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsK0RBQStEO1lBQy9ELG9EQUFvRDtZQUNwRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7WUFDaEMsOEJBQThCO1lBQzlCLElBQUk7UUFDTixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDUixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztJQUM1QixDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksS0FBSyxDQUFDO1lBQzdDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVELGlCQUFpQjtRQUNmLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFHRCxJQUFJLHVCQUF1QjtRQUN6QixJQUFJLElBQUksQ0FBQyxpQkFBaUI7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN6QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUM7UUFFcEQsTUFBTSxvQkFBb0IsR0FBRyxVQUFVLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQTZDLEVBQUUsRUFBRTtZQUN0RyxPQUFPO2dCQUNMLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSztnQkFDaEIsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO2dCQUNoQixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU07YUFDbkIsQ0FBQTtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDdEMsT0FBTztnQkFDTCxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7Z0JBQ2hCLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSztnQkFDaEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNO2FBQ25CLENBQUE7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNoRCxPQUFPO2dCQUNMLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztnQkFDbkIsS0FBSyxFQUFFO29CQUNMLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVM7b0JBQ25DLGVBQWUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGVBQWU7b0JBQy9DLFdBQVcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVc7b0JBQ3ZDLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsZ0JBQWdCO29CQUNqRCxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxZQUFZO2lCQUMxQztnQkFDRCxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUk7YUFDbkIsQ0FBQTtRQUNILENBQUMsQ0FBQyxDQUFBO1FBRUYsTUFBTSxvQkFBb0IsR0FBRyxVQUFVLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO1lBQ3BFLE9BQU87Z0JBQ0wsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO2dCQUNuQixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7Z0JBQ25CLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSTthQUNuQixDQUFBO1FBQ0gsQ0FBQyxDQUFDLENBQUE7UUFHRiwyQ0FBMkM7UUFDM0MsaUVBQWlFO1FBRWpFLG9FQUFvRTtRQUNwRSxvREFBb0Q7UUFDcEQsMEVBQTBFO1FBQzFFLDZDQUE2QztRQUU3QyxJQUFJLENBQUMsb0JBQW9CO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDdkMsT0FBTyxDQUFDLG9CQUFvQixJQUFJLENBQUMsdUJBQXVCLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztlQUMvTCxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDO1lBQ2xFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztlQUNuRCxJQUFJLENBQUMsMkJBQTJCLENBQUMsTUFBTSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxrQkFBa0I7ZUFDckYsSUFBSSxDQUFDLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVU7ZUFDckUsSUFBSSxDQUFDLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CO2VBQ3ZGLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLGlCQUFpQjtlQUNuRixJQUFJLENBQUMsMkJBQTJCLENBQUMsTUFBTSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRTFGLGVBQWU7SUFDakIsQ0FBQztJQUVELG1CQUFtQixDQUFDLE1BQWM7UUFDaEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxFQUFFLGlCQUFpQixFQUFFLENBQUM7UUFDekMsSUFBSSxJQUFJLElBQUksYUFBYSxJQUFJLElBQUksSUFBSSxRQUFRLElBQUksSUFBSSxJQUFJLGFBQWEsSUFBSSxJQUFJLElBQUksaUJBQWlCLElBQUksSUFBSSxJQUFJLGdCQUFnQjtZQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUssTUFBTSxLQUFLLEdBQUc7WUFDWixJQUFJLEVBQUU7Z0JBQ0osV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUM3QixHQUFHLEVBQUUsTUFBTTthQUNaO1lBQ0QsU0FBUyxFQUFFLHFCQUFxQjtTQUNqQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUdELFlBQVksQ0FBQyxHQUFrQjtRQUM3QixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztRQUNyQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7UUFDdkUsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDOUIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsTUFBTSxLQUFLLEdBQUc7WUFDWixJQUFJLEVBQUU7Z0JBQ0osU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2dCQUN6QixHQUFHLEVBQUUsR0FBRzthQUNUO1lBQ0QsU0FBUyxFQUFFLGFBQWE7U0FDekIsQ0FBQztRQUVGLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxHQUFRLEVBQUUsTUFBZSxFQUFFLE9BQW9DO1FBQ2hGLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQzdDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztTQUMzQjtRQUNELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMzQixPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQztTQUN2QztRQUNELElBQUksU0FBNkIsQ0FBQztRQUVsQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMxQixTQUFTLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztTQUNqRjthQUFNO1lBQ0wsU0FBUyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztTQUMxQztRQUNELElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDZCxJQUFJLE9BQU8sS0FBSyxNQUFNLEVBQUU7Z0JBQ3RCLFNBQVMsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUM7YUFDNUM7aUJBQU0sSUFBSSxPQUFPLEtBQUssT0FBTyxFQUFFO2dCQUM5QixTQUFTLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDO2FBQzdDO2lCQUFNO2dCQUNMLFNBQVMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7YUFDdEM7U0FDRjtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxhQUFhO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDMUQsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQztRQUNqRCxPQUFPLEVBQUUsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQztJQUN6QyxDQUFDO0lBR0QsY0FBYyxDQUFDLFdBQW1CO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFDRCxrQkFBa0IsQ0FBQyxPQUFlO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxZQUFZLENBQUMsR0FBeUM7UUFDcEQsSUFBSSxHQUFHLEtBQUssR0FBRyxFQUFFO1lBQ2YsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksUUFBUSxFQUFFO2dCQUM1QixPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUE7YUFDNUI7aUJBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM3QixPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUE7YUFDL0I7O2dCQUFNLE9BQU8sR0FBRyxDQUFBO1NBQ2xCOztZQUNJLE9BQU8sR0FBRyxDQUFBO0lBQ2pCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxHQUFRLEVBQUUsSUFBVTtRQUNwQyxzQkFBc0I7UUFDdEIsb0JBQW9CO1FBQ3BCLE1BQU07UUFDTiwrQkFBK0I7UUFDL0IsMEJBQTBCO1FBQzFCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7UUFDaEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbkIsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFbEMsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFZO1FBQ3hCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFxQixDQUFDO1FBQzNDLElBQUksTUFBTSxDQUFDLE9BQU8sS0FBSyxLQUFLLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2hEO0lBQ0gsQ0FBQztJQUVELGlCQUFpQjtRQUNmLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNyQiwrQkFBK0I7WUFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3JELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUVqRCx1REFBdUQ7WUFDdkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFFLEdBQXdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM3RixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxZQUFZLENBQUMsR0FBVztRQUN0QixJQUFJLENBQUMsZUFBZSxHQUFHLEdBQUcsQ0FBQztJQUM3QixDQUFDO0lBdUJELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxlQUFzQixDQUFDO1FBQzdDLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUU7WUFDL0IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2FBQzFCO2lCQUFNLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO2dCQUNwQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQzthQUM3QjtpQkFBTSxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtnQkFDdkMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7YUFDaEM7aUJBQU0sSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7Z0JBQ25DLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2FBQzVCO1NBQ0Y7YUFBTTtZQUNMLElBQUksUUFBUSxDQUFDLGNBQWMsRUFBRTtnQkFDM0IsUUFBUSxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQzNCO2lCQUFNLElBQUssUUFBZ0IsQ0FBQyxtQkFBbUIsRUFBRTtnQkFDL0MsUUFBZ0IsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2FBQ3pDO2lCQUFNLElBQUssUUFBZ0IsQ0FBQyxvQkFBb0IsRUFBRTtnQkFDaEQsUUFBZ0IsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2FBQzFDO2lCQUFNLElBQUssUUFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDNUMsUUFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2FBQ3RDO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQVU7UUFDcEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVPLFlBQVksQ0FBQyxHQUFRO1FBQzNCLE1BQU0sTUFBTSxHQUFVLEVBQUUsQ0FBQztRQUN6QixNQUFNLFFBQVEsR0FBRyxDQUFDLElBQVMsRUFBRSxFQUFFO1lBQzdCLElBQUksQ0FBQyxJQUFJO2dCQUFFLE9BQU87WUFDbEIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNoQixJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDekQ7aUJBQU07Z0JBQ0wsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNuQjtRQUNILENBQUMsQ0FBQztRQUNGLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNkLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxjQUFjLENBQUMsQ0FBUSxFQUFFLEdBQVE7UUFDL0IsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQTBCLENBQUM7UUFDOUMsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUNuQyxxQ0FBcUM7UUFDckMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QyxJQUFJLFNBQVMsRUFBRTtZQUNiLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ25CLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxFQUFFO29CQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ25CLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxFQUFFO29CQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxQyxNQUFNLEtBQUssR0FBRztZQUNaLElBQUksRUFBRTtnQkFDSixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQzdCLEdBQUcsRUFBRSxHQUFHO2FBQ1Q7WUFDRCxTQUFTLEVBQUUsYUFBYTtTQUN6QixDQUFBO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsb0JBQW9CLENBQUMsR0FBUTtRQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU87WUFBRSxPQUFPLEtBQUssQ0FBQztRQUMvQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztRQUNyQixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ25CLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN6QixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFBRSxZQUFZLEVBQUUsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksWUFBWSxLQUFLLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNyQyxJQUFJLFlBQVksS0FBSyxRQUFRLENBQUMsTUFBTTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ2xELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxZQUFZLENBQUMsR0FBUSxFQUFFLEdBQVE7UUFDN0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWhELElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM1QyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO2dCQUN2QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDaEU7aUJBQU0sSUFBSSxHQUFHLEVBQUUsU0FBUyxFQUFFO2dCQUN6QixJQUFJLENBQUMsR0FBRztvQkFBRSxPQUFPLE1BQU0sQ0FBQTtnQkFDdkIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQ2hFO1lBRUQsT0FBTyxDQUNMLEdBQUcsRUFBRSxLQUFLO2dCQUNWLEdBQUcsRUFBRSxJQUFJO2dCQUNULEdBQUc7Z0JBQ0gsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUM1QixHQUFHLEVBQUUsQ0FBQztTQUNSO1FBRUQsTUFBTSxLQUFLLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdkIsT0FBTyxDQUNMLEtBQUssRUFBRSxlQUFlO1lBQ3RCLEtBQUssRUFBRSxRQUFRO1lBQ2YsS0FBSyxFQUFFLFNBQVM7WUFDaEIsS0FBSyxFQUFFLEtBQUs7WUFDWixLQUFLLEVBQUUsSUFBSTtZQUNYLEdBQUcsQ0FDSixDQUFDO0lBQ0osQ0FBQztJQUdELFVBQVUsQ0FBQyxLQUFVO1FBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDbkQsQ0FBQztJQUdELGVBQWUsQ0FBQyxHQUFRLEVBQUUsT0FBZSxFQUFFLFFBQWdCLEVBQUUsV0FBbUI7UUFDOUUsSUFBRyxPQUFPLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxNQUFNLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEdBQUcsR0FBRyxFQUFDO1lBQ3RGLE9BQU8sR0FBRyxDQUFDO1NBQ1o7YUFBSyxJQUFHLE9BQU8sSUFBSSxPQUFPLEVBQUM7WUFDMUIsT0FBTyxJQUFJLENBQUM7U0FDYjthQUNJLElBQUcsT0FBTyxJQUFJLHNCQUFzQixJQUFJLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUM7WUFDbEgsT0FBTyxHQUFHLENBQUE7U0FDWDthQUFJO1lBQ0gsT0FBTyxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztTQUN2QjtJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsS0FBWSxFQUFFLEdBQVEsRUFBRSxHQUFRO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLEtBQUssRUFBRSxNQUEwQixDQUFDO1FBQ2hELEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNkLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDaEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBRUgsZUFBZSxDQUFDLE9BQVk7UUFDMUIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FDekMsSUFBSSxDQUFDLGVBQWUsRUFBRSwwQ0FBMEM7UUFDaEUsT0FBTyxFQUNQO1lBQ0UsbUJBQW1CO1lBQ25CLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1NBQzlCLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFDTyxhQUFhLENBQUMsU0FBaUI7UUFDckMsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUM3QixNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDM0MsT0FBTyxVQUFVLEtBQUssUUFBUTtZQUN2QixVQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUM3QixVQUFVLEtBQUssYUFBYTtZQUM1QixVQUFVLEtBQUssZ0JBQWdCO1lBQy9CLFVBQVUsS0FBSyxpQkFBaUIsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssZ0JBQWdCLENBQUMsS0FBVTtRQUNsQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQVFTLG1CQUFtQjtRQUN6QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztJQUNyQyxDQUFDO0lBRU8sV0FBVztRQUNqQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUUzQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUI7Z0JBQ2pDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDO1lBRXJELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFJRCxtQkFBbUIsQ0FBQyxHQUFRO1FBQzFCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNCLE1BQU0sTUFBTSxHQUFHO1lBQ2IsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO1lBQ2hCLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTTtZQUNsQixLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7WUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJO1lBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJO1NBQ2YsQ0FBQztRQUVGLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFL0UsSUFBSSxhQUFhLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDeEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7U0FDNUM7YUFBTTtZQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2pDO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRXJCLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxHQUFRO1FBQzdCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNCLE1BQU0sVUFBVSxHQUFHO1lBQ2pCLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFNBQVMsRUFBRSxNQUFNO1lBQ2pCLGdCQUFnQixFQUFFLElBQUk7WUFDdEIsWUFBWSxFQUFFLElBQUk7U0FDbkIsQ0FBQztRQUVGLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDcEUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlFLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNyQztRQUNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELGVBQWUsQ0FBQyxHQUFTO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUgsb0JBQW9CO1FBQ2xCLElBQUksSUFBSSxDQUFDLDJCQUEyQixFQUFFO1lBQ3BDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7U0FDaEM7YUFBTTtZQUNMLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7U0FDaEM7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7K0dBMStNWSxpQkFBaUI7bUdBQWpCLGlCQUFpQixnME1Ba1NkLGlCQUFpQixxRUNuakJqQyxzOXZOQTR1TEEsczcyUERwbkxjO1lBQ1YsT0FBTyxDQUFDLGlCQUFpQixFQUFFO2dCQUN6QixLQUFLLENBQ0gsV0FBVyxFQUNYLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQzVDO2dCQUNELEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDNUQsVUFBVSxDQUFDLHdCQUF3QixFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUMvRCxDQUFDO1lBQ0YsT0FBTyxDQUFDLGFBQWEsRUFBRTtnQkFDckIsVUFBVSxDQUFDLFFBQVEsRUFBRTtvQkFDbkIsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQztvQkFDeEQsT0FBTyxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQzlELENBQUM7Z0JBQ0YsVUFBVSxDQUFDLFFBQVEsRUFBRTtvQkFDbkIsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQztvQkFDdEQsT0FBTyxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUMvRCxDQUFDO2FBQ0gsQ0FBQztZQUNGLE9BQU8sQ0FBQyxTQUFTLEVBQUU7Z0JBQ2pCLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNuRSxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzdELFVBQVUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQ2xELFVBQVUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2FBQ2xELENBQUM7WUFDRixPQUFPLENBQUMsWUFBWSxFQUFFO2dCQUVwQixzREFBc0Q7Z0JBQ3RELFVBQVUsQ0FBQyxzQkFBc0IsRUFBRTtvQkFDakMsS0FBSyxDQUFDLFFBQVEsRUFBRTt3QkFDZCxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsQ0FBQzt3QkFDL0MsT0FBTyxDQUFDLEVBQUUsRUFBRTs0QkFDVixPQUFPLENBQUMsZ0JBQWdCLEVBQ3RCLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQzlDO3lCQUNGLENBQUM7cUJBQ0gsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztvQkFFdEIsS0FBSyxDQUFDLFFBQVEsRUFBRTt3QkFDZCxPQUFPLENBQUMsRUFBRSxFQUFFOzRCQUNWLE9BQU8sQ0FBQyxlQUFlLEVBQ3JCLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQ2hEO3lCQUNGLENBQUM7cUJBQ0gsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztpQkFDdkIsQ0FBQztnQkFFRixzREFBc0Q7Z0JBQ3RELFVBQVUsQ0FBQyxzQkFBc0IsRUFBRTtvQkFDakMsS0FBSyxDQUFDLFFBQVEsRUFBRTt3QkFDZCxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxDQUFDO3dCQUNyRCxPQUFPLENBQUMsRUFBRSxFQUFFOzRCQUNWLE9BQU8sQ0FDTCx3Q0FBd0MsRUFDeEMsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FDbEQ7eUJBQ0YsQ0FBQztxQkFDSCxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO29CQUV0QixLQUFLLENBQUMsUUFBUSxFQUFFO3dCQUNkLE9BQU8sQ0FBQyxFQUFFLEVBQUU7NEJBQ1YsT0FBTyxDQUFDLGVBQWUsRUFDckIsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUNyRDt5QkFDRixDQUFDO3FCQUNILEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7aUJBQ3ZCLENBQUM7Z0JBRUYsMkRBQTJEO2dCQUMzRCxVQUFVLENBQUMsb0JBQW9CLEVBQUU7b0JBQy9CLEtBQUssQ0FBQyxRQUFRLEVBQUU7d0JBQ2QsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQzt3QkFDbkQsT0FBTyxDQUFDLEVBQUUsRUFBRTs0QkFDVixPQUFPLENBQUMsZ0JBQWdCLEVBQ3RCLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQy9DO3lCQUNGLENBQUM7cUJBQ0gsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztvQkFFdEIsS0FBSyxDQUFDLFFBQVEsRUFBRTt3QkFDZCxPQUFPLENBQUMsRUFBRSxFQUFFOzRCQUNWLE9BQU8sQ0FBQyxlQUFlLEVBQ3JCLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FDbkQ7eUJBQ0YsQ0FBQztxQkFDSCxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO2lCQUN2QixDQUFDO2dCQUVGLDJEQUEyRDtnQkFDM0QsVUFBVSxDQUFDLG9CQUFvQixFQUFFO29CQUMvQixLQUFLLENBQUMsUUFBUSxFQUFFO3dCQUNkLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLDZCQUE2QixFQUFFLENBQUM7d0JBQy9ELE9BQU8sQ0FBQyxFQUFFLEVBQUU7NEJBQ1YsT0FBTyxDQUFDLGdCQUFnQixFQUN0QixLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSwyQkFBMkIsRUFBRSxDQUFDLENBQzlEO3lCQUNGLENBQUM7cUJBQ0gsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztvQkFFdEIsS0FBSyxDQUFDLFFBQVEsRUFBRTt3QkFDZCxPQUFPLENBQUMsRUFBRSxFQUFFOzRCQUNWLE9BQU8sQ0FBQyxlQUFlLEVBQ3JCLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLCtCQUErQixFQUFFLENBQUMsQ0FDbEU7eUJBQ0YsQ0FBQztxQkFDSCxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO2lCQUN2QixDQUFDO2dCQUNGLFVBQVUsQ0FBQyx3QkFBd0IsRUFBRTtvQkFDbkMsS0FBSyxDQUFDLFFBQVEsRUFBRTt3QkFDZCxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxDQUFDO3dCQUNyRCxPQUFPLENBQUMsRUFBRSxFQUFFOzRCQUNWLE9BQU8sQ0FBQyx3Q0FBd0MsRUFDOUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FDbEQ7eUJBQ0YsQ0FBQztxQkFDSCxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO29CQUV0QixLQUFLLENBQUMsUUFBUSxFQUFFO3dCQUNkLE9BQU8sQ0FBQyxFQUFFLEVBQUU7NEJBQ1YsT0FBTyxDQUFDLGVBQWUsRUFDckIsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxDQUN0RDt5QkFDRixDQUFDO3FCQUNILEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7aUJBQ3ZCLENBQUM7Z0JBRUYsVUFBVSxDQUFDLHFCQUFxQixFQUFFO29CQUNoQyxLQUFLLENBQUMsUUFBUSxFQUFFO3dCQUNkLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLENBQUM7d0JBQ3JELE9BQU8sQ0FBQyxFQUFFLEVBQUU7NEJBQ1YsT0FBTyxDQUFDLHdDQUF3QyxFQUM5QyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUNsRDt5QkFDRixDQUFDO3FCQUNILEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7b0JBRXRCLEtBQUssQ0FBQyxRQUFRLEVBQUU7d0JBQ2QsT0FBTyxDQUFDLEVBQUUsRUFBRTs0QkFDVixPQUFPLENBQUMsZUFBZSxFQUNyQixLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQ3JEO3lCQUNGLENBQUM7cUJBQ0gsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztpQkFDdkIsQ0FBQzthQUlILENBQUM7U0FHSDs7NEZBR1UsaUJBQWlCO2tCQTlKN0IsU0FBUzsrQkFDRSxXQUFXLG1CQUdKLHVCQUF1QixDQUFDLE1BQU0sY0FDbkM7d0JBQ1YsT0FBTyxDQUFDLGlCQUFpQixFQUFFOzRCQUN6QixLQUFLLENBQ0gsV0FBVyxFQUNYLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQzVDOzRCQUNELEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQzs0QkFDNUQsVUFBVSxDQUFDLHdCQUF3QixFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQzt5QkFDL0QsQ0FBQzt3QkFDRixPQUFPLENBQUMsYUFBYSxFQUFFOzRCQUNyQixVQUFVLENBQUMsUUFBUSxFQUFFO2dDQUNuQixLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDO2dDQUN4RCxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQzs2QkFDOUQsQ0FBQzs0QkFDRixVQUFVLENBQUMsUUFBUSxFQUFFO2dDQUNuQixLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDO2dDQUN0RCxPQUFPLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7NkJBQy9ELENBQUM7eUJBQ0gsQ0FBQzt3QkFDRixPQUFPLENBQUMsU0FBUyxFQUFFOzRCQUNqQixLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQzs0QkFDbkUsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDOzRCQUM3RCxVQUFVLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDOzRCQUNsRCxVQUFVLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQzt5QkFDbEQsQ0FBQzt3QkFDRixPQUFPLENBQUMsWUFBWSxFQUFFOzRCQUVwQixzREFBc0Q7NEJBQ3RELFVBQVUsQ0FBQyxzQkFBc0IsRUFBRTtnQ0FDakMsS0FBSyxDQUFDLFFBQVEsRUFBRTtvQ0FDZCxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsQ0FBQztvQ0FDL0MsT0FBTyxDQUFDLEVBQUUsRUFBRTt3Q0FDVixPQUFPLENBQUMsZ0JBQWdCLEVBQ3RCLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQzlDO3FDQUNGLENBQUM7aUNBQ0gsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztnQ0FFdEIsS0FBSyxDQUFDLFFBQVEsRUFBRTtvQ0FDZCxPQUFPLENBQUMsRUFBRSxFQUFFO3dDQUNWLE9BQU8sQ0FBQyxlQUFlLEVBQ3JCLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQ2hEO3FDQUNGLENBQUM7aUNBQ0gsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQzs2QkFDdkIsQ0FBQzs0QkFFRixzREFBc0Q7NEJBQ3RELFVBQVUsQ0FBQyxzQkFBc0IsRUFBRTtnQ0FDakMsS0FBSyxDQUFDLFFBQVEsRUFBRTtvQ0FDZCxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxDQUFDO29DQUNyRCxPQUFPLENBQUMsRUFBRSxFQUFFO3dDQUNWLE9BQU8sQ0FDTCx3Q0FBd0MsRUFDeEMsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FDbEQ7cUNBQ0YsQ0FBQztpQ0FDSCxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO2dDQUV0QixLQUFLLENBQUMsUUFBUSxFQUFFO29DQUNkLE9BQU8sQ0FBQyxFQUFFLEVBQUU7d0NBQ1YsT0FBTyxDQUFDLGVBQWUsRUFDckIsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUNyRDtxQ0FDRixDQUFDO2lDQUNILEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7NkJBQ3ZCLENBQUM7NEJBRUYsMkRBQTJEOzRCQUMzRCxVQUFVLENBQUMsb0JBQW9CLEVBQUU7Z0NBQy9CLEtBQUssQ0FBQyxRQUFRLEVBQUU7b0NBQ2QsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztvQ0FDbkQsT0FBTyxDQUFDLEVBQUUsRUFBRTt3Q0FDVixPQUFPLENBQUMsZ0JBQWdCLEVBQ3RCLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQy9DO3FDQUNGLENBQUM7aUNBQ0gsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztnQ0FFdEIsS0FBSyxDQUFDLFFBQVEsRUFBRTtvQ0FDZCxPQUFPLENBQUMsRUFBRSxFQUFFO3dDQUNWLE9BQU8sQ0FBQyxlQUFlLEVBQ3JCLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FDbkQ7cUNBQ0YsQ0FBQztpQ0FDSCxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDOzZCQUN2QixDQUFDOzRCQUVGLDJEQUEyRDs0QkFDM0QsVUFBVSxDQUFDLG9CQUFvQixFQUFFO2dDQUMvQixLQUFLLENBQUMsUUFBUSxFQUFFO29DQUNkLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLDZCQUE2QixFQUFFLENBQUM7b0NBQy9ELE9BQU8sQ0FBQyxFQUFFLEVBQUU7d0NBQ1YsT0FBTyxDQUFDLGdCQUFnQixFQUN0QixLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSwyQkFBMkIsRUFBRSxDQUFDLENBQzlEO3FDQUNGLENBQUM7aUNBQ0gsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztnQ0FFdEIsS0FBSyxDQUFDLFFBQVEsRUFBRTtvQ0FDZCxPQUFPLENBQUMsRUFBRSxFQUFFO3dDQUNWLE9BQU8sQ0FBQyxlQUFlLEVBQ3JCLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLCtCQUErQixFQUFFLENBQUMsQ0FDbEU7cUNBQ0YsQ0FBQztpQ0FDSCxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDOzZCQUN2QixDQUFDOzRCQUNGLFVBQVUsQ0FBQyx3QkFBd0IsRUFBRTtnQ0FDbkMsS0FBSyxDQUFDLFFBQVEsRUFBRTtvQ0FDZCxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxDQUFDO29DQUNyRCxPQUFPLENBQUMsRUFBRSxFQUFFO3dDQUNWLE9BQU8sQ0FBQyx3Q0FBd0MsRUFDOUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FDbEQ7cUNBQ0YsQ0FBQztpQ0FDSCxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO2dDQUV0QixLQUFLLENBQUMsUUFBUSxFQUFFO29DQUNkLE9BQU8sQ0FBQyxFQUFFLEVBQUU7d0NBQ1YsT0FBTyxDQUFDLGVBQWUsRUFDckIsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxDQUN0RDtxQ0FDRixDQUFDO2lDQUNILEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7NkJBQ3ZCLENBQUM7NEJBRUYsVUFBVSxDQUFDLHFCQUFxQixFQUFFO2dDQUNoQyxLQUFLLENBQUMsUUFBUSxFQUFFO29DQUNkLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLENBQUM7b0NBQ3JELE9BQU8sQ0FBQyxFQUFFLEVBQUU7d0NBQ1YsT0FBTyxDQUFDLHdDQUF3QyxFQUM5QyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUNsRDtxQ0FDRixDQUFDO2lDQUNILEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7Z0NBRXRCLEtBQUssQ0FBQyxRQUFRLEVBQUU7b0NBQ2QsT0FBTyxDQUFDLEVBQUUsRUFBRTt3Q0FDVixPQUFPLENBQUMsZUFBZSxFQUNyQixLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQ3JEO3FDQUNGLENBQUM7aUNBQ0gsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQzs2QkFDdkIsQ0FBQzt5QkFJSCxDQUFDO3FCQUdIO3VlQVdRLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUdHLE9BQU87c0JBQWYsS0FBSztnQkFHRyxPQUFPO3NCQUFmLEtBQUs7Z0JBR0csU0FBUztzQkFBakIsS0FBSztnQkFHRyxlQUFlO3NCQUF2QixLQUFLO2dCQUdHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFHRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBR0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUdHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFHRyx5QkFBeUI7c0JBQWpDLEtBQUs7Z0JBR0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0cseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUdHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFHRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBR0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csZUFBZTtzQkFBdkIsS0FBSztnQkFHRyxlQUFlO3NCQUF2QixLQUFLO2dCQUdHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFHRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBR0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUdHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBR0cseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUdHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFHRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBR0csZUFBZTtzQkFBdkIsS0FBSztnQkFHRywrQkFBK0I7c0JBQXZDLEtBQUs7Z0JBR0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csVUFBVTtzQkFBbEIsS0FBSztnQkFHRyxZQUFZO3NCQUFwQixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBSUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQUdHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFHRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBR0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUlHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBSUcsT0FBTztzQkFBZixLQUFLO2dCQUdHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFHRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBR0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUlHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0csV0FBVztzQkFBbkIsS0FBSztnQkFJRyxPQUFPO3NCQUFmLEtBQUs7Z0JBSUcsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBR0csV0FBVztzQkFBbkIsS0FBSztnQkFHRyxTQUFTO3NCQUFqQixLQUFLO2dCQUlHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBSUcsYUFBYTtzQkFBckIsS0FBSztnQkFLRyxjQUFjO3NCQUF0QixLQUFLO2dCQUlHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUdHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUtHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBR0csMEJBQTBCO3NCQUFsQyxLQUFLO2dCQUdHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsbUJBQW1CO3NCQUEzQixLQUFLO2dCQUVHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFHRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBR0csZ0NBQWdDO3NCQUF4QyxLQUFLO2dCQUdHLDZCQUE2QjtzQkFBckMsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFFRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBR0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUdHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFHRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csSUFBSTtzQkFBWixLQUFLO2dCQUVHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsZUFBZTtzQkFBdkIsS0FBSztnQkFHRyxlQUFlO3NCQUF2QixLQUFLO2dCQUdHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFHRyx5QkFBeUI7c0JBQWpDLEtBQUs7Z0JBY0csWUFBWTtzQkFBcEIsS0FBSztnQkFZMkIsU0FBUztzQkFBekMsWUFBWTt1QkFBQyxpQkFBaUI7Z0JBRWQsWUFBWTtzQkFBNUIsTUFBTTtnQkFFVSxlQUFlO3NCQUEvQixNQUFNO2dCQUdVLGFBQWE7c0JBQTdCLE1BQU07Z0JBRUcsWUFBWTtzQkFBckIsTUFBTTtnQkFFRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBRUcsbUJBQW1CO3NCQUE1QixNQUFNO2dCQUVHLHlCQUF5QjtzQkFBbEMsTUFBTTtnQkFrSW1DLFFBQVE7c0JBQWpELFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDTSxZQUFZO3NCQUF6RCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBMlk1QyxpQkFBaUI7c0JBRGhCLFNBQVM7dUJBQUMsbUJBQW1CO2dCQUc5Qix1QkFBdUI7c0JBRHRCLFNBQVM7dUJBQUMseUJBQXlCO2dCQUdwQyxvQkFBb0I7c0JBRG5CLFNBQVM7dUJBQUMsc0JBQXNCO2dCQUtqQyxjQUFjO3NCQURiLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUczQixnQkFBZ0I7c0JBRGYsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBRzdCLGVBQWU7c0JBRGQsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBSzVCLGdCQUFnQjtzQkFEZixTQUFTO3VCQUFDLGtCQUFrQjtnQkFHN0Isa0JBQWtCO3NCQURqQixTQUFTO3VCQUFDLG9CQUFvQjtnQkFHL0IsaUJBQWlCO3NCQURoQixTQUFTO3VCQUFDLG1CQUFtQjtnQkFHOUIsaUJBQWlCO3NCQURoQixTQUFTO3VCQUFDLG1CQUFtQjtnQkFJOUIsaUJBQWlCO3NCQURoQixTQUFTO3VCQUFDLG1CQUFtQjtnQkFLOUIsbUJBQW1CO3NCQURsQixTQUFTO3VCQUFDLHFCQUFxQjtnQkF3ZGhDLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkE0dUIxQyxRQUFRO3NCQURQLFlBQVk7dUJBQUMseUJBQXlCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBcUJuRCxRQUFRO3NCQURQLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQTBGZCxZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWM7Z0JBNk9BLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWTtnQkFDRSxVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVk7Z0JBRXZCLG9CQUFvQjtzQkFEbkIsU0FBUzt1QkFBQyxzQkFBc0I7Z0JBR2pDLG9CQUFvQjtzQkFEbkIsU0FBUzt1QkFBQyxzQkFBc0I7Z0JBODZCSSxzQkFBc0I7c0JBQTFELFNBQVM7dUJBQUMsd0JBQXdCO2dCQUNFLHNCQUFzQjtzQkFBMUQsU0FBUzt1QkFBQyx3QkFBd0I7Z0JBOGdCTixjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFzbEQzQixTQUFTO3NCQURSLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBeVJ0QyxPQUFPO3NCQURaLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBeUoxQyxXQUFXO3NCQURWLFNBQVM7dUJBQUMsYUFBYTtnQkF3WmMsdUJBQXVCO3NCQUE1RCxTQUFTO3VCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIEVsZW1lbnRSZWYsXG4gIFZpZXdDaGlsZCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgSG9zdExpc3RlbmVyLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBOZ1pvbmUsXG4gIFJlbmRlcmVyMixcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgRW1iZWRkZWRWaWV3UmVmLFxuICBUZW1wbGF0ZVJlZixcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIFF1ZXJ5TGlzdCxcbiAgVmlld0NoaWxkcmVuLFxuICBpbmplY3QsXG4gIEluamVjdG9yXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3BsaXRDb2x1bW5zU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3NwbGl0LWNvbHVtbnMuc2VydmljZSc7XG5pbXBvcnQgeyAgUm93QWN0aW9uU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvcm93LWFjdGlvbi5zZXJ2aWNlJ1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbW1vbi5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIENka0RyYWcsXG4gIENka0RyYWdEcm9wLFxuICBDZGtEcmFnRW5kLFxuICBDZGtEcmFnRW50ZXIsXG4gIENka0RyYWdFeGl0LFxuICBDZGtEcmFnTW92ZSxcbiAgQ2RrRHJhZ1NvcnRFdmVudCxcbiAgQ2RrRHJhZ1N0YXJ0LFxuICBEcmFnRHJvcCxcbiAgbW92ZUl0ZW1JbkFycmF5LFxufSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7XG4gIHRyaWdnZXIsXG4gIHN0YXRlLFxuICBzdHlsZSxcbiAgdHJhbnNpdGlvbixcbiAgYW5pbWF0ZSxcbiAgcXVlcnksXG4gIHN0YWdnZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQ2RrRHJvcExpc3QgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IFNUQVRVU0VTX0JBREdFX01BUCB9IGZyb20gJy4vc3RhdHVzZXMnO1xuaW1wb3J0IHsgQ29weVNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29weS1zZXJ2aWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIHRha2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IEV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9leHBvcnQuc2VydmljZSc7XG5pbXBvcnQgeyBDZWxsSG9zdERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvY2VsbEhvc3QuZGlyZWN0aXZlJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1hdEN1cnJlbmN5UGlwZSB9IGZyb20gJy4uL3BpcGVzL2Zvcm1hdC1jdXJyZW5jeS5waXBlJztcbmltcG9ydCAnYm9vdHN0cmFwL2Rpc3QvanMvYm9vdHN0cmFwLmJ1bmRsZS5taW4uanMnO1xuaW1wb3J0IHsgVmFsaWRhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi8uLi9zZXJ2aWNlcy92YWxpZGF0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IEh0bWxDb250ZW50U2FuaXRpemVyU2VydmljZSB9IGZyb20gJy4vLi4vc2VydmljZXMvaHRtbC1jb250ZW50LXNhbml0aXplci5zZXJ2aWNlJztcblxuaW50ZXJmYWNlIENlbGxQb3NpdGlvbiB7XG4gIHJvd0luZGV4OiBudW1iZXI7XG4gIGNvbEluZGV4OiBudW1iZXI7XG4gIHN1YkNvbEluZGV4OiBudW1iZXI7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIGtleTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFHcmlkQ29uZmlnIHtcbiAgZm9udEZhaW1seTogc3RyaW5nO1xuICBib2R5VGV4dEZvbnRzU2l6ZTogbnVtYmVyO1xuICBoZWFkZXJUZXh0Rm9udHNTaXplOiBudW1iZXI7XG4gIG9kZFJvd3NCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgc2hvd1ZlcnRpY2FsQm9yZGVyOiBib29sZWFuO1xuICBzZWxlY3RlZFRhYmxlTGF5b3V0OiAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnO1xuICBnbG9iYWxTZWFyY2g6IHN0cmluZztcbiAgZmlsdGVyTmFtZXM6IHN0cmluZztcbiAgdG90YWxDb3VudDogbnVtYmVyO1xuICByb3dTaGFkaW5nRW5hYmxlZDogYm9vbGVhbjtcbiAgYWN0aXZlRmlsdGVyczogYm9vbGVhbjtcbiAgZ3JvdXBlZENvbHVtbnM/OiBzdHJpbmdbXTtcbn1cblxuXG5leHBvcnQgZW51bSBSb3dBbmltYXRpb25UeXBlIHtcbiAgTm9uZSA9ICdub25lJyxcbiAgU3ByZWFkID0gJ3NwcmVhZEFuaW1hdGlvbicsXG4gIEJvdW5jZSA9ICdib3VuY2VBbmltYXRpb24nLFxuICBTbGlkZVVwID0gJ3NsaWRlVXBGcm9tQm90dG9tJyxcbiAgRmxpcCA9ICdmbGlwQW5pbWF0aW9uJyxcbiAgU2tldyA9ICdza2V3QW5pbWF0aW9uJyxcbiAgU2xpZGVSaWdodCA9ICdzbGlkZUZyb21SaWdodCcsXG59XG5cblxuZXhwb3J0IGNvbnN0IHNvcnRpbmdBbmltYXRpb24gPSB0cmlnZ2VyKCdsaXN0U29ydCcsIFtcbiAgdHJhbnNpdGlvbignKiA9PiAqJywgW1xuICAgIC8vIFF1ZXJ5IGFsbCBlbGVtZW50cyBlbnRlcmluZyBvciBsZWF2aW5nXG4gICAgcXVlcnkoJzplbnRlciwgOmxlYXZlJywgc3R5bGUoeyBwb3NpdGlvbjogJ2Fic29sdXRlJywgd2lkdGg6ICcxMDAlJyB9KSwgeyBvcHRpb25hbDogdHJ1ZSB9KSxcblxuICAgIC8vIEFuaW1hdGUgbGVhdmluZyBlbGVtZW50cyB1cHdhcmQgd2l0aCBmYWRlIG91dFxuICAgIHF1ZXJ5KCc6bGVhdmUnLCBbXG4gICAgICBhbmltYXRlKCczMDBtcyBlYXNlLWluJywgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC0yMHB4KScsIG9wYWNpdHk6IDAgfSkpXG4gICAgXSwgeyBvcHRpb25hbDogdHJ1ZSB9KSxcblxuICAgIC8vIFN0YWdnZXIgdGhlIGVudGVyaW5nIGVsZW1lbnRzIGZvciBhIHNtb290aGVyIGVmZmVjdFxuICAgIHF1ZXJ5KCc6ZW50ZXInLCBbXG4gICAgICBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMjBweCknLCBvcGFjaXR5OiAwIH0pLFxuICAgICAgc3RhZ2dlcig1MCwgW1xuICAgICAgICBhbmltYXRlKCczMDBtcyBlYXNlLW91dCcsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKScsIG9wYWNpdHk6IDEgfSkpXG4gICAgICBdKVxuICAgIF0sIHsgb3B0aW9uYWw6IHRydWUgfSlcbiAgXSlcbl0pO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGF0YS1ncmlkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtZ3JpZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGEtZ3JpZC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ2FjY29yZGlvblRvZ2dsZScsIFtcbiAgICAgIHN0YXRlKFxuICAgICAgICAnY29sbGFwc2VkJyxcbiAgICAgICAgc3R5bGUoeyBoZWlnaHQ6ICcwcHgnLCBvdmVyZmxvdzogJ3Vuc2V0JyB9KVxuICAgICAgKSxcbiAgICAgIHN0YXRlKCdleHBhbmRlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnKicsIG92ZXJmbG93OiAndW5zZXQnIH0pKSxcbiAgICAgIHRyYW5zaXRpb24oJ2NvbGxhcHNlZCA8PT4gZXhwYW5kZWQnLCBhbmltYXRlKCczMDBtcyBlYXNlLWluJykpLFxuICAgIF0pLFxuICAgIHRyaWdnZXIoJ3NsaWRlVG9nZ2xlJywgW1xuICAgICAgdHJhbnNpdGlvbignOmVudGVyJywgW1xuICAgICAgICBzdHlsZSh7IGhlaWdodDogJzBweCcsIG9wYWNpdHk6IDAsIG92ZXJmbG93OiAnaGlkZGVuJyB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMzAwbXMgZWFzZS1vdXQnLCBzdHlsZSh7IGhlaWdodDogJyonLCBvcGFjaXR5OiAxIH0pKVxuICAgICAgXSksXG4gICAgICB0cmFuc2l0aW9uKCc6bGVhdmUnLCBbXG4gICAgICAgIHN0eWxlKHsgaGVpZ2h0OiAnKicsIG9wYWNpdHk6IDEsIG92ZXJmbG93OiAnaGlkZGVuJyB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMzAwbXMgZWFzZS1pbicsIHN0eWxlKHsgaGVpZ2h0OiAnMHB4Jywgb3BhY2l0eTogMCB9KSlcbiAgICAgIF0pXG4gICAgXSksXG4gICAgdHJpZ2dlcignc2xpZGVVcCcsIFtcbiAgICAgIHN0YXRlKCd2b2lkJywgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDEwMCUpJywgb3BhY2l0eTogMCB9KSksXG4gICAgICBzdGF0ZSgnKicsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKScsIG9wYWNpdHk6IDEgfSkpLFxuICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiAqJywgYW5pbWF0ZSgnMzAwbXMgZWFzZS1vdXQnKSksXG4gICAgICB0cmFuc2l0aW9uKCcqID0+IHZvaWQnLCBhbmltYXRlKCczMDBtcyBlYXNlLWluJykpLFxuICAgIF0pLFxuICAgIHRyaWdnZXIoJ3Jvd0R5bmFtaWMnLCBbXG5cbiAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tIFNQUkVBRCAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuICAgICAgdHJhbnNpdGlvbignKiA9PiBzcHJlYWRBbmltYXRpb24nLCBbXG4gICAgICAgIHF1ZXJ5KCc6ZW50ZXInLCBbXG4gICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICdzY2FsZVgoMC43KScgfSksXG4gICAgICAgICAgc3RhZ2dlcig2MCwgW1xuICAgICAgICAgICAgYW5pbWF0ZSgnMzUwbXMgZWFzZS1vdXQnLFxuICAgICAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3NjYWxlWCgxKScgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICBdLCB7IG9wdGlvbmFsOiB0cnVlIH0pLFxuXG4gICAgICAgIHF1ZXJ5KCc6bGVhdmUnLCBbXG4gICAgICAgICAgc3RhZ2dlcig0MCwgW1xuICAgICAgICAgICAgYW5pbWF0ZSgnMjIwbXMgZWFzZS1pbicsXG4gICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAnc2NhbGVYKDAuNyknIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgXSwgeyBvcHRpb25hbDogdHJ1ZSB9KVxuICAgICAgXSksXG5cbiAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tIEJPVU5DRSAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuICAgICAgdHJhbnNpdGlvbignKiA9PiBib3VuY2VBbmltYXRpb24nLCBbXG4gICAgICAgIHF1ZXJ5KCc6ZW50ZXInLCBbXG4gICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC0xMHB4KScgfSksXG4gICAgICAgICAgc3RhZ2dlcig0NSwgW1xuICAgICAgICAgICAgYW5pbWF0ZShcbiAgICAgICAgICAgICAgJzUwMG1zIGN1YmljLWJlemllciguNjgsLTAuNTUsLjI3LDEuNTUpJyxcbiAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAxLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDApJyB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0sIHsgb3B0aW9uYWw6IHRydWUgfSksXG5cbiAgICAgICAgcXVlcnkoJzpsZWF2ZScsIFtcbiAgICAgICAgICBzdGFnZ2VyKDQwLCBbXG4gICAgICAgICAgICBhbmltYXRlKCcyMDBtcyBlYXNlLWluJyxcbiAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDEwcHgpJyB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0sIHsgb3B0aW9uYWw6IHRydWUgfSlcbiAgICAgIF0pLFxuXG4gICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSBORVcgMTogRkxJUCAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuICAgICAgdHJhbnNpdGlvbignKiA9PiBmbGlwQW5pbWF0aW9uJywgW1xuICAgICAgICBxdWVyeSgnOmVudGVyJywgW1xuICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAncm90YXRlWCgtODBkZWcpJyB9KSxcbiAgICAgICAgICBzdGFnZ2VyKDcwLCBbXG4gICAgICAgICAgICBhbmltYXRlKCc0NTBtcyBlYXNlLW91dCcsXG4gICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMSwgdHJhbnNmb3JtOiAncm90YXRlWCgwKScgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICBdLCB7IG9wdGlvbmFsOiB0cnVlIH0pLFxuXG4gICAgICAgIHF1ZXJ5KCc6bGVhdmUnLCBbXG4gICAgICAgICAgc3RhZ2dlcig1MCwgW1xuICAgICAgICAgICAgYW5pbWF0ZSgnMjUwbXMgZWFzZS1pbicsXG4gICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAncm90YXRlWCg4MGRlZyknIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgXSwgeyBvcHRpb25hbDogdHJ1ZSB9KVxuICAgICAgXSksXG5cbiAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tIE5FVyAyOiBTS0VXIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4gICAgICB0cmFuc2l0aW9uKCcqID0+IHNrZXdBbmltYXRpb24nLCBbXG4gICAgICAgIHF1ZXJ5KCc6ZW50ZXInLCBbXG4gICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICdza2V3WSg2ZGVnKSB0cmFuc2xhdGVZKDhweCknIH0pLFxuICAgICAgICAgIHN0YWdnZXIoNjAsIFtcbiAgICAgICAgICAgIGFuaW1hdGUoJzMyMG1zIGVhc2Utb3V0JyxcbiAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAxLCB0cmFuc2Zvcm06ICdza2V3WSgwZGVnKSB0cmFuc2xhdGVZKDApJyB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0sIHsgb3B0aW9uYWw6IHRydWUgfSksXG5cbiAgICAgICAgcXVlcnkoJzpsZWF2ZScsIFtcbiAgICAgICAgICBzdGFnZ2VyKDQwLCBbXG4gICAgICAgICAgICBhbmltYXRlKCcyMjBtcyBlYXNlLWluJyxcbiAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICdza2V3WSgtNmRlZykgdHJhbnNsYXRlWSgtOHB4KScgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICBdLCB7IG9wdGlvbmFsOiB0cnVlIH0pXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oJyogPT4gc2xpZGVVcEZyb21Cb3R0b20nLCBbXG4gICAgICAgIHF1ZXJ5KCc6ZW50ZXInLCBbXG4gICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDEwMHZoKScgfSksXG4gICAgICAgICAgc3RhZ2dlcig2MCwgW1xuICAgICAgICAgICAgYW5pbWF0ZSgnNTAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSknLFxuICAgICAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCknIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgXSwgeyBvcHRpb25hbDogdHJ1ZSB9KSxcblxuICAgICAgICBxdWVyeSgnOmxlYXZlJywgW1xuICAgICAgICAgIHN0YWdnZXIoNDAsIFtcbiAgICAgICAgICAgIGFuaW1hdGUoJzMwMG1zIGVhc2UtaW4nLFxuICAgICAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTUwcHgpJyB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0sIHsgb3B0aW9uYWw6IHRydWUgfSlcbiAgICAgIF0pLFxuXG4gICAgICB0cmFuc2l0aW9uKCcqID0+IHNsaWRlRnJvbVJpZ2h0JywgW1xuICAgICAgICBxdWVyeSgnOmVudGVyJywgW1xuICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgxMDB2dyknIH0pLFxuICAgICAgICAgIHN0YWdnZXIoNjAsIFtcbiAgICAgICAgICAgIGFuaW1hdGUoJzUwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpJyxcbiAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAxLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDApJyB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0sIHsgb3B0aW9uYWw6IHRydWUgfSksXG5cbiAgICAgICAgcXVlcnkoJzpsZWF2ZScsIFtcbiAgICAgICAgICBzdGFnZ2VyKDQwLCBbXG4gICAgICAgICAgICBhbmltYXRlKCczMDBtcyBlYXNlLWluJyxcbiAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDUwcHgpJyB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0sIHsgb3B0aW9uYWw6IHRydWUgfSlcbiAgICAgIF0pLFxuXG5cblxuICAgIF0pXG5cblxuICBdLFxuXG59KVxuZXhwb3J0IGNsYXNzIERhdGFHcmlkQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkluaXQsIEFmdGVyVmlld0NoZWNrZWQge1xuICAvLyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovL1xuICAvLyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovL1xuICAvLyAqKioqKioqKioqICBJbnB1dCBHb2VzIEhlcmUgKioqKioqKioqKiogLy9cbiAgLy8gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy9cbiAgLy8gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy9cblxuXG4gIEBJbnB1dCgpIHJvd0FuaW1hdGlvbjogUm93QW5pbWF0aW9uVHlwZSA9IFJvd0FuaW1hdGlvblR5cGUuTm9uZTtcblxuICAvLyBQYWdpbmF0aW9uIENvbmZpZyBTdG9yZSBIZXJlXG4gIEBJbnB1dCgpIHBhZ2luYXRpb25Db25maWc6IGFueSA9IG51bGw7XG5cbiAgLy8gVGhlIGRhdGFzZXQgc3RvcmUgaGVyZTtcbiAgQElucHV0KCkgZGF0YVNldDogYW55W10gPSBbXTtcblxuICAvLyBUaGUgY29sdW1ucyBTdG9yZSBIZXJlXG4gIEBJbnB1dCgpIGNvbHVtbnM6IGFueVtdID0gW107XG5cbiAgLy8gUm93IEhlaWdodDtcbiAgQElucHV0KCkgcm93SGVpZ2h0OiBudW1iZXIgPSA0NDtcblxuICAvLyBIZWFkZXIgUm93IEhlaWdodDtcbiAgQElucHV0KCkgaGVhZGVyUm93SGVpZ2h0OiBudW1iZXIgPSA1MDtcblxuICAvLyBTaG93IFZlcnRpY2FsIEJvcmRlcnM7XG4gIEBJbnB1dCgpIHNob3dWZXJ0aWNhbEJvcmRlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIEV2ZW4gUm93cyBCYWNrZ3JvdW5kIENvbG9yO1xuICBASW5wdXQoKSBldmVuUm93c0JhY2tncm91bmRDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyc7XG5cbiAgLy8gRXZlbiBSb3dzIEJhY2tncm91bmQgQ29sb3I7XG4gIEBJbnB1dCgpIG9kZFJvd3NCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcjZjJmMmYyJztcblxuICAvLyBIZWFkZXIgUm93cyBCYWNrZ3JvdW5kIENvbG9yO1xuICBASW5wdXQoKSBoZWFkZXJCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyA9ICcjZjZmOGZmJztcblxuICAvLyBIZWFkZXIgUm93cyBCYWNrZ3JvdW5kIENvbG9yO1xuICBASW5wdXQoKSBjaGVja2JveGVzQmFja2dyb3VuZENvbG9yOiBzdHJpbmcgPSAnI2Y2ZjhmZic7XG5cbiAgLy8gU2hvdyBDb2x1bW5zIEdyb3VwaW5nO1xuICBASW5wdXQoKSBzaG93Q29sdW1uc0dyb3VwaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gUm93IEhvdmVyZWQgQmFja2dyb3VuZCBjb2xvcjtcbiAgQElucHV0KCkgcm93SG92ZXJDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJ3JnYmEoMCwgMTIzLCAyNTUsIDAuMSknO1xuXG4gIC8vIExlZnQgUGlubmVkQmFja2dyb3VuZCBjb2xvcjtcbiAgQElucHV0KCkgbGVmdFBpbm5lZEJhY2tncm91bmRDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyNmNmY4ZmYnO1xuXG4gIC8vIEJvZHkgQmFja2dyb3VuZCBjb2xvcjtcbiAgQElucHV0KCkgYm9keUJhY2tncm91bmRDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyNmNmY4ZmYnO1xuXG4gIC8vIFJpZ2h0IFBpbm5lZCBCYWNrZ3JvdW5kIGNvbG9yO1xuICBASW5wdXQoKSByaWdodFBpbm5lZEJhY2tncm91bmRDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyNmNmY4ZmYnO1xuXG4gIC8vIFNpZGUgTWVudSBCYWNrZ3JvdW5kIGNvbG9yO1xuICBASW5wdXQoKSBzaWRlbWVudUJhY2tncm91bmRDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyNmNmY4ZmYnO1xuXG4gIC8vIEJvZHkgdGV4dCBjb2xvcjtcbiAgQElucHV0KCkgYm9keVRleHRDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyMwYzExMmInO1xuXG4gIC8vIEhlYWRlciB0ZXh0IGNvbG9yO1xuICBASW5wdXQoKSBoZWFkZXJUZXh0Q29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcjMmExZjczJztcblxuICAvLyBIZWFkZXIgdGV4dCBjb2xvcjtcbiAgQElucHV0KCkgY2hlY2tib3hlc0NvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnIzJhMWY3Myc7XG5cbiAgLy8gSGVhZGVyIHRleHQgc2l6ZTtcbiAgQElucHV0KCkgaGVhZGVyVGV4dEZvbnRzU2l6ZTogbnVtYmVyIHwgdW5kZWZpbmVkID0gMTQ7XG5cbiAgLy8gQm9keSB0ZXh0IGNvbG9yO1xuICBASW5wdXQoKSBib2R5VGV4dEZvbnRzU2l6ZTogbnVtYmVyIHwgdW5kZWZpbmVkID0gMTQ7XG5cbiAgLy8gSGVhZGVyIGZvbnQgd2VpZ2h0O1xuICBASW5wdXQoKSBoZWFkZXJGb250V2VpZ2h0OiBudW1iZXIgfCB1bmRlZmluZWQgPSA1MDA7XG5cbiAgLy8gQm9keSBGb250IFdlaWdodDtcbiAgQElucHV0KCkgYm9keUZvbnRXZWlnaHQ6IG51bWJlciB8IHVuZGVmaW5lZCA9IDQwMDtcblxuICAvLyBDaGVja2VkIFJvdyBCYWNrZ3JvdW5kIENvbG9yO1xuICBASW5wdXQoKSBjaGVja2VkUm93QmFja2dyb3VuZENvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnYWxpY2VibHVlJztcblxuICAvLyBkcm9wZG93bnMgQmFja2dyb3VuZCBDb2xvcjtcbiAgQElucHV0KCkgZHJvcGRvd25zQmFja2dyb3VuZENvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnI2Y2ZjhmOCc7XG5cblxuICBASW5wdXQoKSBmb290ZXJSb3dCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcnO1xuXG4gIC8vIEZvb3RlciByb3cgSGVpZ2h0O1xuICBASW5wdXQoKSBmb290ZXJSb3dIZWlnaHQ6IG51bWJlciA9IDQ2O1xuXG4gIC8vIEZvb3RlciByb3cgSGVpZ2h0O1xuICBASW5wdXQoKSB0b3BHcm91cGVkQmFkZ2VzQmFja2dyb3VuZENvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnJztcblxuICAvLyBTaG93IFJvdyB3aXNlIGdyb3VwaW5nO1xuICBASW5wdXQoKSBzaG93Um93c0dyb3VwaW5nOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgLy8gU2hvdyBSb3cgd2lzZSBncm91cGluZztcbiAgQElucHV0KCkgc2hvd0ZpbHRlclJvdzogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuXG4gIC8vIFNob3cgUm93IHdpc2UgZ3JvdXBpbmc7XG4gIEBJbnB1dCgpIGZvbnRGYWltbHk6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICdzYW5zLXNlcmlmJztcblxuICAvLyBTaG93IFNpZGVDb2x1bW47XG4gIEBJbnB1dCgpIHNob3dTaWRlTWVudTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIEZvb3RlciBQYWRkaW5nXG4gIEBJbnB1dCgpIGZvb3RlclBhZGRpbmc6IG51bWJlciA9IDNcblxuXG4gIC8vIEZvb3RlciBQYWRkaW5nXG4gIEBJbnB1dCgpIHRvcEZpbHRlclJvd0hlaWdodDogbnVtYmVyID0gNTA7XG5cbiAgLy8gU2hvdyBSb3dzIHNoYWRpbmdcbiAgQElucHV0KCkgcm93U2hhZGluZ0VuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBTaG93IFJvd3Mgc2hhZGluZ1xuICBASW5wdXQoKSBzaG93U2VyaWFsTnVtYmVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gU2luZ2xlIFNwYSBVcmwgQXR0YWNoIHRvIGljb25zXG4gIEBJbnB1dCgpIHNpbmdsZVNwYUFzc2V0c1BhdGg6IHN0cmluZyA9ICdhc3NldHMvJztcblxuXG4gIC8vIEFwcGxpZWQgRmlsdGVyc1xuICBASW5wdXQoKSBmaWx0ZXJzQ29uZmlnOiBhbnlbXSA9IFtdO1xuXG5cbiAgLy8gQXBwbGllZCBGaWx0ZXJzXG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvL1ZlcnRpY2FsIFNjcm9sbGJhciBzdHlsZVxuICBASW5wdXQoKSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoOiAnYXV0bycgfCAndGhpbicgPSAnYXV0byc7XG5cbiAgLy9Ib3JpemludGFsIFNjcm9sbGJhciBzdHlsZVxuICBASW5wdXQoKSBob3JpemludGFsU2Nyb2xsYmFyV2lkdGg6ICdhdXRvJyB8ICd0aGluJyA9ICdhdXRvJztcblxuICAvLyBTaG93IENlbGwgZGV0YWlscyBib3hcbiAgQElucHV0KCkgc2hvd0NlbGxEZXRhaWxzQm94OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy9EYXRlIGZvcm1hdFxuXG4gIEBJbnB1dCgpIGRhdGVGb3JtYXQ6IHN0cmluZyA9ICcnXG5cbiAgLy9EYXRlIGZvcm1hdFxuICBASW5wdXQoKSB0YWJsZVNlYXJjaDogc3RyaW5nID0gJyc7XG5cblxuICAvL0RhdGUgZm9ybWF0XG4gIEBJbnB1dCgpIGFjdGlvbnM6IGFueVtdID0gWydlZGl0JywgJ2RlbGV0ZSddO1xuXG5cbiAgLy8gVGFibGUgQ29uZmlnIGZvciBwYWdpbmF0aW9ucyBpcyBoZXJlXG4gIEBJbnB1dCgpIGNvbmZpZzogYW55O1xuXG4gIEBJbnB1dCgpIHNlbGVjdGVkVGFiOiBzdHJpbmcgPSAnJztcblxuICAvLyBTZWxlY3Rpb24gdGFzayBiYXJcbiAgQElucHV0KCkgc2hvd1Rhc2tiYXIgPSBmYWxzZVxuXG4gIC8vIFRhYmxlIE5hbWUgZm9yIHN0YXRlIG1hbmFnZVxuICBASW5wdXQoKSB0YWJsZU5hbWUgPSB0cnVlXG5cblxuICAvLyBMaXN0aW5nIHR5cGVcbiAgQElucHV0KCkgbGlzdGluZ1R5cGU6IHN0cmluZyB8IGJvb2xlYW4gPSAnJztcblxuICAvLyBMaXN0aW5nIHR5cGVcblxuICBASW5wdXQoKSBjaGVja2JveFN0YXRlOiB7IHJlc2V0OiBib29sZWFuIH0gPSB7XG4gICAgcmVzZXQ6IHRydWVcbiAgfVxuXG4gIC8vIFRhc2tiYXIgYWN0aW9uc1xuICBASW5wdXQoKSB0YXNrYmFyQWN0aW9uczogYW55W10gPSBbXVxuXG5cbiAgLy8gU29ydGluZyBDb25maWcgdG8gc2hvdyBzb3J0IGljb25zXG4gIEBJbnB1dCgpIHNvcnRpbmdDb25maWc6IHsgZmllbGQ6IHN0cmluZywgb3JkZXJfYnk6IHN0cmluZyB9IHwgbnVsbCA9IG51bGw7XG5cblxuICBASW5wdXQoKSB0YWJsZUZpbHRlclZpZXdJZDogYW55ID0gJyc7XG5cblxuICBASW5wdXQoKSBzZWxlY3RlZFRhYmxlTGF5b3V0OiBhbnkgPSAnbWVkaXVtJ1xuXG4gIEBJbnB1dCgpIGNsb3NlRHJvcGRvd246IHsgcHJlc2V0OiB7IGNsb3NlZDogYm9vbGVhbiwgbG9hZGluZzogYm9vbGVhbiB9IH0gPSB7IHByZXNldDogeyBjbG9zZWQ6IGZhbHNlLCBsb2FkaW5nOiBmYWxzZSB9IH07XG5cbiAgLy8gVGFibGUgVmlld1xuXG4gIC8vIEdsb2JhbFNlYXJjaFxuICBASW5wdXQoKSBnbG9iYWxTZWFyY2hUZXh0OiBzdHJpbmcgPSAnJztcblxuICAvLyBOZXN0ZWQgVGFibGUgUm93IEZvbnRzaXplXG4gIEBJbnB1dCgpIG5lc3RlZFRhYmxlcm93Rm9udHNpemUgPSAxNDtcblxuICAvLyBOZXN0ZWQgdGFibGUgcm93IEhlYWRlciByb3cgSGVpZ2h0XG4gIEBJbnB1dCgpIG5lc3RlZFRhYmxlSGVhZGVyUm93SGVpZ2h0ID0gNDA7XG5cbiAgLy8gTmVzdGVkIFRhYmxlIHJvdyBoZWlnaHRcbiAgQElucHV0KCkgbmVzdGVkVGFibGVyb3dIZWlnaHQgPSA0NTtcblxuICBASW5wdXQoKSBwYWNrYWdlRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHNob3dVbkxpbms6IGFueTtcblxuICBASW5wdXQoKSBncmlkVHlwZTogc3RyaW5nID0gJyc7XG5cbiAgQElucHV0KCkgY3VycmVuY3lTeW1ib2w6IHN0cmluZyA9ICcnO1xuXG4gIEBJbnB1dCgpIGN1cnJlbmN5Rm9ybWF0OiBzdHJpbmcgPSAnJztcblxuICBASW5wdXQoKSBsZWZ0UGlubmVkQm94c2hhZG93OiBzdHJpbmcgPSAnJztcblxuICBASW5wdXQoKSByaWdodFBpbm5lZEJveHNoYWRvdzogc3RyaW5nID0gJyc7XG5cbiAgLy8gR2xvYmFsU2VhcmNoXG4gIEBJbnB1dCgpIHNlbGVjdGVkUm93c0JhY2tncm91bmRDb2xvcjogc3RyaW5nID0gJyM4YWM1ZmYnO1xuXG4gIC8vIEdsb2JhbFNlYXJjaFxuICBASW5wdXQoKSBuZXN0ZWRUYWJsZUhlYWRlckJhY2tncm91bmRDb2xvcjogc3RyaW5nID0gJyNmNmY4ZmYnO1xuXG5cbiAgQElucHV0KCkgbmVzdGVkVGFibGVSb3dCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyA9ICcjZWFlYWVhJztcblxuICBASW5wdXQoKSB0YWJsZVZpZXc6IGFueVtdID0gW107XG5cbiAgQElucHV0KCkgYnV0dG9uczogeyBuYW1lOiBzdHJpbmc7IGlzX3Nob3dJY29uOiBib29sZWFuOyBpY29uOiBzdHJpbmcsIGhhc19wZXJtaXNzaW9uOiBib29sZWFuIH1bXSA9IFtdO1xuXG4gIEBJbnB1dCgpIGtlZXBNdWx0aXBsZUV4cGFuZGVkRGV0YWlscyA9IGZhbHNlO1xuXG5cbiAgQElucHV0KCkgc2hvd1RvdGFsQW1vdW50Um93ID0gZmFsc2U7XG5cblxuICBASW5wdXQoKSBlbmFibGVHbG9iYWxTZWFyY2ggPSB0cnVlO1xuXG5cbiAgQElucHV0KCkgdGFibGVUeXBlID0gJyc7XG5cblxuICBASW5wdXQoKSBlbmFibGVFeHBvcnQgPSBmYWxzZTtcblxuXG4gIEBJbnB1dCgpIHNob3dGdWxsU2NyZWVuQnV0dG9uID0gZmFsc2U7XG5cblxuICBASW5wdXQoKSBlbmFibGVDdXQgPSBmYWxzZTtcblxuXG4gIEBJbnB1dCgpIHRhYnM6IHN0cmluZ1tdID0gW107XG5cbiAgQElucHV0KCkgc2hvd0NoZWNrYm94ZXMgPSB0cnVlO1xuXG4gIEBJbnB1dCgpIHNob3dUYWJsZUxheW91dCA9IHRydWU7XG5cblxuICBASW5wdXQoKSBwYWdlU2l6ZU9wdGlvbnMgPSBbMTAsIDI1LCA1MCwgNzUsIDEwMCwgMTUwLCAyMDAsIDI1MCwgMzAwLCA1MDBdO1xuXG5cbiAgQElucHV0KCkgcmVzZXRBbGxGaWx0ZXJzID0geyByZXNldEFsbDogZmFsc2UgfTtcblxuICBASW5wdXQoKSBkZWZhdWx0Q29uZmlnOiBEYXRhR3JpZENvbmZpZyB8IG51bGwgPSBudWxsO1xuXG5cbiAgQElucHV0KCkgY29sdW1uVGhyZWVkb3RzTXVudUNvbmZpZyA9IHtcbiAgICBzaG93UGlubGVmdDogdHJ1ZSxcbiAgICBzaG93UGlucmlnaHQ6IHRydWUsXG4gICAgc2hvd0FzY2VuZGluZzogdHJ1ZSxcbiAgICBzaG93RGVzY2VuZGluZzogdHJ1ZSxcbiAgICBzaG93RmlsdGVyOiB0cnVlLFxuICAgIHNob3dSb3dzR3JvdXBpbmc6IHRoaXMuc2hvd1Jvd3NHcm91cGluZyxcbiAgICBzaG93QXV0b3NpemVBbGxDb2x1bW5zOiB0cnVlLFxuICAgIHNob3dBdXRvc2l6ZVRoaXNDb2x1bW46IGZhbHNlLFxuICAgIHNob3dDaG9zZUNvbHVtbnM6IGZhbHNlLFxuICAgIHNob3dSZXNldENvbHVtbnM6IGZhbHNlLFxuICB9O1xuXG4vLyBmb3IgYWN0aW9uIHZhbGlkYXRpb247XG4gIEBJbnB1dCgpIHZhbGlkYXRlSWNvbiA6IGJvb2xlYW4gPSBmYWxzZTtcblxuXG4gIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBPdXQgUHV0IEV2ZW50c1xuICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuXG5cbiAgLy9DaGFuZ2UgVGFibGUgTGF5b3V0XG4gIEBWaWV3Q2hpbGRyZW4oQ2VsbEhvc3REaXJlY3RpdmUpIGNlbGxIb3N0cyE6IFF1ZXJ5TGlzdDxDZWxsSG9zdERpcmVjdGl2ZT47XG5cbiAgQE91dHB1dCgpIHB1YmxpYyBjaGFuZ2VMYXlvdXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgcHVibGljIGN1c3RvbUNlbGxFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8vIEZpbHRlciBBcHBseSBldmVudDtcbiAgQE91dHB1dCgpIHB1YmxpYyBmaWx0ZXJPcHRpb25zID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpIGdlbmVyaWNFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpIHRhYmxlUHJlc2V0Q29uZmlnOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KCkgc29ydGluZ09yZGVyT3B0aW9uczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuXG5cblxuXG5cbiAgc3RvcmVQcmVzZXROYW1lOiBzdHJpbmcgPSAnJztcbiAgaXNGdWxsU2NyZWVuID0gZmFsc2U7XG4gIGFjdGl2ZVRhYjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGdyb3VwZWRDb2x1bW5zOiBhbnlbXSA9IFtdO1xuICBhY3RpdmVDb2w6IGFueSA9IG51bGw7XG4gIGFjdGl2ZUZpbHRlckNlbGw6IGFueSA9IG51bGw7XG4gIHNob3dBY3Rpb25zRHJvcERvd24gPSBmYWxzZTtcbiAgc2lkZU1lbnVWaXNpYmxlID0gZmFsc2U7XG4gIHBpdm90TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICBjb2x1bW5TZWFyY2g6IHN0cmluZyA9ICcnO1xuICBleHBhbmRBbGxBY2NvcmRpYW5zID0gdHJ1ZTtcbiAgY3VycmVudE9wZW5lZFNpZGVNZW51ZTogJ2NvbHMnIHwgJ2ZpbHRycycgfCBudWxsID0gbnVsbDtcbiAgb3JpZ2luYWxDb2x1bW5zOiBhbnlbXSA9IFtdO1xuICBvcmlnaW5hbERhdGFTZXQ6IGFueVtdID0gW107XG4gIGFjdGl2ZVRvcEJ1dHRvbjogc3RyaW5nIHwgbnVsbCA9ICcnO1xuICBmaWx0ZXJDb2x1bW5zTGlzdDogYW55W10gPSBbXTtcbiAgZ3JvdXBCb3hQYWRkaW5nID0gMjAwO1xuICBwcmVzZXROYW1lOiBzdHJpbmcgPSAnJztcbiAgcHJlc2V0RmlsdGVyOiBib29sZWFuID0gZmFsc2U7XG4gIHNlYXJjaFRleHRQcmVzZXRUYWJsZSA9ICcnO1xuICBhZGRGaWx0ZXJDb2x1bW5JbnB1dCA9ICcnO1xuICBzZWFyY2hJbkRyb3Bkb3duID0gJyc7XG4gIHByaXZhdGUgc2VjcmV0S2V5ID0gJ3RiLXN1cGVyLWFkbWluJ1xuICBhZGRGaWx0ZXJEcm9wZG93blNlYXJjaCA9ICcnXG4gIHRvcFNob3dIaWRlQ29sdW1ucyA9ICcnO1xuICBjaG9zZUNvbHVtbnNTZWFyY2ggPSAnJ1xuICBzaWRlTmVzdGVkRmlsdGVyU2VhcmNoID0gJydcbiAgZWRpdGluRHJvcGRvd25TZWFyY2ggPSAnJztcbiAgaXNUaHJlZURvdHNGaWx0ZXJPcGVuID0gZmFsc2U7XG4gIGNvbmZpcm1EZWxldGUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBvcmlnaW5hbEFjdGlvbnM6IHN0cmluZ1tdID0gW107XG4gIGZvbnRGYW1pbGllczogc3RyaW5nW10gPSBbXG4gICAgLy8gQ29tbW9uIEV4Y2VsIGZvbnRzXG4gICAgJ0FyaWFsJyxcbiAgICAnQXJpYWwgQmxhY2snLFxuICAgICdCYWhuc2NocmlmdCcsXG4gICAgJ0NhbGlicmknLFxuICAgICdDYW1icmlhJyxcbiAgICAnQ2FtYnJpYSBNYXRoJyxcbiAgICAnbWF0aCcsXG4gICAgJ0NhbmRhcmEnLFxuICAgICdDb21pYyBTYW5zIE1TJyxcbiAgICAnQ29uc29sYXMnLFxuICAgICdDb25zdGFudGlhJyxcbiAgICAnQ29yYmVsJyxcbiAgICAnQ291cmllciBOZXcnLFxuICAgICdFYnJpbWEnLFxuICAgICdGcmFua2xpbiBHb3RoaWMgTWVkaXVtJyxcbiAgICAnR2FicmlvbGEnLFxuICAgICdHYWR1Z2knLFxuICAgICdHZW9yZ2lhJyxcbiAgICAnSW1wYWN0JyxcbiAgICAnSW5rIEZyZWUnLFxuICAgICdKYXZhbmVzZSBUZXh0JyxcbiAgICAnTGVlbGF3YWRlZSBVSScsXG4gICAgJ0x1Y2lkYSBDb25zb2xlJyxcbiAgICAnTHVjaWRhIFNhbnMgVW5pY29kZScsXG4gICAgJ01hbGd1biBHb3RoaWMnLFxuICAgICdNaWNyb3NvZnQgSGltYWxheWEnLFxuICAgICdNaWNyb3NvZnQgSmhlbmdIZWknLFxuICAgICdNaWNyb3NvZnQgTmV3IFRhaSBMdWUnLFxuICAgICdNaWNyb3NvZnQgUGhhZ3NQYScsXG4gICAgJ01pY3Jvc29mdCBTYW5zIFNlcmlmJyxcbiAgICAnTWljcm9zb2Z0IFRhaSBMZScsXG4gICAgJ01pY3Jvc29mdCBZYUhlaScsXG4gICAgJ01pY3Jvc29mdCBZaSBCYWl0aScsXG4gICAgJ01vbmdvbGlhbiBCYWl0aScsXG4gICAgJ01TIEdvdGhpYycsXG4gICAgJ01TIFBHb3RoaWMnLFxuICAgICdNUyBVSSBHb3RoaWMnLFxuICAgICdNViBCb2xpJyxcbiAgICAnTmlybWFsYSBVSScsXG4gICAgJ1BhbGF0aW5vIExpbm90eXBlJyxcbiAgICAnU2Vnb2UgUHJpbnQnLFxuICAgICdTZWdvZSBTY3JpcHQnLFxuICAgICdTZWdvZSBVSScsXG4gICAgJ1NlZ29lIFVJIEhpc3RvcmljJyxcbiAgICAnU2Vnb2UgVUkgRW1vamknLFxuICAgICdTZWdvZSBVSSBTeW1ib2wnLFxuICAgICdTaW1TdW4nLFxuICAgICdTaXRrYSBTbWFsbCcsXG4gICAgJ1N5bGZhZW4nLFxuICAgICdTeW1ib2wnLFxuICAgICdUYWhvbWEnLFxuICAgICdUaW1lcyBOZXcgUm9tYW4nLFxuICAgICdUcmVidWNoZXQgTVMnLFxuICAgICdWZXJkYW5hJyxcbiAgICAnV2ViZGluZ3MnLFxuICAgICdXaW5nZGluZ3MnLFxuICAgICdZdSBHb3RoaWMnLFxuICAgICdzYW5zLXNlcmlmJyxcbiAgICAnc2VyaWYnLFxuICAgICdtb25vc3BhY2UnLFxuICAgICdJbnRlcidcbiAgXTtcblxuICBmb250U2l6ZXM6IHN0cmluZ1tdID0gW1xuICAgICc4JywgJzknLCAnMTAnLCAnMTEnLCAnMTInLCAnMTQnLCAnMTYnLCAnMTgnLCAnMjAnLCAnMjQnXG4gIF07XG5cbiAgaGFzU2Nyb2xsID0gZmFsc2U7XG5cblxuXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb2x1bW5TZXJ2aWNlOiBTcGxpdENvbHVtbnNTZXJ2aWNlLFxuICAgIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHB1YmxpYyBjb21tb25TZXZpY2U6IENvbW1vblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBjb3B5U2VydmljZTogQ29weVNlcnZpY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgZXhwb3J0U2VydmljZTogRXhwb3J0U2VydmljZSxcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcbiAgICBwcml2YXRlIGZvcm1hdEN1cnJlbmN5OiBGb3JtYXRDdXJyZW5jeVBpcGUsXG4gICAgcHJpdmF0ZSBhY3Rpb25WYWxpZGF0b3IgOiBSb3dBY3Rpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgdmFsaWRhdGlvbnNTZXJ2aWNlIDogVmFsaWRhdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgaHRtbFNhbmF0aXplclNlcnZpY2UgOiBIdG1sQ29udGVudFNhbml0aXplclNlcnZpY2UsXG5cbiAgKSB7IH1cblxuICBAVmlld0NoaWxkKCdjZWxsVGV4dCcsIHsgc3RhdGljOiBmYWxzZSB9KSBjZWxsVGV4dCE6IGFueTtcbiAgQFZpZXdDaGlsZCgnbmVzdGVkSGVhZGVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIG5lc3RlZEhlYWRlciE6IEVsZW1lbnRSZWY7XG4gIFxuICBhc3luYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5TZXRDb2x1bW5zRGVmYXVsdFdpZHRoKCk7XG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2hIZWFkZXJzKCk7XG4gICAgICB0aGlzLnVwZGF0ZUZsYXR0ZW5lZERhdGEoKTtcbiAgICAgIHRoaXMuY29tcHV0ZVZpZXdwb3J0Um93cygpO1xuICAgICAgdGhpcy51cGRhdGVWaXNpYmxlUm93cygwKTtcbiAgICAgIHRoaXMuaGFzU2Nyb2xsID0gdGhpcy5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCk7XG4gXG4gICAgICBpZiAodGhpcy5jZWxsVGV4dCkge1xuICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmNlbGxUZXh0Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgfVxuIFxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMucmVuZGVyQ3VzdG9tQ2VsbHMoKTtcbiAgICB0aGlzLmJ1aWxkUGFnZVNpemVLZXlNYXAoKTtcbiAgICAgfSwgMTAwMCk7XG4gXG4gIH1cblxuICBwcml2YXRlIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblxuICBjcmVhdGVDZWxsSW5qZWN0b3Iocm93OiBhbnksIGNvbDogYW55KTogSW5qZWN0b3Ige1xuICAgIHJldHVybiBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogJ3Jvd0RhdGEnLCB1c2VWYWx1ZTogcm93IH0sXG4gICAgICAgIHsgcHJvdmlkZTogJ2NvbERhdGEnLCB1c2VWYWx1ZTogY29sIH1cbiAgICAgIF0sXG4gICAgICBwYXJlbnQ6IHRoaXMuaW5qZWN0b3JcbiAgICB9KTtcbiAgfVxuXG5cbiAgcHJpdmF0ZSByZW5kZXJDdXN0b21DZWxscygpOiB2b2lkIHtcbiAgICBjb25zdCBob3N0cyA9IHRoaXMuY2VsbEhvc3RzLnRvQXJyYXkoKTtcbiAgICBsZXQgaG9zdEluZGV4ID0gMDtcblxuICAgIGZvciAoY29uc3Qgcm93IG9mIHRoaXMudmlzaWJsZVJvd3MpIHtcbiAgICAgIGZvciAoY29uc3QgY29sIG9mIHRoaXMuY29sdW1ucykge1xuICAgICAgICBjb25zdCBob3N0ID0gaG9zdHNbaG9zdEluZGV4KytdO1xuICAgICAgICBpZiAoIWhvc3QgfHwgIWNvbC5jZWxsUmVuZGVyZXIpIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IHZpZXdDb250YWluZXIgPSBob3N0LnZpZXdDb250YWluZXJSZWY7XG4gICAgICAgIHZpZXdDb250YWluZXIuY2xlYXIoKTtcblxuICAgICAgICBjb25zdCBjb21wUmVmID0gdmlld0NvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoY29sLmNlbGxSZW5kZXJlcik7XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgIHJvdyxcbiAgICAgICAgICBjb2wsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpLFxuICAgICAgICAgIGFwaTogdGhpcyxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoKGNvbXBSZWYuaW5zdGFuY2UgYXMgYW55KS5ncmlkSW5pdCkge1xuICAgICAgICAgIChjb21wUmVmLmluc3RhbmNlIGFzIGFueSkuZ3JpZEluaXQocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiBzaG91bGRSZXN0b3JlU2Nyb2xsID0gZmFsc2U7XG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICAgIHRoaXMuYWRkU3R5bGVzVG9JbWFnZXMoKTtcbiAgICAgIHRoaXMuaGFzU2Nyb2xsID0gdGhpcy5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCk7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIGlmIChcbiAgICAgIHRoaXMuc2hvdWxkUmVzdG9yZVNjcm9sbCAmJlxuICAgICAgdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keT8ubmF0aXZlRWxlbWVudFxuICAgICkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLmNvbW1vblNldmljZS5tYWluQ29udGFpbmVyTGVmdDtcbiAgICAgICAgdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSBsZWZ0O1xuICAgICAgICB0aGlzLmNlbnRlclBpbm5lZEhlYWRlci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSBsZWZ0O1xuICAgICAgICB0aGlzLnNob3VsZFJlc3RvcmVTY3JvbGwgPSBmYWxzZTtcbiAgICAgIH0sIDEwMDApO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vICBpZiAodGhpcy50YWJzPy5sZW5ndGgpIHtcbiAgICAvLyAgIHRoaXMuYWN0aXZlVGFiID0gdGhpcy50YWJzWzBdO1xuICAgIC8vIH1cbiAgICAvLyB0aGlzLmF1dG9zaXplQWxsQ29sdW1ucygpO1xuICAgIGlmICghdGhpcy5jdXJyZXRhVGFibGVQcmVzZXRGb3JVcGRhdGUpIHtcbiAgICAgIC8vIHRoaXMuYXV0b1NpemVDb2x1bW5zQnlSYXRpbygpO1xuICAgIH1cblxuICAgIC8vIGNvbnN0IHVzZXIgPSB0aGlzLmdldERlY3J5cHQoJ3VzZXInKTtcbiAgICAvLyB0aGlzLmN1cnJlbmN5Rm9ybWF0ID0gdXNlcj8uY3VycmVuY3lfZm9ybWF0O1xuICAgIC8vIHRoaXMuY3VycmVuY3lTeW1ib2wgPSB1c2VyPy5jdXJyZW5jeV9zeW1ib2w7XG4gICAgLy8gdGhpcy5kYXRlRm9ybWF0ID0gdXNlcj8uZGF0ZV9mb3JtYXQ7XG4gICAgaWYgKCF0aGlzLmRhdGVGb3JtYXQpIHtcbiAgICAgIGNvbnN0IHN0b3JlZERhdGVGb3JtYXQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZGF0ZWZvcm1hdCcpO1xuICAgICAgaWYgKHN0b3JlZERhdGVGb3JtYXQpIHtcbiAgICAgICAgdGhpcy5kYXRlRm9ybWF0ID0gc3RvcmVkRGF0ZUZvcm1hdCA/IEpTT04ucGFyc2Uoc3RvcmVkRGF0ZUZvcm1hdCkgOiAnZGQvTU0veXl5eSc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmN1cnJlbmN5Rm9ybWF0KSB7XG4gICAgICBjb25zdCBzdG9yZWRDdXJyZW5jeUZvcm1hdCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjdXJyZW5jeUZvcm1hdCcpO1xuICAgICAgaWYgKHN0b3JlZEN1cnJlbmN5Rm9ybWF0KSB7XG4gICAgICAgIHRoaXMuY3VycmVuY3lGb3JtYXQgPSBzdG9yZWRDdXJyZW5jeUZvcm1hdCA/IEpTT04ucGFyc2Uoc3RvcmVkQ3VycmVuY3lGb3JtYXQpIDogJzEsMjM0LDU2Ny44OSc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmN1cnJlbmN5U3ltYm9sKSB7XG4gICAgICBjb25zdCBzdG9yZWRDdXJyZW5jeVN5bWJvbCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjdXJyZW5jeVN5bWJvbCcpO1xuICAgICAgaWYgKHN0b3JlZEN1cnJlbmN5U3ltYm9sKSB7XG4gICAgICAgIHRoaXMuY3VycmVuY3lTeW1ib2wgPSBzdG9yZWRDdXJyZW5jeVN5bWJvbCA/IEpTT04ucGFyc2Uoc3RvcmVkQ3VycmVuY3lTeW1ib2wpIDogJyQnO1xuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgLy8gcHJpdmF0ZSBnZXREZWNyeXB0KGtleTpzdHJpbmcpe1xuICAvLyAgICAgY29uc3QgdmFsdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpXG4gIC8vICAgICB0cnkge1xuICAvLyAgICAgICByZXR1cm4gSlNPTi5wYXJzZShDcnlwdG9KUy5BRVMuZGVjcnlwdCh2YWx1ZSBhcyBzdHJpbmcsIHRoaXMuc2VjcmV0S2V5KS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCkpXG4gIC8vICAgICB9IGNhdGNoIChlKSB7XG4gIC8vICAgICAgIHJldHVybiBudWxsO1xuICAvLyAgICAgfVxuICAvLyAgIH1cblxuICBkYXRhU2V0TG9hZGluZyA9IGZhbHNlO1xuICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKXtcbiAgICBpZiAoY2hhbmdlc1snY29sdW1ucyddKSB7XG4gICAgICBhd2FpdCB0aGlzLnNldENvbHVtbnNDb2x1bW5Ecm9wZG93blZhbHVzKCk7XG5cbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1sndGFicyddKSB7XG4gICAgICBpZiAoY2hhbmdlc1sndGFicyddKSB7XG4gICAgICAgIGNvbnN0IGFsbFRhYnMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhY3RpdmVUYWJzJykgfHwgJ3t9Jyk7XG4gICAgICAgICBsZXQgc2F2ZWRUYWIgXG4gICAgICAgICB0aGlzLnNlbGVjdGVkVGFiID8gKCBzYXZlZFRhYiA9IHRoaXMuc2VsZWN0ZWRUYWIgKSA6ICggc2F2ZWRUYWIgPSBhbGxUYWJzW3RoaXMudGFibGVUeXBlXSlcbiAgICAgICAgLy8gY29uc3Qgc2F2ZWRUYWIgPSBhbGxUYWJzW3RoaXMudGFibGVUeXBlXTtcbiAgICAgICAgaWYgKHRoaXMudGFicy5pbmNsdWRlcygnQ3VycmVudCBQb2xpY3knKSkge1xuICAgICAgICAgIHRoaXMuYWN0aXZlVGFiID0gdGhpcy50YWJzPy5bMV0gfHwgJ0N1cnJlbnQgUG9saWN5JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVRhYiA9IHNhdmVkVGFiIHx8IHRoaXMudGFicz8uWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgKHRoaXMudGFibGVUeXBlKSB7XG4gICAgICAgIC8vICAgdGhpcy5zZXRBY3RpdmVUYWIodGhpcy5hY3RpdmVUYWIpO1xuICAgICAgICAvLyB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydmaWx0ZXJzQ29uZmlnJ10pIHtcbiAgICAgIHRoaXMuY2hlY2tGaWx0ZXJDaGFuZ2VzRWZmZWN0KCk7XG4gICAgICBhd2FpdCB0aGlzLmFwcGx5RmlsdGVyb3B0aW9uTGlzdCgpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzWydjb2x1bW5zJ10/LmN1cnJlbnRWYWx1ZT8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmF1dG9TaXplQ29sdW1uc0J5UmF0aW8odHJ1ZSk7XG4gICAgICBhd2FpdCB0aGlzLmFwcGx5RmlsdGVyb3B0aW9uTGlzdCgpO1xuXG4gICAgICB0aGlzLm9yaWdpbmFsQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoY29sID0+ICh7XG4gICAgICAgIC4uLmNvbCxcbiAgICAgICAgcXVlcnk6IGNvbC5xdWVyeSA/IHsgLi4uY29sLnF1ZXJ5IH0gOiBudWxsLFxuICAgICAgICBjb2x1bW5fZHJvcGRvd25fdmFsdWU6IGNvbC5jb2x1bW5fZHJvcGRvd25fdmFsdWVcbiAgICAgICAgICA/IFsuLi5jb2wuY29sdW1uX2Ryb3Bkb3duX3ZhbHVlXVxuICAgICAgICAgIDogW10sXG4gICAgICB9KSk7XG5cblxuICAgICAgaWYgKHRoaXMuZGF0YUdyaWRDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/Lm9mZnNldFdpZHRoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuU2V0Q29sdW1uc0RlZmF1bHRXaWR0aCgpO1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoc0FuZEdyb3VwcygpO1xuICAgICAgICBhd2FpdCB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuICAgICAgICB0aGlzLnNldFNlY3Rpb25zV2lkdGgoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1snZGF0YVNldCddKSB7XG4gICAgICB0aGlzLmRhdGFTZXQgPSB0aGlzLmRhdGFTZXQ/Lm1hcCgocm93LCBpKSA9PiAoe1xuICAgICAgICAuLi5yb3csXG4gICAgICAgIF9fdmlydHVhbEluZGV4OiBpICsgMSxcbiAgICAgIH0pKTtcbiAgICAgIHRoaXMub3JpZ2luYWxEYXRhU2V0ID0gc3RydWN0dXJlZENsb25lKHRoaXMuZGF0YVNldCk7XG4gICAgICB0aGlzLmV4cGFuZGVkQ2VsbHMuY2xlYXIoKTtcbiAgICAgIHRoaXMudXBkYXRlRmxhdHRlbmVkRGF0YSgpO1xuXG4gICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY29tcHV0ZVZpZXdwb3J0Um93cygpO1xuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVSb3dzKDApO1xuICAgICAgICAgaWYodGhpcy5jb21tb25TZXZpY2U/Lm1haW5Db250YWluZXJMZWZ0ID4gMjAwKVxuICAgICAgICAgIHRoaXMuc2hvdWxkUmVzdG9yZVNjcm9sbCA9IHRydWU7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5jZW50ZXJQaW5uZWRIZWFkZXI/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgdm9pZCB0aGlzLmNlbnRlclBpbm5lZEhlYWRlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuXG4gICAgICAgIHRoaXMuZGF0YVNldExvYWRpbmcgPSB0cnVlO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keT8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPVxuICAgICAgICAgICAgICB0aGlzLmNlbnRlclBpbm5lZEhlYWRlci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZGF0YVNldExvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0sIDUwMCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYXBwbHlSb3dzU2VsZWN0aW9uU3RhdGUoKTtcblxuICAgICAgaWYgKHRoaXMuZ3JvdXBlZENvbHVtbnM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmdyb3VwZWRDb2x1bW5zLm1hcCgoaXRlbSkgPT4gaXRlbS5maWVsZCk7XG4gICAgICAgICAgdGhpcy5ncm91cGVkQ29sdW1ucy5mb3JFYWNoKGdyb3VwZWRDb2wgPT4ge1xuICAgICAgICAgIHRoaXMubWFya0NvbHVtbkFzR3JvdXBlZCh0aGlzLmNvbHVtbnMsIGdyb3VwZWRDb2wuZmllbGQpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kYXRhU2V0ID0gYXdhaXQgdGhpcy5ncm91cERhdGFBc3luYyh0aGlzLm9yaWdpbmFsRGF0YVNldCwgZmllbGRzKTtcblxuICAgICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy51cGRhdGVGbGF0dGVuZWREYXRhKCk7XG4gICAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5XaWR0aHNBbmRHcm91cHMoKTtcbiAgICAgICAgICB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuICAgICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZVJvd3MoMCk7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5ncm91cEJveFBhZGRpbmcgPSB0aGlzLmNvbHVtbnNHcm91cGVkQm94Py5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ2NoZWNrYm94U3RhdGUnXT8uY3VycmVudFZhbHVlPy5yZXNldCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFJvd3MuY2xlYXIoKTtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb25TdGF0ZSh0aGlzLnRhYmxlVHlwZSk7XG5cbiAgICAgIGNvbnN0IGlkcyA9IEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJvd3MpO1xuICAgICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBsaXN0aW5nVHlwZTogdGhpcy5saXN0aW5nVHlwZSxcbiAgICAgICAgICBvYmo6IGlkcyxcbiAgICAgICAgfSxcbiAgICAgICAgZXZlbnRUeXBlOiAnb25TZWxlY3RSb3cnLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudCk7XG5cbiAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ2Nsb3NlRHJvcGRvd24nXSAmJiB0aGlzLmNsb3NlRHJvcGRvd24ucHJlc2V0LmNsb3NlZCkge1xuICAgICAgdGhpcy5hY3RpdmVUb3BCdXR0b24gPSBudWxsO1xuICAgICAgdGhpcy5wcmVzZXRGaWx0ZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMucHJlc2V0TmFtZSA9ICcnO1xuICAgIH1cblxuICAgIC8vIGlmIChjaGFuZ2VzWydvZGRSb3dzQmFja2dyb3VuZENvbG9yJ10pIHtcbiAgICAvLyAgIHRoaXMucm93U2hhZGluZ0VuYWJsZWQgPSAhIXRoaXMub2RkUm93c0JhY2tncm91bmRDb2xvcjtcbiAgICAvLyB9XG5cbiAgICBpZiAoY2hhbmdlc1sncmVzZXRBbGxGaWx0ZXJzJ10gJiYgdGhpcy5yZXNldEFsbEZpbHRlcnMucmVzZXRBbGwpIHtcbiAgICAgIHRoaXMuY2xlYXJBbGxGaWx0ZXJzKCk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ3RhYmxlVmlldyddKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3Qgdmlld1ZhbHVlID0gdGhpcy50YWJsZVZpZXc7XG4gICAgICAgIGxldCB0ZW1wcm9yeVNlbGVjdGVkID0gQXJyYXkuaXNBcnJheSh2aWV3VmFsdWUpXG4gICAgICAgICAgPyB2aWV3VmFsdWUuZmluZChpdGVtID0+IGl0ZW0uaXNfdGVtcClcbiAgICAgICAgICA6IG51bGw7XG5cbiAgICAgICAgaWYgKCF0ZW1wcm9yeVNlbGVjdGVkKSB7XG4gICAgICAgICAgdGVtcHJvcnlTZWxlY3RlZCA9IEFycmF5LmlzQXJyYXkodmlld1ZhbHVlKVxuICAgICAgICAgICAgPyB2aWV3VmFsdWUuZmluZChpdGVtID0+IGl0ZW0uaXNfZGVmYXVsdClcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY3VycmV0YVRhYmxlUHJlc2V0Rm9yVXBkYXRlID0gdGVtcHJvcnlTZWxlY3RlZCB8fCBudWxsO1xuICAgICAgICB0aGlzLnByZXNldE5hbWUgPSB0ZW1wcm9yeVNlbGVjdGVkPy5uYW1lIHx8ICcnO1xuICAgICAgICB0aGlzLnN0b3JlUHJlc2V0TmFtZSA9IHRlbXByb3J5U2VsZWN0ZWQ/Lm5hbWUgfHwgJyc7XG4gICAgICAgIHRoaXMucHJlc2V0RmlsdGVyID0gdGVtcHJvcnlTZWxlY3RlZD8uYWN0aXZlRmlsdGVycyB8fCBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmV0YVRhYmxlUHJlc2V0Rm9yVXBkYXRlKSB7XG4gICAgICAgICAgdGhpcy5yb3dTaGFkaW5nRW5hYmxlZCA9IHRlbXByb3J5U2VsZWN0ZWQuY29uZmlnLnJvd1NoYWRpbmdFbmFibGVkO1xuICAgICAgICAgIHRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyID0gdGVtcHJvcnlTZWxlY3RlZC5jb25maWcuc2hvd1ZlcnRpY2FsQm9yZGVyO1xuICAgICAgICAgIHRoaXMuZm9udEZhaW1seSA9IHRlbXByb3J5U2VsZWN0ZWQuY29uZmlnLmZvbnRGYWltbHk7XG4gICAgICAgICAgdGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplID0gdGVtcHJvcnlTZWxlY3RlZC5jb25maWcuaGVhZGVyVGV4dEZvbnRzU2l6ZTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFibGVMYXlvdXQgPSB0ZW1wcm9yeVNlbGVjdGVkLmNvbmZpZy5zZWxlY3RlZFRhYmxlTGF5b3V0O1xuICAgICAgICAgIHRoaXMuYm9keVRleHRGb250c1NpemUgPSB0ZW1wcm9yeVNlbGVjdGVkLmNvbmZpZy5ib2R5VGV4dEZvbnRzU2l6ZTtcbiAgICAgICAgICB0aGlzLmdsb2JhbFNlYXJjaFRleHQgPSB0ZW1wcm9yeVNlbGVjdGVkLmNvbmZpZy5nbG9iYWxTZWFyY2g7XG4gICAgICAgICAgdGhpcy5zZXRUYWJsZUxheW91dCh0aGlzLnNlbGVjdGVkVGFibGVMYXlvdXQpO1xuICAgICAgICAgIHRoaXMub2RkUm93c0JhY2tncm91bmRDb2xvciA9IHRlbXByb3J5U2VsZWN0ZWQ/LmNvbmZpZz8ub2RkUm93c0JhY2tncm91bmRDb2xvciB8fCAnI2YxZjFmMSc7XG4gICAgICAgICAgY29uc3QgZ3JvdXBlZENvbHVtbnMgPSB0ZW1wcm9yeVNlbGVjdGVkPy5jb25maWc/Lmdyb3VwZWRDb2x1bW5zO1xuICAgICAgICAgIGlmKGdyb3VwZWRDb2x1bW5zPy5sZW5ndGgpe1xuICAgICAgICAgICAgdGhpcy5ncm91cGVkQ29sdW1ucyA9IHN0cnVjdHVyZWRDbG9uZShncm91cGVkQ29sdW1ucyk7XG4gICAgICAgICAgICB0aGlzLmdyb3VwRGF0YUFzeW5jKHRoaXMuZGF0YVNldCwgdGhpcy5ncm91cGVkQ29sdW1ucyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSAgZWxzZSBpZih0aGlzLmRlZmF1bHRDb25maWcpe1xuICAgICAgICAgIHRoaXMucm93U2hhZGluZ0VuYWJsZWQgPSB0aGlzLmRlZmF1bHRDb25maWcucm93U2hhZGluZ0VuYWJsZWQgfHwgZmFsc2U7XG4gICAgICAgICAgdGhpcy5zaG93VmVydGljYWxCb3JkZXIgPSB0aGlzLmRlZmF1bHRDb25maWcuc2hvd1ZlcnRpY2FsQm9yZGVyIHx8IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZm9udEZhaW1seSA9IHRoaXMuZGVmYXVsdENvbmZpZy5mb250RmFpbWx5IHx8ICdJbnRlcic7XG4gICAgICAgICAgdGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplID0gdGhpcy5kZWZhdWx0Q29uZmlnLmhlYWRlclRleHRGb250c1NpemUgfHwgMTQ7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYmxlTGF5b3V0ID0gdGhpcy5kZWZhdWx0Q29uZmlnLnNlbGVjdGVkVGFibGVMYXlvdXQgfHwgJ21lZGl1bSc7XG4gICAgICAgICAgdGhpcy5ib2R5VGV4dEZvbnRzU2l6ZSA9IHRoaXMuZGVmYXVsdENvbmZpZy5ib2R5VGV4dEZvbnRzU2l6ZSB8fCAxNDtcbiAgICAgICAgICB0aGlzLmdsb2JhbFNlYXJjaFRleHQgPSB0aGlzLmRlZmF1bHRDb25maWcuZ2xvYmFsU2VhcmNoO1xuICAgICAgICAgIHRoaXMuc2V0VGFibGVMYXlvdXQodGhpcy5zZWxlY3RlZFRhYmxlTGF5b3V0KTtcbiAgICAgICAgICBjb25zdCBncm91cGVkQ29sdW1ucyA9IHRoaXMuZGVmYXVsdENvbmZpZz8uZ3JvdXBlZENvbHVtbnM7XG4gICAgICAgICAgaWYoZ3JvdXBlZENvbHVtbnM/Lmxlbmd0aCl7XG4gICAgICAgICAgICB0aGlzLmdyb3VwZWRDb2x1bW5zID0gc3RydWN0dXJlZENsb25lKGdyb3VwZWRDb2x1bW5zKTtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBEYXRhQXN5bmModGhpcy5kYXRhU2V0LCB0aGlzLmdyb3VwZWRDb2x1bW5zKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yb3dTaGFkaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5mb250RmFpbWx5ID0gJ0ludGVyJztcbiAgICAgICAgICB0aGlzLmhlYWRlclRleHRGb250c1NpemUgPSAxNDtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFibGVMYXlvdXQgPSAnbWVkaXVtJztcbiAgICAgICAgICB0aGlzLmJvZHlUZXh0Rm9udHNTaXplID0gMTQ7XG4gICAgICAgICAgdGhpcy5nbG9iYWxTZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgIHRoaXMucHJlc2V0TmFtZSA9ICcnXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgaWYoY2hhbmdlc1sncGFnZVNpemVPcHRpb25zJ10gJiYgY2hhbmdlc1sncGFnZVNpemVPcHRpb25zJ10/LmN1cnJlbnRWYWx1ZSl7XG4gICAgICB0aGlzLmJ1aWxkUGFnZVNpemVLZXlNYXAoKTtcbiAgICB9XG5cbiAgfVxuXG5cbiAgXG5cbiAgYXN5bmMgc2V0Q29sdW1uc0NvbHVtbkRyb3Bkb3duVmFsdXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNvbHVtbnMpIHJldHVybjtcbiAgICAvLyBKdXN0IHJlbW92ZWQgdGVtcG9yYXJ5IGZvciBzdXBlciBhZG1pbiB3aWxsIHNldCBpdCBhZ2FpblxuICAgIC8vIGlmICh0aGlzLmNvbHVtbnM/Lmxlbmd0aCkge1xuICAgIC8vICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zPy5maWx0ZXIoYyA9PiBjPy5maWVsZD8udHJpbSgpICE9PSAnaXNfZGVsZXRlZCcpXG4gICAgLy8gfVxuICAgIHRoaXMuY29sdW1ucyA9IGF3YWl0IHRoaXMuY29tbW9uU2V2aWNlLmNvcHlEcm9wZG93bkRhdGFSZWN1cnNpdmVseSh0aGlzLmNvbHVtbnMpO1xuICB9XG5cblxuXG5cbiAgYXBwbHlSb3dzU2VsZWN0aW9uU3RhdGUoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRJZHNGcm9tU3RhdGUgPSB0aGlzLnJlc3RvcmVTZWxlY3Rpb24odGhpcy50YWJsZVR5cGUpO1xuICAgIGlmIChzZWxlY3RlZElkc0Zyb21TdGF0ZS5zaXplID4gMCkge1xuICAgICAgY29uc3QgaWRzID0gQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkUm93cyk7XG4gICAgICBjb25zdCBldmVudCA9IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGxpc3RpbmdUeXBlOiB0aGlzLmxpc3RpbmdUeXBlLFxuICAgICAgICAgIG9iajogaWRzXG4gICAgICAgIH0sXG4gICAgICAgIGV2ZW50VHlwZTogXCJvblNlbGVjdFJvd1wiLFxuICAgICAgfVxuICAgICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJTZWxlY3Rpb25TdGF0ZSh0YWJsZVR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHN0b3JlZCA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2RhdGF0YWJsZVNlbGVjdGlvbnMnKSB8fCAne1wic2VsZWN0ZWRSb3dzXCI6IHt9fScpO1xuICAgIGlmIChzdG9yZWQuc2VsZWN0ZWRSb3dzICYmIHN0b3JlZC5zZWxlY3RlZFJvd3NbdGFibGVUeXBlXSkge1xuICAgICAgZGVsZXRlIHN0b3JlZC5zZWxlY3RlZFJvd3NbdGFibGVUeXBlXTtcbiAgICB9XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICAnZGF0YXRhYmxlU2VsZWN0aW9ucycsXG4gICAgICBKU09OLnN0cmluZ2lmeShzdG9yZWQpXG4gICAgKTtcbiAgfVxuXG5cblxuICBhc3luYyBhcHBseUZpbHRlcm9wdGlvbkxpc3QoKSB7XG4gICAgY29uc3QgdXBkYXRlZENvbHVtbnMgPSBhd2FpdCB0aGlzLmNvbW1vblNldmljZS5hcHBseUZpbHRlcnNUb0NvbHVtbnModGhpcy5jb2x1bW5zLCB0aGlzLmZpbHRlcnNDb25maWcpO1xuICAgIHRoaXMuY29sdW1ucyA9IFsuLi51cGRhdGVkQ29sdW1uc107XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG4gIGxlZnRQaW5uZWRDb2x1bW5zOiBhbnlbXSA9IFtdO1xuICBjZW50ZXJDb2x1bW5zOiBhbnlbXSA9IFtdO1xuICByaWdodFBpbm5lZENvbHVtbnM6IGFueVtdID0gW107XG5cbiAgcHJldmlld0xlZnRQaW5uZWRDb2x1bW5zOiBhbnlbXSA9IFtdO1xuICBwcmV2aWV3Q2VudGVyQ29sdW1uczogYW55W10gPSBbXTtcbiAgcHJldmlld1JpZ2h0UGlubmVkQ29sdW1uczogYW55W10gPSBbXTtcblxuICAvLyBNYWluIENvbnRhaW5lciBUZW1wbGF0ZSBSZWZlcmVuY2VzXG4gIEBWaWV3Q2hpbGQoJ2RhdGFHcmlkQ29udGFpbmVyJylcbiAgZGF0YUdyaWRDb250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgndGFza01hbmFnZW1lbnRDb250YWluZXInKVxuICB0YXNrTWFuYWdlbWVudENvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCduZXN0ZWRUYWJsZUNvbnRhaW5lcicpXG4gIG5lc3RlZFRhYmxlQ29udGFpbmVyITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgLy8gQm9keSBUZW1wbGF0ZSBSZWZlcmVuY2VzXG4gIEBWaWV3Q2hpbGQoJ2xlZnRQaW5uZWRCb2R5JylcbiAgbGVmdFBpbm5lZEJvZHkhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnY2VudGVyUGlubmVkQm9keScpXG4gIGNlbnRlclBpbm5lZEJvZHkhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgncmlnaHRQaW5uZWRCb2R5JylcbiAgcmlnaHRQaW5uZWRCb2R5ITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgLy8gSGVhZGVycyBUZW1wbGF0ZSBSZWZlcmVuY2VzXG4gIEBWaWV3Q2hpbGQoJ2xlZnRQaW5uZWRIZWFkZXInKVxuICBsZWZ0UGlubmVkSGVhZGVyITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ2NlbnRlclBpbm5lZEhlYWRlcicpXG4gIGNlbnRlclBpbm5lZEhlYWRlciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdyaWdodFBpbm5lZEhlYWRlcicpXG4gIHJpZ2h0UGlubmVkSGVhZGVyITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ2dsb2JhbFNlYXJjaElucHV0JylcbiAgZ2xvYmFsU2VhcmNoSW5wdXQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gIEBWaWV3Q2hpbGQoJ2NvbHVtbnNHcm91cGVkQm94JylcbiAgY29sdW1uc0dyb3VwZWRCb3ghOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAvLyBDZW50ZXIgRmFrZSBzY3JvbGxiYXJkXG4gIEBWaWV3Q2hpbGQoJ2NlbnRlckZha2VTY3JvbGxiYXInKVxuICBjZW50ZXJGYWtlU2Nyb2xsYmFyITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIGFzeW5jIHVwZGF0ZUNvbHVtbldpZHRoc0FuZEdyb3Vwcyhjb2x1bW5zOiBhbnkgPSBudWxsKSB7XG4gICAgaWYgKCF0aGlzLmRhdGFHcmlkQ29udGFpbmVyKSByZXR1cm47XG4gICAgbGV0IGNvbnRhaW5lcldpZHRoID1cbiAgICAgIHRoaXMuZGF0YUdyaWRDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/Lm9mZnNldFdpZHRoID8/IDA7XG4gICAgLy8gV3JhcCBpbiBhIHByb21pc2Ugc28gd2UgY2FuIGF3YWl0XG4gICAgY29uc3QgeyBsZWZ0LCBjZW50ZXIsIHJpZ2h0IH06IGFueSA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgY29uc3QgcHJlcGFyZWQgPSB0aGlzLmNvbHVtblNlcnZpY2UucHJlcGFyZUNvbHVtbnMoXG4gICAgICAgIGNvbHVtbnMgPyBjb2x1bW5zIDogdGhpcy5jb2x1bW5zLFxuICAgICAgICBjb250YWluZXJXaWR0aFxuICAgICAgKTtcbiAgICAgIHJlc29sdmUocHJlcGFyZWQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5sZWZ0UGlubmVkQ29sdW1ucyA9IGxlZnQ7XG4gICAgdGhpcy5jZW50ZXJDb2x1bW5zID0gY2VudGVyO1xuICAgIHRoaXMucmlnaHRQaW5uZWRDb2x1bW5zID0gcmlnaHQ7XG4gICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIDApKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBhc3luYyByZWZyZXNoUHJldmlld0NvbHVtbnMoY29sdW1uczogYW55ID0gbnVsbCkge1xuICAgIGlmICghdGhpcy5kYXRhR3JpZENvbnRhaW5lcikgcmV0dXJuO1xuXG4gICAgY29uc3QgY29udGFpbmVyV2lkdGggPSB0aGlzLmRhdGFHcmlkQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG5cbiAgICAvLyBXcmFwIHByZXBhcmVDb2x1bW5zIGluIGEgUHJvbWlzZSB0byBtYWtlIGl0IGF3YWl0YWJsZVxuICAgIGNvbnN0IHsgbGVmdCwgY2VudGVyLCByaWdodCB9OiBhbnkgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGNvbnN0IHByZXBhcmVkID0gdGhpcy5jb2x1bW5TZXJ2aWNlLnByZXBhcmVDb2x1bW5zKFxuICAgICAgICBjb2x1bW5zID8gY29sdW1ucyA6IHRoaXMuY29sdW1ucyxcbiAgICAgICAgY29udGFpbmVyV2lkdGhcbiAgICAgICk7XG4gICAgICByZXNvbHZlKHByZXBhcmVkKTtcbiAgICB9KTtcblxuICAgIHRoaXMucHJldmlld0xlZnRQaW5uZWRDb2x1bW5zID0gbGVmdDtcbiAgICB0aGlzLnByZXZpZXdDZW50ZXJDb2x1bW5zID0gY2VudGVyO1xuICAgIHRoaXMucHJldmlld1JpZ2h0UGlubmVkQ29sdW1ucyA9IHJpZ2h0O1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCAxMCkpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG5cbiAgYXN5bmMgU2V0Q29sdW1uc0RlZmF1bHRXaWR0aCgpIHtcbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IHRoaXMuZ2V0VmlzaWJsZUxlYWZDb2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gICAgY29uc3QgdmlzaWJsZUNvdW50ID0gdmlzaWJsZUNvbHVtbnMubGVuZ3RoO1xuXG4gICAgaWYgKHZpc2libGVDb3VudCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgbGV0IGNvbnRhaW5lcldpZHRoID1cbiAgICAgIHRoaXMuZGF0YUdyaWRDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/Lm9mZnNldFdpZHRoID8/IDA7XG4gICAgaWYgKHRoaXMuc2hvd1NlcmlhbE51bWJlcikgY29udGFpbmVyV2lkdGggLT0gNTU7XG4gICAgaWYgKHRoaXMuc2hvd1NpZGVNZW51KSBjb250YWluZXJXaWR0aCAtPSAyOTtcbiAgICAvLyBpZiAodGhpcy5ncmlkVHlwZSA9PSAnQXNzZXRzJyB8fCB0aGlzLmdyaWRUeXBlID09ICdUYXNrcycpIGNvbnRhaW5lcldpZHRoIC09IDMwO1xuICAgIC8vIGNvbnRhaW5lcldpZHRoIC09IDU1O1xuICAgIC8vIGlmICh0aGlzLnNob3dTZXJpYWxOdW1iZXIpIGNvbnRhaW5lcldpZHRoIC09IDU1O1xuICAgIC8vIGlmICh0aGlzLnNob3dTaWRlTWVudSkgY29udGFpbmVyV2lkdGggLT0gMjk7XG4gICAgLy8gaWYgKHRoaXMuZ3JpZFR5cGUgPT0gJ0Fzc2V0cycgfHwgdGhpcy5ncmlkVHlwZSA9PSAnVGFza3MnKSBjb250YWluZXJXaWR0aCAtPSAzMDtcbiAgICAvLyBjb250YWluZXJXaWR0aCAtPSA1O1xuICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuY29sdW1uU2VydmljZS5hc3NpZ25EZWZhdWx0V2lkdGhzKFxuICAgICAgdGhpcy5jb2x1bW5zLFxuICAgICAgY29udGFpbmVyV2lkdGhcbiAgICApO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAwKSk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cblxuICBzZXRTZWN0aW9uc1dpZHRoKCkge1xuICAgIGNvbnN0IGxlZnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubGVmdC1waW5uZWQtYm9keScpIGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IGNlbnRlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAnLmNlbnRlci1zY3JvbGxhYmxlLWJvZHknXG4gICAgKSBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCByaWdodCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5yaWdodC1waW5uZWQtYm9keScpIGFzIEhUTUxFbGVtZW50O1xuICAgIGlmIChsZWZ0KSB7XG4gICAgICBsZWZ0LnN0eWxlLm1pbldpZHRoID0gYCR7dGhpcy5sZWZ0UGlubmVkSGVhZGVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGh9YDtcbiAgICB9XG4gICAgaWYgKGNlbnRlcikge1xuICAgICAgbGVmdC5zdHlsZS5taW5XaWR0aCA9IGAke3RoaXMuY2VudGVyUGlubmVkSGVhZGVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGh9YDtcbiAgICB9XG4gICAgaWYgKHJpZ2h0KSB7XG4gICAgICBsZWZ0LnN0eWxlLm1pbldpZHRoID0gYCR7dGhpcy5yaWdodFBpbm5lZEhlYWRlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofWA7XG4gICAgfVxuICB9XG5cbiAgLy8gb25DZW50ZXJCb2R5U2Nyb2xsKCk6IHZvaWQge1xuICAvLyAgIGNvbnN0IHNjcm9sbFRvcCA9IHRoaXMuY2VudGVyUGlubmVkQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcDtcbiAgLy8gICBjb25zdCBzY3JvbGxMZWZ0ID0gdGhpcy5jZW50ZXJQaW5uZWRCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcblxuICAvLyAgIC8vIFN5bmMgdmVydGljYWwgc2Nyb2xsIHdpdGggbGVmdCAmIHJpZ2h0IHBpbm5lZCBib2RpZXNcbiAgLy8gICB0aGlzLmxlZnRQaW5uZWRCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuICAvLyAgIHRoaXMucmlnaHRQaW5uZWRCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuXG4gIC8vICAgLy8gU3luYyBob3Jpem9udGFsIHNjcm9sbCB3aXRoIGNlbnRlciBoZWFkZXJcbiAgLy8gICB0aGlzLmNlbnRlclBpbm5lZEhlYWRlci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAvLyAgIHRoaXMuY2VudGVyRmFrZVNjcm9sbGJhci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAvLyB9XG5cbiAgLy8gb25MZWZ0Qm9keVNjcm9sbCgpOiB2b2lkIHtcbiAgLy8gICBjb25zdCBzY3JvbGxUb3AgPSB0aGlzLmxlZnRQaW5uZWRCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wO1xuICAvLyAgIHRoaXMuY2VudGVyUGlubmVkQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcbiAgLy8gICB0aGlzLnJpZ2h0UGlubmVkQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcbiAgLy8gfVxuICAvLyBvblJpZ2h0Qm9keVNjcm9sbCgpOiB2b2lkIHtcbiAgLy8gICBjb25zdCBzY3JvbGxUb3AgPSB0aGlzLnJpZ2h0UGlubmVkQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcDtcbiAgLy8gICB0aGlzLmNlbnRlclBpbm5lZEJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gIC8vICAgdGhpcy5sZWZ0UGlubmVkQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcbiAgLy8gfVxuXG4gIGZha2VTY3JvbGxiYXJTY3JvbGxMZWZ0ID0gMDtcbiAgLy8gb25GYWtlU2Nyb2xsKGV2ZW50OiBFdmVudCkge1xuICAvLyAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgLy8gICB0aGlzLmZha2VTY3JvbGxiYXJTY3JvbGxMZWZ0ID0gdGFyZ2V0LnNjcm9sbExlZnQ7XG4gIC8vICAgdGhpcy5jZW50ZXJQaW5uZWRCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRhcmdldC5zY3JvbGxMZWZ0O1xuICAvLyAgIHRoaXMuY2VudGVyUGlubmVkSGVhZGVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRhcmdldC5zY3JvbGxMZWZ0O1xuICAvLyB9XG5cblxuXG5cbiAgLy8gZ2V0TmVzdGVkVmFsdWUob2JqOiBhbnksIGZpZWxkOiBzdHJpbmcpOiBhbnkge1xuICAvLyAgIHJldHVybiBmaWVsZD8uc3BsaXQoJy4nKS5yZWR1Y2UoKGFjYywgcGFydCkgPT4gYWNjICYmIGFjY1twYXJ0XSwgb2JqKTtcbiAgLy8gfVxuZ2V0TmVzdGVkVmFsdWUob2JqOiBhbnksIGZpZWxkOiBzdHJpbmcpOiBhbnkge1xuICBpZiAoIW9iaiB8fCAhZmllbGQpIHJldHVybiBudWxsO1xuICBcbiAgLy8gR2V0IHRoZSByYXcgdmFsdWVcbiAgY29uc3QgdmFsdWUgPSBmaWVsZC5zcGxpdCgnLicpLnJlZHVjZSgoYWNjLCBwYXJ0KSA9PiBhY2MgJiYgYWNjW3BhcnRdLCBvYmopO1xuICBcbiAgLy8g4pyFIElmIGl0J3MgYSBzdGF0dXMgZmllbGQsIGNhcGl0YWxpemUgdGhlIHZhbHVlXG4gIGlmICh0aGlzLmlzU3RhdHVzRmllbGQoZmllbGQpICYmIHZhbHVlKSB7XG4gICAgLy8gSGFuZGxlIG9iamVjdCB3aXRoIHZhbHVlL25hbWUgcHJvcGVydGllc1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udmFsdWUsXG4gICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSA/IHRoaXMuY2FwaXRhbGl6ZVN0YXR1cyh2YWx1ZS52YWx1ZSkgOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgbmFtZTogdmFsdWUubmFtZSA/IHRoaXMuY2FwaXRhbGl6ZVN0YXR1cyh2YWx1ZS5uYW1lKSA6IHZhbHVlLm5hbWVcbiAgICAgIH07XG4gICAgfVxuICAgIFxuICAgIC8vIEhhbmRsZSBwbGFpbiBzdHJpbmcvbnVtYmVyIHZhbHVlc1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhcGl0YWxpemVTdGF0dXModmFsdWUpO1xuICAgIH1cbiAgfVxuICBcbiAgcmV0dXJuIHZhbHVlO1xufVxuICBpc05lc3RlZFZhbHVlQXJyYXkob2JqOiBhbnksIGZpZWxkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIW9iaiB8fCAhZmllbGQpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCB2YWx1ZSA9IGZpZWxkXG4gICAgICAuc3BsaXQoJy4nKVxuICAgICAgLnJlZHVjZSgoYWNjLCBwYXJ0KSA9PiAoYWNjICYmIGFjY1twYXJ0XSAhPT0gdW5kZWZpbmVkID8gYWNjW3BhcnRdIDogdW5kZWZpbmVkKSwgb2JqKTtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gIH1cblxuICBvblJlc2l6ZUdyb3VwKGV2ZW50OiBNb3VzZUV2ZW50LCBjb2w6IGFueSwgaXNSaWdodFBpbm5lZD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgY29uc3Qgc3RhcnRYID0gZXZlbnQuY2xpZW50WDtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGNvbC5jaGlsZHJlbiB8fCBbXTtcbiAgICBpZiAoIWNoaWxkcmVuLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY2hpbGRXaWR0aHM6IHsgZmllbGQ6IHN0cmluZzsgd2lkdGg6IG51bWJlciB9W10gPSBjaGlsZHJlbi5tYXAoXG4gICAgICAoY2hpbGQ6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgYFtmaWVsZD1cIiR7Y2hpbGQuZmllbGR9XCJdYFxuICAgICAgICApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGZpZWxkOiBjaGlsZC5maWVsZCxcbiAgICAgICAgICB3aWR0aDogZWw/Lm9mZnNldFdpZHRoIHx8IDAsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IHRvdGFsSW5pdGlhbFdpZHRoID0gY2hpbGRXaWR0aHMucmVkdWNlKFxuICAgICAgKHN1bSwgY29sKSA9PiBzdW0gKyBjb2wud2lkdGgsXG4gICAgICAwXG4gICAgKTtcblxuICAgIGNvbnN0IG9uTW91c2VNb3ZlID0gKG1vdmVFdmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgbGV0IGRlbHRhWCA9IG1vdmVFdmVudC5jbGllbnRYIC0gc3RhcnRYO1xuXG4gICAgICBpZiAoaXNSaWdodFBpbm5lZCkge1xuICAgICAgICBkZWx0YVggPSAtZGVsdGFYO1xuICAgICAgfVxuXG4gICAgICAvLyBQcmV2ZW50IHNocmlua2luZyB0b28gc21hbGxcbiAgICAgIGlmICh0b3RhbEluaXRpYWxXaWR0aCArIGRlbHRhWCA8IGNoaWxkcmVuLmxlbmd0aCAqIDgwKSByZXR1cm47XG5cbiAgICAgIGxldCB0b3RhbE5ld1dpZHRoID0gMDtcblxuICAgICAgY2hpbGRXaWR0aHMuZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgY29uc3QgcmF0aW8gPSBjaGlsZC53aWR0aCAvIHRvdGFsSW5pdGlhbFdpZHRoO1xuICAgICAgICBjb25zdCBuZXdXaWR0aCA9IE1hdGgubWF4KGNoaWxkLndpZHRoICsgZGVsdGFYICogcmF0aW8sIDgwKTtcbiAgICAgICAgdG90YWxOZXdXaWR0aCArPSBuZXdXaWR0aDtcblxuICAgICAgICBjb25zdCBjaGlsZEVscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtmaWVsZD1cIiR7Y2hpbGQuZmllbGR9XCJdYCk7XG4gICAgICAgIGNoaWxkRWxzLmZvckVhY2goKGVsOiBFbGVtZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgZWxIdG1sID0gZWwgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgZWxIdG1sLnN0eWxlLm1pbldpZHRoID0gYCR7bmV3V2lkdGh9cHhgO1xuICAgICAgICAgIGVsSHRtbC5zdHlsZS53aWR0aCA9IGAke25ld1dpZHRofXB4YDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5XaWR0aEluU291cmNlQnlGaWVsZChjaGlsZC5maWVsZCwgbmV3V2lkdGgpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIOKchSBVcGRhdGUgZ3JvdXAgaGVhZGVyIHdpZHRoIGluIERPTVxuICAgICAgY29uc3QgZ3JvdXBIZWFkZXJFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIGBbZ3JvdXA9XCIke2NvbC5oZWFkZXJ9XCJdYFxuICAgICAgKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGlmIChncm91cEhlYWRlckVsKSB7XG4gICAgICAgIGdyb3VwSGVhZGVyRWwuc3R5bGUud2lkdGggPSBgJHt0b3RhbE5ld1dpZHRofXB4YDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb25Nb3VzZVVwID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMudGFibGVGaWx0ZXJWaWV3SWQpIHtcbiAgICAgICAgdGhpcy5zYXZlUHJlc2V0KCdtb3VzZVVwJyk7XG4gICAgICB9XG4gICAgICB0aGlzLnJlZnJlc2hIZWFkZXJzKCk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xuICAgICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICAgIGZpbHRlcnM6IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpLFxuICAgICAgICBub19vZl9yZWNvcmRzOiB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZVNpemUsXG4gICAgICAgIHRhYmxlX2NvbmZpZzoge1xuICAgICAgICAgICByb3dTaGFkaW5nRW5hYmxlZDogdGhpcy5yb3dTaGFkaW5nRW5hYmxlZCB8fCBmYWxzZSxcbiAgICAgICAgICAgc2hvd1ZlcnRpY2FsQm9yZGVyOiB0aGlzLnNob3dWZXJ0aWNhbEJvcmRlciB8fCBmYWxzZSxcbiAgICAgICAgICAgZm9udEZhaW1seTogdGhpcy5mb250RmFpbWx5IHx8ICdJbnRlcicsXG4gICAgICAgICAgIGhlYWRlclRleHRGb250c1NpemU6IHRoaXMuaGVhZGVyVGV4dENvbG9yIHx8IDE0LFxuICAgICAgICAgICBzZWxlY3RlZFRhYmxlTGF5b3V0OiB0aGlzLnNlbGVjdGVkVGFibGVMYXlvdXQgfHwgJ21lZGl1bWQnLFxuICAgICAgICAgICBib2R5VGV4dEZvbnRzU2l6ZTogdGhpcy5ib2R5VGV4dEZvbnRzU2l6ZSB8fCAxNCxcbiAgICAgICAgICAgZ2xvYmFsU2VhcmNoOiB0aGlzLmdsb2JhbFNlYXJjaFRleHQsXG4gICAgICAgICAgIGZpbHRlck5hbWVzOiAnJyxcbiAgICAgICAgICAgdG90YWxDb3VudDogMCxcbiAgICAgICAgICAgYWN0aXZlRmlsdGVyczogdHJ1ZSxcbiAgICAgICAgICAgb2RkUm93c0JhY2tncm91bmRDb2xvcjogJyNmMWYxZjEnXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgICAgfTtcbiAgICAgIHRoaXMuY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZy5lbWl0KHRoaXMuY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKTtcbiAgICB9O1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvbHVtbldpZHRoSW5Tb3VyY2VCeUZpZWxkKGZpZWxkOiBzdHJpbmcsIHdpZHRoOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB1cGRhdGUgPSAoY29sdW1uczogYW55W10pID0+IHtcbiAgICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHVtbnMpIHtcbiAgICAgICAgaWYgKGNvbC5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgdXBkYXRlKGNvbC5jaGlsZHJlbik7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sLmZpZWxkID09PSBmaWVsZCkge1xuICAgICAgICAgIGNvbC53aWR0aCA9IHdpZHRoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHVwZGF0ZSh0aGlzLmNvbHVtbnMpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGdldCBjcmVhdGVVcGRhdGVDb2x1bW5Db25maWcoKXtcbiAgICByZXR1cm4ge1xuICAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICAgIGZpbHRlcnM6IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpLFxuICAgICAgICBub19vZl9yZWNvcmRzOiB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZVNpemUsXG4gICAgICAgIHRhYmxlX2NvbmZpZzoge1xuICAgICAgICAgICAgICAgICAgcm93U2hhZGluZ0VuYWJsZWQ6IHRoaXMucm93U2hhZGluZ0VuYWJsZWQgfHwgZmFsc2UsXG4gICAgICAgICAgICAgICAgICBzaG93VmVydGljYWxCb3JkZXI6IHRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyIHx8IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgZm9udEZhaW1seTogdGhpcy5mb250RmFpbWx5ICB8fCAnSW50ZXInLFxuICAgICAgICAgICAgICAgICAgaGVhZGVyVGV4dEZvbnRzU2l6ZTogTnVtYmVyKHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSkgfHwgMTQsXG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZFRhYmxlTGF5b3V0OiB0aGlzLnNlbGVjdGVkVGFibGVMYXlvdXQgfHwgJ21lZGl1bWQnLFxuICAgICAgICAgICAgICAgICAgYm9keVRleHRGb250c1NpemU6IE51bWJlcih0aGlzLmJvZHlUZXh0Rm9udHNTaXplKSB8fCAxNCxcbiAgICAgICAgICAgICAgICAgIGdsb2JhbFNlYXJjaDogdGhpcy5nbG9iYWxTZWFyY2hUZXh0LFxuICAgICAgICAgICAgICAgICAgZmlsdGVyTmFtZXM6ICcnLFxuICAgICAgICAgICAgICAgICAgdG90YWxDb3VudDogMCxcbiAgICAgICAgICAgICAgICAgIGFjdGl2ZUZpbHRlcnM6IHRydWUsXG4gICAgICAgICAgICAgICAgICBvZGRSb3dzQmFja2dyb3VuZENvbG9yOiAnI2YxZjFmMSdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICB9XG4gIH1cblxuICBjbGVhbkNvbHVtbnMoY29sdW1uczogYW55W10pOiBhbnlbXSB7XG4gICAgcmV0dXJuIGNvbHVtbnMubWFwKChjb2wpID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgX190eXBlbmFtZSxcbiAgICAgICAgX2lkLFxuICAgICAgICBjb2x1bW5fZHJvcGRvd25fdmFsdWUsXG4gICAgICAgIGZpbHRlclZhbHVlLFxuICAgICAgICBleHBhbmRlZEZpbHRlcixcbiAgICAgICAgY2VsbFJlbmRlcmVyLFxuICAgICAgICBmaWx0ZXJSZW5kZXJlcixcbiAgICAgICAgY2VsbENvbXBvbmVudFJlZixcbiAgICAgICAgcXVlcnksXG4gICAgICAgIGlzUm93R3JvdXBlZCxcbiAgICAgICAgLi4ucmVzdFxuICAgICAgfSA9IGNvbDtcblxuICAgICAgLy8gQ2xlYW4gZHJvcGRvd24gdmFsdWVzIChfX3R5cGVuYW1lIHJlbW92ZWQpXG4gICAgICBjb25zdCBjbGVhbmVkRHJvcGRvd24gPSBBcnJheS5pc0FycmF5KGNvbHVtbl9kcm9wZG93bl92YWx1ZSlcbiAgICAgICAgPyBjb2x1bW5fZHJvcGRvd25fdmFsdWUubWFwKCh7IF9fdHlwZW5hbWUsIC4uLmRSZXN0IH0pID0+IGRSZXN0KVxuICAgICAgICA6IGNvbHVtbl9kcm9wZG93bl92YWx1ZVxuICAgICAgICAgID8gKCh7IF9fdHlwZW5hbWUsIC4uLmRSZXN0IH0pID0+IGRSZXN0KShjb2x1bW5fZHJvcGRvd25fdmFsdWUpXG4gICAgICAgICAgOiBudWxsO1xuXG4gICAgICAvLyBDbGVhbiBxdWVyeSAoX190eXBlbmFtZSByZW1vdmVkKVxuICAgICAgY29uc3QgY2xlYW5lZFF1ZXJ5ID0gQXJyYXkuaXNBcnJheShxdWVyeSlcbiAgICAgICAgPyBxdWVyeS5tYXAoKHsgX190eXBlbmFtZSwgLi4ucVJlc3QgfSkgPT4gcVJlc3QpXG4gICAgICAgIDogcXVlcnlcbiAgICAgICAgICA/ICgoeyBfX3R5cGVuYW1lLCBfaWRzLCAuLi5xUmVzdCB9KSA9PiBxUmVzdCkocXVlcnkpXG4gICAgICAgICAgOiBudWxsO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5yZXN0LFxuICAgICAgICBjb2x1bW5fZHJvcGRvd25fdmFsdWU6IGNsZWFuZWREcm9wZG93bixcbiAgICAgICAgcXVlcnk6IGNsZWFuZWRRdWVyeSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBvblJlc2l6ZUNvbHVtbihldmVudDogTW91c2VFdmVudCwgY29sOiBhbnkpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgY29uc3Qgc3RhcnRYID0gZXZlbnQuY2xpZW50WDtcblxuICAgIGNvbnN0IHRhcmdldEVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgIGBbZmllbGQ9XCIke2NvbC5maWVsZH1cIl1gXG4gICAgKSBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCBpbml0aWFsV2lkdGggPSB0YXJnZXRFbD8ub2Zmc2V0V2lkdGggfHwgMTUwO1xuXG4gICAgY29uc3QgbWF0Y2hpbmdFbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZmllbGQ9XCIke2NvbC5maWVsZH1cIl1gKTtcblxuICAgIC8vIPCfkYkgQWRkIGhpZ2hsaWdodCB3aGlsZSByZXNpemluZ1xuICAgIGlmIChjb2w/LnBpbm5lZCA9PSAncmlnaHQnKSB7XG4gICAgICBtYXRjaGluZ0Vscy5mb3JFYWNoKChlbDogRWxlbWVudCkgPT4ge1xuICAgICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5hZGQoJ3Jlc2l6aW5nLWhpZ2hsaWdodC1yaWdodCcpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hdGNoaW5nRWxzLmZvckVhY2goKGVsOiBFbGVtZW50KSA9PiB7XG4gICAgICAgIChlbCBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0LmFkZCgncmVzaXppbmctaGlnaGxpZ2h0Jyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBvbk1vdXNlTW92ZSA9IChtb3ZlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGxldCBkZWx0YVggPSBtb3ZlRXZlbnQuY2xpZW50WCAtIHN0YXJ0WDtcblxuICAgICAgLy8g8J+RiSBSZXZlcnNlIGlmIHRoZSBjb2x1bW4gaXMgcGlubmVkIHRvIHRoZSByaWdodFxuICAgICAgaWYgKGNvbC5waW5uZWQgPT09ICdyaWdodCcpIHtcbiAgICAgICAgZGVsdGFYID0gLWRlbHRhWDtcbiAgICAgIH1cblxuICAgICAgbGV0IG5ld1dpZHRoID0gaW5pdGlhbFdpZHRoICsgZGVsdGFYO1xuICAgICAgaWYgKG5ld1dpZHRoIDwgODApIHJldHVybjtcblxuICAgICAgbWF0Y2hpbmdFbHMuZm9yRWFjaCgoZWw6IEVsZW1lbnQpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGVsIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBlbGVtZW50LnN0eWxlLm1pbldpZHRoID0gYCR7bmV3V2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7bmV3V2lkdGh9cHhgO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMudXBkYXRlQ29sdW1uV2lkdGhJblNvdXJjZUJ5RmllbGQoY29sLmZpZWxkLCBuZXdXaWR0aCk7XG4gICAgICBjb2wud2lkdGggPSBuZXdXaWR0aDtcbiAgICAgIHRoaXMuaGFzU2Nyb2xsID0gdGhpcy5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uTW91c2VVcCA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnRhYmxlRmlsdGVyVmlld0lkKSB7XG4gICAgICAgIHRoaXMuc2F2ZVByZXNldCgnbW91c2VVcCcpO1xuICAgICAgfVxuICAgICAgdGhpcy5yZWZyZXNoSGVhZGVycygpO1xuICAgICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICAgIGZpbHRlcnM6IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpLFxuICAgICAgICBub19vZl9yZWNvcmRzOiB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZVNpemUsXG4gICAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgICAgfTtcbiAgICAgIHRoaXMuY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZy5lbWl0KHRoaXMuY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKTtcblxuICAgICAgbWF0Y2hpbmdFbHMuZm9yRWFjaCgoZWw6IEVsZW1lbnQpID0+IHtcbiAgICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3QucmVtb3ZlKCdyZXNpemluZy1oaWdobGlnaHQnKTtcbiAgICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3QucmVtb3ZlKCdyZXNpemluZy1oaWdobGlnaHQtcmlnaHQnKTtcbiAgICAgIH0pO1xuXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xuICAgIH07XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcbiAgfVxuXG5cblxuICBvblJlc2l6ZUdyb3VwQm94KGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IHN0YXJ0WCA9IGV2ZW50LmNsaWVudFg7XG5cbiAgICBjb25zdCB0YXJnZXRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdncm91cEJveEhlYWRlckRpdicpO1xuICAgIGNvbnN0IGluaXRpYWxXaWR0aCA9IHRhcmdldEVsPy5vZmZzZXRXaWR0aCB8fCAxNTA7XG5cbiAgICBjb25zdCBvbk1vdXNlTW92ZSA9IChtb3ZlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGRlbHRhWCA9IG1vdmVFdmVudC5jbGllbnRYIC0gc3RhcnRYO1xuXG4gICAgICBsZXQgbmV3V2lkdGggPSBpbml0aWFsV2lkdGggKyBkZWx0YVg7XG4gICAgICBpZiAobmV3V2lkdGggPCAxMDApIG5ld1dpZHRoID0gMTAwO1xuXG4gICAgICBpZiAodGFyZ2V0RWwpIHtcbiAgICAgICAgdGFyZ2V0RWwuc3R5bGUud2lkdGggPSBgJHtuZXdXaWR0aH1weGA7XG4gICAgICAgIHRhcmdldEVsLnN0eWxlLm1pbldpZHRoID0gYCR7bmV3V2lkdGh9cHhgO1xuICAgICAgICB0aGlzLmdyb3VwQm94UGFkZGluZyA9IG5ld1dpZHRoO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvbk1vdXNlVXAgPSAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xuICAgIH07XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcbiAgfVxuXG4gIG9uUGFzdGVJbkZpbHRlclJvd1NlYXJjaChldmVudDogQ2xpcGJvYXJkRXZlbnQsIGNvbDogYW55KSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm9uRmlsdGVyQ2hhbmdlKGNvbCk7XG4gICAgICB0aGlzLmFwcGx5RHJvcGRvd25GaWx0ZXIoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uRmlsdGVyQ2hhbmdlKGNvbDogYW55KTogdm9pZCB7XG4gICAgY29uc3QgZmlsdGVyVmFsdWUgPSBjb2wuZmlsdGVyVmFsdWU/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbkZvckZpbHRlciA9IGNvbDtcbiAgICBpZiAoIWNvbD8ucXVlcnkpIHtcbiAgICAgIGNvbC5xdWVyeSA9IHtcbiAgICAgICAgZmlyc3RfY29uZGl0aW9uOiBjb2wudHlwZSA9PSAnZGF0ZScgPyAnZXF1YWwnIDogJ2NvbnRhaW4nLFxuICAgICAgICBmaXJzdF92YWx1ZTogbnVsbCxcbiAgICAgICAgc2Vjb25kX2NvbmRpdGlvbjogbnVsbCxcbiAgICAgICAgc2Vjb25kX3ZhbHVlOiBudWxsLFxuICAgICAgICBjb25kaXRpb246IG51bGxcbiAgICAgIH1cbiAgICB9XG4gICAgY29sLnF1ZXJ5LmZpcnN0X3ZhbHVlID0gZmlsdGVyVmFsdWU7XG4gICAgdGhpcy5maXJzdFZhbHVlID0gZmlsdGVyVmFsdWU7XG4gIH1cblxuICAvLyBHZXQgQm9keSBIZWlnaHRcbiAgZ2V0IGJvZHlXcmFwcGVySGVpZ2h0KCk6IHN0cmluZyB7XG4gICAgY29uc3Qgcm93cyA9IHRoaXMuc2hvd0NvbHVtbnNHcm91cGluZyAmJiB0aGlzLnNob3dGaWx0ZXJSb3cgPyAzIDogKHRoaXMuc2hvd0NvbHVtbnNHcm91cGluZyB8fCB0aGlzLnNob3dGaWx0ZXJSb3cgPyAyIDogMSk7XG4gICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5oZWFkZXJSb3dIZWlnaHQgKiByb3dzICsgKHRoaXMuaGFzU2Nyb2xsID8gMTcgOiAwKTtcbiAgICByZXR1cm4gYGNhbGMoMTAwJSAtICR7b2Zmc2V0fXB4KWA7XG4gIH1cblxuICAvLyBSb3cgSG92ZXIgTG9naWMgSGVyZVxuICBob3ZlcmVkUm93SWQ6IHN0cmluZyB8IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBvblJvd0hvdmVyKHJvdzogYW55KTogdm9pZCB7XG4gICAgdGhpcy5ob3ZlcmVkUm93SWQgPSByb3cuX2lkIHx8IHJvdy5pZDtcbiAgfVxuXG4gIG9uUm93TGVhdmUoKTogdm9pZCB7XG4gICAgdGhpcy5ob3ZlcmVkUm93SWQgPSBudWxsO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuICBvbkRvY3VtZW50Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgdGhpcy5pc1Zpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLm9wZW5JbmRleCA9IG51bGw7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuaGFzUGFyZW50V2l0aENsYXNzKHRhcmdldCwgW1xuICAgICAgICAndGhyZWUtZG90cycsXG4gICAgICAgICdmaWx0ZXItaWNvbi13cmFwcGVyJyxcbiAgICAgICAgJ2NvbHVtbi1tZW51JyxcbiAgICAgICAgJ2ZpbHRlci1tZW51JyxcbiAgICAgIF0pXG4gICAgKSB7XG4gICAgICB0aGlzLmFjdGl2ZUNvbCA9IG51bGw7XG4gICAgICB0aGlzLmFjdGl2ZUZpbHRlckNlbGwgPSBudWxsO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIHRoaXMuc2hvd0FjdGlvbnNEcm9wRG93biA9IGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBpbnNpZGVUb3BGaWx0ZXJSb3cgPSB0YXJnZXQuY2xvc2VzdCgnLmZpbHRlci10YWdzJykgfHwgdGFyZ2V0LmNsb3Nlc3QoJy5hZGQtZmlsdGVyLWJ1dHRvbi1tZW51JykgfHxcbiAgICAgIHRhcmdldC5jbG9zZXN0KCcudGFibGUtcmlnaHQtdG9wLWFjdGlvbnMnKSB8fCB0YXJnZXQuY2xvc2VzdCgnLnRhYmxlLWxheW91dCcpIHx8IHRhcmdldC5jbG9zZXN0KCcuZmlsdGVyLXJvdy1maWx0ZXItd3JhcHBlcicpO1xuICAgIGNvbnN0IGlzQ2xpY2tlZEluc2lkZVRocmVlRG90c0ZpbHRlciA9IHRhcmdldC5jbG9zZXN0KCcudGhyZWUtZG90cy1maWx0ZXInKSB8fCB0YXJnZXQuY2xvc2VzdCgnLmZpbHRlci1tZW51LWNvbnRhaW5lcicpO1xuICAgIGlmICghaXNDbGlja2VkSW5zaWRlVGhyZWVEb3RzRmlsdGVyKSB7XG4gICAgICB0aGlzLmNsb3NlVGhyZWVEb3RzTWVudUZpbHRlcigpO1xuICAgIH1cbiAgICBpZiAoIWluc2lkZVRvcEZpbHRlclJvdykge1xuICAgICAgdGhpcy5jbG9zZUZpbHRlckRyb3Bkb3ducyhldmVudCk7XG4gICAgfVxuICAgIGlmICghdGFyZ2V0LmNsb3Nlc3QoJy5zZXQtZGVmYXVsdC1wcmVzZXQnKSkge1xuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNldC1kZWZhdWx0LXByZXNldCcpPy5jbGFzc0xpc3Q/LnJlbW92ZSgnc2hvdycpO1xuICAgIH1cblxuICAgIGlmICghdGFyZ2V0LmNsb3Nlc3QoJy5mdWxsLXRleHQtYm94JykgJiYgIXRhcmdldC5jbG9zZXN0KCcuZGF0YS1ncmlkLWhlYWRlci13cmFwcGVyJykpIHtcbiAgICAgIHRoaXMuY29sbGFwc2VBbGxFeHBhbmRlZENlbGxzKCk7XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXQuY2xvc2VzdCgnLmRhdGEtZ3JpZC10YWJsZS13cmFwcGVyJykpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRLZXlzLmNsZWFyKCk7XG4gICAgICB0aGlzLmFjdGl2ZUNlbGwgPSAnJztcbiAgICB9XG5cbiAgICAgaWYgKCF0YXJnZXQuY2xvc2VzdCgnLmRhdGEtZ3JpZC1ib2R5JykpIHtcbiAgICAgIHRoaXMuZWRpdGluZ0tleSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cblxuICBjbG9zZVRocmVlRG90c01lbnVGaWx0ZXIoKSB7XG4gICAgdGhpcy5pc1RocmVlRG90c0ZpbHRlck9wZW4gPSBmYWxzZTtcbiAgfVxuXG5cbiAgY2xvc2VGaWx0ZXJEcm9wZG93bnMoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLmlzRmlsdGVyT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuaXNBY3RpdmVGaWx0ZXJPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5hY3RpdmVUb3BCdXR0b24gPSAnJztcbiAgICB0aGlzLmFjdGl2ZUZpbHRlckNlbGwgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNQYXJlbnRXaXRoQ2xhc3MoXG4gICAgZWxlbWVudDogSFRNTEVsZW1lbnQsXG4gICAgY2xhc3NMaXN0OiBzdHJpbmdbXVxuICApOiBib29sZWFuIHtcbiAgICBsZXQgZWw6IEhUTUxFbGVtZW50IHwgbnVsbCA9IGVsZW1lbnQ7XG5cbiAgICB3aGlsZSAoZWwgIT09IG51bGwpIHtcbiAgICAgIGlmIChcbiAgICAgICAgZWwuY2xhc3NMaXN0ICYmXG4gICAgICAgIGNsYXNzTGlzdC5zb21lKChjbGFzc05hbWUpID0+IGVsIS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGVsID0gZWwucGFyZW50RWxlbWVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpc01lbnVlSGlkZGVuID0gZmFsc2U7XG4gIG9wZW5UaHJlZURvdHNNZW51KGV2ZW50OiBNb3VzZUV2ZW50LCBjaGlsZDogYW55LCBrZWVwT3JpZ2luYWxQb3NpdGlvbiA9IGZhbHNlKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmlzTWVudWVIaWRkZW4gPSB0cnVlO1xuICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdGhpcy5kYXRhR3JpZENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0V2lkdGg7XG4gICAgdGhpcy5hY3RpdmVDb2wgPSBjaGlsZDtcbiAgICB0aGlzLmFjdGl2ZUZpbHRlckNlbGwgPSBudWxsO1xuICAgIGNvbnN0IHggPSBldmVudC5jbGllbnRYO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jb2x1bW4tbWVudScpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKHggPiAoY29udGFpbmVyV2lkdGggLyAyKSkge1xuICAgICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke3ggLSAyNDB9cHhgO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVsZW1lbnQhLnN0eWxlLmxlZnQgPSBgJHt4fXB4YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5pc01lbnVlSGlkZGVuID0gZmFsc2U7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMCk7XG4gIH1cbiAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIENvbHVtbiBUaHJlZSBEb3RzIEFjdGlvbnNcbiAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgc29ydEFzYyhjb2w6IGFueSkge1xuICAgIGlmICghY29sLmlzX3NvcnRhYmxlKSByZXR1cm47XG4gICAgY29sIS5vcmRlcl9ieSA9ICdhc2MnO1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgb3JkZXI6ICdhc2MnLFxuICAgICAgY29sdW1uOiBjb2xcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuc29ydGluZ09yZGVyT3B0aW9ucy5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHNvcnREZXNjKGNvbDogYW55KSB7XG4gICAgaWYgKCFjb2wuaXNfc29ydGFibGUpIHJldHVybjtcbiAgICBjb2whLm9yZGVyX2J5ID0gJ2Rlc2MnO1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgb3JkZXI6ICdkZXNjJyxcbiAgICAgIGNvbHVtbjogY29sXG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLnNvcnRpbmdPcmRlck9wdGlvbnMuZW1pdChldmVudCk7XG4gIH1cblxuICByZXNldFNvcnQoY29sOiBhbnkpIHtcbiAgICB0aGlzLnNvcnRpbmdDb25maWcgPSB7IGZpZWxkOiAnJywgb3JkZXJfYnk6ICcnIH07XG4gICAgY29uc3QgZXZlbnQgPSB7IGZpZWxkOiBudWxsLCBvcmRlcl9ieTogbnVsbCB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuc29ydGluZ09yZGVyT3B0aW9ucy5lbWl0KGV2ZW50KTtcbiAgfVxuXG5cbiAgYXN5bmMgdXBkYXRlQ29sdW1uUGluSW5Tb3VyY2VCeUZpZWxkKFxuICAgIGNvbHVtbjogYW55LFxuICAgIHBpbm5lZDogJ2xlZnQnIHwgJ3JpZ2h0JyB8IG51bGwsXG4gICAgaXNOZXN0ZWRUYWJsZTogYW55ID0gZmFsc2UsXG4gICAgY29sdW1ucz86IGFueVxuICApIHtcbiAgICBkZWJ1Z2dlclxuICAgIGlmIChpc05lc3RlZFRhYmxlKSB7XG4gICAgICB0aGlzLnBpblVucGluQ29sdW0oY29sdW1uLCBwaW5uZWQsIGNvbHVtbnMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB1cGRhdGUgPSAoY29sdW1uczogYW55W10pID0+IHtcbiAgICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHVtbnMpIHtcbiAgICAgICAgaWYgKGNvbC5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgdXBkYXRlKGNvbC5jaGlsZHJlbik7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sLmZpZWxkID09PSBjb2x1bW4uZmllbGQpIHtcbiAgICAgICAgICBjb2wucGlubmVkID0gcGlubmVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmFjdGl2ZUNvbCA9IG51bGw7XG4gICAgdXBkYXRlKHRoaXMuY29sdW1ucyk7XG4gICAgdGhpcy51cGRhdGVDb2x1bW5XaWR0aHNBbmRHcm91cHMoKTtcbiAgICB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgIG5vX29mX3JlY29yZHM6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWaXNpYmxlTGVhZkNvbHVtbnMgPSAoY29sdW1uczogYW55W10pOiBhbnlbXSA9PiB7XG4gICAgY29uc3QgcmVzdWx0OiBhbnlbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcbiAgICAgIGlmIChjb2x1bW4uY2hpbGRyZW4gJiYgQXJyYXkuaXNBcnJheShjb2x1bW4uY2hpbGRyZW4pKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKC4uLnRoaXMuZ2V0VmlzaWJsZUxlYWZDb2x1bW5zKGNvbHVtbi5jaGlsZHJlbikpO1xuICAgICAgfSBlbHNlIGlmIChjb2x1bW4uaXNfdmlzaWJsZSkge1xuICAgICAgICByZXN1bHQucHVzaChjb2x1bW4pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIGF1dG9zaXplQ29sdW1uKGNvbHM6IGFueSB8IGFueVtdKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVDb2wgPSBudWxsO1xuXG4gICAgLy8gTm9ybWFsaXplIGlucHV0IHRvIGFuIGFycmF5XG4gICAgY29uc3QgY29sdW1uc1RvUmVzaXplID0gQXJyYXkuaXNBcnJheShjb2xzKSA/IGNvbHMgOiBbY29sc107XG5cbiAgICAvLyBIZWxwZXI6IEZsYXR0ZW4gYWxsIHZpc2libGUgbGVhZiBjb2x1bW5zXG4gICAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSB0aGlzLmdldFZpc2libGVMZWFmQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAgIGNvbnN0IHZpc2libGVDb3VudCA9IHZpc2libGVDb2x1bW5zLmxlbmd0aDtcblxuICAgIGlmICh2aXNpYmxlQ291bnQgPT09IDApIHJldHVybjtcblxuICAgIGxldCBjb250YWluZXJXaWR0aCA9XG4gICAgICB0aGlzLmRhdGFHcmlkQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5vZmZzZXRXaWR0aCA/PyAwO1xuICAgIGlmICh0aGlzLnNob3dTZXJpYWxOdW1iZXIpIGNvbnRhaW5lcldpZHRoIC09IDU1O1xuICAgIGlmICh0aGlzLnNob3dTaWRlTWVudSkgY29udGFpbmVyV2lkdGggLT0gMjk7XG4gICAgaWYgKHRoaXMuZ3JpZFR5cGUgPT0gJ0Fzc2V0cycgfHwgdGhpcy5ncmlkVHlwZSA9PSAnVGFza3MnKSBjb250YWluZXJXaWR0aCAtPSAzMDtcbiAgICBpZih0aGlzLnNob3dDaGVja2JveGVzKSBjb250YWluZXJXaWR0aCAtPSA1NTtcbiAgICBjb250YWluZXJXaWR0aCAtPSA1O1xuICAgIGNvbnN0IGVxdWFsV2lkdGggPSBNYXRoLmZsb29yKGNvbnRhaW5lcldpZHRoIC8gdmlzaWJsZUNvdW50KTtcblxuICAgIC8vIFJlc2l6ZSBlYWNoIHBhc3NlZCBjb2x1bW5cbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zVG9SZXNpemUpIHtcbiAgICAgIGlmIChjb2wgJiYgY29sLmZpZWxkKSB7XG4gICAgICAgIGNvbC53aWR0aCA9IGVxdWFsV2lkdGg7XG4gICAgICAgIHRoaXMudXBkYXRlQ29sdW1uV2lkdGhJblNvdXJjZUJ5RmllbGQoY29sLmZpZWxkLCBlcXVhbFdpZHRoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoc0FuZEdyb3VwcygpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgICAgZmlsdGVyczogdGhpcy5jbGVhbkZpbHRlcmRDb2x1bW5zKCksXG4gICAgICAgIG5vX29mX3JlY29yZHM6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgICB9O1xuICAgICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICAgIH0sIDEwMDApO1xuICAgIHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gIH1cblxuICBnZXRHcm91cFdpZHRoKGdyb3VwOiBhbnkpOiBudW1iZXIge1xuICAgIHJldHVybiAoXG4gICAgICBncm91cD8uY2hpbGRyZW5cbiAgICAgICAgPy5maWx0ZXIoKGNvbDogYW55KSA9PiBjb2w/LmlzX3Zpc2libGUpXG4gICAgICAgID8ucmVkdWNlKChhY2M6IG51bWJlciwgY29sOiBhbnkpID0+IGFjYyArIChjb2w/LndpZHRoIHx8IDApLCAwKSB8fCAwXG4gICAgKTtcbiAgfVxuXG4gIGF1dG9zaXplQWxsQ29sdW1ucygpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZUNvbCA9IG51bGw7XG5cbiAgICBjb25zdCBnZXRWaXNpYmxlTGVhZkNvbHVtbnMgPSAoY29sdW1uczogYW55W10pOiBhbnlbXSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQ6IGFueVtdID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcbiAgICAgICAgaWYgKGNvbHVtbi5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KGNvbHVtbi5jaGlsZHJlbikpIHtcbiAgICAgICAgICByZXN1bHQucHVzaCguLi5nZXRWaXNpYmxlTGVhZkNvbHVtbnMoY29sdW1uLmNoaWxkcmVuKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmlzX3Zpc2libGUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goY29sdW1uKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IGdldFZpc2libGVMZWFmQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAgIGNvbnN0IHZpc2libGVDb3VudCA9IHZpc2libGVDb2x1bW5zLmxlbmd0aDtcblxuICAgIGlmICh2aXNpYmxlQ291bnQgPT09IDApIHJldHVybjtcblxuICAgIGxldCBjb250YWluZXJXaWR0aCA9XG4gICAgICB0aGlzLmRhdGFHcmlkQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5vZmZzZXRXaWR0aCA/PyAwO1xuICAgIGlmICh0aGlzLnNob3dTZXJpYWxOdW1iZXIpIGNvbnRhaW5lcldpZHRoIC09IDU1O1xuICAgIGlmICh0aGlzLnNob3dTaWRlTWVudSkgY29udGFpbmVyV2lkdGggLT0gMjk7XG4gICAgaWYgKHRoaXMuZ3JpZFR5cGUgPT0gJ0Fzc2V0cycgfHwgdGhpcy5ncmlkVHlwZSA9PSAnVGFza3MnKSBjb250YWluZXJXaWR0aCAtPSAzMDtcbiAgICAgaWYodGhpcy5zaG93Q2hlY2tib3hlcykgY29udGFpbmVyV2lkdGggLT0gNTU7XG4gICAgIGNvbnRhaW5lcldpZHRoIC09IDU7XG4gICAgY29uc3QgZXF1YWxXaWR0aCA9IE1hdGgubWF4KE1hdGguZmxvb3IoY29udGFpbmVyV2lkdGggLyB2aXNpYmxlQ291bnQpLCAxNTApO1xuXG4gICAgLy8gVXBkYXRlIHdpZHRocyBmb3IgYWxsIHZpc2libGUgY29sdW1uc1xuICAgIHZpc2libGVDb2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgY29sLndpZHRoID0gZXF1YWxXaWR0aDtcbiAgICAgIHRoaXMudXBkYXRlQ29sdW1uV2lkdGhJblNvdXJjZUJ5RmllbGQoY29sLmZpZWxkLCBlcXVhbFdpZHRoKTtcbiAgICB9KTtcblxuICAgIHRoaXMucmVmcmVzaEhlYWRlcnMoKTtcbiAgICB0aGlzLmhhc1Njcm9sbCA9IHRoaXMuaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHNlbmREYXRhID0ge1xuICAgICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgICAgbm9fb2ZfcmVjb3JkczogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2VTaXplLFxuICAgICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICAgIH07XG4gICAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gICAgfSwgMTAwMCk7XG4gIH1cblxuICBwcml2YXRlIG1hcmtDb2x1bW5Bc0dyb3VwZWQoY29sdW1uczogYW55W10sIGZpZWxkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zKSB7XG4gICAgICBpZiAoY29sLmZpZWxkID09PSBmaWVsZCkge1xuICAgICAgICBjb2wuaXNSb3dHcm91cGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGNvbC5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMubWFya0NvbHVtbkFzR3JvdXBlZChjb2wuY2hpbGRyZW4sIGZpZWxkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBncm91cEJ5KGNvbDogYW55KSB7XG4gICAgdGhpcy5tYWluU2Nyb2xsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICB0aGlzLnRyYW5zbGF0ZVkgPSAwO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLmFjdGl2ZUNvbCA9IG51bGw7XG4gICAgaWYgKCFjb2wpIHJldHVybjtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICBpZiAoY29sPy5pc19ncm91cGFibGUpIHtcbiAgICAgIHRoaXMuZ3JvdXBlZENvbHVtbnMucHVzaChjb2wpO1xuICAgICAgdGhpcy5tYXJrQ29sdW1uQXNHcm91cGVkKHRoaXMuY29sdW1ucywgY29sLmZpZWxkKTtcbiAgICB9XG4gICAgY29uc3QgZmllbGRzID0gdGhpcy5ncm91cGVkQ29sdW1ucy5tYXAoKGl0ZW0pID0+IGl0ZW0uZmllbGQpO1xuICAgIHRoaXMuZGF0YVNldCA9IGF3YWl0IHRoaXMuZ3JvdXBEYXRhQXN5bmModGhpcy5vcmlnaW5hbERhdGFTZXQsIGZpZWxkcyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZUZsYXR0ZW5lZERhdGEoKTtcbiAgICAgIHRoaXMudXBkYXRlQ29sdW1uV2lkdGhzQW5kR3JvdXBzKCk7XG4gICAgICB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuICAgICAgdGhpcy51cGRhdGVWaXNpYmxlUm93cygwKTtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDEwMCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZ3JvdXBCb3hQYWRkaW5nID0gdGhpcy5jb2x1bW5zR3JvdXBlZEJveD8ubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKVxuICAgIH0sIDEwKTtcblxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGFzeW5jIGdyb3VwRGF0YUFzeW5jKGRhdGE6IGFueVtdLCBncm91cEZpZWxkczogc3RyaW5nW10pOiBQcm9taXNlPGFueVtdPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZ3JvdXBEYXRhKGRhdGEsIGdyb3VwRmllbGRzKTtcbiAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgfSwgMCk7XG4gICAgfSk7XG4gIH1cblxuXG5cblxuICBjaG9vc2VDb2x1bW5zKCkge1xuICAgIHRoaXMuYWN0aXZlQ29sID0gbnVsbDtcbiAgICB0aGlzLnNob3dDb2x1bW5QYW5lbCA9IHRydWU7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcmVzZXRDb2x1bW5zKCkge1xuICAgIHRoaXMuYWN0aXZlQ29sID0gbnVsbDtcblxuICAgIC8vIHRoaXMuY29sdW1ucyA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLm9yaWdpbmFsQ29sdW1ucyk7XG4gICAgLy8gRGVlcCBjb3B5IG5lc3RlZCBvYmplY3RzIGJ1dCBrZWVwIGNsYXNzIHJlZnMgc2FmZVxuICAgIHRoaXMub3JpZ2luYWxDb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChjb2wgPT4gKHtcbiAgICAgIC4uLmNvbCxcbiAgICAgIC8vIERlZXAgY29weSBuZXN0ZWQgb2JqZWN0cyBidXQga2VlcCBjbGFzcyByZWZzIHNhZmVcbiAgICAgIHF1ZXJ5OiBjb2wucXVlcnkgPyB7IC4uLmNvbC5xdWVyeSB9IDogbnVsbCxcbiAgICAgIGNvbHVtbl9kcm9wZG93bl92YWx1ZTogY29sLmNvbHVtbl9kcm9wZG93bl92YWx1ZVxuICAgICAgICA/IFsuLi5jb2wuY29sdW1uX2Ryb3Bkb3duX3ZhbHVlXVxuICAgICAgICA6IFtdLFxuICAgIH0pKTtcblxuICAgIHRoaXMuU2V0Q29sdW1uc0RlZmF1bHRXaWR0aCgpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVDb2x1bW5XaWR0aHNBbmRHcm91cHMoKTtcbiAgICAgIHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIGNsZWFyRmlsdGVyKGNvbDogYW55KSB7XG4gICAgY29sLmZpcnN0VmFsdWUgPSAnJztcbiAgICBjb2wuc2Vjb25kVmFsdWUgPSAnJztcbiAgICBjb2wuZmlyc3RDb25kaXRpb24gPSAnY29udGFpbic7XG4gICAgY29sLnNlY29uZENvbmRpdGlvbiA9IG51bGw7XG4gICAgY29sLmxvZ2ljID0gJ0FORCc7XG4gICAgY29sLnNlbGVjdEFsbCA9IGZhbHNlO1xuICAgIGNvbC5zZWxlY3RlZE9wdGlvbnMgPSB7fTtcbiAgICBjb2wuc2VhcmNoVmFsdWUgPSAnJztcblxuICB9XG5cblxuICBhcHBseUZpbHRlcihjb2w6IGFueSkge1xuICAgIHRoaXMuZmlsdGVyQ29sdW1uc0xpc3QucHVzaChjb2wpO1xuICB9XG5cbiAgLy8gUm93cyBTZWxlY3Rpb24gTG9naWMgR29lcyBIZXJlXG5cbiAgc2VsZWN0ZWRSb3dzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcblxuICAvKipcbiAgICogR2V0IG5vcm1hbGl6ZWQgSUQgZnJvbSByb3cuXG4gICAqL1xuICBwcml2YXRlIGdldFJvd0lkKHJvdzogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gcm93LmlkID8/IHJvdy5faWQ7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlIGEgc2luZ2xlIHJvdyBzZWxlY3Rpb24uXG4gICAqL1xuICB0b2dnbGVSb3dTZWxlY3Rpb24ocm93OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuZ2V0Um93SWQocm93KTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93cy5oYXMoaWQpKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy5kZWxldGUoaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy5hZGQoaWQpO1xuICAgIH1cblxuICAgIGNvbnN0IGlkcyA9IEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJvd3MpO1xuXG4gICAgdGhpcy5zYXZlU2VsZWN0aW9uKGlkcywgdGhpcy50YWJsZVR5cGUpO1xuXG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIGxpc3RpbmdUeXBlOiB0aGlzLmxpc3RpbmdUeXBlLFxuICAgICAgICBvYmo6IGlkc1xuICAgICAgfSxcbiAgICAgIGV2ZW50VHlwZTogXCJvblNlbGVjdFJvd1wiLFxuICAgIH07XG4gICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudCk7XG4gIH1cblxuXG5cbiAgdG9nZ2xlU2VsZWN0QWxsKGRhdGE6IGFueVtdKTogdm9pZCB7XG4gICAgY29uc3QgbGVhZlJvd3MgPSB0aGlzLmdldEFsbExlYWZSb3dzKGRhdGEpO1xuICAgIGNvbnN0IGFsbElkcyA9IGxlYWZSb3dzLm1hcChyID0+IHRoaXMuZ2V0Um93SWQocikpO1xuXG4gICAgY29uc3QgYWxsU2VsZWN0ZWQgPSBhbGxJZHMuZXZlcnkoaWQgPT4gdGhpcy5zZWxlY3RlZFJvd3MuaGFzKGlkKSk7XG5cbiAgICBpZiAoYWxsU2VsZWN0ZWQpIHtcbiAgICAgIGFsbElkcy5mb3JFYWNoKGlkID0+IHRoaXMuc2VsZWN0ZWRSb3dzLmRlbGV0ZShpZCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbGxJZHMuZm9yRWFjaChpZCA9PiB0aGlzLnNlbGVjdGVkUm93cy5hZGQoaWQpKTtcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGNvbnN0IGlkcyA9IEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJvd3MpO1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZGF0YToge1xuICAgICAgICBsaXN0aW5nVHlwZTogdGhpcy5saXN0aW5nVHlwZSxcbiAgICAgICAgb2JqOiBpZHNcbiAgICAgIH0sXG4gICAgICBldmVudFR5cGU6IFwib25TZWxlY3RSb3dcIixcbiAgICB9XG4gICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudCk7XG4gICAgdGhpcy5zYXZlU2VsZWN0aW9uKGlkcywgdGhpcy50YWJsZVR5cGUpO1xuICB9XG5cbiAgaXNSb3dTZWxlY3RlZChyb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUm93cy5oYXModGhpcy5nZXRSb3dJZChyb3cpKTtcbiAgfVxuXG4gIGlzQWxsU2VsZWN0ZWQoZGF0YTogYW55W10pOiBib29sZWFuIHtcbiAgICBjb25zdCBsZWFmUm93cyA9IHRoaXMuZ2V0QWxsTGVhZlJvd3MoZGF0YSk7XG4gICAgcmV0dXJuIGxlYWZSb3dzLmxlbmd0aCA+IDAgJiYgbGVhZlJvd3MuZXZlcnkociA9PiB0aGlzLnNlbGVjdGVkUm93cy5oYXModGhpcy5nZXRSb3dJZChyKSkpO1xuICB9XG5cblxuICBpc0luZGV0ZXJtaW5hdGVTdGF0ZShkYXRhOiBhbnlbXSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGxlYWZSb3dzID0gdGhpcy5nZXRBbGxMZWFmUm93cyhkYXRhKTtcbiAgICBjb25zdCBzZWxlY3RlZENvdW50ID0gbGVhZlJvd3MuZmlsdGVyKHIgPT4gdGhpcy5zZWxlY3RlZFJvd3MuaGFzKHRoaXMuZ2V0Um93SWQocikpKS5sZW5ndGg7XG5cbiAgICByZXR1cm4gc2VsZWN0ZWRDb3VudCA+IDAgJiYgc2VsZWN0ZWRDb3VudCA8IGxlYWZSb3dzLmxlbmd0aDtcbiAgfVxuXG5cbiAgZ2V0QWxsTGVhZlJvd3MoZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgY29uc3QgbGVhZjogYW55W10gPSBbXTtcblxuICAgIGNvbnN0IHRyYXZlcnNlID0gKG5vZGU6IGFueSkgPT4ge1xuICAgICAgaWYgKCFub2RlKSByZXR1cm47XG5cbiAgICAgIGlmIChub2RlLmlzR3JvdXApIHtcbiAgICAgICAgbm9kZS5jaGlsZHJlbj8uZm9yRWFjaCh0cmF2ZXJzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZWFmLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGRhdGEuZm9yRWFjaCh0cmF2ZXJzZSk7XG4gICAgcmV0dXJuIGxlYWY7XG4gIH1cblxuXG5cblxuICAvLyBTaWRlIE1lbnUgV29ya2luZyBHb2VzIEhlcmVcbiAgdG9nZ2xlU2lkZU1lbnUoY2xpY2tlZE9uOiAnY29scycgfCAnZmlsdHJzJykge1xuICAgIGlmICh0aGlzLmN1cnJlbnRPcGVuZWRTaWRlTWVudWUgPT0gY2xpY2tlZE9uKSB7XG4gICAgICB0aGlzLmN1cnJlbnRPcGVuZWRTaWRlTWVudWUgPSBjbGlja2VkT247XG4gICAgICB0aGlzLnNpZGVNZW51VmlzaWJsZSA9ICF0aGlzLnNpZGVNZW51VmlzaWJsZTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5zaWRlTWVudVZpc2libGUgJiZcbiAgICAgIGNsaWNrZWRPbiAhPSB0aGlzLmN1cnJlbnRPcGVuZWRTaWRlTWVudWVcbiAgICApIHtcbiAgICAgIHRoaXMuY3VycmVudE9wZW5lZFNpZGVNZW51ZSA9IGNsaWNrZWRPbjtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50T3BlbmVkU2lkZU1lbnVlID0gY2xpY2tlZE9uO1xuICAgICAgdGhpcy5zaWRlTWVudVZpc2libGUgPSAhdGhpcy5zaWRlTWVudVZpc2libGU7XG4gICAgfVxuICAgIHRoaXMuaGFzU2Nyb2xsID0gdGhpcy5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgdG9nZ2xlR3JvdXBWaXNpYmlsaXR5KGNvbDogYW55KSB7XG4gICAgY29uc3QgYWxsVmlzaWJsZSA9IGNvbC5jaGlsZHJlbi5ldmVyeSgoY2hpbGQ6IGFueSkgPT4gY2hpbGQuaXNfdmlzaWJsZSk7XG4gICAgY29sLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBhbnkpID0+IChjaGlsZC5pc192aXNpYmxlID0gIWFsbFZpc2libGUpKTtcbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgIG5vX29mX3JlY29yZHM6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVDb2x1bW5XaWR0aHNBbmRHcm91cHMoKTtcbiAgICAgIHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gICAgICB0aGlzLlNldENvbHVtbnNEZWZhdWx0V2lkdGgoKTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAxMCk7XG4gIH1cblxuICBpc0NvbHVtblZpc2libGUoY29sdW1uczogYW55KSB7XG4gICAgaWYgKGNvbHVtbnM/LmNoaWxkcmVuKSB7XG4gICAgICByZXR1cm4gY29sdW1ucy5jaGlsZHJlbi5ldmVyeSgoZWxlbWVudDogYW55KSA9PiBlbGVtZW50LmlzX3Zpc2libGUpO1xuICAgIH1cblxuICAgIHJldHVybiBjb2x1bW5zPy5pc192aXNpYmxlO1xuICB9XG5cbiAgLy8gYWxsQ29sdW1uc1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAvLyAgIGNvbnN0IGZsYXR0ZW4gPSB0aGlzLmZsYXR0ZW5Db2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gIC8vICAgcmV0dXJuIGZsYXR0ZW4uZXZlcnkoKGNvbCkgPT4gY29sLmlzX3Zpc2libGUpO1xuICAvLyB9XG5hbGxDb2x1bW5zU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gIGNvbnN0IGZsYXR0ZW4gPSB0aGlzLmZsYXR0ZW5Db2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gIGNvbnN0IG5vbkFsd2F5c1Zpc2libGUgPSBmbGF0dGVuLmZpbHRlcihjb2wgPT4gIWNvbC5pc19hbHdheXNfdmlzaWJsZSk7XG4gIFxuICAvLyBSZXR1cm4gdHJ1ZSBpZiBhbGwgbm9uLWFsd2F5cy12aXNpYmxlIGNvbHVtbnMgYXJlIHZpc2libGVcbiAgcmV0dXJuIG5vbkFsd2F5c1Zpc2libGUubGVuZ3RoID4gMCAmJiBub25BbHdheXNWaXNpYmxlLmV2ZXJ5KGNvbCA9PiBjb2wuaXNfdmlzaWJsZSk7XG59XG5cbiAgcHJpdmF0ZSBmaW5kQ29sdW1uQnlGaWVsZChmaWVsZDogc3RyaW5nLCBjb2xzOiBhbnlbXSk6IGFueSB8IG51bGwge1xuICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHMpIHtcbiAgICAgIGlmIChjb2wuZmllbGQgPT09IGZpZWxkKSB7XG4gICAgICAgIHJldHVybiBjb2w7XG4gICAgICB9XG4gICAgICBpZiAoY29sLmNoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkoY29sLmNoaWxkcmVuKSkge1xuICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMuZmluZENvbHVtbkJ5RmllbGQoZmllbGQsIGNvbC5jaGlsZHJlbik7XG4gICAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG5cblxuICBhc3luYyB0b2dnbGVDb2x1bW5WaXNpYmlsaXR5KGNvbHVtbjogYW55LCBpc1Zpc2libGU6IGJvb2xlYW4pIHtcbiAgICBpZiAoaXNWaXNpYmxlKSB7XG4gICAgICBpZiAodGhpcy52aXNpYmxlQ29sdW1ucygpPy5sZW5ndGggPD0gMiAmJiBjb2x1bW4uaXNfdmlzaWJsZSB8fCAoY29sdW1uPy5pc19hbHdheXNfdmlzaWJsZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjb2wgPSB0aGlzLmZpbmRDb2x1bW5CeUZpZWxkKGNvbHVtbi5maWVsZCwgdGhpcy5jb2x1bW5zKTtcbiAgICBpZiAoY29sKSB7XG4gICAgICBjb2wuaXNfdmlzaWJsZSA9IGlzVmlzaWJsZTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5yZWZyZXNoSGVhZGVycygpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgIG5vX29mX3JlY29yZHM6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICAgIGlmICh0aGlzLnRhYmxlRmlsdGVyVmlld0lkKSB7XG4gICAgICB0aGlzLnNhdmVQcmVzZXQoJ21vdXNlVXAnKTtcbiAgICB9XG4gIH1cblxuYXN5bmMgdG9nZ2xlQWxsQ29sdW1uc1Zpc2liaWxpdHkoKTogUHJvbWlzZTx2b2lkPiB7XG4gIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmbGF0dGVuID0gdGhpcy5mbGF0dGVuQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAgIGNvbnN0IHZpc2libGVDb2x1bW5zID0gZmxhdHRlbi5maWx0ZXIoY29sID0+IGNvbC5pc192aXNpYmxlKTtcbiAgICBcbiAgICAvLyBHZXQgY29sdW1ucyB0aGF0IGFyZSBub3QgYWx3YXlzIHZpc2libGVcbiAgICBjb25zdCBub25BbHdheXNWaXNpYmxlID0gZmxhdHRlbi5maWx0ZXIoY29sID0+ICFjb2wuaXNfYWx3YXlzX3Zpc2libGUpO1xuICAgIFxuICAgIC8vIENoZWNrIGlmIGFsbCBub24tYWx3YXlzLXZpc2libGUgY29sdW1ucyBhcmUgY3VycmVudGx5IHZpc2libGVcbiAgICBjb25zdCBhbGxOb25BbHdheXNWaXNpYmxlQXJlVmlzaWJsZSA9IG5vbkFsd2F5c1Zpc2libGUuZXZlcnkoY29sID0+IGNvbC5pc192aXNpYmxlKTtcblxuICAgIGlmIChhbGxOb25BbHdheXNWaXNpYmxlQXJlVmlzaWJsZSkge1xuICAgICAgLy8gSElERSBBTEwgKGJ1dCBrZWVwIG1pbmltdW0gMiB2aXNpYmxlKVxuICAgICAgLy8gRmlyc3QsIGhpZGUgYWxsIG5vbi1hbHdheXMtdmlzaWJsZSBjb2x1bW5zXG4gICAgICBub25BbHdheXNWaXNpYmxlLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgY29sLmlzX3Zpc2libGUgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBUaGVuLCBtYWtlIHN1cmUgYXQgbGVhc3QgMiBjb2x1bW5zIGFyZSB2aXNpYmxlIChpbmNsdWRpbmcgYWx3YXlzLXZpc2libGUgb25lcylcbiAgICAgIGNvbnN0IGFsd2F5c1Zpc2libGVDb3VudCA9IGZsYXR0ZW4uZmlsdGVyKGNvbCA9PiBjb2wuaXNfYWx3YXlzX3Zpc2libGUpLmxlbmd0aDtcbiAgICAgIGNvbnN0IGNvbHVtbnNOZWVkZWQgPSBNYXRoLm1heCgwLCAyIC0gYWx3YXlzVmlzaWJsZUNvdW50KTtcbiAgICAgIFxuICAgICAgaWYgKGNvbHVtbnNOZWVkZWQgPiAwKSB7XG4gICAgICAgIC8vIFNob3cgdGhlIGZpcnN0ICdjb2x1bW5zTmVlZGVkJyBub24tYWx3YXlzLXZpc2libGUgY29sdW1uc1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGgubWluKGNvbHVtbnNOZWVkZWQsIG5vbkFsd2F5c1Zpc2libGUubGVuZ3RoKTsgaSsrKSB7XG4gICAgICAgICAgbm9uQWx3YXlzVmlzaWJsZVtpXS5pc192aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTSE9XIEFMTCAtIG1ha2UgYWxsIGNvbHVtbnMgdmlzaWJsZVxuICAgICAgZmxhdHRlbi5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgIGNvbC5pc192aXNpYmxlID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMudXBkYXRlQ29sdW1uV2lkdGhzQW5kR3JvdXBzKCk7XG4gICAgYXdhaXQgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcbiAgICBcbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgIG5vX29mX3JlY29yZHM6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICAgIFxuICB9IGZpbmFsbHkge1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxufVxuXG4gIHByaXZhdGUgd2FpdChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xuICB9XG5cblxuXG4gIHZpc2libGVDb2x1bW5zKCkge1xuICAgIGNvbnN0IGZsYXR0ZW4gPSB0aGlzLmZsYXR0ZW5Db2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gICAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSBmbGF0dGVuLmZpbHRlcigoYzogYW55KSA9PiBjLmlzX3Zpc2libGUpO1xuICAgIHJldHVybiB2aXNpYmxlQ29sdW1ucztcbiAgfVxuXG4gIGZsYXR0ZW5Db2x1bW5zKGNvbHM6IGFueVtdKTogYW55W10ge1xuICAgIHJldHVybiBjb2xzLnJlZHVjZSgoYWNjOiBhbnlbXSwgY29sOiBhbnkpID0+IHtcbiAgICAgIGlmIChjb2w/LmNoaWxkcmVuICYmIGNvbC5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgLy8gcmVjdXJzaXZlbHkgZmxhdHRlbiBjaGlsZHJlblxuICAgICAgICByZXR1cm4gYWNjLmNvbmNhdCh0aGlzLmZsYXR0ZW5Db2x1bW5zKGNvbC5jaGlsZHJlbikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbGVhZiBjb2x1bW5cbiAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQoY29sKTtcbiAgICAgIH1cbiAgICB9LCBbXSk7XG4gIH1cblxuXG4gIGZpbHRlcmVkQ29sdW1ucyhjb2xzOiBhbnlbXSk6IGFueVtdIHtcbiAgICBjb25zdCBzZWFyY2ggPSB0aGlzLmNvbHVtblNlYXJjaC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBjb2xzXG4gICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgaWYgKGNvbC5jaGlsZHJlbikge1xuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkQ2hpbGRyZW4gPSB0aGlzLmZpbHRlcmVkQ29sdW1ucyhjb2wuY2hpbGRyZW4pO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbC5oZWFkZXIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gpIHx8XG4gICAgICAgICAgICBmaWx0ZXJlZENoaWxkcmVuLmxlbmd0aFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uY29sLCBjaGlsZHJlbjogZmlsdGVyZWRDaGlsZHJlbiB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gY29sLmhlYWRlci50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaCkgPyBjb2wgOiBudWxsO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihCb29sZWFuKTtcbiAgfVxuXG4gIGdldCBhY2NvcmRpb25TdGF0ZSgpOiAnYWxsJyB8ICdub25lJyB8ICdzb21lJyB7XG4gICAgY29uc3QgZ3JvdXBzID0gdGhpcy5nZXRBbGxHcm91cENvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgICBjb25zdCBleHBhbmRlZENvdW50ID0gZ3JvdXBzLmZpbHRlcigoY29sKSA9PiBjb2wuZXhwYW5kZWQpLmxlbmd0aDtcblxuICAgIGlmIChleHBhbmRlZENvdW50ID09PSAwKSByZXR1cm4gJ25vbmUnO1xuICAgIGlmIChleHBhbmRlZENvdW50ID09PSBncm91cHMubGVuZ3RoKSByZXR1cm4gJ2FsbCc7XG4gICAgcmV0dXJuICdzb21lJztcbiAgfVxuXG4gIGdldCBmaWx0ZXJBY2NvcmRpb25TdGF0ZSgpOiAnYWxsJyB8ICdub25lJyB8ICdzb21lJyB7XG4gICAgY29uc3QgZ3JvdXBzID0gdGhpcy5nZXRBbGxHcm91cENvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgICBjb25zdCBleHBhbmRlZENvdW50ID0gZ3JvdXBzLmZpbHRlcigoY29sKSA9PiBjb2wuZXhwYW5kZWRGaWx0ZXIpLmxlbmd0aDtcblxuICAgIGlmIChleHBhbmRlZENvdW50ID09PSAwKSByZXR1cm4gJ25vbmUnO1xuICAgIGlmIChleHBhbmRlZENvdW50ID09PSBncm91cHMubGVuZ3RoKSByZXR1cm4gJ2FsbCc7XG4gICAgcmV0dXJuICdzb21lJztcbiAgfVxuXG4gIC8vIFJlY3Vyc2l2ZWx5IGNvbGxlY3QgYWxsIGdyb3VwIGNvbHVtbnNcbiAgcHJpdmF0ZSBnZXRBbGxHcm91cENvbHVtbnMoY29sczogYW55W10pOiBhbnlbXSB7XG4gICAgbGV0IGdyb3VwczogYW55W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2xzKSB7XG4gICAgICBpZiAoY29sLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgZ3JvdXBzLnB1c2goY29sKTtcbiAgICAgICAgZ3JvdXBzID0gZ3JvdXBzLmNvbmNhdCh0aGlzLmdldEFsbEdyb3VwQ29sdW1ucyhjb2wuY2hpbGRyZW4pKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGdyb3VwcztcbiAgfVxuXG4gIC8vIFRvZ2dsZSBiYXNlZCBvbiBjdXJyZW50IHN0YXRlXG4gIHRvZ2dsZUFsbEFjY29yZGlvbnMoKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dFN0YXRlID0gdGhpcy5hY2NvcmRpb25TdGF0ZSA9PT0gJ2FsbCcgPyBmYWxzZSA6IHRydWU7XG4gICAgdGhpcy5zZXRBY2NvcmRpb25TdGF0ZSh0aGlzLmNvbHVtbnMsIG5leHRTdGF0ZSk7XG4gIH1cblxuICB0b2dnbGVBbGxGaWx0ZXJBY2NvcmRpb25zKCk6IHZvaWQge1xuICAgIGNvbnN0IG5leHRTdGF0ZSA9IHRoaXMuZmlsdGVyQWNjb3JkaW9uU3RhdGUgPT09ICdhbGwnID8gZmFsc2UgOiB0cnVlO1xuICAgIHRoaXMuc2V0RmlsdGVyQWNjb3JkaW9uU3RhdGUodGhpcy5jb2x1bW5zLCBuZXh0U3RhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRBY2NvcmRpb25TdGF0ZShjb2xzOiBhbnlbXSwgc3RhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBmb3IgKGxldCBjb2wgb2YgY29scykge1xuICAgICAgaWYgKGNvbC5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbC5leHBhbmRlZCA9IHN0YXRlO1xuICAgICAgICB0aGlzLnNldEFjY29yZGlvblN0YXRlKGNvbC5jaGlsZHJlbiwgc3RhdGUpOyAvLyBSZWN1cnNpdmVseSBoYW5kbGUgbmVzdGVkXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICBwcml2YXRlIHNldEZpbHRlckFjY29yZGlvblN0YXRlKGNvbHM6IGFueVtdLCBzdGF0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGZvciAobGV0IGNvbCBvZiBjb2xzKSB7XG4gICAgICBpZiAoY29sLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgY29sLmV4cGFuZGVkRmlsdGVyID0gc3RhdGU7XG4gICAgICAgIHRoaXMuc2V0RmlsdGVyQWNjb3JkaW9uU3RhdGUoY29sLmNoaWxkcmVuLCBzdGF0ZSk7IC8vIFJlY3Vyc2l2ZWx5IGhhbmRsZSBuZXN0ZWRcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzaG93Q29sdW1uUGFuZWwgPSBmYWxzZTtcblxuICBjbG9zZU1vZGFsQ29sdW1uUGFuZWwoKSB7XG4gICAgdGhpcy5zaG93Q29sdW1uUGFuZWwgPSBmYWxzZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScsIFsnJGV2ZW50J10pXG4gIG9uRXNjYXBlKGV2ZW50OiBFdmVudCkge1xuICAgIHRoaXMuY2xvc2VNb2RhbENvbHVtblBhbmVsKCk7XG4gIH1cblxuICAvLyBDaGVjayBJZiAgQW55IGNvbHVtbiBoYXZlIHJpZ2h0IHBpbm5lZFxuICBnZXQgaGFzUmlnaHRQaW5uZWRDb2x1bW5zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbW1vblNldmljZS5nZXRoYXNSaWdodFBpbm5lZENvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgfVxuXG4gIGdldCBoYXNMZWZ0UGlubmVkQ29sdW1ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb21tb25TZXZpY2UuZ2V0aGFzTGVmdFBpbm5lZENvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgfVxuXG4gIGdldCBkYXRhU2V0TGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLmNvbW1vblNldmljZS5nZXRFeHBhbmRlZFJvd0NvdW50KHRoaXMuZGF0YVNldCk7XG4gIH1cblxuXG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXG4gIG9uUmVzaXplKGV2ZW50OiBVSUV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmN1cnJldGFUYWJsZVByZXNldEZvclVwZGF0ZSkgdGhpcy5hdXRvU2l6ZUNvbHVtbnNCeVJhdGlvKCk7XG4gICAgY29uc3QgaCA9IHRoaXMubWFpblNjcm9sbD8ubmF0aXZlRWxlbWVudD8uY2xpZW50SGVpZ2h0ID8/IDA7XG4gICAgdGhpcy52aWV3cG9ydFJvd3MgPSBNYXRoLm1heCgxLCBNYXRoLmNlaWwoaCAvIHRoaXMucm93SGVpZ2h0KSk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlUm93cyh0aGlzLm1haW5TY3JvbGw/Lm5hdGl2ZUVsZW1lbnQ/LnNjcm9sbFRvcCk7XG4gICAgdGhpcy5oYXNTY3JvbGwgPSB0aGlzLmhhc0hvcml6b250YWxTY3JvbGxiYXIoKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7IH0sIDEwMCk7XG4gIH1cblxuICBhdXRvU2l6ZUNvbHVtbnNCeVJhdGlvKHNob3VsZENoZWNrQ29udGFpbmVyV2lkdGggPSBmYWxzZSk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlQ29sID0gbnVsbDtcblxuICAgIGNvbnN0IGdldFZpc2libGVMZWFmQ29sdW1ucyA9IChjb2x1bW5zOiBhbnlbXSk6IGFueVtdID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdDogYW55W10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcbiAgICAgICAgaWYgKGNvbHVtbi5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goLi4uZ2V0VmlzaWJsZUxlYWZDb2x1bW5zKGNvbHVtbi5jaGlsZHJlbikpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5pc192aXNpYmxlICE9PSBmYWxzZSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIGNvbnN0IHZpc2libGVDb2x1bW5zID0gZ2V0VmlzaWJsZUxlYWZDb2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gICAgaWYgKCF2aXNpYmxlQ29sdW1ucy5sZW5ndGgpIHJldHVybjtcblxuICAgIGxldCBjb250YWluZXJXaWR0aCA9XG4gICAgICB0aGlzLmRhdGFHcmlkQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5vZmZzZXRXaWR0aCA/PyAwO1xuXG4gICAgaWYgKHRoaXMuc2hvd1NlcmlhbE51bWJlcikgY29udGFpbmVyV2lkdGggLT0gNTU7XG4gICAgaWYgKHRoaXMuc2hvd1NpZGVNZW51KSBjb250YWluZXJXaWR0aCAtPSAyOTtcbiAgICBpZiAodGhpcy5ncmlkVHlwZSA9PT0gJ0Fzc2V0cycgfHwgdGhpcy5ncmlkVHlwZSA9PT0gJ1Rhc2tzJykgY29udGFpbmVyV2lkdGggLT0gMzA7XG4gICAgaWYgKHRoaXMuc2hvd0NoZWNrYm94ZXMpIGNvbnRhaW5lcldpZHRoIC09IDU1O1xuICAgIGNvbnRhaW5lcldpZHRoIC09IDU7XG5cbiAgICBjb25zdCB0b3RhbE9sZFdpZHRoID0gdmlzaWJsZUNvbHVtbnMucmVkdWNlKFxuICAgICAgKHN1bSwgY29sKSA9PiBzdW0gKyAoY29sLndpZHRoIHx8IDApLFxuICAgICAgMFxuICAgICk7XG5cbiAgICBpZiAodG90YWxPbGRXaWR0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgaWYgKHNob3VsZENoZWNrQ29udGFpbmVyV2lkdGggJiYgKGNvbnRhaW5lcldpZHRoIDw9IHRvdGFsT2xkV2lkdGgpKSByZXR1cm47XG5cbiAgICB2aXNpYmxlQ29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgIGNvbnN0IHJhdGlvID0gY29sLndpZHRoIC8gdG90YWxPbGRXaWR0aDtcbiAgICAgIGNvbnN0IG5ld1dpZHRoID0gTWF0aC5tYXgoTWF0aC5mbG9vcihjb250YWluZXJXaWR0aCAqIHJhdGlvKSwgMTAwKTtcblxuICAgICAgY29sLndpZHRoID0gbmV3V2lkdGg7XG4gICAgICB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoSW5Tb3VyY2VCeUZpZWxkKGNvbC5maWVsZCwgbmV3V2lkdGgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZWZyZXNoSGVhZGVycygpO1xuICAgIHRoaXMuaGFzU2Nyb2xsID0gdGhpcy5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cblxuXG4gIGFzeW5jIHJlZnJlc2hIZWFkZXJzKCkge1xuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCAwKSk7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoc0FuZEdyb3VwcygpO1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcblxuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgaGFzQW55VmlzaWJsZUNvbHVtbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb21tb25TZXZpY2UuZ2V0aGFzVmlzaWJsZUNvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgfVxuXG4gIGdldCBoYXNBbnlJblZpc2libGVDb2x1bW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuY29tbW9uU2V2aWNlLmdldGhhc0luVmlzaWJsZUNvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgfVxuXG4gIGdldCBjb2x1bW5zQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29tbW9uU2V2aWNlLmdldFRvdGFsQ29sdW1uc0xlbmd0aCh0aGlzLmNvbHVtbnMpO1xuICB9XG5cbiAgdGFibGVIZWFkZXJBbmRCb2R5SGVpZ2h0KCkge1xuICAgIHJldHVybiBgY2FsYygxMDAlIC0gJHt0aGlzLmZvb3RlclJvd0hlaWdodH0pYDtcbiAgfVxuXG4gIGRyYWdnaW5nSW5Hcm91cEFyZWEgPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKCdjZW50ZXJTY3JvbGwnKSBjZW50ZXJTY3JvbGwhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgdmlzaWJsZVJvd0NvdW50ID0gMjU7XG4gIHN0YXJ0SW5kZXggPSAwO1xuICB2aXNpYmxlUm93czogYW55W10gPSBbXTtcblxuICBwcml2YXRlIGZsYXR0ZW5Hcm91cGVkUm93cyhcbiAgICByb3dzOiBhbnlbXSA9IFtdLFxuICAgIGxldmVsID0gMCxcbiAgICByZXN1bHQ6IGFueVtdID0gW11cbiAgKTogYW55W10ge1xuICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHsgLi4ucm93LCBfX2RlcHRoOiBsZXZlbCB9KTtcbiAgICAgIGlmIChyb3cuaXNHcm91cCAmJiByb3cuaXNFeHBhbmQgJiYgcm93LmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5mbGF0dGVuR3JvdXBlZFJvd3Mocm93LmNoaWxkcmVuLCBsZXZlbCArIDEsIFtdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hc3NpZ25WaXJ0dWFsSW5kZXhlcyh0aGlzLnZpc2libGVSb3dzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgYXNzaWduVmlydHVhbEluZGV4ZXMoZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgbGV0IGN1cnJlbnRJbmRleCA9IDE7XG4gICAgY29uc3Qgd2FsayA9IChpdGVtczogYW55W10pOiB2b2lkID0+IHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICBpdGVtLl9fdmlydHVhbEluZGV4ID0gY3VycmVudEluZGV4Kys7XG4gICAgICAgIGlmIChpdGVtPy5pc0dyb3VwKSB7XG4gICAgICAgICAgY29uc3QgZ3JvdXAgPSBpdGVtO1xuICAgICAgICAgIGlmIChncm91cC5pc0V4cGFuZCAmJiBBcnJheS5pc0FycmF5KGdyb3VwLmNoaWxkcmVuKSkge1xuICAgICAgICAgICAgd2Fsayhncm91cC5jaGlsZHJlbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICB3YWxrKGRhdGEpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdUaGlzIGRhdGFzZXQ6ICcsIHRoaXMudmlzaWJsZVJvd3MpXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuXG4gIHVwZGF0ZVZpc2libGVSb3dzKHNjcm9sbFRvcDogbnVtYmVyKSB7XG5cbiAgICBpZiAodGhpcy5ncm91cGVkQ29sdW1ucz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnZpc2libGVSb3dzID0gdGhpcy5kYXRhU2V0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmbGF0RGF0YSA9IHRoaXMuZmxhdHRlbkdyb3VwZWRSb3dzKHRoaXMuZGF0YVNldCk7XG5cbiAgICBpZiAodGhpcy5kYXRhU2V0Py5sZW5ndGggPD0gMTUpIHtcbiAgICAgIHRoaXMudmlzaWJsZVJvd3MgPSBmbGF0RGF0YTtcbiAgICAgIHRoaXMuZmlyc3RJbmRleCA9IDA7XG4gICAgICB0aGlzLnN0YXJ0SW5kZXggPSAwO1xuICAgICAgdGhpcy5yZW5kZXJTdGFydCA9IDA7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRvdGFsID0gZmxhdERhdGEubGVuZ3RoO1xuICAgIGNvbnN0IG1heEZpcnN0ID0gTWF0aC5tYXgoMCwgdG90YWwgLSB0aGlzLnZpZXdwb3J0Um93cyk7XG4gICAgY29uc3QgZmlyc3QgPSBNYXRoLm1pbihNYXRoLmZsb29yKHNjcm9sbFRvcCAvIHRoaXMucm93SGVpZ2h0KSwgbWF4Rmlyc3QpO1xuICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoMCwgZmlyc3QpO1xuICAgIGNvbnN0IGVuZCA9IE1hdGgubWluKHRvdGFsLCBmaXJzdCArIHRoaXMudmlld3BvcnRSb3dzKTtcblxuICAgIHRoaXMuZmlyc3RJbmRleCA9IGZpcnN0O1xuICAgIHRoaXMuc3RhcnRJbmRleCA9IGZpcnN0O1xuICAgIHRoaXMucmVuZGVyU3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLnZpc2libGVSb3dzID0gZmxhdERhdGEuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgdGhpcy5hc3NpZ25WaXJ0dWFsSW5kZXhlcyh0aGlzLnZpc2libGVSb3dzKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuXG4gIHRyYWNrQnlSZW5kZXJlZEluZGV4ID0gKGk6IG51bWJlciwgX3JvdzogYW55KSA9PiB0aGlzLnJlbmRlclN0YXJ0ICsgaTtcblxuICBwcml2YXRlIGlzU3luY2luZ0Zyb21NYWluID0gZmFsc2U7XG4gIHByaXZhdGUgaXNTeW5jaW5nRnJvbUZha2UgPSBmYWxzZTtcbiAgcHJpdmF0ZSBtYWluU2Nyb2xsUmFmOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICB0cmFja0J5SWQoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIGl0ZW0uaWQgfHwgaXRlbS5faWQ7XG4gIH1cblxuICBmbGF0dGVuZWREYXRhOiBhbnlbXSA9IFtdO1xuXG4gIHVwZGF0ZUZsYXR0ZW5lZERhdGEoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmZsYXR0ZW5lZERhdGEgPSB0aGlzLmZsYXR0ZW5Hcm91cGVkUm93cyh0aGlzLmRhdGFTZXQpO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDEwKTtcbiAgfVxuXG4gIC8vIHJlcXVlc3RBbmltYXRpb25GcmFtZSBJRHNcbiAgcHJpdmF0ZSBmYWtlU2Nyb2xsUmFmOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuXG4gIC8vIG9uTWFpblNjcm9sbChldmVudDogRXZlbnQpIHtcbiAgLy8gICB0aGlzLmV4cGFuZGVkQ2VsbHMuY2xlYXIoKTtcbiAgLy8gICBjb25zdCBzY3JvbGxUb3AgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5zY3JvbGxUb3A7XG4gIC8vICAgICBpZiAodGhpcy5ncm91cGVkQ29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAvLyAgICAgICB0aGlzLnN0YXJ0SW5kZXggPSAwO1xuICAvLyAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIC8vICAgICAgIHJldHVybjtcbiAgLy8gICAgIH1cbiAgLy8gICAgIGNvbnN0IG92ZXJzY2FuID0gdGhpcy5vdmVyc2NhbiAqIDI7XG4gIC8vICAgICB0aGlzLnN0YXJ0SW5kZXggPSBNYXRoLmZsb29yKHNjcm9sbFRvcCAvIHRoaXMucm93SGVpZ2h0KTtcbiAgLy8gICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoMCwgdGhpcy5zdGFydEluZGV4IC0gb3ZlcnNjYW4pO1xuICAvLyAgICAgY29uc3QgZW5kID0gTWF0aC5taW4odGhpcy5mbGF0dGVuZWREYXRhLmxlbmd0aCwgdGhpcy5zdGFydEluZGV4ICsgdGhpcy52aWV3cG9ydFJvd3MgKyBvdmVyc2Nhbik7XG4gIC8vICAgICB0aGlzLnZpc2libGVSb3dzID0gdGhpcy5mbGF0dGVuZWREYXRhLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAvLyAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAvLyB9XG4gIHRyYW5zbGF0ZVkgPSAwO1xuXG4gIGxhc3RTY3JvbGxUb3AgPSAwO1xuICBwZW5kaW5nQW5pbWF0aW9uRnJhbWU6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIG9uTWFpblNjcm9sbChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBzY3JvbGxUb3AgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5zY3JvbGxUb3A7XG4gICAgaWYgKE1hdGguYWJzKHNjcm9sbFRvcCAtIHRoaXMubGFzdFNjcm9sbFRvcCkgPCAoMTApKSByZXR1cm47XG4gICAgaWYgKHRoaXMucGVuZGluZ0FuaW1hdGlvbkZyYW1lKSBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnBlbmRpbmdBbmltYXRpb25GcmFtZSk7XG4gICAgaWYgKHRoaXMuZ3JvdXBlZENvbHVtbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc3RhcnRJbmRleCA9IDA7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucGVuZGluZ0FuaW1hdGlvbkZyYW1lID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGNvbnN0IHNjcm9sbGluZ0Rvd24gPSBzY3JvbGxUb3AgPiB0aGlzLmxhc3RTY3JvbGxUb3A7XG4gICAgICB0aGlzLmxhc3RTY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG5cbiAgICAgIGNvbnN0IG92ZXJzY2FuID0gNTtcbiAgICAgIGNvbnN0IG5ld1N0YXJ0SW5kZXggPSBNYXRoLmZsb29yKHNjcm9sbFRvcCAvIHRoaXMucm93SGVpZ2h0KTtcbiAgICAgIGNvbnN0IGR5bmFtaWNPdmVyc2NhbiA9IHNjcm9sbGluZ0Rvd24gPyBvdmVyc2NhbiA6IG92ZXJzY2FuO1xuXG4gICAgICBjb25zdCBzdGFydCA9IE1hdGgubWF4KDAsIG5ld1N0YXJ0SW5kZXggLSBkeW5hbWljT3ZlcnNjYW4pO1xuICAgICAgY29uc3QgZW5kID0gTWF0aC5taW4oXG4gICAgICAgIHRoaXMuZmxhdHRlbmVkRGF0YS5sZW5ndGgsXG4gICAgICAgIG5ld1N0YXJ0SW5kZXggKyB0aGlzLnZpZXdwb3J0Um93cyArIGR5bmFtaWNPdmVyc2NhblxuICAgICAgKTtcbiAgICAgIHRoaXMudHJhbnNsYXRlWSA9IHN0YXJ0ICogdGhpcy5yb3dIZWlnaHQ7XG4gICAgICBpZiAodGhpcy5zdGFydEluZGV4ICE9PSBzdGFydCB8fCB0aGlzLnZpc2libGVSb3dzLmxlbmd0aCAhPT0gZW5kIC0gc3RhcnQpIHtcbiAgICAgICAgdGhpcy5zdGFydEluZGV4ID0gc3RhcnQ7XG4gICAgICAgIHRoaXMudmlzaWJsZVJvd3MgPSB0aGlzLmRhdGFTZXQuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBlbmRpbmdBbmltYXRpb25GcmFtZSA9IG51bGw7XG4gICAgfSk7XG4gIH1cblxuXG4gIC8vIG9uTWFpblNjcm9sbChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgLy8gICB0aGlzLmV4cGFuZGVkQ2VsbHMuY2xlYXIoKTtcbiAgLy8gICBpZiAodGhpcy5pc1N5bmNpbmdGcm9tRmFrZSkge1xuICAvLyAgICAgdGhpcy5pc1N5bmNpbmdGcm9tRmFrZSA9IGZhbHNlO1xuICAvLyAgICAgcmV0dXJuO1xuICAvLyAgIH1cbiAgLy8gICBjb25zdCBzY3JvbGxUb3AgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5zY3JvbGxUb3A7XG4gIC8vICAgaWYgKE1hdGguYWJzKHNjcm9sbFRvcCAtIHRoaXMubGFzdFNjcm9sbFRvcCkgPCB0aGlzLnJvd0hlaWdodCAvIDIpIHJldHVybjtcbiAgLy8gICB0aGlzLmxhc3RTY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG5cbiAgLy8gICBpZiAodGhpcy5mYWtlU2Nyb2xsUmFmKSBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLmZha2VTY3JvbGxSYWYpO1xuXG4gIC8vICAgdGhpcy5mYWtlU2Nyb2xsUmFmID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgLy8gICAgIGlmICh0aGlzLmdyb3VwZWRDb2x1bW5zPy5sZW5ndGggPiAwKSB7XG4gIC8vICAgICAgIHRoaXMuc3RhcnRJbmRleCA9IDA7XG4gIC8vICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgLy8gICAgICAgcmV0dXJuO1xuICAvLyAgICAgfVxuICAvLyAgICAgY29uc3QgZmxhdERhdGEgPSB0aGlzLmZsYXR0ZW5Hcm91cGVkUm93cyh0aGlzLmRhdGFTZXQpO1xuICAvLyAgICAgY29uc3QgdG90YWxSb3dzID0gZmxhdERhdGEubGVuZ3RoO1xuICAvLyAgICAgY29uc3QgbmV3U3RhcnRJbmRleCA9IE1hdGguZmxvb3Ioc2Nyb2xsVG9wIC8gdGhpcy5yb3dIZWlnaHQpO1xuICAvLyAgICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCBuZXdTdGFydEluZGV4IC0gKHRoaXMub3ZlcnNjYW4gKiAyKSk7XG4gIC8vICAgICBjb25zdCBlbmQgPSBNYXRoLm1pbih0b3RhbFJvd3MsIG5ld1N0YXJ0SW5kZXggKyB0aGlzLnZpZXdwb3J0Um93cyArICh0aGlzLm92ZXJzY2FuICogMikpO1xuXG4gIC8vICAgICB0aGlzLnRyYW5zbGF0ZVkgPSBzdGFydCAqIHRoaXMucm93SGVpZ2h0O1xuICAvLyAgICAgdGhpcy5zdGFydEluZGV4ID0gc3RhcnQ7XG4gIC8vICAgICB0aGlzLnZpc2libGVSb3dzID0gZmxhdERhdGEuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIC8vICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIC8vICAgfSk7XG4gIC8vIH1cblxuXG4gIGdldCBpc1Njcm9sbGJhclZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLm1haW5TY3JvbGwpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBlbCA9IHRoaXMubWFpblNjcm9sbC5uYXRpdmVFbGVtZW50O1xuICAgIHJldHVybiBlbC5zY3JvbGxIZWlnaHQgPiBlbC5jbGllbnRIZWlnaHQ7XG4gIH1cblxuICB0b2dnbGVFeHBhbmQocm93OiBhbnkpIHtcbiAgICBpZiAocm93LmRldGFpbHMpIHtcbiAgICAgIHJvdy5pc0RldGFpbHNFeHBhbmQgPSAhcm93LmlzRGV0YWlsc0V4cGFuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcm93LmlzRXhwYW5kID0gIXJvdy5pc0V4cGFuZDtcbiAgICB9XG4gICAgdGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMuY2xlYXIoKTtcbiAgICB0aGlzLnVwZGF0ZUZsYXR0ZW5lZERhdGEoKTtcbiAgICAvLyB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgLy8gfSwgMTAwKTtcbiAgfVxuXG4gIC8vIG9uTWFpbkZha2VTY3JvbGwoZXZlbnQ6IEV2ZW50KSB7XG4gIC8vICAgaWYgKHRoaXMuaXNTeW5jaW5nRnJvbU1haW4pIHtcbiAgLy8gICAgIHRoaXMuaXNTeW5jaW5nRnJvbU1haW4gPSBmYWxzZTtcbiAgLy8gICAgIHJldHVybjtcbiAgLy8gICB9XG4gIC8vICAgaWYgKHRoaXMuZ3JvdXBlZENvbHVtbnM/Lmxlbmd0aCA+IDApIHtcbiAgLy8gICAgIHRoaXMuc3RhcnRJbmRleCA9IDA7XG4gIC8vICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIC8vICAgICByZXR1cm47XG4gIC8vICAgfVxuICAvLyAgIGNvbnN0IHNjcm9sbFRvcCA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLnNjcm9sbFRvcDtcbiAgLy8gICBpZiAodGhpcy5tYWluU2Nyb2xsUmFmKSBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLm1haW5TY3JvbGxSYWYpO1xuICAvLyAgIHRoaXMubWFpblNjcm9sbFJhZiA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gIC8vICAgICB0aGlzLmlzU3luY2luZ0Zyb21GYWtlID0gdHJ1ZTtcbiAgLy8gICAgIHRoaXMubWFpblNjcm9sbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcbiAgLy8gICAgIGNvbnN0IG92ZXJzY2FuID0gdGhpcy5vdmVyc2NhbiA/PyAwO1xuICAvLyAgICAgdGhpcy5zdGFydEluZGV4ID0gTWF0aC5mbG9vcihzY3JvbGxUb3AgLyB0aGlzLnJvd0hlaWdodCk7XG4gIC8vICAgICBjb25zdCBzdGFydCA9IE1hdGgubWF4KDAsIHRoaXMuc3RhcnRJbmRleCAtIG92ZXJzY2FuKTtcbiAgLy8gICAgIGNvbnN0IGVuZCA9IE1hdGgubWluKFxuICAvLyAgICAgICB0aGlzLmZsYXR0ZW5lZERhdGEubGVuZ3RoLFxuICAvLyAgICAgICB0aGlzLnN0YXJ0SW5kZXggKyB0aGlzLnZpZXdwb3J0Um93cyArIG92ZXJzY2FuXG4gIC8vICAgICApO1xuICAvLyAgICAgdGhpcy52aXNpYmxlUm93cyA9IHRoaXMuZmxhdHRlbmVkRGF0YS5zbGljZShzdGFydCwgZW5kKTtcbiAgLy8gICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgLy8gICB9KTtcbiAgLy8gfVxuXG5cblxuXG5cbiAgdmlld3BvcnRSb3dzID0gMDsgLy8gaG93IG1hbnkgcm93cyBmaXQgaW4gdmlld3BvcnQgKGNvbXB1dGVkKVxuICBmaXJzdEluZGV4ID0gMDsgLy8gaW5kZXggb2YgdGhlIGZpcnN0IHZpc2libGUgcm93IChjbGFtcGVkKVxuICByZW5kZXJTdGFydCA9IDA7IC8vIHdoZXJlIHRoZSBzbGljZSBhY3R1YWxseSBzdGFydHMgKGZpcnN0SW5kZXggLSBvdmVyc2NhbiwgY2xhbXBlZClcblxuICBwcml2YXRlIHNjcm9sbFJhZjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcGVuZGluZ1Njcm9sbFRvcCA9IDA7XG5cbiAgQFZpZXdDaGlsZCgnbWFpblNjcm9sbCcpIG1haW5TY3JvbGwhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnZmFrZVNjcm9sbCcpIGZha2VTY3JvbGwhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnaG9yaXppbnRhbEZha2VTY3JvbGwnKVxuICBob3JpemludGFsRmFrZVNjcm9sbCE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdjZW50ZXJTY3JvbGxhYmxlQm9keScpXG4gIGNlbnRlclNjcm9sbGFibGVCb2R5ITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIHByaXZhdGUgb3ZlcnNjYW4gPSAxMDsgLy8gYnVmZmVyIHJvd3MgYWJvdmUgYW5kIGJlbG93XG5cbiAgY29tcHV0ZVZpZXdwb3J0Um93cygpIHtcbiAgICBpZiAodGhpcy5mYWtlU2Nyb2xsPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLmZha2VTY3JvbGwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1haW5TY3JvbGw/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMubWFpblNjcm9sbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgICBjb25zdCBoID0gdGhpcy5tYWluU2Nyb2xsLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0ID8/IDA7XG5cbiAgICAgIC8vIHJvd3MgdmlzaWJsZSBpbiB2aWV3cG9ydFxuICAgICAgY29uc3Qgcm93c0luVmlld3BvcnQgPSBNYXRoLm1heCgxLCBNYXRoLmNlaWwoaCAvIHRoaXMucm93SGVpZ2h0KSk7XG5cbiAgICAgIC8vIGFkZCBidWZmZXIgcm93cyAob3ZlcnNjYW4pXG4gICAgICB0aGlzLnZpZXdwb3J0Um93cyA9IHJvd3NJblZpZXdwb3J0ICsgdGhpcy5vdmVyc2NhbjtcblxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG5cbiAgb25Ib3Jpem9udGFsRmFrZVNjcm9sbChldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCBzY3JvbGxMZWZ0ID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuc2Nyb2xsTGVmdDtcbiAgICB0aGlzLmNlbnRlclBpbm5lZEhlYWRlci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAgIGlmICh0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Py5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7XG4gICAgfVxuICB9XG5cbiAgb25DZW50ZXJCb2R5U2Nyb2xsKGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAodGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keT8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0YXJnZXQuc2Nyb2xsTGVmdDtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2VudGVyUGlubmVkSGVhZGVyKSB7XG4gICAgICB0aGlzLmNlbnRlclBpbm5lZEhlYWRlci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0YXJnZXQuc2Nyb2xsTGVmdDtcbiAgICB9XG4gICAgaWYgKHRoaXMuaG9yaXppbnRhbEZha2VTY3JvbGw/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuaG9yaXppbnRhbEZha2VTY3JvbGwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gdGFyZ2V0LnNjcm9sbExlZnQ7XG4gICAgfVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBvbkNlbnRlckhlYWRlclNjcm9sbChldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKHRoaXMuaG9yaXppbnRhbEZha2VTY3JvbGw/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuaG9yaXppbnRhbEZha2VTY3JvbGwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gdGFyZ2V0LnNjcm9sbExlZnQ7XG4gICAgfVxuICAgIGlmICh0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Py5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRhcmdldC5zY3JvbGxMZWZ0O1xuICAgIH1cbiAgfVxuXG4gIC8vIERyYWdnaW5nIExvZ2ljIGlzIGltcGxlbWVudGVkIGhlcmVcbiAgLy8gcHJpdmF0ZSBpbml0aWFsSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIGRyYWdnaW5nQ29sdW1uOiBhbnk7XG4gIGRyYWdTdGFydEluZGV4OiBhbnkgPSAwO1xuICAvLyBvbkRyYWdTdGFydChkYXRhOiBhbnksIGluZGV4OiBudW1iZXIpIHtcbiAgLy8gICB0aGlzLmRyYWdnaW5nQ29sdW1uID0gZGF0YS5jb2x1bW47XG4gIC8vICAgdGhpcy5kcmFnU3RhcnRJbmRleCA9IGluZGV4O1xuICAvLyB9XG4gIC8vIG9uRHJhZ01vdmUoZGF0YTogYW55KSB7XG4gIC8vICAgY29uc3QgeyBjbGllbnRYLCBjbGllbnRZIH0gPSBkYXRhLmV2ZW50O1xuICAvLyAgIGNvbnN0IGhlYWRlcnMgPSBBcnJheS5mcm9tKFxuICAvLyAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm9uZS1yb3ctaGVhZGVyLWNlbGxzJylcbiAgLy8gICApIGFzIEhUTUxFbGVtZW50W107XG5cbiAgLy8gICBoZWFkZXJzLmZvckVhY2goKGhlYWRlckVsLCBpZHgpID0+IHtcbiAgLy8gICAgIGNvbnN0IHJlY3QgPSBoZWFkZXJFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgLy8gICAgIGlmIChcbiAgLy8gICAgICAgaWR4ICE9PSB0aGlzLmRyYWdTdGFydEluZGV4ICYmXG4gIC8vICAgICAgIGNsaWVudFggPiByZWN0LmxlZnQgJiZcbiAgLy8gICAgICAgY2xpZW50WCA8IHJlY3QucmlnaHQgJiZcbiAgLy8gICAgICAgY2xpZW50WSA+IHJlY3QudG9wICYmXG4gIC8vICAgICAgIGNsaWVudFkgPCByZWN0LmJvdHRvbVxuICAvLyAgICAgKSB7XG4gIC8vICAgICAgIGNvbnN0IG90aGVySW5kZXggPSBpZHg7XG4gIC8vICAgICAgIGNvbnNvbGUubG9nKGAke3RoaXMuZHJhZ1N0YXJ0SW5kZXh9IC0tPiAke290aGVySW5kZXh9YCk7XG4gIC8vICAgICAgIHRoaXMuc3dhcENvbHVtbih0aGlzLmRyYWdTdGFydEluZGV4LCBvdGhlckluZGV4KTtcbiAgLy8gICAgICAgY29uc29sZS5sb2coJ1VwZGF0ZWQgQ29sdW1uczogJywgdGhpcy5jb2x1bW5zKTtcbiAgLy8gICAgICAgdGhpcy5kcmFnU3RhcnRJbmRleCA9IG90aGVySW5kZXg7IC8vIHVwZGF0ZSBpbmRleFxuICAvLyAgICAgfVxuICAvLyAgIH0pO1xuICAvLyB9XG5cbiAgLy8gc3dhcENvbHVtbihwcmV2aXVzSW5kZXg6IG51bWJlciwgY3VycmVudEluZGV4OiBudW1iZXIpIHtcbiAgLy8gICBjb25zdCBjb2x1bW5zID0gc3RydWN0dXJlZENsb25lKHRoaXMuY29sdW1ucyk7XG4gIC8vICAgY29uc3QgZmxhdHRlbkNvbHVtbnMgPSB0aGlzLmZsYXR0ZW5Db2x1bW5zKGNvbHVtbnMpO1xuXG4gIC8vICAgY29uc3QgdmlzaWJsZUZsYXR0ZW5Db2x1bW5zID0gZmxhdHRlbkNvbHVtbnMuZmlsdGVyKFxuICAvLyAgICAgKGNvbCkgPT4gY29sLmlzX3Zpc2libGVcbiAgLy8gICApO1xuICAvLyAgIGNvbnN0IHByZXZpdXNDb2x1bW4gPSB2aXNpYmxlRmxhdHRlbkNvbHVtbnNbcHJldml1c0luZGV4XTtcbiAgLy8gICBjb25zdCBjdXJyZW50Q29sdW1uID0gdmlzaWJsZUZsYXR0ZW5Db2x1bW5zW2N1cnJlbnRJbmRleF07XG5cbiAgLy8gICBjb25zb2xlLmxvZygnUHJldml1cyBDb2x1bW46ICcsIHByZXZpdXNDb2x1bW4pO1xuICAvLyAgIGNvbnNvbGUubG9nKCdjdXJyZW50IGNsdW1uOiAnLCBjdXJyZW50Q29sdW1uKTtcbiAgLy8gfVxuXG4gIC8vIG9uRHJhZ0VuZChkYXRhOiBhbnkpIHtcbiAgLy8gICB0aGlzLmRyYWdnaW5nQ29sdW1uID0gbnVsbDtcbiAgLy8gICB0aGlzLmRyYWdTdGFydEluZGV4ID0gbnVsbDtcbiAgLy8gfVxuXG4gIC8vIENESyBEUkFHIERST1AgTE9HSUMgR09FUyBIRVJFXG5cblxuICBjYW5FbnRlclRvUm93c0dyb3VwaW5nID0gKGRyYWc6IENka0RyYWc8YW55PiwgZHJvcDogQ2RrRHJvcExpc3Q8YW55PikgPT4ge1xuICAgIC8vIEV4YW1wbGU6IEJsb2NrIGlmIGFscmVhZHkgcGlubmVkIGxlZnRcbiAgICBjb25zdCBkYXRhID0gZHJhZy5kYXRhO1xuICAgIGlmIChkYXRhPy5jaGlsZHJlbiAmJiBkYXRhPy5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBkYXRhLmNoaWxkcmVuLnNvbWUoXG4gICAgICAgIChjb2w6IGFueSkgPT4gY29sLmlzX3Zpc2libGUgJiYgY29sLmlzX2dyb3VwYWJsZVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEuaXNfdmlzaWJsZSAmJiBkYXRhLmlzX2dyb3VwYWJsZTtcbiAgfTtcblxuICAvLyBvbkRyYWdNb3ZlZChldmVudDogQ2RrRHJhZ01vdmU8YW55Pikge1xuICAvLyAgIGNvbnN0IHBvaW50ZXJYID0gZXZlbnQucG9pbnRlclBvc2l0aW9uLng7XG4gIC8vICAgY29uc3QgcG9pbnRlclkgPSBldmVudC5wb2ludGVyUG9zaXRpb24ueTtcblxuICAvLyAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcbiAgLy8gICAgICdyb3dzLWdyb3VwaW5nLXRvcC1jb250YWluZXInXG4gIC8vICAgKTtcblxuICAvLyAgIGlmICh0YXJnZXRFbGVtZW50KSB7XG4gIC8vICAgICBjb25zdCByZWN0ID0gdGFyZ2V0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAvLyAgICAgY29uc3QgaXNPdmVyVGFyZ2V0ID1cbiAgLy8gICAgICAgcG9pbnRlclggPj0gcmVjdC5sZWZ0ICYmXG4gIC8vICAgICAgIHBvaW50ZXJYIDw9IHJlY3QucmlnaHQgJiZcbiAgLy8gICAgICAgcG9pbnRlclkgPj0gcmVjdC50b3AgJiZcbiAgLy8gICAgICAgcG9pbnRlclkgPD0gcmVjdC5ib3R0b207XG5cbiAgLy8gICAgIGlmIChpc092ZXJUYXJnZXQpIHtcbiAgLy8gICAgICAgdGhpcy5kcmFnZ2luZ0luR3JvdXBBcmVhID0gdHJ1ZTtcbiAgLy8gICAgIH0gZWxzZSB7XG4gIC8vICAgICAgIHRoaXMuZHJhZ2dpbmdJbkdyb3VwQXJlYSA9IGZhbHNlO1xuICAvLyAgICAgfVxuICAvLyAgIH1cbiAgLy8gfVxuXG4gIGVudGVyVG9Ub3BSb3dHcm91cGluZyhkcm9wTGlzdDogQ2RrRHJhZ0VudGVyPGFueT4pIHtcbiAgICBjb25zdCBkcmFnZ2luZ0RhdGEgPSBkcm9wTGlzdC5pdGVtLmRhdGE7XG4gICAgdGhpcy5kcmFnZ2luZ0luR3JvdXBBcmVhID0gdHJ1ZTtcbiAgICAvLyBjb25zb2xlLmxvZyhcIkRyYWdnaW5nIGluIGdyb3VwIGFyZWFcIilcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShkcmFnZ2luZ0RhdGE/LmNoaWxkcmVuKSkge1xuICAgICAgY29uc3QgdGFyZ2V0R3JvdXAgPSB0aGlzLmNvbHVtbnMuZmluZChcbiAgICAgICAgKGNvbCkgPT4gY29sLmhlYWRlciA9PT0gZHJhZ2dpbmdEYXRhLmhlYWRlclxuICAgICAgKTtcbiAgICAgIGlmICh0YXJnZXRHcm91cCkge1xuICAgICAgICBkcmFnZ2luZ0RhdGEuY2hpbGRyZW4uZm9yRWFjaCgoZHJhZ2dlZENoaWxkOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBtYXRjaGluZ0NoaWxkID0gdGFyZ2V0R3JvdXAuY2hpbGRyZW4uZmluZChcbiAgICAgICAgICAgIChjaGlsZDogYW55KSA9PiBjaGlsZC5maWVsZCA9PT0gZHJhZ2dlZENoaWxkLmZpZWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobWF0Y2hpbmdDaGlsZCkge1xuICAgICAgICAgICAgbWF0Y2hpbmdDaGlsZC5pc1Jvd0dyb3VwZWQgPSAhIW1hdGNoaW5nQ2hpbGQuaXNfZ3JvdXBhYmxlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgLy8gVHJ5IGZpbmRpbmcgaXQgaW4gdG9wLWxldmVsIGNvbHVtbnMgZmlyc3RcbiAgICAgIGxldCB0YXJnZXRDb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZChcbiAgICAgICAgKGNvbDogYW55KSA9PiBjb2wuZmllbGQgPT09IGRyYWdnaW5nRGF0YS5maWVsZFxuICAgICAgKTtcblxuICAgICAgaWYgKHRhcmdldENvbHVtbikge1xuICAgICAgICB0YXJnZXRDb2x1bW4uaXNSb3dHcm91cGVkID0gISF0YXJnZXRDb2x1bW4uaXNfZ3JvdXBhYmxlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQgZ3JvdXAgb2YgdGhpcy5jb2x1bW5zKSB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZ3JvdXAuY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGluZ0NoaWxkID0gZ3JvdXAuY2hpbGRyZW4uZmluZChcbiAgICAgICAgICAgICAgKGNoaWxkOiBhbnkpID0+IGNoaWxkLmZpZWxkID09PSBkcmFnZ2luZ0RhdGEuZmllbGRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAobWF0Y2hpbmdDaGlsZCkge1xuICAgICAgICAgICAgICBtYXRjaGluZ0NoaWxkLmlzUm93R3JvdXBlZCA9ICEhbWF0Y2hpbmdDaGlsZC5pc19ncm91cGFibGU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIOKchSBSZWZyZXNoIFVJXG4gICAgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBvbkRyb3BMaXN0RW50ZXIoXG4gICAgZHJvcExpc3Q6IENka0RyYWdFbnRlcjxhbnk+LFxuICAgIHNlY3Rpb246ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0J1xuICApIHtcbiAgICBjb25zdCBkcmFnZ2luZ0RhdGEgPSBkcm9wTGlzdC5pdGVtLmRhdGE7XG5cbiAgICBjb25zdCB0YXJnZXRDb2x1bW46IGFueSA9IHRoaXMuY29sdW1ucy5maW5kKFxuICAgICAgKGNvbCkgPT4gY29sLmhlYWRlciA9PSBkcmFnZ2luZ0RhdGEuaGVhZGVyXG4gICAgKTtcblxuICAgIGlmICghdGFyZ2V0Q29sdW1uKSByZXR1cm47XG5cbiAgICBpZiAoXG4gICAgICBBcnJheS5pc0FycmF5KGRyYWdnaW5nRGF0YT8uY2hpbGRyZW4pICYmXG4gICAgICBBcnJheS5pc0FycmF5KHRhcmdldENvbHVtbj8uY2hpbGRyZW4pXG4gICAgKSB7XG4gICAgICBkcmFnZ2luZ0RhdGEuY2hpbGRyZW4uZm9yRWFjaCgoZHJhZ2dlZENoaWxkOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgbWF0Y2hpbmdDaGlsZCA9IHRhcmdldENvbHVtbi5jaGlsZHJlbi5maW5kKFxuICAgICAgICAgIChjaGlsZDogYW55KSA9PiBjaGlsZC5maWVsZCA9PT0gZHJhZ2dlZENoaWxkLmZpZWxkXG4gICAgICAgICk7XG4gICAgICAgIGlmIChtYXRjaGluZ0NoaWxkKSB7XG4gICAgICAgICAgbWF0Y2hpbmdDaGlsZC5waW5uZWQgPSBzZWN0aW9uID09PSAnY2VudGVyJyA/IG51bGwgOiBzZWN0aW9uO1xuICAgICAgICAgIG1hdGNoaW5nQ2hpbGRbJ2lzUm93R3JvdXBlZCddID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXRDb2x1bW4ucGlubmVkID0gc2VjdGlvbiA9PT0gJ2NlbnRlcicgPyBudWxsIDogc2VjdGlvbjtcbiAgICAgIHRhcmdldENvbHVtblsnaXNSb3dHcm91cGVkJ10gPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8vIGVudGVyVG9Ub3BHcm91cGluZ1Jvdyhkcm9wTGlzdDogQ2RrRHJhZ0VudGVyPGFueT4pIHtcbiAgLy8gICB0aGlzLnNob3VsZERpc2FibGVEcm9wbGlzdFNvcnRpbmcgPSB0aGlzLmlzRGlzYWJsZUNvbHVtbkdyb3VwaW5nO1xuICAvLyAgIHRoaXMuZHJhZ2dpbmdJbkdyb3VwQXJlYSA9IHRydWU7XG4gIC8vICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAvLyBjb25zdCBpbmRleCA9IHRoaXMuZ3JvdXBlZENvbHVtbnMuZmluZEluZGV4KFxuICAvLyAgIChjb2wpID0+IGNvbC5maWVsZCA9PT0gY29sdW1uLmZpZWxkXG4gIC8vICk7XG4gIC8vIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgLy8gICB0aGlzLmdyb3VwZWRDb2x1bW5zLnNwbGljZShpbmRleCwgMSk7XG4gIC8vIH1cblxuICAvLyAvLyAyLiBUcmF2ZXJzZSB0aGlzLmNvbHVtbnMgdG8gZmluZCBhbmQgdXBkYXRlIHRoZSBtYXRjaGluZyBjb2x1bW5cbiAgLy8gdGhpcy5jb2x1bW5zLmZvckVhY2goKGdyb3VwKSA9PiB7XG4gIC8vICAgaWYgKGdyb3VwPy5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KGdyb3VwLmNoaWxkcmVuKSkge1xuICAvLyAgICAgZ3JvdXAuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgLy8gICAgICAgaWYgKGNoaWxkLmZpZWxkID09PSBjb2x1bW4uZmllbGQpIHtcbiAgLy8gICAgICAgICBjaGlsZC5pc1Jvd0dyb3VwZWQgPSBmYWxzZTtcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfSk7XG4gIC8vICAgfSBlbHNlIGlmIChncm91cC5maWVsZCA9PT0gY29sdW1uLmZpZWxkKSB7XG4gIC8vICAgICBncm91cC5pc1Jvd0dyb3VwZWQgPSBmYWxzZTtcbiAgLy8gICB9XG4gIC8vIH0pO1xuICAvLyAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgLy8gfVxuXG4gIGV4aXRlZEZyb21UaGVUb3BSb3coZHJvcExpc3Q6IENka0RyYWdFeGl0PGFueT4pIHtcbiAgICB0aGlzLmRyYWdnaW5nSW5Hcm91cEFyZWEgPSBmYWxzZTtcbiAgICB0aGlzLmlzRGlzYWJsZUNvbHVtbkdyb3VwaW5nID0gZmFsc2U7XG4gICAgdGhpcy5zaG91bGREaXNhYmxlRHJvcGxpc3RTb3J0aW5nID0gZmFsc2U7XG4gICAgY29uc3QgZHJhZ2dpbmdEYXRhID0gZHJvcExpc3QuaXRlbS5kYXRhO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRyYWdnaW5nRGF0YT8uY2hpbGRyZW4pKSB7XG4gICAgICBjb25zdCB0YXJnZXRHcm91cCA9IHRoaXMuY29sdW1ucy5maW5kKFxuICAgICAgICAoY29sKSA9PiBjb2wuaGVhZGVyID09PSBkcmFnZ2luZ0RhdGEuaGVhZGVyXG4gICAgICApO1xuICAgICAgaWYgKHRhcmdldEdyb3VwKSB7XG4gICAgICAgIGRyYWdnaW5nRGF0YS5jaGlsZHJlbi5mb3JFYWNoKChkcmFnZ2VkQ2hpbGQ6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG1hdGNoaW5nQ2hpbGQgPSB0YXJnZXRHcm91cC5jaGlsZHJlbi5maW5kKFxuICAgICAgICAgICAgKGNoaWxkOiBhbnkpID0+IGNoaWxkLmZpZWxkID09PSBkcmFnZ2VkQ2hpbGQuZmllbGRcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChtYXRjaGluZ0NoaWxkKSB7XG4gICAgICAgICAgICBtYXRjaGluZ0NoaWxkLmlzUm93R3JvdXBlZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB0YXJnZXRDb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZChcbiAgICAgICAgKGNvbDogYW55KSA9PiBjb2wuZmllbGQgPT09IGRyYWdnaW5nRGF0YS5maWVsZFxuICAgICAgKTtcblxuICAgICAgaWYgKHRhcmdldENvbHVtbikge1xuICAgICAgICB0YXJnZXRDb2x1bW4uaXNSb3dHcm91cGVkID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGxldCBncm91cCBvZiB0aGlzLmNvbHVtbnMpIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShncm91cC5jaGlsZHJlbikpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nQ2hpbGQgPSBncm91cC5jaGlsZHJlbi5maW5kKFxuICAgICAgICAgICAgICAoY2hpbGQ6IGFueSkgPT4gY2hpbGQuZmllbGQgPT09IGRyYWdnaW5nRGF0YS5maWVsZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChtYXRjaGluZ0NoaWxkKSB7XG4gICAgICAgICAgICAgIG1hdGNoaW5nQ2hpbGQuaXNSb3dHcm91cGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHNob3VsZERpc2FibGVEcm9wbGlzdFNvcnRpbmcgPSBmYWxzZTtcbiAgaXNEaXNhYmxlQ29sdW1uR3JvdXBpbmcgPSBmYWxzZTtcbiAgY2hlY2tDb2x1bW5Hcm91cGluZ1N0YXR1cyhjb2w6IGFueSkge1xuICAgIGlmIChjb2w/LmNoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkoY29sLmNoaWxkcmVuKSkge1xuICAgICAgY29uc3QgYWxsQ2hpbGRyZW5EaXNhYmxlZCA9IGNvbC5jaGlsZHJlbi5ldmVyeShcbiAgICAgICAgKGNoaWxkOiBhbnkpID0+IGNoaWxkLmlzX2dyb3VwYWJsZSA9PT0gZmFsc2VcbiAgICAgICk7XG4gICAgICB0aGlzLmlzRGlzYWJsZUNvbHVtbkdyb3VwaW5nID0gYWxsQ2hpbGRyZW5EaXNhYmxlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc0Rpc2FibGVDb2x1bW5Hcm91cGluZyA9IGNvbC5pc19ncm91cGFibGUgPT09IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBjdXJyZW50RHJhZ2dpbmdDb2x1bW46IGFueSA9IG51bGw7XG4gIGRyYWdTdGFydE9uR3JvdXAoY29sOiBhbnkpIHtcbiAgICB0aGlzLmN1cnJlbnREcmFnZ2luZ0NvbHVtbiA9IGNvbDtcbiAgfVxuXG4gIG9uU29ydEdyb3VwID0gYXN5bmMgKGV2ZW50OiBDZGtEcmFnU29ydEV2ZW50PGFueT4sIHNlY3Rpb246IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGNvbHVtbnMgPSAodGhpcyBhcyBhbnkpW3NlY3Rpb25dO1xuICAgIGlmIChldmVudC5wcmV2aW91c0luZGV4ID09PSBldmVudC5jdXJyZW50SW5kZXgpIHJldHVybjtcbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKChjb2w6IGFueSkgPT4ge1xuICAgICAgaWYgKGNvbD8uY2hpbGRyZW4gJiYgQXJyYXkuaXNBcnJheShjb2wuY2hpbGRyZW4pKSB7XG4gICAgICAgIHJldHVybiBjb2wuY2hpbGRyZW4uc29tZSgoY2hpbGQ6IGFueSkgPT4gY2hpbGQuaXNfdmlzaWJsZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29sLmlzX3Zpc2libGU7XG4gICAgfSk7XG4gICAgY29uc3QgcHJldmlvdXNIZWFkZXIgPSB2aXNpYmxlQ29sdW1uc1tldmVudC5wcmV2aW91c0luZGV4XS5oZWFkZXI7XG4gICAgY29uc3QgY3VycmVudEhlYWRlciA9IHZpc2libGVDb2x1bW5zW2V2ZW50LmN1cnJlbnRJbmRleF0uaGVhZGVyO1xuICAgIGNvbnN0IHZpc2libGVQcmV2SW5kZXggPSB2aXNpYmxlQ29sdW1ucy5maW5kSW5kZXgoXG4gICAgICAoY29sOiBhbnkpID0+IGNvbC5oZWFkZXIgPT09IHByZXZpb3VzSGVhZGVyXG4gICAgKTtcbiAgICBjb25zdCB2aXNpYmxlQ3VyckluZGV4ID0gdmlzaWJsZUNvbHVtbnMuZmluZEluZGV4KFxuICAgICAgKGNvbDogYW55KSA9PiBjb2wuaGVhZGVyID09PSBjdXJyZW50SGVhZGVyXG4gICAgKTtcbiAgICBjb25zdCBnZXRGaWVsZHMgPSAoaXRlbTogYW55KTogc3RyaW5nW10gPT4ge1xuICAgICAgaWYgKGl0ZW0/LmNoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkoaXRlbS5jaGlsZHJlbikpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uY2hpbGRyZW4ubWFwKChjaGlsZDogYW55KSA9PiBjaGlsZC5maWVsZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW2l0ZW0uZmllbGRdO1xuICAgIH07XG4gICAgY29uc3QgcHJldkZpZWxkcyA9IGdldEZpZWxkcyh2aXNpYmxlQ29sdW1uc1t2aXNpYmxlUHJldkluZGV4XSk7XG4gICAgY29uc3QgY3VyckZpZWxkcyA9IGdldEZpZWxkcyh2aXNpYmxlQ29sdW1uc1t2aXNpYmxlQ3VyckluZGV4XSk7XG4gICAgY29uc3QgYWxsRmllbGRzID0gWy4uLnByZXZGaWVsZHMsIC4uLmN1cnJGaWVsZHNdO1xuICAgIGNvbnN0IGNlbGxzID0gYWxsRmllbGRzLmxlbmd0aFxuICAgICAgPyAoW10gYXMgSFRNTEVsZW1lbnRbXSkuY29uY2F0KFxuICAgICAgICAuLi5hbGxGaWVsZHMubWFwKChmaWVsZCkgPT5cbiAgICAgICAgICBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtmaWVsZD1cIiR7ZmllbGR9XCJdYCkpIGFzIEhUTUxFbGVtZW50W11cbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgOiBbXTtcbiAgICBjb25zdCBmaXJzdFBvc2l0aW9ucyA9IG5ldyBNYXA8SFRNTEVsZW1lbnQsIG51bWJlcj4oKTtcbiAgICBjZWxscy5mb3JFYWNoKChlbCkgPT4gZmlyc3RQb3NpdGlvbnMuc2V0KGVsLCBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0KSk7XG4gICAgbW92ZUl0ZW1JbkFycmF5KCh0aGlzIGFzIGFueSlbc2VjdGlvbl0sIHZpc2libGVQcmV2SW5kZXgsIHZpc2libGVDdXJySW5kZXgpO1xuICAgIGNvbnN0IHByZXZDb2xJbmRleEluQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmhlYWRlciA9PT0gcHJldmlvdXNIZWFkZXIpO1xuICAgIGNvbnN0IGN1cnJDb2xJbmRleEluQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmhlYWRlciA9PT0gY3VycmVudEhlYWRlcik7XG4gICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMuY29sdW1ucywgcHJldkNvbEluZGV4SW5Db2x1bW5zLCBjdXJyQ29sSW5kZXhJbkNvbHVtbnMpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgYWxsRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRDZWxscyA9IEFycmF5LmZyb20oXG4gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2ZpZWxkPVwiJHtmaWVsZH1cIl1gKVxuICAgICAgICApIGFzIEhUTUxFbGVtZW50W107XG5cbiAgICAgICAgdXBkYXRlZENlbGxzLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgY29uc3Qgb2xkTGVmdCA9IGZpcnN0UG9zaXRpb25zLmdldChlbCk7XG4gICAgICAgICAgaWYgKG9sZExlZnQgPT0gbnVsbCkgcmV0dXJuOyBcblxuICAgICAgICAgIGNvbnN0IG5ld0xlZnQgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuICAgICAgICAgIGNvbnN0IGRlbHRhWCA9IG9sZExlZnQgLSBuZXdMZWZ0O1xuXG4gICAgICAgICAgaWYgKGRlbHRhWCAhPT0gMCkge1xuICAgICAgICAgICAgZWwuc3R5bGUud2lsbENoYW5nZSA9ICd0cmFuc2Zvcm0nO1xuICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNpdGlvbiA9ICdub25lJztcbiAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVYKCR7ZGVsdGFYfXB4KWA7XG5cbiAgICAgICAgICAgIC8vIEZvcmNlIHJlZmxvd1xuICAgICAgICAgICAgdm9pZCBlbC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNpdGlvbiA9ICd0cmFuc2Zvcm0gMjUwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSc7XG4gICAgICAgICAgICBlbC5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlWCgwKSc7XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNpdGlvbiA9ICcnO1xuICAgICAgICAgICAgICBlbC5zdHlsZS50cmFuc2Zvcm0gPSAnJztcbiAgICAgICAgICAgICAgZWwuc3R5bGUud2lsbENoYW5nZSA9ICcnO1xuICAgICAgICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgaGFuZGxlKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgaGFuZGxlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgLy8gfSk7XG4gIH1cblxuXG4gIG9uRHJvcEdyb3VwKCkge1xuICAgIHRoaXMubGVmdFBpbm5lZENvbHVtbnMgPSB0aGlzLmRlZXBDbG9uZUNvbHVtbnModGhpcy5wcmV2aWV3TGVmdFBpbm5lZENvbHVtbnMpO1xuICAgIHRoaXMuY2VudGVyQ29sdW1ucyA9IHRoaXMuZGVlcENsb25lQ29sdW1ucyh0aGlzLnByZXZpZXdDZW50ZXJDb2x1bW5zKTtcbiAgICB0aGlzLnJpZ2h0UGlubmVkQ29sdW1ucyA9IHRoaXMuZGVlcENsb25lQ29sdW1ucyh0aGlzLnByZXZpZXdSaWdodFBpbm5lZENvbHVtbnMpO1xuICAgIGNvbnN0IHNlbmREYXRhID0ge1xuICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgIGZpbHRlcnM6IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpLFxuICAgICAgbm9fb2ZfcmVjb3JkczogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2VTaXplLFxuICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG5cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIGRlZXBDbG9uZUNvbHVtbnMoY29sdW1uczogYW55W10pOiBhbnlbXSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbHVtbnMpKSByZXR1cm4gW107XG5cbiAgICByZXR1cm4gY29sdW1ucy5tYXAoY29sID0+ICh7XG4gICAgICAuLi5jb2wsXG4gICAgICBxdWVyeTogY29sLnF1ZXJ5ID8geyAuLi5jb2wucXVlcnkgfSA6IG51bGwsXG4gICAgICBjb2x1bW5fZHJvcGRvd25fdmFsdWU6IEFycmF5LmlzQXJyYXkoY29sLmNvbHVtbl9kcm9wZG93bl92YWx1ZSlcbiAgICAgICAgPyBbLi4uY29sLmNvbHVtbl9kcm9wZG93bl92YWx1ZV1cbiAgICAgICAgOiBbXSxcbiAgICAgIC8vIFJlY3Vyc2l2ZWx5IGRlZXAgY2xvbmUgY2hpbGRyZW4gaWYgcHJlc2VudFxuICAgICAgY2hpbGRyZW46IEFycmF5LmlzQXJyYXkoY29sLmNoaWxkcmVuKVxuICAgICAgICA/IHRoaXMuZGVlcENsb25lQ29sdW1ucyhjb2wuY2hpbGRyZW4pXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0pKTtcbiAgfVxuXG5cbiAgYXN5bmMgb25Ecm9wVG9wR3JvdXAoZXZlbnQ6IENka0RyYWdEcm9wPGFueT4pIHtcbiAgICBpZiAodGhpcy5pc091dHNpZGVDb250YWluZXIpIHJldHVybjtcbiAgICB0aGlzLm1haW5TY3JvbGwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy50cmFuc2xhdGVZID0gMDtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgY29uc3QgZHJhZ2dlZERhdGEgPSBldmVudC5pdGVtLmRhdGE7XG4gICAgaWYgKGRyYWdnZWREYXRhPy5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KGRyYWdnZWREYXRhLmNoaWxkcmVuKSkge1xuICAgICAgZHJhZ2dlZERhdGEuY2hpbGRyZW4uZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGNvbC5pc192aXNpYmxlICYmIGNvbC5pc19ncm91cGFibGUpIHtcbiAgICAgICAgICB0aGlzLmdyb3VwZWRDb2x1bW5zLnB1c2goY29sKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChkcmFnZ2VkRGF0YS5pc192aXNpYmxlICYmIGRyYWdnZWREYXRhLmlzX2dyb3VwYWJsZSkge1xuICAgICAgICB0aGlzLmdyb3VwZWRDb2x1bW5zLnB1c2goZHJhZ2dlZERhdGEpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmRyYWdnaW5nSW5Hcm91cEFyZWEgPSBmYWxzZTtcbiAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmdyb3VwZWRDb2x1bW5zLm1hcCgoaXRlbSkgPT4gaXRlbS5maWVsZCk7XG4gICAgdGhpcy5kYXRhU2V0ID0gYXdhaXQgdGhpcy5ncm91cERhdGFBc3luYyh0aGlzLm9yaWdpbmFsRGF0YVNldCwgZmllbGRzKTtcbiAgICB0aGlzLnVwZGF0ZUZsYXR0ZW5lZERhdGEoKTtcbiAgICB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoc0FuZEdyb3VwcygpO1xuICAgIHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlUm93cygwKTtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5zZWxlY3RlZENlbGxzID0gW107XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcy5jbGVhcigpO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDEwMDApO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGFzeW5jIG9uR3JvdXBSZW9yZGVyKGV2ZW50OiBDZGtEcmFnRHJvcDxhbnlbXT4pIHtcbiAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5ncm91cGVkQ29sdW1ucywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmdyb3VwZWRDb2x1bW5zLm1hcCgoaXRlbSkgPT4gaXRlbS5maWVsZCk7XG4gICAgdGhpcy5kYXRhU2V0ID0gYXdhaXQgdGhpcy5ncm91cERhdGFBc3luYyh0aGlzLm9yaWdpbmFsRGF0YVNldCwgZmllbGRzKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlRmxhdHRlbmVkRGF0YSgpO1xuICAgICAgdGhpcy51cGRhdGVDb2x1bW5XaWR0aHNBbmRHcm91cHMoKTtcbiAgICAgIHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gICAgICB0aGlzLnVwZGF0ZVZpc2libGVSb3dzKDApO1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMTAwKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5ncm91cEJveFBhZGRpbmcgPSB0aGlzLmNvbHVtbnNHcm91cGVkQm94Py5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpXG4gICAgfSwgMTApO1xuICB9XG5cbiAgYXN5bmMgdW5ncm91cENvbHVtbihjb2x1bW46IGFueSkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdyb3VwZWRDb2x1bW5zLmZpbmRJbmRleChcbiAgICAgICAgKGNvbCkgPT4gY29sLmZpZWxkID09PSBjb2x1bW4uZmllbGRcbiAgICAgICk7XG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBlZENvbHVtbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuZ3JvdXBlZENvbHVtbnMubWFwKChpdGVtKSA9PiBpdGVtLmZpZWxkKTtcbiAgICAgIHRoaXMuZGF0YVNldCA9IGF3YWl0IHRoaXMuZ3JvdXBEYXRhQXN5bmModGhpcy5vcmlnaW5hbERhdGFTZXQsIGZpZWxkcyk7XG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoZ3JvdXApID0+IHtcbiAgICAgICAgaWYgKGdyb3VwPy5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KGdyb3VwLmNoaWxkcmVuKSkge1xuICAgICAgICAgIGdyb3VwLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChjaGlsZC5maWVsZCA9PT0gY29sdW1uLmZpZWxkKSB7XG4gICAgICAgICAgICAgIGNoaWxkLmlzUm93R3JvdXBlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGdyb3VwLmZpZWxkID09PSBjb2x1bW4uZmllbGQpIHtcbiAgICAgICAgICBncm91cC5pc1Jvd0dyb3VwZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVGbGF0dGVuZWREYXRhKCk7XG4gICAgICAgIHRoaXMudXBkYXRlQ29sdW1uV2lkdGhzQW5kR3JvdXBzKCk7XG4gICAgICAgIHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZVJvd3MoMCk7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9LCAxMDAwKTtcblxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGluIHVuZ3JvdXBDb2x1bW46XCIsIGVycik7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cblxuICBzaG91bGRUaGVHcm91cEhlYWRlclNob3coZ3JvdXA6IGFueSkge1xuICAgIGlmIChncm91cD8uY2hpbGRyZW4gJiYgZ3JvdXAuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZ3JvdXAuY2hpbGRyZW4uc29tZShcbiAgICAgICAgKGNvbDogYW55KSA9PiBjb2wuaXNfdmlzaWJsZSAmJiAhY29sPy5pc1Jvd0dyb3VwZWRcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBncm91cD8uaXNfdmlzaWJsZSAmJiAhZ3JvdXA/LmlzUm93R3JvdXBlZDtcbiAgfVxuXG5cbiAgLy8gb25DaGlsZERyYWdTdGFydCgpIHtcbiAgLy8gICBkZWJ1Z2dlcjtcbiAgLy8gfVxuXG4gIC8vIGRyb3BMaXN0SWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8vIGdlbmVyYXRlRHJvcExpc3RJZHMoKSB7XG4gIC8vICAgdGhpcy5kcm9wTGlzdElkcyA9IFtdO1xuXG4gIC8vICAgY29uc3Qgc2VjdGlvbktleXMgPSBbXG4gIC8vICAgICAnbGVmdFBpbm5lZENvbHVtbnMnLFxuICAvLyAgICAgJ2NlbnRlckNvbHVtbnMnLFxuICAvLyAgICAgJ3JpZ2h0UGlubmVkQ29sdW1ucycsXG4gIC8vICAgXTtcblxuICAvLyAgIHNlY3Rpb25LZXlzLmZvckVhY2goKHNlY3Rpb25LZXkpID0+IHtcbiAgLy8gICAgIGNvbnN0IHNlY3Rpb25Db2xzID0gKHRoaXMgYXMgYW55KVtzZWN0aW9uS2V5XTtcblxuICAvLyAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbDogYW55LCBpOiBudW1iZXIpID0+IHtcbiAgLy8gICAgICAgaWYgKGNvbD8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHtcbiAgLy8gICAgICAgICBjb2wuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQ6IGFueSwgY2hpbGRJbmRleDogbnVtYmVyKSA9PiB7XG4gIC8vICAgICAgICAgICBpZiAoY2hpbGQ/LmlzX3Zpc2libGUgJiYgIWNoaWxkLmlzUm93R3JvdXBlZCkge1xuICAvLyAgICAgICAgICAgICBjb25zdCBpZCA9IGAke3NlY3Rpb25LZXl9JHtpfWA7XG4gIC8vICAgICAgICAgICAgIHRoaXMuZHJvcExpc3RJZHMucHVzaChpZCk7XG4gIC8vICAgICAgICAgICB9XG4gIC8vICAgICAgICAgfSk7XG4gIC8vICAgICAgIH0gZWxzZSBpZiAoY29sPy5pc192aXNpYmxlICYmICFjb2wuaXNSb3dHcm91cGVkKSB7XG4gIC8vICAgICAgICAgY29uc3QgaWQgPSBgJHtzZWN0aW9uS2V5fSR7aX1gO1xuICAvLyAgICAgICAgIHRoaXMuZHJvcExpc3RJZHMucHVzaChpZCk7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH0pO1xuICAvLyAgIH0pO1xuICAvLyB9XG5cbiAgb25DaGlsZERyb3BsaXN0U29ydGVkID0gYXN5bmMgKGV2ZW50OiBDZGtEcmFnU29ydEV2ZW50PGFueT4sIHNlY3Rpb246IHN0cmluZykgPT4ge1xuICAgIGlmIChldmVudC5wcmV2aW91c0luZGV4ID09PSBldmVudC5jdXJyZW50SW5kZXgpIHJldHVybjtcblxuICAgIGNvbnN0IHBpbm5lZCA9XG4gICAgICBzZWN0aW9uID09ICdwcmV2aWV3TGVmdFBpbm5lZENvbHVtbnMnXG4gICAgICAgID8gJ2xlZnQnXG4gICAgICAgIDogc2VjdGlvbiA9PSAncHJldmlld1JpZ2h0UGlubmVkQ29sdW1ucydcbiAgICAgICAgICA/ICdyaWdodCdcbiAgICAgICAgICA6IFwiXCI7XG5cbiAgICBjb25zdCBjb2x1bW4gPSBldmVudC5pdGVtLmRhdGE7XG4gICAgbGV0IGdyb3VwID0gdGhpcy5jb2x1bW5zLmZpbmQoXG4gICAgICAoY29sOiBhbnkpID0+XG4gICAgICAgIEFycmF5LmlzQXJyYXkoY29sLmNoaWxkcmVuKSAmJlxuICAgICAgICBjb2wuY2hpbGRyZW4uc29tZSgoY2hpbGQ6IGFueSkgPT4gY2hpbGQ/LmZpZWxkID09PSBjb2x1bW4/LmZpZWxkKVxuICAgICk7XG4gICAgY29uc3QgZ3JvdXBJbmRleCA9IHRoaXMuY29sdW1ucy5maW5kSW5kZXgoXG4gICAgICAoY29sKSA9PiBjb2wuaGVhZGVyID09PSBncm91cC5oZWFkZXJcbiAgICApO1xuICAgIGNvbnN0IGZpbHRlcmVkR3JvdXAgPSBncm91cD8uY2hpbGRyZW4uZmlsdGVyKChjb2w6IGFueSkgPT4ge1xuICAgICAgY29uc3QgaXNQaW5uZWRNYXRjaCA9XG4gICAgICAgIChwaW5uZWQgPT09IFwiXCIgJiYgKCFjb2w/LnBpbm5lZCB8fCBjb2w/LnBpbm5lZCA9PT0gXCJcIikpIHx8IGNvbD8ucGlubmVkID09PSBwaW5uZWQ7XG4gICAgICByZXR1cm4gaXNQaW5uZWRNYXRjaCAmJiBjb2w/LmlzX3Zpc2libGU7XG4gICAgfSk7XG5cbiAgICBjb25zdCBwcmV2aW91c0ZpZWxkID0gZmlsdGVyZWRHcm91cFtldmVudC5wcmV2aW91c0luZGV4XS5maWVsZDtcbiAgICBjb25zdCBjdXJyZW50RmllbGQgPSBmaWx0ZXJlZEdyb3VwW2V2ZW50LmN1cnJlbnRJbmRleF0uZmllbGQ7XG4gICAgY29uc3QgdmlzaWJsZVByZXZJbmRleCA9IGdyb3VwLmNoaWxkcmVuLmZpbmRJbmRleChcbiAgICAgIChjb2w6IGFueSkgPT4gY29sLmZpZWxkID09IHByZXZpb3VzRmllbGRcbiAgICApO1xuICAgIGNvbnN0IHZpc2libGVDdXJySW5kZXggPSBncm91cC5jaGlsZHJlbi5maW5kSW5kZXgoXG4gICAgICAoY29sOiBhbnkpID0+IGNvbC5maWVsZCA9PSBjdXJyZW50RmllbGRcbiAgICApO1xuICAgIGNvbnN0IGFsbEZpZWxkcyA9IFtwcmV2aW91c0ZpZWxkLCBjdXJyZW50RmllbGRdO1xuICAgIGNvbnN0IGNlbGxzID0gYWxsRmllbGRzLmxlbmd0aFxuICAgICAgPyAoW10gYXMgSFRNTEVsZW1lbnRbXSkuY29uY2F0KFxuICAgICAgICAuLi5hbGxGaWVsZHMubWFwKChmaWVsZCkgPT5cbiAgICAgICAgICBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtmaWVsZD1cIiR7ZmllbGR9XCJdYCkpIGFzIEhUTUxFbGVtZW50W11cbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgOiBbXTtcblxuICAgIGNvbnN0IGdyb3VwSW5TZWN0aW9uID0gKHRoaXMgYXMgYW55KVtzZWN0aW9uXS5maW5kKFxuICAgICAgKGNvbDogYW55KSA9PlxuICAgICAgICBBcnJheS5pc0FycmF5KGNvbC5jaGlsZHJlbikgJiZcbiAgICAgICAgY29sLmNoaWxkcmVuLnNvbWUoKGNoaWxkOiBhbnkpID0+IGNoaWxkPy5maWVsZCA9PT0gY29sdW1uPy5maWVsZClcbiAgICApO1xuXG4gICAgY29uc3QgZmlsdGVyR3JvdXBJblNlY3Rpb24gPSAodGhpcyBhcyBhbnkpW3NlY3Rpb25dLmZpbmQoXG4gICAgICAoY29sOiBhbnkpID0+XG4gICAgICAgIEFycmF5LmlzQXJyYXkoY29sLmNoaWxkcmVuKSAmJlxuICAgICAgICBjb2wuY2hpbGRyZW4uc29tZSgoY2hpbGQ6IGFueSkgPT4gY2hpbGQ/LmZpZWxkID09PSBjb2x1bW4/LmZpZWxkKVxuICAgICk7XG5cbiAgICBjb25zdCBncm91cEluU2VjdGlvbkluZGV4ID0gKHRoaXMgYXMgYW55KVtzZWN0aW9uXS5maW5kSW5kZXgoXG4gICAgICAoY29sOiBhbnkpID0+IGNvbC5oZWFkZXIgPT09IGdyb3VwSW5TZWN0aW9uLmhlYWRlclxuICAgICk7XG5cbiAgICBjb25zdCBmaXJzdFBvc2l0aW9ucyA9IG5ldyBNYXA8SFRNTEVsZW1lbnQsIG51bWJlcj4oKTtcbiAgICBjZWxscy5mb3JFYWNoKChlbCkgPT4gZmlyc3RQb3NpdGlvbnMuc2V0KGVsLCBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0KSk7XG4gICAgbW92ZUl0ZW1JbkFycmF5KFxuICAgICAgdGhpcy5jb2x1bW5zW2dyb3VwSW5kZXhdPy5jaGlsZHJlbixcbiAgICAgIHZpc2libGVQcmV2SW5kZXgsXG4gICAgICB2aXNpYmxlQ3VyckluZGV4XG4gICAgKTtcblxuICAgIG1vdmVJdGVtSW5BcnJheShcbiAgICAgICh0aGlzIGFzIGFueSlbc2VjdGlvbl0/Lltncm91cEluU2VjdGlvbkluZGV4XS5jaGlsZHJlbixcbiAgICAgIGV2ZW50LnByZXZpb3VzSW5kZXgsXG4gICAgICBldmVudC5jdXJyZW50SW5kZXhcbiAgICApO1xuXG4gICAgLy8gYXdhaXQgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLm5nWm9uZS5vblN0YWJsZSk7XG4gICAgYWxsRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICBjb25zdCB1cGRhdGVkQ2VsbHMgPSBBcnJheS5mcm9tKFxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZmllbGQ9XCIke2ZpZWxkfVwiXWApXG4gICAgICApIGFzIEhUTUxFbGVtZW50W107XG4gICAgICB1cGRhdGVkQ2VsbHMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgY29uc3QgbmV3TGVmdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgICAgIGNvbnN0IG9sZExlZnQgPSBmaXJzdFBvc2l0aW9ucy5nZXQoZWwpITtcbiAgICAgICAgY29uc3QgZGVsdGFYID0gb2xkTGVmdCAtIG5ld0xlZnQ7XG4gICAgICAgIGlmIChkZWx0YVggIT09IDApIHtcbiAgICAgICAgICBlbC5zdHlsZS53aWxsQ2hhbmdlID0gJ3RyYW5zZm9ybSc7XG4gICAgICAgICAgZWwuc3R5bGUudHJhbnNpdGlvbiA9ICdub25lJztcbiAgICAgICAgICBlbC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWCgke2RlbHRhWH1weClgO1xuICAgICAgICAgIHZvaWQgZWwub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIGVsLnN0eWxlLnRyYW5zaXRpb24gPSAndHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSknO1xuICAgICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGVYKDApJztcblxuICAgICAgICAgIGNvbnN0IGhhbmRsZSA9ICgpID0+IHtcbiAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zaXRpb24gPSAnJztcbiAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9ICcnO1xuICAgICAgICAgICAgZWwuc3R5bGUud2lsbENoYW5nZSA9ICcnO1xuICAgICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIGhhbmRsZSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgaGFuZGxlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBhbGxGaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZENlbGxzID0gQXJyYXkuZnJvbShcbiAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZmllbGQ9XCIke2ZpZWxkfVwiXWApXG4gICAgICAgICkgYXMgSFRNTEVsZW1lbnRbXTtcblxuICAgICAgICB1cGRhdGVkQ2VsbHMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICBjb25zdCBvbGRMZWZ0ID0gZmlyc3RQb3NpdGlvbnMuZ2V0KGVsKTtcbiAgICAgICAgICBpZiAob2xkTGVmdCA9PSBudWxsKSByZXR1cm47IC8vIHNhZmV0eSBjaGVja1xuXG4gICAgICAgICAgY29uc3QgbmV3TGVmdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgICAgICAgY29uc3QgZGVsdGFYID0gb2xkTGVmdCAtIG5ld0xlZnQ7XG5cbiAgICAgICAgICBpZiAoZGVsdGFYICE9PSAwKSB7XG4gICAgICAgICAgICBlbC5zdHlsZS53aWxsQ2hhbmdlID0gJ3RyYW5zZm9ybSc7XG4gICAgICAgICAgICBlbC5zdHlsZS50cmFuc2l0aW9uID0gJ25vbmUnO1xuICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVgoJHtkZWx0YVh9cHgpYDtcblxuICAgICAgICAgICAgLy8gRm9yY2UgcmVmbG93XG4gICAgICAgICAgICB2b2lkIGVsLm9mZnNldFdpZHRoO1xuXG4gICAgICAgICAgICBlbC5zdHlsZS50cmFuc2l0aW9uID0gJ3RyYW5zZm9ybSAyNTBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpJztcbiAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGVYKDApJztcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gKCkgPT4ge1xuICAgICAgICAgICAgICBlbC5zdHlsZS50cmFuc2l0aW9uID0gJyc7XG4gICAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9ICcnO1xuICAgICAgICAgICAgICBlbC5zdHlsZS53aWxsQ2hhbmdlID0gJyc7XG4gICAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBoYW5kbGUpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBoYW5kbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIGNvbnNvbGUuZ3JvdXAoJ0dyb3VwOiAnLCBncm91cCk7XG4gIH1cblxuXG4gIG9uQ2hpbGREcm9wbGlzdERyb3BlZChjZGtEcmFnRHJvcGV2ZW50OiBDZGtEcmFnRHJvcDxhbnk+KSB7XG4gICAgdGhpcy51cGRhdGVDb2x1bW5XaWR0aHNBbmRHcm91cHMoKTtcbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgIG5vX29mX3JlY29yZHM6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMik7XG4gIH1cblxuICAvLyBSb3dzIEdyb3VwaW5nIExvZ2ljIEdvZXMgSGVyZVxuXG4gIGdyb3VwRGF0YShkYXRhOiBhbnlbXSwgZ3JvdXBGaWVsZHM6IHN0cmluZ1tdKTogYW55W10ge1xuICAgIGxldCBkYXRhU2V0ID0gc3RydWN0dXJlZENsb25lKGRhdGEpO1xuICAgIGlmICghZ3JvdXBGaWVsZHMubGVuZ3RoKSByZXR1cm4gZGF0YTtcbiAgICBjb25zdCBbY3VycmVudEZpZWxkLCAuLi5yZXN0RmllbGRzXSA9IGdyb3VwRmllbGRzO1xuICAgIGNvbnN0IGdyb3VwZWRNYXAgPSBuZXcgTWFwPHN0cmluZywgYW55W10+KCk7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGFTZXQpIHtcbiAgICAgIGxldCBrZXlWYWx1ZSA9IGN1cnJlbnRGaWVsZC5zcGxpdCgnLicpLnJlZHVjZSgob2JqLCBrKSA9PiBvYmo/LltrXSwgaXRlbSk7XG4gICAgICBsZXQgZ3JvdXBLZXk6IHN0cmluZztcbiAgICAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIGZvciBpc19kZWxldGVkIGZpZWxkXG4gICAgICBpZiAoY3VycmVudEZpZWxkID09PSAnaXNfZGVsZXRlZCcgfHwgY3VycmVudEZpZWxkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2lzX2RlbGV0ZWQnKSkge1xuICAgICAgaWYgKGtleVZhbHVlID09PSB0cnVlIHx8IGtleVZhbHVlID09PSAndHJ1ZScpIHtcbiAgICAgICAgZ3JvdXBLZXkgPSAnQXJjaGl2ZWQnO1xuICAgICAgfSBlbHNlIGlmIChrZXlWYWx1ZSA9PT0gZmFsc2UgfHwga2V5VmFsdWUgPT09ICdmYWxzZScpIHtcbiAgICAgICAgZ3JvdXBLZXkgPSAnVW5hcmNoaXZlZCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBncm91cEtleSA9IFwiX0JsYW5rXCI7XG4gICAgICB9XG4gICAgICAgfVxuICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGtleVZhbHVlKSkge1xuICAgICAgICBpZiAoa2V5VmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgZ3JvdXBLZXkgPSBcIl9CbGFua1wiO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBrZXlWYWx1ZVswXSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgIGdyb3VwS2V5ID0ga2V5VmFsdWVcbiAgICAgICAgICAgIC5tYXAob2JqID0+IChvYmo/LmRlcGFydG1lbnRfbmFtZSB8fCBvYmoucm9sZU5hbWUgfHwgb2JqPy5mdWxsX25hbWUgfHwgIG9iaj8udmFsdWUgfHwgb2JqPy5uYW1lKSA/PyBcIl9CbGFua1wiKVxuICAgICAgICAgICAgLmpvaW4oXCIsXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGdyb3VwS2V5ID0ga2V5VmFsdWVcbiAgICAgICAgICAgIC5tYXAodmFsID0+IHZhbCA/PyBcIl9CbGFua1wiKVxuICAgICAgICAgICAgLmpvaW4oXCIsXCIpO1xuICAgICAgICB9XG4gICAgICB9IFxuICAgICAgIC8vIENoZWNrIGZvciBEYXRlIG9iamVjdCBPUiBkYXRlIHN0cmluZ1xuICAgIGVsc2UgaWYgKGtleVZhbHVlIGluc3RhbmNlb2YgRGF0ZSB8fCAodHlwZW9mIGtleVZhbHVlID09PSAnc3RyaW5nJyAmJiAhaXNOYU4oRGF0ZS5wYXJzZShrZXlWYWx1ZSkpKSkge1xuICAgICAgY29uc3QgZGF0ZU9iaiA9IGtleVZhbHVlIGluc3RhbmNlb2YgRGF0ZSA/IGtleVZhbHVlIDogbmV3IERhdGUoa2V5VmFsdWUpO1xuICAgICAgZ3JvdXBLZXkgPSB0aGlzLmNvbW1vblNldmljZS5mb3JtYXREYXRlVmFsdWUoZGF0ZU9iaiwgdGhpcy5kYXRlRm9ybWF0IHx8ICdkZC9NTS95eXl5Jyk7XG4gICAgfSBcbiAgICAgLy8gIEhhbmRsZSBvYmplY3RzIChsaWtlIHtpZCwgbmFtZSwgdmFsdWV9KVxuICAgIGVsc2UgaWYgKHR5cGVvZiBrZXlWYWx1ZSA9PT0gJ29iamVjdCcgJiYga2V5VmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkoa2V5VmFsdWUpKSB7XG4gICAgICAvLyBUcnkgY29tbW9uIHByb3BlcnR5IG5hbWVzIGZvciBvYmplY3RzXG4gICAgICBncm91cEtleSA9IGtleVZhbHVlLnZhbHVlID8/IFxuICAgICAgICAgICAgICAgICBrZXlWYWx1ZS5uYW1lID8/IFxuICAgICAgICAgICAgICAgICBrZXlWYWx1ZS5pZCA/PyBcbiAgICAgICAgICAgICAgICAga2V5VmFsdWUubGFiZWwgPz8gXG4gICAgICAgICAgICAgICAgIGtleVZhbHVlW09iamVjdC5rZXlzKGtleVZhbHVlKVswXV0gPz8gXG4gICAgICAgICAgICAgICAgIFwiX0JsYW5rXCI7XG4gICAgICBcbiAgICAgIC8vIElmIGl0J3Mgc3RpbGwgYW4gb2JqZWN0IGFmdGVyIGV4dHJhY3Rpb24sIGNvbnZlcnQgdG8gc3RyaW5nXG4gICAgICBpZiAodHlwZW9mIGdyb3VwS2V5ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBncm91cEtleSA9IFwiX0JsYW5rXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBncm91cEtleSA9IHRoaXMudG9UaXRsZUNhc2UoU3RyaW5nKGdyb3VwS2V5KS50cmltKCkpO1xuICAgICAgfVxuICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBncm91cEtleSA9IGtleVZhbHVlID8gdGhpcy50b1RpdGxlQ2FzZShTdHJpbmcoa2V5VmFsdWUpLnRyaW0oKSkgOiBcIl9CbGFua1wiO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBpZiAodHlwZW9mIGtleVZhbHVlID09PSAnc3RyaW5nJyAmJiAhaXNOYU4oRGF0ZS5wYXJzZShrZXlWYWx1ZSkpKSB7XG4gICAgICAvLyAgIGNvbnN0IGRhdGVPYmogPSBuZXcgRGF0ZShrZXlWYWx1ZSk7XG4gICAgICAvLyAgIGdyb3VwS2V5ID0gdGhpcy5jb21tb25TZXZpY2UuZm9ybWF0RGF0ZVZhbHVlKGRhdGVPYmosIHRoaXMuZGF0ZUZvcm1hdCB8fCAnZGQvTU0veXl5eScpO1xuICAgICAgLy8gfVxuXG4gICAgICBpZiAoIWdyb3VwZWRNYXAuaGFzKGdyb3VwS2V5KSkgZ3JvdXBlZE1hcC5zZXQoZ3JvdXBLZXksIFtdKTtcbiAgICAgIGdyb3VwZWRNYXAuZ2V0KGdyb3VwS2V5KSEucHVzaChpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIEFycmF5LmZyb20oZ3JvdXBlZE1hcC5lbnRyaWVzKCkpLm1hcCgoW2dyb3VwVmFsdWUsIGdyb3VwSXRlbXNdKSA9PiAoe1xuICAgICAgaXNHcm91cDogdHJ1ZSxcbiAgICAgIGdyb3VwRmllbGQ6IGN1cnJlbnRGaWVsZCxcbiAgICAgIGdyb3VwVmFsdWUsXG4gICAgICBjaGlsZHJlbjogdGhpcy5ncm91cERhdGEoZ3JvdXBJdGVtcywgcmVzdEZpZWxkcyksXG4gICAgICBpc0V4cGFuZDogZmFsc2UsXG4gICAgfSkpO1xuICB9XG5cbiAgdG9UaXRsZUNhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdHJcbiAgICAgID8udG9Mb3dlckNhc2UoKVxuICAgICAgPy5zcGxpdCgnICcpXG4gICAgICA/Lm1hcCh3b3JkID0+IHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpKVxuICAgICAgPy5qb2luKCcgJyk7XG4gIH1cblxuXG4gIGNvdW50TGVhZlJvd3MoZ3JvdXA6IGFueSk6IG51bWJlciB7XG4gICAgaWYgKCFncm91cC5jaGlsZHJlbiB8fCAhZ3JvdXAuY2hpbGRyZW4ubGVuZ3RoKSByZXR1cm4gMDtcblxuICAgIHJldHVybiBncm91cC5jaGlsZHJlbi5yZWR1Y2UoKGNvdW50OiBudW1iZXIsIGNoaWxkOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBjb3VudCArIChjaGlsZC5pc0dyb3VwID8gdGhpcy5jb3VudExlYWZSb3dzKGNoaWxkKSA6IDEpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgaXNBY3RpdmVGaWx0ZXJPcGVuID0gZmFsc2U7XG4gIHRvZ2dsZUFjdGl2ZUZpbHRlcigpIHtcbiAgICB0aGlzLmlzQWN0aXZlRmlsdGVyT3BlbiA9ICF0aGlzLmlzQWN0aXZlRmlsdGVyT3BlbjtcbiAgfVxuXG4gIHRvZ2dsZUFjdGlvbnModHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGUgPT09IHRoaXMuYWN0aXZlVG9wQnV0dG9uKSB0aGlzLmFjdGl2ZVRvcEJ1dHRvbiA9IHR5cGU7XG4gICAgZWxzZSB0aGlzLmFjdGl2ZVRvcEJ1dHRvbiA9IHR5cGU7XG4gICAgdGhpcy5hY3RpdmVTdWJCdXR0b24gPSAnJztcbiAgICB0aGlzLmlzRmlsdGVyT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGFjdGl2ZVN1YkJ1dHRvbiA9ICcnO1xuICB0b2dnbGVTdWJBY3Rpb25zKHR5cGU6IHN0cmluZykge1xuICAgIHRoaXMuaXNUYWJsZVByZXNldE5vdENoYW5nZWQgPyAgKHRoaXMucHJlc2V0TmFtZSA9ICcnKSA6ICggdGhpcy5wcmVzZXROYW1lID0gIHRoaXMuc3RvcmVQcmVzZXROYW1lKVxuICAgIGlmICh0eXBlID09PSB0aGlzLmFjdGl2ZVN1YkJ1dHRvbikgdGhpcy5hY3RpdmVTdWJCdXR0b24gPSAnJztcbiAgICBlbHNlIHRoaXMuYWN0aXZlU3ViQnV0dG9uID0gdHlwZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICB0b2dnbGVBY3Rpb25zRHJvcGRvd24oKSB7XG4gICAgdGhpcy5zaG93QWN0aW9uc0Ryb3BEb3duID0gIXRoaXMuc2hvd0FjdGlvbnNEcm9wRG93bjtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuXG5cbiAgYXN5bmMgY2hhbmdlVGFibGVMYXlvdXQoZXZlbnQ6IEV2ZW50LCBsYXlvdXRUeXBlOiBzdHJpbmcpIHtcbiAgICBsZXQgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG5cbiAgICBpZiAodGFyZ2V0LmNoZWNrZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZUxheW91dCA9IGxheW91dFR5cGU7XG4gICAgICB0aGlzLnNldFRhYmxlTGF5b3V0KGxheW91dFR5cGUpXG4gICAgICB0aGlzLnVwZGF0ZVZpc2libGVSb3dzKHRoaXMubWFpblNjcm9sbD8ubmF0aXZlRWxlbWVudD8uc2Nyb2xsVG9wKTtcbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaEhlYWRlcnMoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGFibGVGaWx0ZXJWaWV3SWQpIHtcbiAgICAgIHRoaXMuc2F2ZVByZXNldCgnbW91c2VVcCcpO1xuICAgIH1cbiAgICB0aGlzLm9uRm9udENoYW5nZSgpXG4gIH1cblxuICBzZXRUYWJsZUxheW91dChsYXlvdXRUeXBlOiBzdHJpbmcpIHtcbiAgICBpZiAoIWxheW91dFR5cGUpIHJldHVybjtcbiAgICBpZiAobGF5b3V0VHlwZSA9PT0gJ3NtYWxsJykge1xuICAgICAgdGhpcy5yb3dIZWlnaHQgPSAzNjtcbiAgICAgIHRoaXMuaGVhZGVyUm93SGVpZ2h0ID0gNDA7XG4gICAgICB0aGlzLmJvZHlUZXh0Rm9udHNTaXplID0gdGhpcy5ib2R5VGV4dEZvbnRzU2l6ZSB8fCAxMDtcbiAgICAgIHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSA9IHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSB8fCAxMDtcblxuICAgIH0gZWxzZSBpZiAobGF5b3V0VHlwZSA9PT0gJ21lZGl1bScpIHtcbiAgICAgIHRoaXMucm93SGVpZ2h0ID0gNDQ7XG4gICAgICB0aGlzLmhlYWRlclJvd0hlaWdodCA9IDQ0O1xuICAgICAgdGhpcy5ib2R5VGV4dEZvbnRzU2l6ZSA9IHRoaXMuYm9keVRleHRGb250c1NpemUgfHwgMTQ7XG4gICAgICB0aGlzLmhlYWRlclRleHRGb250c1NpemUgPSB0aGlzLmhlYWRlclRleHRGb250c1NpemUgfHwgMTQ7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yb3dIZWlnaHQgPSA2MDtcbiAgICAgIHRoaXMuaGVhZGVyUm93SGVpZ2h0ID0gNTI7XG4gICAgICB0aGlzLmJvZHlUZXh0Rm9udHNTaXplID0gdGhpcy5ib2R5VGV4dEZvbnRzU2l6ZSB8fCAxNjtcbiAgICAgIHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSA9IHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSB8fCAxNjtcbiAgICB9XG4gICAgLy8gdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICB9XG5cbiAgZ2V0IHN0YXJ0SW5kZXhEYXRhKCkge1xuICAgIHJldHVybiAodGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2UgLSAxKSAqIHRoaXMucGFnaW5hdGlvbkNvbmZpZy5saW1pdDtcbiAgfVxuXG4gIGdldCBlbmRJbmRleCgpIHtcbiAgICByZXR1cm4gTWF0aC5taW4odGhpcy5zdGFydEluZGV4ICsgdGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0LCB0aGlzLnBhZ2luYXRpb25Db25maWcudG90YWxSZXN1bHRzKTtcbiAgfVxuXG4gIGdldCB2aXNpYmxlUGFnZXMoKTogKG51bWJlciB8IHN0cmluZylbXSB7XG4gICAgY29uc3QgcGFnZXM6IChudW1iZXIgfCBzdHJpbmcpW10gPSBbXTtcblxuICAgIGlmICh0aGlzLnBhZ2luYXRpb25Db25maWcudG90YWxQYWdlcyA8PSA3KSB7XG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSB0aGlzLnBhZ2luYXRpb25Db25maWcudG90YWxQYWdlczsgaSsrKSB7XG4gICAgICAgIHBhZ2VzLnB1c2goaSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhZ2VzLnB1c2goMSk7XG4gICAgICBpZiAodGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2UgPiAzKSB7XG4gICAgICAgIHBhZ2VzLnB1c2goJy4uLicpO1xuICAgICAgfVxuICAgICAgbGV0IHN0YXJ0ID0gTWF0aC5tYXgoMiwgdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2UgLSAxKTtcbiAgICAgIGxldCBlbmQgPSBNYXRoLm1pbih0aGlzLnBhZ2luYXRpb25Db25maWcudG90YWxQYWdlcyAtIDEsIHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlICsgMSk7XG5cbiAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkrKykge1xuICAgICAgICBwYWdlcy5wdXNoKGkpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2UgPCB0aGlzLnBhZ2luYXRpb25Db25maWcudG90YWxQYWdlcyAtIDIpIHtcbiAgICAgICAgcGFnZXMucHVzaCgnLi4uJyk7XG4gICAgICB9XG4gICAgICBwYWdlcy5wdXNoKHRoaXMucGFnaW5hdGlvbkNvbmZpZy50b3RhbFBhZ2VzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFnZXM7XG4gIH1cblxuXG4gIHNlYXJjaFRleHRGb3JGaWx0ZXJEcm9wRG93biA9ICcnO1xuICB0b2dnbGVDb2x1bW5JbkZpbHRlckRyb3Bkb3duKGNvbDogYW55KSB7XG5cbiAgfVxuXG4gIHJlbW92ZUNvbHVtbkZyb21GaWx0ZXIob3B0aW9uOiBhbnkpIHtcblxuICB9XG5cbiAgaGFuZGxlQmFja3NwYWNlKGV2ZW50OiBFdmVudCkge1xuICAgIC8vIElmIHNlYXJjaCBpcyBlbXB0eSwgcmVtb3ZlIGxhc3QgdGFnXG4gICAgaWYgKCF0aGlzLnNlYXJjaFRleHRGb3JGaWx0ZXJEcm9wRG93biAmJiB0aGlzLnNlbGVjdGVkRmlsdGVyT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGxhc3QgPSB0aGlzLnNlbGVjdGVkRmlsdGVyT3B0aW9uc1t0aGlzLnNlbGVjdGVkRmlsdGVyT3B0aW9ucy5sZW5ndGggLSAxXTtcbiAgICAgIHRoaXMudG9nZ2xlU2VsZWN0aW9uSW5GaWx0ZXIobGFzdCk7XG4gICAgfVxuICB9XG5cbiAgQFZpZXdDaGlsZCgnZmlsdGVyTWVudWVTZWFyY2hJbnB1dCcpIGZpbHRlck1lbnVlU2VhcmNoSW5wdXQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+XG4gIEBWaWV3Q2hpbGQoJ2ZpbHRlck1lbnVlVGV4dGNoSW5wdXQnKSBmaWx0ZXJNZW51ZVRleHRjaElucHV0ITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PlxuXG4gIG9wZW5GaWx0ZXJvblRocmVlRG90c0NsaWNrKGNvbDogYW55KSB7XG4gICAgaWYgKGNvbC50eXBlID09ICdpbWFnZScgfHwgIWNvbD8udHlwZSB8fCAhY29sLmlzX3NlYXJjaF9hYmxlKSByZXR1cm47XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbkZvckZpbHRlciA9IGNvbDtcbiAgICB0aGlzLmlzVGhyZWVEb3RzRmlsdGVyT3BlbiA9IHRydWU7XG4gICAgdGhpcy5hZGRGaWx0ZXJDb2x1bW5JbnB1dCA9ICcnO1xuICAgIGlmIChjb2wudHlwZSA9PT0gJ2Ryb3Bkb3duJyB8fCBjb2wudHlwZSA9PT0gJ2FycmF5Jykge1xuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuY2xlYXIoKTtcbiAgICAgIGNvbnN0IHNhdmVkSWRzID0gY29sPy5xdWVyeT8uX2lkcyB8fCBbXTtcbiAgICAgIHNhdmVkSWRzLmZvckVhY2goKGlkOiBzdHJpbmcpID0+IHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmFkZChpZCkpO1xuXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsdGVyT3B0aW9ucyA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LmNvbHVtbl9kcm9wZG93bl92YWx1ZT8uZmlsdGVyKFxuICAgICAgICAob3B0aW9uOiBhbnkpID0+IHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmhhcyhvcHRpb24/LmlkIHx8IG9wdGlvbj8uX2lkIHx8IG9wdGlvbilcbiAgICAgICk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyTWVudWVTZWFyY2hJbnB1dCkge1xuICAgICAgICAgIHRoaXMuZmlsdGVyTWVudWVTZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDEwMCk7XG4gICAgfSBlbHNlIGlmIChbJ3N0cmluZycsICdudW1iZXInLCAnZGF0ZScsICd0aW1lJ10uaW5jbHVkZXMoY29sLnR5cGUpKSB7XG4gICAgICB0aGlzLmZpcnN0Q29uZGl0aW9uID0gY29sLnF1ZXJ5LmZpcnN0X2NvbmRpdGlvbiA/IGNvbC5xdWVyeS5maXJzdF9jb25kaXRpb24gOiAoKGNvbC50eXBlID09ICdkYXRlJyB8fCBjb2wudHlwZSA9PSAndGltZScgfHwgY29sLnR5cGUgPT0gJ251bWJlcicpID8gJ2VxdWFsJyA6ICdjb250YWluJyk7XG4gICAgICB0aGlzLmZpcnN0VmFsdWUgPSBjb2w/LnF1ZXJ5Py5maXJzdF92YWx1ZSB8fCAnJztcbiAgICAgIHRoaXMuY29uZGl0aW9uID0gY29sPy5xdWVyeT8uY29uZGl0aW9uIHx8ICdub25lJztcbiAgICAgIHRoaXMuc2Vjb25kQ29uZGl0aW9uID0gY29sPy5xdWVyeT8uc2Vjb25kX2NvbmRpdGlvbiA/IGNvbD8ucXVlcnk/LnNlY29uZF9jb25kaXRpb24gOiAoKGNvbC50eXBlID09ICdkYXRlJyB8fCBjb2wudHlwZSA9PSAndGltZScgfHwgY29sLnR5cGUgPT0gJ251bWJlcicpID8gJ2VxdWFsJyA6ICdjb250YWluJyk7XG4gICAgICB0aGlzLnNlY29uZFZhbHVlID0gY29sPy5xdWVyeT8uc2Vjb25kX3ZhbHVlIHx8ICcnO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmKCB0aGlzLmZpbHRlck1lbnVlVGV4dGNoSW5wdXQpe1xuICAgICAgICAgIHRoaXMuZmlsdGVyTWVudWVUZXh0Y2hJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDEwMCk7XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGlzRmlsdGVyT3BlbiA9IGZhbHNlXG4gIHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyOiBhbnk7XG4gIHNob3dGaWx0ZXJzID0gdGhpcy5zaG93U2lkZU1lbnUgPyBmYWxzZSA6IGZhbHNlO1xuXG5cbiAgb3BlbkZpbHRlckZyb21EaXNhYmxlZFNlYXJjaGVkSW5wdXQoY29sOiBhbnkpIHtcbiAgICBpZiAoY29sLnR5cGUgIT09ICdkcm9wZG93bicgJiYgY29sLnR5cGUgIT09ICdhcnJheScgfHwgIWNvbC5pc19zZWFyY2hfYWJsZSkgcmV0dXJuO1xuICAgIHRoaXMub3BlbkZpbHRlcihjb2wpO1xuICB9XG5cbiAgb3BlbkZpbHRlcihjb2w6IGFueSkge1xuICAgIGlmKCFjb2wuaXNfc2VhcmNoX2FibGUpIHJldHVybjtcbiAgICB0aGlzLmFjdGl2ZUZpbHRlckNlbGwgPSBjb2w7XG4gICAgdGhpcy5hY3RpdmVDb2wgPSBudWxsXG4gICAgdGhpcy5pc0ZpbHRlck9wZW4gPSB0cnVlO1xuICAgIHRoaXMuc2VhcmNoVGV4dEZvckZpbHRlckRyb3BEb3duID0gJyc7XG4gICAgdGhpcy5hZGRGaWx0ZXJDb2x1bW5JbnB1dCA9ICcnO1xuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXIgPSBjb2w7XG5cbiAgICBpZiAoY29sLnR5cGUgPT09ICdkcm9wZG93bicgfHwgY29sLnR5cGUgPT0gJ2FycmF5Jykge1xuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuY2xlYXIoKTtcbiAgICAgIGNvbnN0IHNhdmVkSWRzID0gY29sPy5xdWVyeT8uX2lkcyB8fCBbXTtcbiAgICAgIHNhdmVkSWRzLmZvckVhY2goKGlkOiBzdHJpbmcpID0+IHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmFkZChpZCkpO1xuXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsdGVyT3B0aW9ucyA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LmNvbHVtbl9kcm9wZG93bl92YWx1ZT8uZmlsdGVyKFxuICAgICAgICAob3B0aW9uOiBhbnkpID0+IHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmhhcyhvcHRpb24/LmlkIHx8IG9wdGlvbj8uX2lkIHx8IG9wdGlvbilcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChbJ3N0cmluZycsICdudW1iZXInLCAnZGF0ZScsICd0aW1lJ10uaW5jbHVkZXMoY29sLnR5cGUpKSB7XG4gICAgICB0aGlzLmZpcnN0Q29uZGl0aW9uID1cbiAgICAgICAgY29sPy5xdWVyeT8uZmlyc3RfY29uZGl0aW9uID8/XG4gICAgICAgICgoY29sLnR5cGUgPT09ICdudW1iZXInIHx8IGNvbC50eXBlID09PSAndGltZScgfHwgY29sLnR5cGUgPT09ICdkYXRlJylcbiAgICAgICAgICA/ICdlcXVhbCdcbiAgICAgICAgICA6ICdjb250YWluJyk7XG5cbiAgICAgIHRoaXMuZmlyc3RWYWx1ZSA9IGNvbD8ucXVlcnk/LmZpcnN0X3ZhbHVlIHx8ICcnO1xuICAgICAgdGhpcy5jb25kaXRpb24gPSBjb2w/LnF1ZXJ5Py5jb25kaXRpb24gfHwgJ25vbmUnO1xuICAgICAgdGhpcy5zZWNvbmRDb25kaXRpb24gPVxuICAgICAgICAgIGNvbD8ucXVlcnk/LnNlY29uZF9jb25kaXRpb24gPz9cbiAgICAgICAgICAoKGNvbC50eXBlID09PSAnbnVtYmVyJyB8fCBjb2wudHlwZSA9PT0gJ3RpbWUnIHx8IGNvbC50eXBlID09PSAnZGF0ZScpXG4gICAgICAgICAgICA/ICdlcXVhbCdcbiAgICAgICAgICAgIDogJ2NvbnRhaW4nKTtcbiAgICAgIHRoaXMuc2Vjb25kVmFsdWUgPSBjb2w/LnF1ZXJ5Py5zZWNvbmRfdmFsdWUgfHwgJyc7XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG5cbiAgZmlyc3RWYWx1ZTogYW55ID0gJyc7XG4gIGZpcnN0Q29uZGl0aW9uID0gJyc7XG4gIHNlY29uZFZhbHVlOiBhbnkgPSAnJztcbiAgc2Vjb25kQ29uZGl0aW9uOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgY29uZGl0aW9uOiBzdHJpbmcgfCBudWxsID0gJyc7XG5cbiAgcmVzZXRUZXh0RmlsdGVyQ2hhbmdlcygpIHtcbiAgICB0aGlzLmZpcnN0Q29uZGl0aW9uID0gJ2NvbnRhaW4nO1xuICAgIHRoaXMuZmlyc3RWYWx1ZSA9ICcnO1xuICAgIHRoaXMuY29uZGl0aW9uID0gJ25vbmUnO1xuICAgIHRoaXMuc2Vjb25kQ29uZGl0aW9uID0gbnVsbDtcbiAgICB0aGlzLnNlY29uZFZhbHVlID0gJyc7XG4gICAgdGhpcy5pc0ZpbHRlck9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmlzQWN0aXZlRmlsdGVyT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuYWN0aXZlVG9wQnV0dG9uID0gJyc7XG4gIH1cblxuICB0b2dnbGVBbGxWYWx1c1NlbGVjdGlvbkluRHJvcGRvd25GaWx0ZXIoY29sdW1uOiBhbnkpIHtcblxuICB9XG5cblxuICBzZWxlY3RlZEZpbHRlck9wdGlvbnM6IGFueVtdID0gW11cblxuICBjdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICB0b2dnbGVTZWxlY3Rpb25JbkZpbHRlcihvcHRpb246IGFueSkge1xuICAgIGRlYnVnZ2VyXG4gICAgY29uc3QgaWQgPSBvcHRpb24uaWQgfHwgb3B0aW9uLl9pZCB8fCBvcHRpb247XG4gICAgaWYgKHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmhhcyhpZCkpIHtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmRlbGV0ZShpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmFkZChpZCk7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJPcHRpb25zID0gdGhpcy5zZWxlY3RlZENvbHVtbkZvckZpbHRlcj8uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlLmZpbHRlcigob3B0aW9uOiBhbnkpID0+IHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmhhcyhvcHRpb24uaWQgfHwgb3B0aW9uLl9pZCB8fCBvcHRpb24pKVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHJlc2V0RmlsdGVyQ2hhbmdlcygpIHtcbiAgICB0aGlzLmlzRmlsdGVyT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmNsZWFyKCk7XG4gICAgdGhpcy5zZWxlY3RlZEZpbHRlck9wdGlvbnMhLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5pc0FjdGl2ZUZpbHRlck9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmFjdGl2ZVRvcEJ1dHRvbiA9ICcnO1xuICAgIC8vIGNvbnN0IGZpbHRlcmVkQ29sdW1ucyA9IHRoaXMuY29tbW9uU2V2aWNlLmdldEZpbHRlcnNGcm9tQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAgIC8vIGNvbnNvbGUubG9nKFwiRmlsdGVyZWQgQ29sdW1ucyBBcmU6IFwiLCBmaWx0ZXJlZENvbHVtbnMpO1xuICB9XG5cbiAgYXBwbHlEcm9wZG93bkZpbHRlcigpIHtcbiAgICAgICAgIC8vIC0tLSBWQUxJREFUSU9OIEJFRk9SRSBBTllUSElORyAtLS1cbiAgY29uc3QgY29sdW1uc3MgPSB0aGlzLmZpbmRDb2x1bW4odGhpcy5jb2x1bW5zLCB0aGlzLnNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyLmZpZWxkKTtcbiAgaWYgKCFjb2x1bW5zcykgcmV0dXJuO1xuXG4gIGlmIChjb2x1bW5zcy50eXBlID09PSAnZHJvcGRvd24nIHx8IGNvbHVtbnNzLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICBpZiAoIXRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzIHx8IHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLnNpemUgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoWydzdHJpbmcnLCAnbnVtYmVyJywgJ2RhdGUnLCAndGltZSddLmluY2x1ZGVzKGNvbHVtbnNzLnR5cGUpKSB7XG4gICAgY29uc3QgaXNFbXB0eSA9XG4gICAgICB0aGlzLmZpcnN0VmFsdWUgPT09IG51bGwgfHxcbiAgICAgIHRoaXMuZmlyc3RWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLmZpcnN0VmFsdWUgPT09ICcnO1xuXG4gICAgaWYgKGlzRW1wdHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgICB0aGlzLmNsb3NlQWxsRmlsdGVyTWVudXMoKTtcbiAgICB0aGlzLmNsb3NlQWxsRXhwYW5kZWRSb3dzKCk7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5maW5kQ29sdW1uKHRoaXMuY29sdW1ucywgdGhpcy5zZWxlY3RlZENvbHVtbkZvckZpbHRlci5maWVsZCk7XG4gICAgaWYgKGNvbHVtbikge1xuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnZHJvcGRvd24nIHx8IGNvbHVtbi50eXBlID09ICdhcnJheScpIHtcbiAgICAgICAgY29sdW1uLnF1ZXJ5ID0gY29sdW1uLnF1ZXJ5IHx8IHt9O1xuICAgICAgICBjb2x1bW4ucXVlcnkuX2lkcyA9IGNvbHVtbi5xdWVyeS5faWRzIHx8IFtdO1xuXG4gICAgICAgIC8vIFJlbW92ZSBzdGFsZSBJRHMgKG5vdCBwcmVzZW50IGluIFNldClcbiAgICAgICAgY29sdW1uLnF1ZXJ5Ll9pZHMgPSBjb2x1bW4ucXVlcnkuX2lkcy5maWx0ZXIoXG4gICAgICAgICAgKGlkOiBhbnkpID0+IHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmhhcyhpZCkgICAvLyA8LS0gdXNlIC5oYXMoKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIEFkZCBuZXcgb25lcyBpZiBtaXNzaW5nXG4gICAgICAgIHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmZvckVhY2goaWQgPT4ge1xuICAgICAgICAgIGlmICghY29sdW1uLnF1ZXJ5Ll9pZHMuaW5jbHVkZXMoaWQpKSB7XG4gICAgICAgICAgICBjb2x1bW4ucXVlcnkuX2lkcy5wdXNoKGlkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICB9IGVsc2UgaWYgKFsnc3RyaW5nJywgJ251bWJlcicsICdkYXRlJywgJ3RpbWUnXS5pbmNsdWRlcyhjb2x1bW4udHlwZSkpIHtcbiAgICAgICAgY29sdW1uLnF1ZXJ5ID0ge1xuICAgICAgICAgIGZpcnN0X2NvbmRpdGlvbjogdGhpcy5maXJzdENvbmRpdGlvbiB8fCAnY29udGFpbicsXG4gICAgICAgICAgZmlyc3RfdmFsdWU6IHRoaXMuZmlyc3RWYWx1ZSB8fCBudWxsLFxuICAgICAgICAgIGNvbmRpdGlvbjogdGhpcy5zZWNvbmRWYWx1ZSA/IHRoaXMuY29uZGl0aW9uIDogJ25vbmUnLFxuICAgICAgICAgIHNlY29uZF9jb25kaXRpb246IHRoaXMuc2Vjb25kVmFsdWUgPyB0aGlzLnNlY29uZENvbmRpdGlvbiA6IG51bGwsXG4gICAgICAgICAgc2Vjb25kX3ZhbHVlOiB0aGlzLnNlY29uZFZhbHVlIHx8IG51bGwsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyID0ge1xuICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCxcbiAgICAgIHNlYXJjaDogY29sdW1uLnNlYXJjaCxcbiAgICAgIHF1ZXJ5OiBjb2x1bW4ucXVlcnksXG4gICAgICB0eXBlOiBjb2x1bW4udHlwZSxcbiAgICAgIF9pZHM6IGNvbHVtbi5faWRzXG4gICAgfTtcblxuICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSB0aGlzLmZpbHRlcnNDb25maWcuZmluZEluZGV4KGYgPT4gZi5maWVsZCA9PT0gY29sdW1uLmZpZWxkKTtcblxuICAgIGlmIChleGlzdGluZ0luZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5maWx0ZXJzQ29uZmlnW2V4aXN0aW5nSW5kZXhdID0gZmlsdGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlcnNDb25maWcucHVzaChmaWx0ZXIpO1xuICAgIH1cblxuICAgIHRoaXMuaXNGaWx0ZXJPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5hY3RpdmVDb2wgPSBudWxsO1xuICAgIHRoaXMuaXNBY3RpdmVGaWx0ZXJPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5hY3RpdmVUb3BCdXR0b24gPSAnJztcbiAgICB0aGlzLmFjdGl2ZUZpbHRlckNlbGwgPSBudWxsO1xuICAgIHRoaXMuaXNUaHJlZURvdHNGaWx0ZXJPcGVuID0gZmFsc2U7XG4gICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgZmlsdGVyczogdGhpcy5jbGVhbkZpbHRlcmRDb2x1bW5zKCksXG4gICAgICBub19vZl9yZWNvcmRzOiBOdW1iZXIodGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0KSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuXG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbW1vblNldmljZS5tYWluQ29udGFpbmVyTGVmdCA9IHRoaXMuY2VudGVyU2Nyb2xsYWJsZUJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgdGhpcy5maWx0ZXJPcHRpb25zLmVtaXQoZmlsdGVycyk7XG4gICAgfSwgMjAwKTtcbiAgfVxucHJpdmF0ZSBmaW5kQ29sdW1uKGNvbHVtbnM6IGFueVtdLCBmaWVsZDogc3RyaW5nKTogYW55IHtcbiAgZm9yIChjb25zdCBjb2wgb2YgY29sdW1ucykge1xuICAgIGlmIChjb2wuZmllbGQgPT09IGZpZWxkKSByZXR1cm4gY29sO1xuICAgIGlmIChjb2wuY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgY29uc3QgZm91bmQgPSB0aGlzLmZpbmRDb2x1bW4oY29sLmNoaWxkcmVuLCBmaWVsZCk7XG4gICAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG4gIC8vIGFwcGx5RmlsdGVyRnJvbUZpbHRlclJvdyhjb2x1bW46IGFueSkge1xuICAvLyAgIGNvbnN0IGZpbHRlciA9IHtcbiAgLy8gICAgIGZpZWxkOiBjb2x1bW4uZmllbGQsXG4gIC8vICAgICBzZWFyY2g6IGNvbHVtbi5zZWFyY2gsXG4gIC8vICAgICBxdWVyeTogY29sdW1uLnF1ZXJ5LFxuICAvLyAgICAgdHlwZTogY29sdW1uLnR5cGUsXG4gIC8vICAgICBfaWRzOiBjb2x1bW4uX2lkc1xuICAvLyAgIH07XG4gIC8vICAgdGhpcy5maWx0ZXJzQ29uZmlnLnB1c2goZmlsdGVyKTtcbiAgLy8gICB0aGlzLmlzRmlsdGVyT3BlbiA9IGZhbHNlO1xuICAvLyAgIHRoaXMuaXNBY3RpdmVGaWx0ZXJPcGVuID0gZmFsc2U7XG4gIC8vICAgdGhpcy5hY3RpdmVUb3BCdXR0b24gPSAnJztcbiAgLy8gICB0aGlzLmFjdGl2ZUZpbHRlckNlbGwgPSBudWxsO1xuICAvLyAgIHRoaXMuaXNUaHJlZURvdHNGaWx0ZXJPcGVuID0gZmFsc2U7XG4gIC8vICAgY29uc3QgZmlsdGVyZWRDb2x1bW5zID0gdGhpcy5jb21tb25TZXZpY2UuZ2V0RmlsdGVyc0Zyb21Db2x1bW5zKHRoaXMuY29sdW1ucywgdGhpcy5maWx0ZXJzQ29uZmlnKTtcbiAgLy8gICB0aGlzLmZpbHRlck9wdGlvbnMuZW1pdChmaWx0ZXJlZENvbHVtbnMpO1xuICAvLyB9XG5cbiAgaXNGaWx0ZXJBcHBsaWVkT25Db2x1bW4oY29sdW1uOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJzQ29uZmlnPy5zb21lKGNvbCA9PiBjb2wuZmllbGQgPT09IGNvbHVtbi5maWVsZCk7XG4gIH1cblxuICAvLyBTaWRlIEZpbHRlcnMgTG9naWMgaXMgaGVyZVxuXG4gIHRvZ2dsZVNlbGVjdEFsbFNpZGVGaWx0ZXJzKGNvbDogYW55LCBldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCBjaGVja2VkID0gKGV2ZW50Py50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCk/LmNoZWNrZWQ7XG5cbiAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgY29sLnF1ZXJ5Ll9pZHMgPSBjb2w/LmNvbHVtbl9kcm9wZG93bl92YWx1ZT8ubWFwKFxuICAgICAgICAob3B0OiBhbnkpID0+IG9wdC5pZCB8fCBvcHQuX2lkIHx8IG9wdFxuICAgICAgKTtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzID0gbmV3IFNldDxzdHJpbmc+KGNvbC5xdWVyeS5faWRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29sLnF1ZXJ5Ll9pZHMgPSBbXTtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmNsZWFyKCk7XG4gICAgfVxuICB9XG5cblxuICBpc0FsbFNpZGVGaWx0ZXJPcHRpb25zU2VsZWN0ZWQoY29sOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIWNvbD8ucXVlcnk/Ll9pZHMgfHwgIUFycmF5LmlzQXJyYXkoY29sLmNvbHVtbl9kcm9wZG93bl92YWx1ZSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gY29sLnF1ZXJ5Ll9pZHMubGVuZ3RoID09PSBjb2wuY29sdW1uX2Ryb3Bkb3duX3ZhbHVlLmxlbmd0aDtcbiAgfVxuXG4gIG9uT3B0aW9uVG9nZ2xlKGNvbDogYW55LCBvcHRpb246IGFueSkge1xuICAgIGNvbnN0IG9wdGlvbklkID0gb3B0aW9uLmlkIHx8IG9wdGlvbi5faWQgfHwgb3B0aW9uO1xuICAgIGlmICghY29sLnF1ZXJ5Ll9pZHMpIHtcbiAgICAgIGNvbC5xdWVyeS5faWRzID0gW107XG4gICAgfVxuICAgIGNvbnN0IGlkeCA9IGNvbC5xdWVyeS5faWRzLmluZGV4T2Yob3B0aW9uSWQpO1xuICAgIGlmIChpZHggPiAtMSkge1xuICAgICAgY29sLnF1ZXJ5Ll9pZHMuc3BsaWNlKGlkeCwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbC5xdWVyeS5faWRzLnB1c2gob3B0aW9uSWQpO1xuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuXG5cblxuICByZXNldFNpZGVGaWx0ZXIoY29sOiBhbnkpIHtcbiAgICBjb25zdCByZXNldENvbHVtblJlY3Vyc2l2ZWx5ID0gKGNvbHVtbnM6IGFueVtdKTogYm9vbGVhbiA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG4gICAgICAgIGlmIChjb2x1bW4uZmllbGQgPT09IGNvbC5maWVsZCkge1xuICAgICAgICAgIGNvbHVtbi5xdWVyeSA9IHtcbiAgICAgICAgICAgIF9pZHM6IFtdLFxuICAgICAgICAgICAgZmlyc3RfY29uZGl0aW9uOiAnY29udGFpbicsXG4gICAgICAgICAgICBmaXJzdF92YWx1ZTogbnVsbCxcbiAgICAgICAgICAgIGNvbmRpdGlvbjogJ25vbmUnLFxuICAgICAgICAgICAgc2Vjb25kX2NvbmRpdGlvbjogJ2NvbnRhaW4nLFxuICAgICAgICAgICAgc2Vjb25kX3ZhbHVlOiBudWxsXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjb2x1bW4/LmNoaWxkcmVuKSAmJiBjb2x1bW4/LmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICBpZiAocmVzZXRDb2x1bW5SZWN1cnNpdmVseShjb2x1bW4uY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIHJlc2V0Q29sdW1uUmVjdXJzaXZlbHkodGhpcy5jb2x1bW5zKTtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZmlsdGVyc0NvbmZpZy5maW5kSW5kZXgoKGY6IGFueSkgPT4gZi5maWVsZCA9PT0gY29sLmZpZWxkKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmZpbHRlcnNDb25maWcuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmVGaWx0ZXJDZWxsID0gbnVsbDtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgZmlsdGVyczogdGhpcy5jbGVhbkZpbHRlcmRDb2x1bW5zKCksXG4gICAgICBub19vZl9yZWNvcmRzOiBOdW1iZXIodGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0KSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuXG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbW1vblNldmljZS5tYWluQ29udGFpbmVyTGVmdCA9IHRoaXMuY2VudGVyU2Nyb2xsYWJsZUJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgdGhpcy5maWx0ZXJPcHRpb25zLmVtaXQoZmlsdGVycyk7XG4gICAgfSwgMjAwKTtcbiAgfVxuXG5cbiAgY2xlYXJBbGxGaWx0ZXJzKHNob3VsZFVwZGF0ZUNvbmZpZ0xpc3RpbmcgPSBmYWxzZSkge1xuICAgIHRoaXMuZ3JvdXBlZENvbHVtbnMgPSBbXTtcbiAgICB0aGlzLnRhYmxlVmlldz8uZm9yRWFjaCgoZWxlKSA9PiB7IGVsZS5pc190ZW1wID0gZmFsc2UgfSk7XG4gICAgY29uc3QgcmVzZXRBbGxSZWN1cnNpdmVseSA9IChjb2x1bW5zOiBhbnlbXSkgPT4ge1xuICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuICAgICAgICBpZiAoY29sdW1uLnF1ZXJ5KSB7XG4gICAgICAgICAgY29sdW1uLnF1ZXJ5ID0ge1xuICAgICAgICAgICAgX2lkczogW10sXG4gICAgICAgICAgICBmaXJzdF9jb25kaXRpb246ICdjb250YWluJyxcbiAgICAgICAgICAgIGZpcnN0X3ZhbHVlOiBudWxsLFxuICAgICAgICAgICAgY29uZGl0aW9uOiAnbm9uZScsXG4gICAgICAgICAgICBzZWNvbmRfY29uZGl0aW9uOiAnY29udGFpbicsXG4gICAgICAgICAgICBzZWNvbmRfdmFsdWU6IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbHVtbj8uY2hpbGRyZW4pICYmIGNvbHVtbi5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICByZXNldEFsbFJlY3Vyc2l2ZWx5KGNvbHVtbi5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHJlc2V0QWxsUmVjdXJzaXZlbHkodGhpcy5jb2x1bW5zKTtcbiAgICB0aGlzLmFjdGl2ZUZpbHRlckNlbGwgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyc0NvbmZpZyA9IFtdO1xuICAgIHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIC8vIHRoaXMucm93U2hhZGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAvLyB0aGlzLnNob3dWZXJ0aWNhbEJvcmRlciA9IGZhbHNlO1xuICAgIC8vIHRoaXMuZm9udEZhaW1seSA9ICdJbnRlcic7XG4gICAgLy8gdGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplID0gMTQ7XG4gICAgLy8gdGhpcy5zZWxlY3RlZFRhYmxlTGF5b3V0ID0gJ21lZGl1bWQnO1xuICAgIC8vIHRoaXMuYm9keVRleHRGb250c1NpemUgPSAxNDtcbiAgICAvLyB0aGlzLmdsb2JhbFNlYXJjaFRleHQgPSAnJztcbiAgICBjb25zdCBldmVudCA9IHsgZXZlbnRUeXBlOiAncmVzZXQnLCBkYXRhOiB7IHRhYmxlVHlwZTogdGhpcy50YWJsZVR5cGUgfSB9O1xuICAgIGNvbnN0IHNlbmREYXRhID0ge1xuICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgIGZpbHRlcnM6IFtdLFxuICAgICAgbm9fb2ZfcmVjb3JkczogTnVtYmVyKHRoaXMucGFnaW5hdGlvbkNvbmZpZy5saW1pdCksXG4gICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICB9O1xuICAgIGlmKCFzaG91bGRVcGRhdGVDb25maWdMaXN0aW5nKXtcbiAgICAgIHRoaXMuY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZy5lbWl0KHRoaXMuY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbW1vblNldmljZS5tYWluQ29udGFpbmVyTGVmdCA9IHRoaXMuY2VudGVyU2Nyb2xsYWJsZUJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHRoaXMuY29tbW9uU2V2aWNlLm1haW5Db250YWluZXJMZWZ0ID0gdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKTtcbiAgICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZXZlbnQpO1xuICAgICAgIGlmKCFzaG91bGRVcGRhdGVDb25maWdMaXN0aW5nKXtcbiAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucy5lbWl0KGZpbHRlcmVkQ29sdW1ucyk7XG4gICAgICB9XG4gICAgfSwgMzAwKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuXG4gIGFwcGx5U2lkZUZpbHRlcihjb2x1bW46IGFueSkge1xuICAgIGlmICghY29sdW1uLnF1ZXJ5LmZpcnN0X3ZhbHVlICYmICFjb2x1bW4/LnF1ZXJ5Py5faWRzLmxlbmd0aCkgcmV0dXJuO1xuICAgIC8vIENsb3NlIGV4cGFuZGVkIHJvd3MgYmVmb3JlIGFwcGx5aW5nIHNpZGUgZmlsdGVyXG4gIHRoaXMuY2xvc2VBbGxFeHBhbmRlZFJvd3MoKTtcblxuICAgIGNvbnN0IGZpbHRlciA9IHtcbiAgICAgIGZpZWxkOiBjb2x1bW4uZmllbGQsXG4gICAgICBzZWFyY2g6IGNvbHVtbi5zZWFyY2gsXG4gICAgICBxdWVyeTogY29sdW1uLnF1ZXJ5LFxuICAgICAgdHlwZTogY29sdW1uLnR5cGUsXG4gICAgICBfaWRzOiBjb2x1bW4uX2lkcyB8fCBbXVxuICAgIH07XG5cbiAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gdGhpcy5maWx0ZXJzQ29uZmlnLmZpbmRJbmRleChmID0+IGYuZmllbGQgPT09IGNvbHVtbi5maWVsZCk7XG5cbiAgICBpZiAoZXhpc3RpbmdJbmRleCAhPT0gLTEpIHtcbiAgICAgIC8vIFJlcGxhY2UgdGhlIGV4aXN0aW5nIGZpbHRlclxuICAgICAgdGhpcy5maWx0ZXJzQ29uZmlnW2V4aXN0aW5nSW5kZXhdID0gZmlsdGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBZGQgbmV3IGZpbHRlclxuICAgICAgdGhpcy5maWx0ZXJzQ29uZmlnLnB1c2goZmlsdGVyKTtcbiAgICB9XG4gICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgZmlsdGVyczogdGhpcy5jb21tb25TZXZpY2UuZ2V0RmlsdGVyc0Zyb21Db2x1bW5zKHRoaXMuY29sdW1ucywgdGhpcy5maWx0ZXJzQ29uZmlnKS5tYXAoKHsgcXVlcnksIC4uLnJlc3QgfSkgPT4ge1xuICAgICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgICBkZWxldGUgcXVlcnkuX190eXBlbmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgIC4uLnJlc3QsXG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgbm9fb2ZfcmVjb3JkczogTnVtYmVyKHRoaXMucGFnaW5hdGlvbkNvbmZpZy5saW1pdCksXG4gICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICB9O1xuICAgIHRoaXMuY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZy5lbWl0KHRoaXMuY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKTtcblxuICAgIHRoaXMuY29tbW9uU2V2aWNlLm1haW5Db250YWluZXJMZWZ0ID0gdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKTtcbiAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucy5lbWl0KGZpbHRlcmVkQ29sdW1ucyk7XG4gICAgfSwgMjAwKTtcbiAgfVxuXG5cbiAgcmVtb3ZlU2lkZUZpbHRlcihjb2x1bW46IGFueSkge1xuICAgIGlmICghY29sdW1uLnF1ZXJ5LmZpcnN0X3ZhbHVlICYmICFjb2x1bW4/LnF1ZXJ5Py5faWRzLmxlbmd0aCkgcmV0dXJuO1xuICAgIC8vIENsb3NlIGV4cGFuZGVkIHJvd3MgYmVmb3JlIHJlbW92aW5nIGZpbHRlclxuICAgIHRoaXMuY2xvc2VBbGxFeHBhbmRlZFJvd3MoKTtcblxuICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSB0aGlzLmZpbHRlcnNDb25maWcuZmluZEluZGV4KGYgPT4gZi5maWVsZCA9PT0gY29sdW1uLmZpZWxkKTtcbiAgICBpZiAoZXhpc3RpbmdJbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuZmlsdGVyc0NvbmZpZy5zcGxpY2UoZXhpc3RpbmdJbmRleCwgMSk7XG4gICAgfVxuICAgIGNvbnN0IHNlbmREYXRhID0ge1xuICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgIGZpbHRlcnM6IHRoaXMuY29tbW9uU2V2aWNlLmdldEZpbHRlcnNGcm9tQ29sdW1ucyh0aGlzLmNvbHVtbnMsIHRoaXMuZmlsdGVyc0NvbmZpZykubWFwKCh7IHF1ZXJ5LCAuLi5yZXN0IH0pID0+IHtcbiAgICAgICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgICAgZGVsZXRlIHF1ZXJ5Ll9fdHlwZW5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAuLi5yZXN0LFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgICBub19vZl9yZWNvcmRzOiBOdW1iZXIodGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0KSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICAgIHRoaXMuY29tbW9uU2V2aWNlLm1haW5Db250YWluZXJMZWZ0ID0gdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKTtcbiAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucy5lbWl0KGZpbHRlcmVkQ29sdW1ucyk7XG4gICAgfSwgMjAwKTtcbiAgfVxuXG4gIGNvbGxhcHNlQWxsRXhwYW5kZWRDZWxscygpIHtcbiAgICBpZiAodGhpcy5leHBhbmRlZENlbGxzPy5zaXplID4gMCkge1xuICAgICAgdGhpcy5leHBhbmRlZENlbGxzLmNsZWFyKCk7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cblxuXG4gIHRyYWNrQnlGaWVsZChpbmRleDogbnVtYmVyLCBjb2w6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNvbD8uZmllbGQ7XG4gIH1cblxuICBnZXQgYWN0aXZlRmlsdGVyZWRDb2x1bW5zKCk6IGFueVtdIHtcbiAgICBjb25zdCBjb2xsZWN0RmlsdGVyZWQgPSAoY29sdW1uczogYW55W10pOiBhbnlbXSA9PiB7XG4gICAgICBsZXQgcmVzdWx0OiBhbnlbXSA9IFtdO1xuXG4gICAgICBjb2x1bW5zPy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgIGlmIChjb2wuY2hpbGRyZW4gJiYgY29sLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoY29sbGVjdEZpbHRlcmVkKGNvbC5jaGlsZHJlbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNJbkZpbHRlcnNDb25maWcgPSB0aGlzLmZpbHRlcnNDb25maWcuc29tZShmID0+IGYuZmllbGQgPT09IGNvbC5maWVsZCk7XG4gICAgICAgIGlmIChpc0luRmlsdGVyc0NvbmZpZykge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGNvbCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICByZXR1cm4gY29sbGVjdEZpbHRlcmVkKHRoaXMuY29sdW1ucyk7XG4gIH1cblxuXG5cblxuICB0b2dnbGVPcGVuRmlsdGVyKCkge1xuICAgIHRoaXMuc2hvd0ZpbHRlcnMgPSAhdGhpcy5zaG93RmlsdGVycztcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuXG5cblxuICAvLyBDZWxsIEVkaXRpbmcgV29yayBzdGFydCBoZXJlXG5cbiAgZWRpdGluZ0tleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGFjdGl2ZUNlbGw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIHNldEFjdGl2ZUNlbGwocm93OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgdGhpcy5hY3RpdmVDZWxsID0gKChyb3cuaWQgfHwgcm93Ll9pZCkgKyAnLScgKyBjb2x1bW4uZmllbGQpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGlzQWN0aXZlQ2VsbChyb3c6IGFueSwgY29sOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVDZWxsID09PSAoKHJvdy5pZCB8fCByb3cuX2lkKSArICctJyArIGNvbC5maWVsZCk7XG4gIH1cblxuICBAVmlld0NoaWxkKCd0ZXh0QXJlYWRJbnB1dCcpIHRleHRBcmVhZElucHV0ITogRWxlbWVudFJlZjxIVE1MVGV4dEFyZWFFbGVtZW50PjtcbiAgbWVudVJlYWR5ID0gZmFsc2U7XG4gIGVuYWJsZUVkaXQocm93OiBhbnksIGNvbHVtbjogYW55LCBjbGlja2VkRnJvbURldGFpbHNCb3ggPSBmYWxzZSwgY2VsbENvbnRhaW5lcj86IEhUTUxFbGVtZW50KSB7XG4gICAgdGhpcy5lZGl0aW5Ecm9wZG93blNlYXJjaCA9ICcnO1xuICAgIGlmIChyb3c/Ll9fdmlydHVhbEluZGV4ID09IDApIHJldHVybjtcbiAgICBpZiAoIWNvbHVtbj8uaXNfZWRpdGFibGUpIHJldHVybjtcbiAgICB0aGlzLm1lbnVSZWFkeSA9IGZhbHNlO1xuICAgIHRoaXMuZWRpdGluZ0tleSA9ICgocm93LmlkIHx8IHJvdy5faWQpICsgJy0nICsgY29sdW1uLmZpZWxkKTtcblxuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Ryb3Bkb3duJ3x8IGNvbHVtbi50eXBlID09ICdhcnJheScpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBkcm9wZG93bk1lbnUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY2VsbC1lZGl0aW5nLWRyb3Bkb3duLW1lbnUnKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKGRyb3Bkb3duTWVudSkge1xuICAgICAgICAgIGNvbnN0IHJlY3QgPSBkcm9wZG93bk1lbnUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgY29uc3Qgd2luZG93SGVpZ2h0ID0gdGhpcy5kYXRhR3JpZENvbnRhaW5lci5uYXRpdmVFbGVtZW50Py5vZmZzZXRIZWlnaHQ7XG5cbiAgICAgICAgICBpZiAocmVjdC5ib3R0b20gPiB3aW5kb3dIZWlnaHQpIHtcbiAgICAgICAgICAgIGRyb3Bkb3duTWVudS5zdHlsZS50b3AgPSBgLSR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkcm9wZG93bk1lbnUuc3R5bGUudG9wID0gJzEwMCUnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1lbnVSZWFkeSA9IHRydWU7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICghY2xpY2tlZEZyb21EZXRhaWxzQm94ICYmIHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjb2x1bW4uZmllbGQpPy5sZW5ndGggPiA1MCkge1xuICAgICAgdGhpcy50b2dnbGVFeHBhbmRPZkxvbmdDZWxsVGV4dChyb3csIGNvbHVtbiwgdGhpcy5jb2x1bW5zLCBmYWxzZSlcbiAgICB9XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICghY2VsbENvbnRhaW5lcikgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGZpbGVJbnB1dCA9IGNlbGxDb250YWluZXIucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAnaW5wdXRbdHlwZT1cImZpbGVcIl0nXG4gICAgICAgICkgYXMgSFRNTElucHV0RWxlbWVudCB8IG51bGw7XG5cbiAgICAgICAgLy8g4pyFIElmIGZpbGUgaW5wdXQgZXhpc3RzIOKGkiBvcGVuIGZpbGUgZGlhbG9nIGltbWVkaWF0ZWx5XG4gICAgICAgIGlmIChmaWxlSW5wdXQpIHtcbiAgICAgICAgICBmaWxlSW5wdXQuY2xpY2soKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgT3RoZXJ3aXNlLCBub3JtYWwgZm9jdXMgYmVoYXZpb3JcbiAgICAgICAgY29uc3QgZm9jdXNhYmxlID0gY2VsbENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICdpbnB1dDpub3QoW3R5cGU9XCJmaWxlXCJdKSwgdGV4dGFyZWEsIHNlbGVjdCwgW2NvbnRlbnRlZGl0YWJsZT1cInRydWVcIl0nXG4gICAgICAgICkgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gICAgICAgIGlmIChmb2N1c2FibGUpIHtcbiAgICAgICAgICBmb2N1c2FibGUuc3R5bGUuZm9udFNpemUgPSAnMTZweCc7XG4gICAgICAgICAgZm9jdXNhYmxlLmZvY3VzKCk7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmb2N1c2FibGUgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50IHx8XG4gICAgICAgICAgICBmb2N1c2FibGUgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmb2N1c2FibGUuc2VsZWN0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuIGlzVmFsdWVWYWxpZChyb3c6IGFueSwgY29sdW1uOiBhbnksIGNvbnRyb2w6IGFueSl7XG4gICAgcmV0dXJuIHRoaXMudmFsaWRhdGlvbnNTZXJ2aWNlLmlzVmFsdWVWYWxpZChyb3csIGNvbHVtbiwgY29udHJvbD8uY29udHJvbD8udmFsdWUpXG4gIH1cblxuICBkaXNhYmxlRWRpdChyb3c6IGFueSwgY29sdW1uOiBhbnksIGNvbnRyb2w/OiBhbnkpIHtcbiAgICB0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcy5jbGVhcigpO1xuICAgIGlmICghdGhpcy5lZGl0aW5nS2V5KSByZXR1cm5cbiAgICBpZiAoY29udHJvbCAmJiBjb250cm9sLnByaXN0aW5lKSB7XG4gICAgICB0aGlzLmVkaXRpbmdLZXkgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2w/LmNvbnRyb2w/LnZhbHVlO1xuICAgIGNvbnN0IHZpc2libGVSb3cgPSB0aGlzLnZpc2libGVSb3dzLmZpbmQociA9PiAoci5pZCAmJiByLmlkID09PSByb3cuaWQpIHx8IChyLl9pZCAmJiByLl9pZCA9PT0gcm93Ll9pZCkpO1xuICAgIGlmICh2aXNpYmxlUm93KSB7XG4gICAgICB0aGlzLnNldE5lc3RlZEZsYXRWYWx1ZSh2aXNpYmxlUm93LCBjb2x1bW4/LmZpZWxkLCB2YWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IGlzVmFsaWQgPSB0aGlzLnZhbGlkYXRpb25zU2VydmljZS5pc1ZhbHVlVmFsaWQocm93LCBjb2x1bW4sIHZhbHVlKTtcbiAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgIHRoaXMucm9sbEJhY2tDZWxsVmFsdWUocm93LCBjb2x1bW4pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNoZWNrUm93RWRpdEFuZEVtaXRWYWx1ZShyb3csIGNvbHVtbiwgcm93W2NvbHVtbi5maWVsZF0pXG4gICAgdGhpcy5lZGl0aW5nS2V5ID0gbnVsbDtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjb2x1bW4/LmZpZWxkKTtcbiAgICBpZiAoIWN1cnJlbnQgfHwgKGNvbHVtbi50eXBlID09ICdlbWFpbCcgJiYgIXRoaXMudmFsaWRhdGVFbWFpbChjdXJyZW50KSkpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsUm93ID0gdGhpcy5vcmlnaW5hbERhdGFTZXQuZmluZChpdGVtID0+ICgoaXRlbS5pZCAmJiBpdGVtLmlkID09IHJvdy5pZCkgfHwgKGl0ZW0uaWQgJiYgaXRlbS5pZCA9PSByb3cuX2lkKSkpO1xuICAgICAgY29uc3Qgb3JpZ2luYWwgPSB0aGlzLmdldE5lc3RlZFZhbHVlKG9yaWdpbmFsUm93LCBjb2x1bW4/LmZpZWxkKTtcbiAgICAgIHRoaXMuc2V0TmVzdGVkVmFsdWUocm93LCBjb2x1bW4sIG9yaWdpbmFsKTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBvbkltYWdlQ2hhbmdlKGV2ZW50OiBFdmVudCwgcm93OiBhbnksIGNvbDogYW55KTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBpZiAoIWlucHV0LmZpbGVzIHx8ICFpbnB1dC5maWxlcy5sZW5ndGgpIHJldHVybjtcblxuICAgIGNvbnN0IGZpbGUgPSBpbnB1dC5maWxlc1swXTtcblxuICAgIC8vIE9wdGlvbmFsIHZhbGlkYXRpb25cbiAgICBpZiAoIWZpbGUudHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkge1xuICAgICAgaW5wdXQudmFsdWUgPSAnJztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBQcmV2aWV3IChiYXNlNjQpXG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xuICAgICAgdGhpcy5zZXROZXN0ZWRGbGF0VmFsdWUocm93LCBjb2wuZmllbGQsIHJlYWRlci5yZXN1bHQpO1xuICAgICAgdGhpcy5jaGVja1Jvd0VkaXRBbmRFbWl0VmFsdWUocm93LCBjb2wsIHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpKTtcbiAgICB9O1xuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICB9XG5cbiAgc2V0TmVzdGVkRmxhdFZhbHVlKG9iajogYW55LCBwYXRoOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIW9iaiB8fCAhcGF0aCkgcmV0dXJuO1xuXG4gICAgY29uc3Qga2V5cyA9IHBhdGguc3BsaXQoJy4nKTtcbiAgICBjb25zdCBsYXN0S2V5ID0ga2V5cy5wb3AoKSE7XG4gICAgY29uc3QgcGFyZW50ID0ga2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICBpZiAoIWFjY1trZXldKSBhY2Nba2V5XSA9IHt9O1xuICAgICAgcmV0dXJuIGFjY1trZXldO1xuICAgIH0sIG9iaik7XG5cbiAgICBwYXJlbnRbbGFzdEtleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIGVtYWlsUmVnZXggPSAvXlthLXpBLVowLTkuXyUrLV0rQFthLXpBLVowLTkuLV0rXFwuW2EtekEtWl17Mix9JC87XG4gIHZhbGlkYXRlRW1haWwodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVtYWlsUmVnZXgudGVzdCh2YWx1ZSk7XG4gIH1cbiAgYWxsb3dPbmx5TnVtYmVycyhldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGNvbnN0IGNoYXJDb2RlID0gZXZlbnQud2hpY2ggPyBldmVudC53aGljaCA6IGV2ZW50LmtleUNvZGU7XG4gICAgaWYgKGNoYXJDb2RlIDwgNDggfHwgY2hhckNvZGUgPiA1Nykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICBjaGVja1Jvd0VkaXRBbmRFbWl0VmFsdWUocm93OiBhbnksIGNvbHVtbjogYW55LCB2YWx1ZT86IGFueSkge1xuICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsUm93ID0gdGhpcy5vcmlnaW5hbERhdGFTZXQ/LmZpbmQoXG4gICAgICAocjogYW55KSA9PiAoci5pZCAmJiByLmlkID09PSByb3cuaWQpIHx8IChyLl9pZCAmJiByLl9pZCA9PT0gcm93Ll9pZClcbiAgICApO1xuICAgIGlmICghb3JpZ2luYWxSb3cpIHJldHVybjtcbiAgICAvLyBjb25zdCBjbGVhbiA9IChvYmo6IGFueSkgPT4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmopKTtcbiAgICAvLyBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLmdldE5lc3RlZFZhbHVlKHJvdywgY29sdW1uLmZpZWxkKTtcbiAgICAvLyBjb25zdCBvcmlnaW5hbFZhbHVlID0gdGhpcy5nZXROZXN0ZWRWYWx1ZShvcmlnaW5hbFJvdywgY29sdW1uLmZpZWxkKTtcbiAgICBjb25zdCBvcmlnaW5WYWx1ZSA9IHRoaXMuZGF0YVNldD8uZmluZCgocjogYW55KSA9PiAoci5pZCAmJiByLmlkID09PSByb3cuaWQpIHx8IChyLl9pZCAmJiByLl9pZCA9PT0gcm93Ll9pZCkpO1xuICAgIGNvbnN0IGNoYW5nZWRWYWx1ZSA9IG9yaWdpblZhbHVlLnZlcmlmaWVkID09IHZhbHVlO1xuICAgIC8vIGlmIChjaGFuZ2VkVmFsdWUpIHJldHVybjtcbiAgICAvLyBjb25zdCBoYXNDaGFuZ2VkID0gdGhpcy5jb21tb25TZXZpY2UuaGFzRmllbGRDaGFuZ2VkKGN1cnJlbnRWYWx1ZSwgb3JpZ2luYWxWYWx1ZSwgY29sdW1uLnR5cGUpO1xuICAgIC8vIGlmICghaGFzQ2hhbmdlZCkgcmV0dXJuO1xuICAgIC8vIHRoaXMuc2V0TmVzdGVkVmFsdWUob3JpZ2luYWxSb3csIGNvbHVtbiwgdmFsdWUpO1xuXG4gICAgY29uc3Qgc2VuZE9iaiA9IHtcbiAgICAgIGRhdGE6IHsgLi4ub3JpZ2luVmFsdWUgfSxcbiAgICAgIGV2ZW50VHlwZTogJ29uQ2VsbEVkaXQnLFxuICAgICAgdmFsdWU6IGNvbHVtbi50eXBlICE9PSAnYXJyYXknID8gdmFsdWUgOiB1bmRlZmluZWQsXG4gICAgICBjb2x1bW46IGNvbHVtbixcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgICAgdmFsdWVzOiBjb2x1bW4udHlwZSA9PSAnYXJyYXknID8gdmFsdWUgOiB1bmRlZmluZWRcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KHNlbmRPYmopXG4gICAgLy8gfSwgMTAwKTtcbiAgfVxuXG5cbiAgaXNFZGl0aW5nKHJvdzogYW55LCBjb2w6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVkaXRpbmdLZXkgPT09ICgocm93LmlkIHx8IHJvdy5faWQpICsgJy0nICsgY29sLmZpZWxkKTtcbiAgfVxuXG4gIHNldE5lc3RlZFZhbHVlKG9iajogYW55LCBjb2x1bW46IGFueSwgb3B0aW9uOiBhbnksIGNhbGxlZEZyb21JbnB1dCA9IGZhbHNlKTogdm9pZCB7XG4gICAgIGNvbnN0IGlzVmFsaWQgPSB0aGlzLnZhbGlkYXRpb25zU2VydmljZS5pc1ZhbHVlVmFsaWQob2JqLCBjb2x1bW4sIG9wdGlvbik7XG4gICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBWYWxpZGF0aW9uIEVycm9yIG9uIGZpZWxkICR7Y29sdW1ufWApXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHBhdGggPSBjb2x1bW4uZmllbGQ7XG4gICAgY29uc3Qga2V5cyA9IHBhdGguc3BsaXQoJy4nKTtcbiAgICBjb25zdCBsYXN0S2V5ID0ga2V5cy5wb3AoKTtcbiAgICBjb25zdCBwYXJlbnQgPSBrZXlzLnJlZHVjZSgoYWNjOiBhbnksIGtleTogc3RyaW5nIHwgbnVtYmVyKSA9PiBhY2Nba2V5XSA/Pz0ge30sIG9iaik7XG5cbiAgICBpZiAocGFyZW50ICYmIGxhc3RLZXkpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbikpIHtcbiAgICAgICAgY29uc3QgbG9va3VwID0gY29sdW1uLmNvbHVtbl9kcm9wZG93bl92YWx1ZSB8fCBbXTtcbiAgICAgICAgcGFyZW50W2xhc3RLZXldID0gb3B0aW9uLm1hcChzZWxlY3RlZEl0ZW0gPT4ge1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSWQgPSB0eXBlb2Ygc2VsZWN0ZWRJdGVtID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgPyBzZWxlY3RlZEl0ZW0uaWQgPz8gc2VsZWN0ZWRJdGVtLl9pZCA/PyBzZWxlY3RlZEl0ZW0udmFsdWUgPz8gc2VsZWN0ZWRJdGVtLm5hbWUgPz8gc2VsZWN0ZWRJdGVtXG4gICAgICAgICAgICA6IHNlbGVjdGVkSXRlbTtcblxuICAgICAgICAgIGNvbnN0IG1hdGNoID0gbG9va3VwLmZpbmQoKG9wdDogYW55KSA9PlxuICAgICAgICAgICAgKG9wdC5faWQgJiYgb3B0Ll9pZCA9PT0gc2VsZWN0ZWRJZCkgfHwgKG9wdC5pZCAmJiBvcHQuaWQgPT09IHNlbGVjdGVkSWQpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiBtYXRjaCA/IHsgLi4ubWF0Y2ggfSA6IHsgaWQ6IHNlbGVjdGVkSWQsIHZhbHVlOiBzZWxlY3RlZElkIH07XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnb2JqZWN0JyAmJiBvcHRpb24gIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgbG9va3VwID0gY29sdW1uLmNvbHVtbl9kcm9wZG93bl92YWx1ZSB8fCBbXTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJZCA9IG9wdGlvbi5pZCA/PyBvcHRpb24uX2lkID8/IG9wdGlvbi52YWx1ZSA/PyBvcHRpb24ubmFtZSA/PyBvcHRpb247XG4gICAgICAgIGNvbnN0IG1hdGNoID0gbG9va3VwLmZpbmQoKG9wdDogYW55KSA9PiAob3B0Ll9pZCAmJiBvcHQuX2lkID09PSBzZWxlY3RlZElkKSB8fCAob3B0LmlkICYmIG9wdC5pZCA9PT0gc2VsZWN0ZWRJZCkpO1xuXG4gICAgICAgIHBhcmVudFtsYXN0S2V5XSA9IG1hdGNoID8geyAuLi5tYXRjaCB9IDogeyBpZDogc2VsZWN0ZWRJZCwgdmFsdWU6IHNlbGVjdGVkSWQgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmVudFtsYXN0S2V5XSA9IHsgaWQ6IG9wdGlvbiwgdmFsdWU6IG9wdGlvbiB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9yaWdpbmFsRGF0YVNldCAmJiBBcnJheS5pc0FycmF5KHRoaXMub3JpZ2luYWxEYXRhU2V0KSkge1xuICAgICAgY29uc3Qgb3JpZ2luYWxSb3dJbmRleCA9IHRoaXMub3JpZ2luYWxEYXRhU2V0LmZpbmRJbmRleChyID0+XG4gICAgICAgIHIuaWQgPT09IG9iai5pZCB8fCByLl9pZCA9PT0gb2JqLl9pZFxuICAgICAgKTtcbiAgICAgIGlmIChvcmlnaW5hbFJvd0luZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBvcmlnaW5hbFBhcmVudCA9IGtleXMucmVkdWNlKChhY2M6IGFueSwga2V5OiBzdHJpbmcgfCBudW1iZXIpID0+IGFjY1trZXldID8/PSB7fSwgdGhpcy5vcmlnaW5hbERhdGFTZXRbb3JpZ2luYWxSb3dJbmRleF0pO1xuICAgICAgICBpZiAob3JpZ2luYWxQYXJlbnQgJiYgbGFzdEtleSkge1xuICAgICAgICAgIG9yaWdpbmFsUGFyZW50W2xhc3RLZXldID0gcGFyZW50W2xhc3RLZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIDPvuI/ig6MgVXBkYXRlIGN1cnJlbnQgZGF0YXNldFxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBpZiAodGhpcy5kYXRhU2V0ICYmIEFycmF5LmlzQXJyYXkodGhpcy5kYXRhU2V0KSkge1xuICAgICAgY29uc3QgZGF0YXNldFJvd0luZGV4ID0gdGhpcy5kYXRhU2V0LmZpbmRJbmRleChyID0+XG4gICAgICAgIHIuaWQgPT09IG9iai5pZCB8fCByLl9pZCA9PT0gb2JqLl9pZFxuICAgICAgKTtcbiAgICAgIGlmIChkYXRhc2V0Um93SW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IGRhdGFzZXRQYXJlbnQgPSBrZXlzLnJlZHVjZSgoYWNjOiBhbnksIGtleTogc3RyaW5nIHwgbnVtYmVyKSA9PiBhY2Nba2V5XSA/Pz0ge30sIHRoaXMuZGF0YVNldFtkYXRhc2V0Um93SW5kZXhdKTtcbiAgICAgICAgaWYgKGRhdGFzZXRQYXJlbnQgJiYgbGFzdEtleSkge1xuICAgICAgICAgIGRhdGFzZXRQYXJlbnRbbGFzdEtleV0gPSBwYXJlbnRbbGFzdEtleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2FsbGVkRnJvbUlucHV0KSB7XG4gICAgICB0aGlzLmNoZWNrUm93RWRpdEFuZEVtaXRWYWx1ZShvYmosIGNvbHVtbiwgb3B0aW9uKTtcbiAgICB9XG5cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICByb2xsQmFja0NlbGxWYWx1ZShyb3c6IGFueSwgY29sdW1uOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXJvdyB8fCAhY29sdW1uKSByZXR1cm47XG4gICAgY29uc3Qgb3JpZ2luYWxSb3cgPSB0aGlzLnZhbGlkYXRpb25zU2VydmljZS5maW5kT3JpZ2luYWxSb3codGhpcy5vcmlnaW5hbERhdGFTZXQsIHJvdy5pZCA/PyByb3cuX2lkKTtcbiAgICBpZiAoIW9yaWdpbmFsUm93KSByZXR1cm47XG5cbiAgICBjb25zdCBvcmlnaW5hbFZhbHVlID0gdGhpcy5nZXROZXN0ZWRWYWx1ZShvcmlnaW5hbFJvdywgY29sdW1uLmZpZWxkKTtcblxuICAgIGNvbnN0IHZpc2libGVSb3cgPSB0aGlzLnZhbGlkYXRpb25zU2VydmljZS5maW5kT3JpZ2luYWxSb3codGhpcy52aXNpYmxlUm93cywgcm93LmlkID8/IHJvdy5faWQpO1xuICAgIGlmICh2aXNpYmxlUm93KSB2aXNpYmxlUm93W2NvbHVtbi5maWVsZF0gPSBvcmlnaW5hbFZhbHVlO1xuXG4gICAgY29uc3QgZGF0YVJvdyA9IHRoaXMudmFsaWRhdGlvbnNTZXJ2aWNlLmZpbmRPcmlnaW5hbFJvdyh0aGlzLmRhdGFTZXQsIHJvdy5pZCA/PyByb3cuX2lkKTtcbiAgICBpZiAoZGF0YVJvdykgZGF0YVJvd1tjb2x1bW4uZmllbGRdID0gb3JpZ2luYWxWYWx1ZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuXG4gIGFycmF5VGVtcE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBhbnlbXT4oKTtcblxuICBwcml2YXRlIGFycmF5S2V5KHJvdzogYW55LCBjb2w6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3Jvdy5pZCB8fCByb3cuX2lkfV8ke2NvbC5maWVsZH1gO1xuICB9XG5cbiAgZ2V0QXJyYXlPcHRpb25JZChvcHRpb246IGFueSk6IGFueSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdvYmplY3QnICYmIG9wdGlvbiAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG9wdGlvbi5pZCA/PyBvcHRpb24uX2lkO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uO1xuICB9XG5cbiAgZ2V0QXJyYXlPcHRpb25MYWJlbChvcHRpb246IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdvYmplY3QnICYmIG9wdGlvbiAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG9wdGlvbi52YWx1ZSA/PyBvcHRpb24ubmFtZSA/PyAnJztcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyhvcHRpb24pO1xuICB9XG5cbiAgZ2V0QXJyYXlUZW1wKHJvdzogYW55LCBjb2w6IGFueSk6IGFueVtdIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmFycmF5S2V5KHJvdywgY29sKTtcblxuICAgIGlmICghdGhpcy5hcnJheVRlbXBNYXAuaGFzKGtleSkpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKTtcblxuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IEFycmF5LmlzQXJyYXkoY3VycmVudClcbiAgICAgICAgPyBjdXJyZW50Lm1hcCh2ID0+IHRoaXMuZ2V0QXJyYXlPcHRpb25JZCh2KSlcbiAgICAgICAgOiBbXTtcblxuICAgICAgdGhpcy5hcnJheVRlbXBNYXAuc2V0KGtleSwgbm9ybWFsaXplZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXJyYXlUZW1wTWFwLmdldChrZXkpITtcbiAgfVxuXG5cbiAgaXNBcnJheVNlbGVjdGVkKHJvdzogYW55LCBjb2w6IGFueSwgb3B0aW9uOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuZ2V0QXJyYXlPcHRpb25JZChvcHRpb24pO1xuICAgIHJldHVybiB0aGlzLmdldEFycmF5VGVtcChyb3csIGNvbCkuaW5jbHVkZXMoaWQpO1xuICB9XG5cbiAgdG9nZ2xlQXJyYXlUZW1wKHJvdzogYW55LCBjb2w6IGFueSwgb3B0aW9uOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuZ2V0QXJyYXlPcHRpb25JZChvcHRpb24pO1xuICAgIGNvbnN0IGxpc3QgPSB0aGlzLmdldEFycmF5VGVtcChyb3csIGNvbCk7XG5cbiAgICB0aGlzLmFycmF5VGVtcE1hcC5zZXQoXG4gICAgICB0aGlzLmFycmF5S2V5KHJvdywgY29sKSxcbiAgICAgIGxpc3QuaW5jbHVkZXMoaWQpID8gbGlzdC5maWx0ZXIodiA9PiB2ICE9PSBpZCkgOiBbLi4ubGlzdCwgaWRdXG4gICAgKTtcbiAgfVxuXG4gIGNvbW1pdEFycmF5KHJvdzogYW55LCBjb2w6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGlkcyA9IHRoaXMuZ2V0QXJyYXlUZW1wKHJvdywgY29sKTtcbiAgICB0aGlzLnNldE5lc3RlZFZhbHVlKHJvdywgY29sLCBpZHMsIHRydWUpO1xuICB9XG5cblxuICBvbkFycmF5Qmx1cihyb3c6IGFueSwgY29sOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmNvbW1pdEFycmF5KHJvdywgY29sKTtcbiAgfVxuXG5cbiAgY2xlYW51cEFycmF5KHJvdzogYW55LCBjb2w6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuYXJyYXlUZW1wTWFwLmRlbGV0ZSh0aGlzLmFycmF5S2V5KHJvdywgY29sKSk7XG4gICAgdGhpcy5lZGl0aW5nS2V5ID0gbnVsbDtcbiAgfVxuXG5cbiAgZGlzcGxheUFycmF5VmFsdWVzKGlkczogYW55W10sIGNvbD86IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKCFjb2wpIHJldHVybiBpZHMuam9pbignLCAnKTtcblxuICAgIGNvbnN0IG1hcCA9IG5ldyBNYXA8YW55LCBhbnk+KCk7XG4gICAgKGNvbC5jb2x1bW5fZHJvcGRvd25fdmFsdWUgfHwgW10pLmZvckVhY2goKG9wdDogYW55KSA9PiB7XG4gICAgICBtYXAuc2V0KHRoaXMuZ2V0QXJyYXlPcHRpb25JZChvcHQpLCBvcHQpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlkc1xuICAgICAgLm1hcChpZCA9PiBtYXAuZ2V0KGlkKT8udmFsdWUgPz8gbWFwLmdldChpZCk/Lm5hbWUgPz8gaWQpXG4gICAgICAuam9pbignLCAnKTtcbiAgfVxuXG4gIGRpc3BsYXlBcnJheUxhYmVscyhyb3c6IGFueSwgY29sOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGlkcyA9IHRoaXMuZ2V0QXJyYXlUZW1wKHJvdywgY29sKTtcblxuICAgIGlmICghaWRzLmxlbmd0aCkgcmV0dXJuICcnO1xuXG4gICAgY29uc3QgbWFwID0gbmV3IE1hcDxhbnksIGFueT4oKTtcbiAgICAoY29sLmNvbHVtbl9kcm9wZG93bl92YWx1ZSB8fCBbXSkuZm9yRWFjaCgob3B0OiBhbnkpID0+IHtcbiAgICAgIG1hcC5zZXQodGhpcy5nZXRBcnJheU9wdGlvbklkKG9wdCksIG9wdCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaWRzXG4gICAgICAubWFwKGlkID0+IG1hcC5nZXQoaWQpPy52YWx1ZSA/PyBtYXAuZ2V0KGlkKT8ubmFtZSA/PyBpZClcbiAgICAgIC5qb2luKCcsICcpO1xuICB9XG5cblxuXG5cblxuICBnb1RvUGFnZShwYWdlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5wYWdpbmF0aW9uQ29uZmlnPy5wYWdlID09IHBhZ2UpIHJldHVybjtcbiAgICBpZiAocGFnZSA8IDEgfHwgcGFnZSA+IHRoaXMucGFnaW5hdGlvbkNvbmZpZy50b3RhbFBhZ2VzKSByZXR1cm47XG4gICAgdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2UgPSBwYWdlO1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgb2JqOiB7XG4gICAgICAgIGxpbWl0OiB0aGlzLnBhZ2luYXRpb25Db25maWcubGltaXQsXG4gICAgICAgIHBhZ2U6IHBhZ2UsXG4gICAgICB9LFxuICAgICAgZXZlbnRUeXBlOiAncGFnZUNoYW5nZScsXG4gICAgfTtcbiAgICB0aGlzLmNvbW1vblNldmljZS5tYWluQ29udGFpbmVyTGVmdCA9IHRoaXMuY2VudGVyU2Nyb2xsYWJsZUJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZXZlbnQpXG4gIH1cblxuICBvblBhZ2VTaXplQ2hhbmdlKCkge1xuICAgIHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlID0gMTtcbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNvbW1vblNldmljZS5nZXRGaWx0ZXJzRnJvbUNvbHVtbnModGhpcy5jb2x1bW5zLCB0aGlzLmZpbHRlcnNDb25maWcpLm1hcCgoeyBxdWVyeSwgLi4ucmVzdCB9KSA9PiB7XG4gICAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICAgIGRlbGV0ZSBxdWVyeS5fX3R5cGVuYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcXVlcnksXG4gICAgICAgICAgLi4ucmVzdCxcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBub19vZl9yZWNvcmRzOiBOdW1iZXIodGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0KSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICAgIG9iajoge1xuICAgICAgICAgIGxpbWl0OiB0aGlzLnBhZ2luYXRpb25Db25maWcubGltaXQsXG4gICAgICAgICAgcGFnZTogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2UsXG4gICAgICAgIH0sXG4gICAgICAgIGV2ZW50VHlwZTogJ3BhZ2VDaGFuZ2UnLFxuICAgICAgfTtcbiAgICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZXZlbnQpXG4gICAgfSwgNzAwKTtcbiAgfVxuXG4gIGFjdGlvblByZXNldChkYXRhOiBhbnksIHR5cGU6IGFueSkge1xuICAgIGRhdGEuY29sdW1ucyA9IGRhdGE/LmNvbHVtbnM/Lm1hcCgoeyBfaWQsIGZpbHRlclZhbHVlLCBzZWFyY2gsIGNvbHVtbl9kcm9wZG93bl92YWx1ZSwgcXVlcnksIF9fdHlwZW5hbWUsIC4uLnJlc3QgfTogYW55KSA9PiByZXN0KTtcbiAgICB0aGlzLnRhYmxlVmlldz8uZm9yRWFjaCgoZWxlKSA9PiB7IGVsZS5pc190ZW1wID0gZmFsc2UgfSk7XG5cbiAgICB7XG4gICAgICB0aGlzLmJvZHlUZXh0Rm9udHNTaXplID0gZGF0YS5jb25maWcuYm9keVRleHRGb250c1NpemUsXG4gICAgICAgIHRoaXMuZm9udEZhaW1seSA9IGRhdGEuY29uZmlnLmZvbnRGYWltbHksXG4gICAgICAgIGRhdGE/LmZpbHRlcnM/LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGRlbGV0ZSBlbGVtZW50Ll9fdHlwZW5hbWU7XG4gICAgICAgICAgaWYgKGVsZW1lbnQucXVlcnkpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBlbGVtZW50LnF1ZXJ5Ll9fdHlwZW5hbWU7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHR5cGVvZiBlbGVtZW50LnF1ZXJ5ID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgICBlbGVtZW50LnF1ZXJ5ICE9PSBudWxsICYmXG4gICAgICAgICAgICAgIE9iamVjdC5rZXlzKGVsZW1lbnQucXVlcnkpLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGVsZW1lbnQucXVlcnkgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB0aGlzLmhlYWRlclRleHRGb250c1NpemUgPSBkYXRhLmNvbmZpZy5oZWFkZXJUZXh0Rm9udHNTaXplLFxuICAgICAgICB0aGlzLnNlbGVjdGVkVGFibGVMYXlvdXQgPSBkYXRhLmNvbmZpZy5zZWxlY3RlZFRhYmxlTGF5b3V0LFxuICAgICAgICB0aGlzLnNob3dWZXJ0aWNhbEJvcmRlciA9IGRhdGEuY29uZmlnLnNob3dWZXJ0aWNhbEJvcmRlcixcbiAgICAgICAgdGhpcy5jdXJyZW50SWRGb3JVcGRhdGVQcmVzZXQgPSBkYXRhLmlkO1xuICAgICAgdGhpcy5maWx0ZXJzQ29uZmlnID0gZGF0YS5maWx0ZXJzO1xuICAgIH1cbiAgICBkZWxldGUgZGF0YT8uX190eXBlbmFtZTtcbiAgICBkZWxldGUgZGF0YT8uaXNfdGVtcDtcbiAgICBkZWxldGUgZGF0YT8uY29uZmlnLl9fdHlwZW5hbWU7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBvYmo6IHtcbiAgICAgICAgZGF0YTogZGF0YVxuICAgICAgfSxcbiAgICAgIGV2ZW50VHlwZTogdHlwZVxuICAgIH1cbiAgICB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KGV2ZW50KVxuICB9XG5cbiAgY3VycmVudElkRm9yVXBkYXRlUHJlc2V0ID0gJyc7XG4gIGN1cnJldGFUYWJsZVByZXNldEZvclVwZGF0ZTogYW55O1xuICB0ZW1wX3N0YXRlID0ge1xuICAgIGlkOiAnJyxcbiAgICBpc190ZW1wOiBmYWxzZVxuICB9XG4gIGFzeW5jIHNlbGVjdEZpbHRlcihkYXRhOiBhbnkpIHtcbiAgICB0aGlzLnRlbXBfc3RhdGUgPSB7XG4gICAgICBpZDogZGF0YS5pZCxcbiAgICAgIGlzX3RlbXA6IHRydWVcbiAgICB9XG4gICAgdGhpcy50YWJsZVZpZXc/LmZvckVhY2goKGVsZSkgPT4geyBlbGUuaXNfdGVtcCA9IGZhbHNlIH0pO1xuICAgIHRoaXMudGFibGVWaWV3ID0gdGhpcy50YWJsZVZpZXcubWFwKGl0ZW0gPT4gKHtcbiAgICAgIC4uLml0ZW0sXG4gICAgICBpc190ZW1wOiBpdGVtLmlkID09IGRhdGE/LmlkXG4gICAgfSkpO1xuICAgIHRoaXMuY29sdW1ucyA9IGRhdGEuY29sdW1ucztcbiAgICB7XG4gICAgICB0aGlzLmJvZHlUZXh0Rm9udHNTaXplID0gZGF0YS5jb25maWcuYm9keVRleHRGb250c1NpemUsXG4gICAgICAgIHRoaXMuZm9udEZhaW1seSA9IGRhdGEuY29uZmlnLmZvbnRGYWltbHksXG4gICAgICAgIGRhdGEuZmlsdGVycy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBkZWxldGUgZWxlbWVudC5fX3R5cGVuYW1lO1xuXG4gICAgICAgICAgaWYgKGVsZW1lbnQucXVlcnkpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBlbGVtZW50LnF1ZXJ5Ll9fdHlwZW5hbWU7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHR5cGVvZiBlbGVtZW50LnF1ZXJ5ID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgICBlbGVtZW50LnF1ZXJ5ICE9PSBudWxsICYmXG4gICAgICAgICAgICAgIE9iamVjdC5rZXlzKGVsZW1lbnQucXVlcnkpLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGVsZW1lbnQucXVlcnkgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgIC8vIHRoaXMuZ2xvYmFsU2VhcmNoID0gZGF0YS5jb25maWcuYm9keVRleHRGb250c1NpemUsXG4gICAgICB0aGlzLmhlYWRlclRleHRGb250c1NpemUgPSBkYXRhLmNvbmZpZy5oZWFkZXJUZXh0Rm9udHNTaXplLFxuICAgICAgICB0aGlzLnNlbGVjdGVkVGFibGVMYXlvdXQgPSBkYXRhLmNvbmZpZy5zZWxlY3RlZFRhYmxlTGF5b3V0LFxuICAgICAgICB0aGlzLnNob3dWZXJ0aWNhbEJvcmRlciA9IGRhdGEuY29uZmlnLnNob3dWZXJ0aWNhbEJvcmRlcixcbiAgICAgICAgdGhpcy5jdXJyZW50SWRGb3JVcGRhdGVQcmVzZXQgPSBkYXRhLmlkO1xuICAgICAgdGhpcy5jdXJyZXRhVGFibGVQcmVzZXRGb3JVcGRhdGUgPSBzdHJ1Y3R1cmVkQ2xvbmUoZGF0YSk7XG4gICAgICB0aGlzLnByZXNldE5hbWUgPSBkYXRhPy5uYW1lO1xuICAgICAgdGhpcy5wcmVzZXRGaWx0ZXIgPSBkYXRhPy5hY3RpdmVGaWx0ZXJzIHx8IGZhbHNlO1xuICAgICAgdGhpcy5maWx0ZXJzQ29uZmlnID0gZGF0YS5maWx0ZXJzO1xuICAgICAgYXdhaXQgdGhpcy5hcHBseUZpbHRlcm9wdGlvbkxpc3QoKTtcbiAgICAgIHRoaXMucmVmcmVzaEhlYWRlcnMoKTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIGRhdGEuY29sdW1ucyA9IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gICAgICBkZWxldGUgZGF0YT8uX190eXBlbmFtZTtcbiAgICAgIGRlbGV0ZSBkYXRhPy5pc190ZW1wO1xuICAgICAgZGVsZXRlIGRhdGE/LmNvbmZpZy5fX3R5cGVuYW1lO1xuICAgIH1cbiAgICBpZiAoZGF0YT8uaXNfZGVhZnVsdCkge1xuICAgICAgcmV0dXJuIHRoaXMuYWN0aW9uUHJlc2V0KGRhdGEsICdzZXRQcmVzZXQnKVxuICAgIH1cbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIG9iajoge1xuICAgICAgICBkYXRhOiBkYXRhXG4gICAgICB9LFxuICAgICAgZXZlbnRUeXBlOiAnc2VsZWN0J1xuICAgIH1cbiAgICB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KGV2ZW50KVxuICB9XG5cbiAgc2F2ZVByZXNldChjb250cm9sPzogYW55KSB7XG4gICAgaWYgKGNvbnRyb2w/LmludmFsaWQpIHtcbiAgICAgIGNvbnRyb2w/LmNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgbmFtZXMgPSB0aGlzLmdldEZpbHRlckhlYWRlcnModGhpcy5maWx0ZXJzQ29uZmlnLCB0aGlzLmNvbHVtbnMpO1xuICAgIHRoaXMucHJlc2V0RmlsdGVyID0gdGhpcy50YWJsZUZpbHRlclZpZXdJZCA/IHRydWUgOiB0aGlzLnByZXNldEZpbHRlcjtcbiAgICBsZXQgc2VsZWN0ZWREYXRhOiBhbnkgPSB0aGlzLnRhYmxlVmlldy5maW5kKChlbGUpID0+IGVsZS5pZCA9PSB0aGlzLnRhYmxlRmlsdGVyVmlld0lkKTtcbiAgICBsZXQgY29uZmlnID0ge1xuICAgICAgZm9udEZhaW1seTogdGhpcy5mb250RmFpbWx5LFxuICAgICAgYm9keVRleHRGb250c1NpemU6ICsodGhpcy5ib2R5VGV4dEZvbnRzU2l6ZSB8fCAxNCksXG4gICAgICBoZWFkZXJUZXh0Rm9udHNTaXplOiArKHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSB8fCAxNCksXG4gICAgICBvZGRSb3dzQmFja2dyb3VuZENvbG9yOiB0aGlzLnJvd1NoYWRpbmdFbmFibGVkID8gdGhpcy5vZGRSb3dzQmFja2dyb3VuZENvbG9yIDogdW5kZWZpbmVkLFxuICAgICAgc2hvd1ZlcnRpY2FsQm9yZGVyOiB0aGlzLnNob3dWZXJ0aWNhbEJvcmRlcixcbiAgICAgIHNlbGVjdGVkVGFibGVMYXlvdXQ6IHRoaXMuc2VsZWN0ZWRUYWJsZUxheW91dCxcbiAgICAgIGdsb2JhbFNlYXJjaDogdGhpcy50YWJsZVNlYXJjaCxcbiAgICAgIGZpbHRlck5hbWVzOiBuYW1lcyxcbiAgICAgIHRvdGFsQ291bnQ6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy50b3RhbFJlc3VsdHMsXG4gICAgICByb3dTaGFkaW5nRW5hYmxlZDogdGhpcy5yb3dTaGFkaW5nRW5hYmxlZFxuXG4gICAgfVxuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgb2JqOiB7XG4gICAgICAgIG5hbWU6IHRoaXMudGFibGVGaWx0ZXJWaWV3SWQgPyBzZWxlY3RlZERhdGE/Lm5hbWUgOiB0aGlzLnByZXNldE5hbWUsXG4gICAgICAgIGFjdGl2ZUZpbHRlcnM6IHRoaXMucHJlc2V0RmlsdGVyLFxuICAgICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgICBmaWx0ZXJzOiB0aGlzLnByZXNldEZpbHRlclxuICAgICAgICAgID8gdGhpcy5maWx0ZXJzQ29uZmlnPy5tYXAoKHsgX190eXBlbmFtZSwgcXVlcnksIC4uLnJlc3QgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBfX3R5cGVuYW1lOiBfX2lubmVyLCAuLi5jbGVhblF1ZXJ5IH0gPSBxdWVyeSB8fCB7fTtcbiAgICAgICAgICAgIHJldHVybiB7IC4uLnJlc3QsIHF1ZXJ5OiBjbGVhblF1ZXJ5IH07XG4gICAgICAgICAgfSlcbiAgICAgICAgICA6IFtdLFxuICAgICAgICBjb25maWc6IGNvbmZpZyxcbiAgICAgICAgaWQ6IHRoaXMudGFibGVGaWx0ZXJWaWV3SWQgfHwgdGhpcy5jdXJyZXRhVGFibGVQcmVzZXRGb3JVcGRhdGU/LmlkLFxuICAgICAgICBsb2FkaW5nQ2FsbDogY29udHJvbCA9PSAnbW91c2VVcCcgPyBmYWxzZSA6IHRydWUsXG4gICAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlXG4gICAgICB9LFxuICAgICAgZXZlbnRUeXBlOiB0aGlzLnRhYmxlRmlsdGVyVmlld0lkIHx8ICF0aGlzLmlzVGFibGVQcmVzZXROb3RDaGFuZ2VkID8gJ3VwZGF0ZVByZXNldCcgOiAnY3JlYXRlUHJlc2V0J1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlcmVkQ29sdW1ucyA9IHRoaXMuY29tbW9uU2V2aWNlLmdldEZpbHRlcnNGcm9tQ29sdW1ucyh0aGlzLmNvbHVtbnMsIHRoaXMuZmlsdGVyc0NvbmZpZyk7XG4gICAgY29uc3QgY2xlYW5lZEZpbHRlcmVkQ29sdW1ucyA9IGZpbHRlcmVkQ29sdW1ucy5tYXAoKHsgcXVlcnksIC4uLnJlc3QgfSkgPT4ge1xuICAgICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgIGRlbGV0ZSBxdWVyeS5fX3R5cGVuYW1lO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcXVlcnksXG4gICAgICAgIC4uLnJlc3QsXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgZmlsdGVyczogY2xlYW5lZEZpbHRlcmVkQ29sdW1ucyxcbiAgICAgIG5vX29mX3JlY29yZHM6IE51bWJlcih0aGlzLnBhZ2luYXRpb25Db25maWcubGltaXQpLFxuICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KGV2ZW50KVxuICAgIH0sIDUwMCk7XG4gIH1cblxuXG4gIGdldEZpbHRlckhlYWRlcnMoZmlsdGVyczogYW55W10sIGNvbHVtbnM6IGFueVtdKTogc3RyaW5nIHtcbiAgICBjb25zdCBtYXRjaGVkSGVhZGVycyA9IGZpbHRlcnNcbiAgICAgIC5tYXAoZiA9PiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnMuZmluZChjID0+IGMuZmllbGQgPT09IGYuZmllbGQpO1xuICAgICAgICByZXR1cm4gY29sdW1uID8gY29sdW1uLmhlYWRlciA6IG51bGw7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihoZWFkZXIgPT4gISFoZWFkZXIpO1xuXG4gICAgcmV0dXJuIG1hdGNoZWRIZWFkZXJzLmpvaW4oJywgJyk7XG4gIH1cblxuXG4gIHRvZ2dsZVJvd1NoYWRpbmcoKSB7XG4gICAgdGhpcy5vZGRSb3dzQmFja2dyb3VuZENvbG9yID0gdGhpcy5yb3dTaGFkaW5nRW5hYmxlZCA/ICcjZjFmMWYxJyA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLm9uRm9udENoYW5nZSgpO1xuICB9XG5cbiAgdHJhY2tCeVRhYmxlKGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxuICBhY3RpdmVSb3c6IGFueVxuICBhY3RpdmVSb3dDb2w6IGFueTtcblxuICAvLyBUcmFjayBleHBhbmRlZCBjZWxscyBhcyBhIFNldCBvZiB1bmlxdWUgcm93K2NvbCBpZGVudGlmaWVyc1xuXG4gIGdldENlbGxLZXkocm93OiBhbnksIGNvbDogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5nZXRSb3dJZChyb3cpfV8ke2NvbD8uZmllbGR9YDtcbiAgfVxuXG4gIGV4cGFuZGVkQ2VsbHMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICBwcml2YXRlIHpDb3VudGVyID0gMjE7XG5cbiAgc2hvd0RldGFpbHNCb3ggPSBmYWxzZTtcblxuICB0b2dnbGVFeHBhbmRPZkxvbmdDZWxsVGV4dChcbiAgICByb3c6IGFueSxcbiAgICBjb2w6IGFueSxcbiAgICBjb2x1bW5zOiBhbnlbXSxcbiAgICBleHBhbmRXaG9sZVJvdyA9IGZhbHNlXG4gICkge1xuICAgIGNvbnN0IGV4cGFuZENlbGxzID0gKHRhcmdldFJvdzogYW55KSA9PiB7XG4gICAgICBjb2x1bW5zLmZvckVhY2goYyA9PiB7XG4gICAgICAgIGlmIChjLnR5cGUgPT09ICdpbWFnZScpIHJldHVybjtcbiAgICAgICAgY29uc3QgdGV4dCA9IHRhcmdldFJvd1tjLmZpZWxkXTtcblxuICAgICAgICBpZiAoKHR5cGVvZiB0ZXh0ID09PSAnc3RyaW5nJyAmJiB0ZXh0Lmxlbmd0aCA+IDUwKSB8fCAoQXJyYXkuaXNBcnJheSh0ZXh0KSAmJiB0ZXh0Py5sZW5ndGggPiAxKSkge1xuICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Um93SWQodGFyZ2V0Um93KSArICctJyArIGMuZmllbGQ7XG4gICAgICAgICAgdGhpcy56Q291bnRlcisrO1xuICAgICAgICAgIHRoaXMuZXhwYW5kZWRDZWxscy5zZXQoa2V5LCB0aGlzLnpDb3VudGVyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuXG4gICAgY29uc3QgY29sbGVjdEtleXNGb3JSb3cgPSAodGFyZ2V0Um93OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gW107XG4gICAgICBjb2x1bW5zLmZvckVhY2goYyA9PiB7XG4gICAgICAgIGlmIChjLnR5cGUgPT09ICdpbWFnZScpIHJldHVybjtcblxuICAgICAgICBjb25zdCB0ZXh0ID0gdGFyZ2V0Um93W2MuZmllbGRdO1xuICAgICAgICBpZiAodHlwZW9mIHRleHQgPT09ICdzdHJpbmcnICYmIHRleHQubGVuZ3RoID4gNTAgfHwgKEFycmF5LmlzQXJyYXkodGV4dCkgJiYgdGV4dD8ubGVuZ3RoID4gMSkpIHtcbiAgICAgICAgICBrZXlzLnB1c2godGhpcy5nZXRSb3dJZCh0YXJnZXRSb3cpICsgJy0nICsgYy5maWVsZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIGlmIChleHBhbmRXaG9sZVJvdykge1xuICAgICAgbGV0IHJvd0tleXM6IHN0cmluZ1tdID0gW107XG4gICAgICBjb25zdCB0ZXh0ID0gdGhpcy5nZXROZXN0ZWRWYWx1ZShyb3csIGNvbD8uZmllbGQpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGV4dCkgJiYgdGV4dC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJvd0tleXMgPSBjb2xsZWN0S2V5c0ZvclJvdyhyb3cpO1xuICAgICAgICByb3c/LmNoaWxkcmVuPy5mb3JFYWNoKChjaGlsZDogYW55KSA9PiB7XG4gICAgICAgICAgcm93S2V5cy5wdXNoKC4uLmNvbGxlY3RLZXlzRm9yUm93KGNoaWxkKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm93S2V5cyA9IGNvbGxlY3RLZXlzRm9yUm93KHJvdyk7XG4gICAgICB9XG4gICAgICBjb25zdCBhbGxFeHBhbmRlZCA9IHJvd0tleXMuZXZlcnkoayA9PiB0aGlzLmV4cGFuZGVkQ2VsbHMuaGFzKGspKTtcbiAgICAgIHRoaXMuZXhwYW5kZWRDZWxscy5jbGVhcigpO1xuICAgICAgaWYgKCFhbGxFeHBhbmRlZCkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyb3cuY2hpbGRyZW4pICYmIHJvdy5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZXhwYW5kQ2VsbHMocm93KTtcbiAgICAgICAgICByb3c/LmNoaWxkcmVuPy5mb3JFYWNoKChjaGlsZDogYW55KSA9PiBleHBhbmRDZWxscyhjaGlsZCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGV4cGFuZENlbGxzKHJvdyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRSb3dJZChyb3cpICsgJy0nICsgY29sLmZpZWxkO1xuICAgICAgaWYgKGNvbC50eXBlID09PSAnaW1hZ2UnKSByZXR1cm47XG5cbiAgICAgIGlmICghdGhpcy5leHBhbmRlZENlbGxzLmhhcyhrZXkpKSB7XG4gICAgICAgIHRoaXMuZXhwYW5kZWRDZWxscy5jbGVhcigpO1xuICAgICAgICB0aGlzLnpDb3VudGVyKys7XG4gICAgICAgIHRoaXMuZXhwYW5kZWRDZWxscy5zZXQoa2V5LCB0aGlzLnpDb3VudGVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZXhwYW5kZWRDZWxscy5kZWxldGUoa2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNob3dEZXRhaWxzQm94ID0gZmFsc2U7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmlzT3BlblRvVG9wKHJvdylcbiAgICB9LCAwKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBpc09wZW5Ub1RvcChyb3c6IGFueSkge1xuICAgIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZGF0YS1ncmlkLWJvZHknKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgaWYgKCF3cmFwcGVyKSByZXR1cm4gZmFsc2U7XG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbDogYW55KSA9PiB7XG4gICAgICBjb25zdCBpZCA9IChyb3cuaWQgfHwgcm93Ll9pZCkgKyAnLScgKyAoY29sLmlkIHx8IGNvbC5faWQpO1xuICAgICAgY29uc3QgYm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgICAgaWYgKCFib3gpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IGJveFJlY3QgPSBib3guZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCB3cmFwcGVyUmVjdCA9IHdyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBpc092ZXJmbG93aW5nQm90dG9tID0gYm94UmVjdC5ib3R0b20gPiB3cmFwcGVyUmVjdC5ib3R0b207XG4gICAgICBjb25zdCBpc092ZXJmbG93aW5nVG9wID0gYm94UmVjdC50b3AgPCB3cmFwcGVyUmVjdC50b3A7XG4gICAgICBpZiAoaXNPdmVyZmxvd2luZ0JvdHRvbSAmJiAhaXNPdmVyZmxvd2luZ1RvcCkge1xuICAgICAgICBjb25zdCBib3hIZWlnaHQgPSBib3gub2Zmc2V0SGVpZ2h0IHx8IDA7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGJveEhlaWdodCArIDQ7XG4gICAgICAgIGJveC5zdHlsZS50b3AgPSBgJHstb2Zmc2V0fXB4YDtcblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYm94LnN0eWxlLmJvdHRvbSA9IGBhdXRvYDtcbiAgICAgICAgYm94LnN0eWxlLnRvcCA9IGAxMDAlYDtcbiAgICAgICAgYm94LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKDApYDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KVxuICAgIHRoaXMuc2hvd0RldGFpbHNCb3ggPSB0cnVlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG5cblxuXG5cblxuICBpc0V4cGFuZGVkKHJvdzogYW55LCBjb2w6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGVkQ2VsbHMuaGFzKHRoaXMuZ2V0Um93SWQocm93KSArICctJyArIGNvbC5maWVsZCk7XG4gIH1cblxuICBnZXRaSW5kZXgocm93OiBhbnksIGNvbDogYW55KTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5leHBhbmRlZENlbGxzLmdldCh0aGlzLmdldFJvd0lkKHJvdykgKyAnLScgKyBjb2wuZmllbGQpID8/IDIxO1xuICB9XG5cbiAgaXNPdmVyZmxvd2luZyhlbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwpOiBib29sZWFuIHtcbiAgICBpZiAoIWVsZW1lbnQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gZWxlbWVudC5zY3JvbGxXaWR0aCA+IGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIH1cblxuXG4gIC8vIFBpY3R1cmUgY2VsbCBMb2dpY1xuICBjb2xvckNvbWJpbmF0aW9uID0gWydwaWMtY29tYjEnLCAncGljLWNvbWIyJywgJ3BpYy1jb21iNCddO1xuICBnZXREeW5hbWljQ2xhc3MobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hbWUpIHJldHVybiB0aGlzLmNvbG9yQ29tYmluYXRpb25bMF07XG4gICAgY29uc3QgaGFzaCA9IEFycmF5LmZyb20obmFtZSkucmVkdWNlKChhY2MsIGNoYXIpID0+IGFjYyArIGNoYXIuY2hhckNvZGVBdCgwKSwgMCk7XG4gICAgY29uc3QgaW5kZXggPSBoYXNoICUgdGhpcy5jb2xvckNvbWJpbmF0aW9uPy5sZW5ndGg7XG4gICAgcmV0dXJuIHRoaXMuY29sb3JDb21iaW5hdGlvbltpbmRleF07XG4gIH1cblxuICBnZXRJbml0aWFscyhuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghbmFtZSkgcmV0dXJuICdOQSc7XG4gICAgY29uc3QgcGFydHMgPSBuYW1lLnRyaW0oKS5zcGxpdCgnICcpO1xuICAgIHJldHVybiAocGFydHNbMF1bMF0gKyAocGFydHNbMV0/LlswXSB8fCAnJykpLnRvVXBwZXJDYXNlKCk7XG4gIH1cblxuXG4gIGFjdGlvbkhpZGU6IGJvb2xlYW4gPSB0cnVlO1xuICB4UG9zID0gMDtcbiAgeVBvcyA9IDA7XG4gIGlzVmlzaWJsZSA9IGZhbHNlO1xuICBkZWF0aWxzTGlzdDogYW55O1xuICBvcGVuRXhwZW5kSW5kZXg6IGFueTtcbiAgcG9zaXRpb25lZFlldCA9IGZhbHNlO1xuXG4gb25SaWdodENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCB8IGFueSwgZGVhdGlsc0xpc3Q6IGFueSk6IGJvb2xlYW4ge1xuICAgICAvLyBTdG9yZSBvcmlnaW5hbCBhY3Rpb25zIG9uIGZpcnN0IGluaXRpYWxpemF0aW9uIGlmIG5vdCBhbHJlYWR5IHN0b3JlZFxuICBpZiAodGhpcy5vcmlnaW5hbEFjdGlvbnM/Lmxlbmd0aCA9PT0gMCAmJiB0aGlzLnZhbGlkYXRlSWNvbikge1xuICAgIHRoaXMub3JpZ2luYWxBY3Rpb25zID0gWy4uLnRoaXMuYWN0aW9uc107IC8vIERlZXAgY29weSB0byBwcmVzZXJ2ZSBvcmlnaW5hbFxuICB9XG4gICAgdGhpcy5hY3Rpb25zID0gdGhpcy52YWxpZGF0ZUljb24gXG4gICAgICA/IHRoaXMuZ2V0VmFsaWRBY3Rpb25zKGRlYXRpbHNMaXN0KSBcbiAgICAgIDogKGRlYXRpbHNMaXN0Py5hY3Rpb25zPy5sZW5ndGggPyBkZWF0aWxzTGlzdC5hY3Rpb25zIDogdGhpcy5hY3Rpb25zKTtcblxuICAgIGlmICghKGV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudCkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmIChkZWF0aWxzTGlzdC5fX3ZpcnR1YWxJbmRleCA9PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBcbiAgICAvLyBHZXQgdGhlIGluaXRpYWwgY2xpY2sgcG9zaXRpb25cbiAgICBjb25zdCBjbGlja1ggPSAoZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50KSA/IGV2ZW50LmNsaWVudFggOiBldmVudC50b3VjaGVzWzBdLmNsaWVudFg7XG4gICAgY29uc3QgY2xpY2tZID0gKGV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudCkgPyBldmVudC5jbGllbnRZIDogZXZlbnQudG91Y2hlc1swXS5jbGllbnRZO1xuICAgIFxuICAgIHRoaXMueFBvcyA9IGNsaWNrWDtcbiAgICB0aGlzLnlQb3MgPSBjbGlja1k7XG4gICAgdGhpcy5pc1Zpc2libGUgPSB0cnVlO1xuICAgIHRoaXMucG9zaXRpb25lZFlldCA9IGZhbHNlO1xuICAgIHRoaXMuZGVhdGlsc0xpc3QgPSBkZWF0aWxzTGlzdDtcbiAgICBcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IG1lbnVFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNvbnRleHQtbWVudScpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgaWYgKCFtZW51RWxlbWVudCkgcmV0dXJuO1xuICAgICAgY29uc3QgbWVudVdpZHRoID0gbWVudUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICBjb25zdCBtZW51SGVpZ2h0ID0gbWVudUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgICAgY29uc3Qgdmlld3BvcnRXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgICAgXG4gICAgICAvLyBHZXQgdGFibGUgY29udGFpbmVyIGJvdW5kc1xuICAgICAgY29uc3QgdGFibGVSZWN0ID0gdGhpcy5kYXRhR3JpZENvbnRhaW5lci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgdGFibGVUb3AgPSB0YWJsZVJlY3QudG9wO1xuICAgICAgY29uc3QgdGFibGVCb3R0b20gPSB0YWJsZVJlY3QuYm90dG9tO1xuICAgICAgY29uc3QgdGFibGVIZWlnaHQgPSB0YWJsZVJlY3QuaGVpZ2h0O1xuICAgICAgXG4gICAgICBsZXQgeCA9IGNsaWNrWDtcbiAgICAgIGxldCB5ID0gY2xpY2tZO1xuICAgICAgXG4gICAgICAvLyBBZGp1c3QgWCBwb3NpdGlvbiBpZiBtZW51IG92ZXJmbG93cyBob3Jpem9udGFsbHlcbiAgICAgIGlmICh4ICsgbWVudVdpZHRoID4gdmlld3BvcnRXaWR0aCkge1xuICAgICAgICB4ID0gdmlld3BvcnRXaWR0aCAtIG1lbnVXaWR0aCAtIDEwO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBBZGp1c3QgWSBwb3NpdGlvbiBpZiBtZW51IG92ZXJmbG93cyB0YWJsZSB2ZXJ0aWNhbGx5XG4gICAgICAvLyBDaGVjayBpZiBtZW51IHdvdWxkIGdvIGJlbG93IHRhYmxlIGJvdHRvbVxuICAgICAgaWYgKHkgKyBtZW51SGVpZ2h0ID4gdGFibGVCb3R0b20pIHtcbiAgICAgICAgLy8gVHJ5IHRvIHBvc2l0aW9uIGFib3ZlIGNsaWNrIHBvaW50XG4gICAgICAgIHkgPSBjbGlja1kgLSBtZW51SGVpZ2h0O1xuICAgICAgICBcbiAgICAgICAgLy8gSWYgdGhhdCBnb2VzIGFib3ZlIHRhYmxlIHRvcCwgcG9zaXRpb24gYXQgdGFibGUgYm90dG9tXG4gICAgICAgIGlmICh5IDwgdGFibGVUb3ApIHtcbiAgICAgICAgICB5ID0gdGFibGVCb3R0b20gLSBtZW51SGVpZ2h0IC0gMTA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRW5zdXJlIG1lbnUgZG9lc24ndCBnbyBhYm92ZSB0YWJsZSB0b3BcbiAgICAgIGlmICh5IDwgdGFibGVUb3ApIHtcbiAgICAgICAgeSA9IHRhYmxlVG9wICsgMTA7XG4gICAgICB9XG4gICAgICB0aGlzLnhQb3MgPSB4O1xuICAgICAgdGhpcy55UG9zID0geTtcbiAgICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTtcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucG9zaXRpb25lZFlldCA9IHRydWU7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG4gICAgXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHJldHVybiBmYWxzZTtcbn1cblxuICBvbkFjdGlvbkNsaWNrKGFjdGlvbjogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2VuZE9iaiA9IHtcbiAgICAgIG9iajogdGhpcy5kZWF0aWxzTGlzdCxcbiAgICAgIGV2ZW50VHlwZTogYWN0aW9uLFxuICAgIH07XG4gICAgdGhpcy5wb3NpdGlvbmVkWWV0ID0gZmFsc2U7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoc2VuZE9iaik7XG4gIH1cblxuXG4gIG9uVmVyaWZ5Q2xpY2sodHlwZTogc3RyaW5nKSB7XG4gICAgY29uc3QgdGV4dCA9IHR5cGU/LnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHRleHQgPT0gJ2FyY2hpdmUnIHx8IHRleHQgPT0gJ3VuYXJjaGl2ZSdcbiAgICAgIC8vIHx8IHRleHQgPT0gJ2RlbGV0ZScgfHwgdGV4dCA9PSAncmVzdG9yZScgfHwgdGV4dCA9PSAncmVtb3ZlJyB8fCB0ZXh0ID09ICdkZWFjdGl2YXRlJyB8fCB0ZXh0ID09ICdhY3RpdmF0ZScgfHwgdGV4dCA9PSAnYmxvY2snIHx8IHRleHQgPT0gJ3VuYmxvY2snXG4gICAgICAvLyB8fCB0ZXh0ID09ICdlbmFibGUnIHx8IHRleHQgPT0gJ2Rpc2FibGUnIHx8IHRleHQgPT0gJ2FwcHJvdmUnIHx8IHRleHQgPT0gJ3JlamVjdCcgfHwgdGV4dCA9PSAncHVibGlzaCcgfHwgdGV4dCA9PSAndW5wdWJsaXNoJyB8fCB0ZXh0ID09ICdsb2NrJyB8fCB0ZXh0ID09ICd1bmxvY2snIHx8IHRleHQgPT0gJ2NvbXBsZXRlJyB8fCB0ZXh0ID09ICdpbmNvbXBsZXRlJ1xuICAgICAgLy8gfHwgdGV4dCA9PSAnc2VuZCB0byByZXZpZXcnIHx8IHRleHQgPT0gJ21hcmsgYXMgcGFpZCcgfHwgdGV4dCA9PSAnbWFyayBhcyB1bnBhaWQnIHx8IHRleHQgPT0gJ2Z1bGZpbGwnIHx8IHRleHQgPT0gJ3VuZnVsZmlsbCcgfHwgdGV4dCA9PSAncmVmdW5kJyB8fCB0ZXh0ID09ICdjYW5jZWwnIHx8IHRleHQgPT0gJ3Jlc2VuZCcgfHwgdGV4dCA9PSAnY2hhcmdlYmFjaydcbiAgICAgIC8vIHx8IHRleHQgPT0gJ2Rpc3B1dGUnIHx8IHRleHQgPT0gJ2VzY2FsYXRlJyB8fCB0ZXh0ID09ICdkZWVzY2FsYXRlJyB8fCB0ZXh0ID09ICdmbGFnJyB8fCB0ZXh0ID09ICd1bmZsYWcnIHx8IHRleHQgPT0gJ3ZlcmlmeScgfHwgdGV4dCA9PSAndW52ZXJpZnknIHx8IHRleHQgPT0gJ3N1YnNjcmliZScgfHwgdGV4dCA9PSAndW5zdWJzY3JpYmUnIHx8IHRleHQgPT0gJ2ZvbGxvdycgfHwgdGV4dCA9PSAndW5mb2xsb3cnXG4gICAgICAvLyB8fCB0ZXh0ID09ICdsaWtlJyB8fCB0ZXh0ID09ICd1bmxpa2UnIHx8IHRleHQgPT0gJ3NoYXJlJyB8fCB0ZXh0ID09ICd1bnNoYXJlJyB8fCB0ZXh0ID09ICdjb21tZW50JyB8fCB0ZXh0ID09ICd1bmNvbW1lbnQnIHx8IHRleHQgPT0gJ3RhZycgfHwgdGV4dCA9PSAndW50YWcnIHx8IHRleHQgPT0gJ2Fzc2lnbicgfHwgdGV4dCA9PSAndW5hc3NpZ24nIHx8IHRleHQgPT0gJ2xpbmsnIHx8IHRleHQgPT0gJ3VubGluaydcbiAgICAgIC8vIHx8IHRleHQgPT0gJ3N5bmMnIHx8IHRleHQgPT0gJ3Vuc3luYycgfHwgdGV4dCA9PSAnYmFja3VwJyB8fCB0ZXh0ID09ICdyZXN0b3JlIGJhY2t1cCcgfHwgdGV4dCA9PSAnbWlncmF0ZScgfHwgdGV4dCA9PSAnaW1wb3J0JyB8fCB0ZXh0ID09ICdleHBvcnQnIHx8IHRleHQgPT0gJ2dlbmVyYXRlIHJlcG9ydCcgfHwgdGV4dCA9PSAnZG93bmxvYWQgcmVwb3J0JyB8fCB0ZXh0ID09ICd2aWV3IGRldGFpbHMnXG4gICAgICAvLyB8fCB0ZXh0ID09ICdlZGl0IGRldGFpbHMnIHx8IHRleHQgPT0gJ3VwZGF0ZSBkZXRhaWxzJyB8fCB0ZXh0ID09ICdjaGFuZ2Ugc3RhdHVzJyB8fCB0ZXh0ID09ICdyZXNldCBwYXNzd29yZCcgfHwgdGV4dCA9PSAnc2VuZCBub3RpZmljYXRpb24nIHx8IHRleHQgPT0gJ3NjaGVkdWxlJyB8fCB0ZXh0ID09ICdyZXNjaGVkdWxlJyB8fCB0ZXh0ID09ICdjYW5jZWwgc2NoZWR1bGUnIHx8IHRleHQgPT0gJ3N0YXJ0JyB8fCB0ZXh0ID09ICdzdG9wJyB8fCB0ZXh0ID09ICdwYXVzZScgfHwgdGV4dCA9PSAncmVzdW1lJ1xuICAgICkge1xuICAgICAgLy8gdGhpcy5jbGVhclNlbGVjdGlvblN0YXRlKHRoaXMudGFibGVUeXBlKTtcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRSb3dzLmNsZWFyKCk7XG4gICAgfVxuICAgIGNvbnN0IGlkc0FycmF5ID0gQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkUm93cyk7XG4gICAgY29uc3QgYXJyYXlPZk9iamVjdHNXaXRoVGFibGVUeXBlOiBhbnlbXSA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRSb3dzLmZvckVhY2goaWQgPT4ge1xuICAgICAgYXJyYXlPZk9iamVjdHNXaXRoVGFibGVUeXBlLnB1c2goe1xuICAgICAgICBpZDogaWQsXG4gICAgICAgIGxpc3RpbmdUeXBlOiB0aGlzLmxpc3RpbmdUeXBlLFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgY29uc3Qgc2VuZE9iaiA9IHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgb2JqOiBpZHNBcnJheSxcbiAgICAgICAgdGFibGVOYW1lOiB0aGlzLnRhYmxlTmFtZSxcbiAgICAgICAgbGlzdGluZ1R5cGU6IHRoaXMubGlzdGluZ1R5cGUsXG4gICAgICB9LFxuICAgICAgZXZlbnRUeXBlOiB0eXBlLFxuICAgIH07XG4gICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChzZW5kT2JqKVxuICB9XG5cblxuICBnZXRDZWxsQ2xhc3Nlcyhjb2x1bW46IGFueSwgdmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29tbW9uU2V2aWNlLmdldENlbGxDbGFzc2VzKGNvbHVtbiwgdmFsdWUpO1xuICB9XG5cblxuICByZW1vdmVDb2x1bW5GaWx0ZXJGcm9tQ29sdW1uKGNvbHVtbjogYW55KSB7XG4gICAgaWYgKCFjb2x1bW4pIHJldHVyblxuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Ryb3Bkb3duJ3x8IGNvbHVtbi50eXBlID09ICdhcnJheScpIHtcbiAgICAgIGNvbHVtbi5xdWVyeS5faWRzID0gW107XG4gICAgfSBlbHNlIGlmIChbJ3N0cmluZycsICdudW1iZXInLCAnZGF0ZSddLmluY2x1ZGVzKGNvbHVtbi50eXBlKSkge1xuICAgICAgY29sdW1uLnF1ZXJ5ID0ge1xuICAgICAgICBmaXJzdF9jb25kaXRpb246ICdjb250YWluJyxcbiAgICAgICAgZmlyc3RfdmFsdWU6IG51bGwsXG4gICAgICAgIGNvbmRpdGlvbjogJ25vbmUnLFxuICAgICAgICBzZWNvbmRfY29uZGl0aW9uOiBudWxsLFxuICAgICAgICBzZWNvbmRfdmFsdWU6IG51bGwsXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZpbHRlcnNDb25maWcuZmluZEluZGV4KChmOiBhbnkpID0+IGYuZmllbGQgPT09IGNvbHVtbi5maWVsZCk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5maWx0ZXJzQ29uZmlnLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyZWRDb2x1bW5zID0gdGhpcy5jb21tb25TZXZpY2UuZ2V0RmlsdGVyc0Zyb21Db2x1bW5zKHRoaXMuY29sdW1ucywgdGhpcy5maWx0ZXJzQ29uZmlnKTtcbiAgICBjb25zdCBjbGVhbmVkRmlsdGVyZWRDb2x1bW5zID0gZmlsdGVyZWRDb2x1bW5zLm1hcCgoeyBxdWVyeSwgLi4ucmVzdCB9KSA9PiB7XG4gICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgZGVsZXRlIHF1ZXJ5Ll9fdHlwZW5hbWU7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBxdWVyeSxcbiAgICAgICAgLi4ucmVzdCxcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHNlbmREYXRhID0ge1xuICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgIGZpbHRlcnM6IGNsZWFuZWRGaWx0ZXJlZENvbHVtbnMsXG4gICAgICBub19vZl9yZWNvcmRzOiBOdW1iZXIodGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0KSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgZmlsdGVyZWRDb2x1bW5zID0gY2xlYW5lZEZpbHRlcmVkQ29sdW1ucztcbiAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucy5lbWl0KGZpbHRlcmVkQ29sdW1ucyk7XG4gICAgfSwgMjAwKTtcbiAgfVxuXG4gIG9uU2lkZU1lbnVDb2x1bW5zVmlzaWJpbGl0eUNoYW5nZSgpIHtcbiAgICB0aGlzLnJlZnJlc2hIZWFkZXJzKCk7XG4gICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgZmlsdGVyczogdGhpcy5jb21tb25TZXZpY2UuZ2V0RmlsdGVyc0Zyb21Db2x1bW5zKHRoaXMuY29sdW1ucywgdGhpcy5maWx0ZXJzQ29uZmlnKS5tYXAoKHsgcXVlcnksIC4uLnJlc3QgfSkgPT4ge1xuICAgICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgICBkZWxldGUgcXVlcnkuX190eXBlbmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgIC4uLnJlc3QsXG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgbm9fb2ZfcmVjb3JkczogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2VTaXplLFxuICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gIH1cblxuICBjbGVhbkZpbHRlcmRDb2x1bW5zKCkge1xuICAgIGNvbnN0IGZpbHRlcmVkQ29sdW1ucyA9IHRoaXMuY29tbW9uU2V2aWNlLmdldEZpbHRlcnNGcm9tQ29sdW1ucyh0aGlzLmNvbHVtbnMsIHRoaXMuZmlsdGVyc0NvbmZpZyk7XG4gICAgY29uc3QgY2xlYW5lZEZpbHRlcmVkQ29sdW1ucyA9IGZpbHRlcmVkQ29sdW1ucy5tYXAoKHsgcXVlcnksIC4uLnJlc3QgfSkgPT4ge1xuICAgICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgIGRlbGV0ZSBxdWVyeS5fX3R5cGVuYW1lO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcXVlcnksXG4gICAgICAgIC4uLnJlc3QsXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNsZWFuZWRGaWx0ZXJlZENvbHVtbnM7XG4gIH1cblxuICBkb3dubG9hZENzdih0eXBlOiAnY3N2JyB8ICd4bHN4Jykge1xuICAgIGNvbnN0IGNvbmZpZzogYW55ID0ge1xuICAgICAgaGVhZGVyQmdDb2xvcjogdGhpcy5oZWFkZXJCYWNrZ3JvdW5kQ29sb3IsXG4gICAgICBoZWFkZXJUZXh0Q29sb3I6IHRoaXMuaGVhZGVyVGV4dENvbG9yLFxuICAgICAgYm9keVRleHRDb2xvcjogJyMwMDAwMDAnLFxuICAgICAgZm9udEZhbWlseTogdGhpcy5mb250RmFpbWx5LFxuICAgICAgZm9udFdlaWdodDogJ25vcm1hbCcsXG4gICAgICB6b29tU2NhbGU6IDEyNSxcbiAgICAgIGhlYWRlclJvd0hlaWdodDogMzBcbiAgICB9XG4gICAgaWYgKHRoaXMuZW5hYmxlRXhwb3J0KSB7XG4gICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgY29uc3QgZGQgPSBTdHJpbmcobm93LmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgIGNvbnN0IG1tID0gU3RyaW5nKG5vdy5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgIGNvbnN0IHl5eXkgPSBub3cuZ2V0RnVsbFllYXIoKTtcbiAgICAgIGNvbnN0IEhIID0gU3RyaW5nKG5vdy5nZXRIb3VycygpKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgY29uc3QgTU0gPSBTdHJpbmcobm93LmdldE1pbnV0ZXMoKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZCA9XG4gICAgICAgIGAke3RoaXMudGFibGVUeXBlfV8ke2RkfS0ke21tfS0ke3l5eXl9XyR7SEh9LSR7TU19YDtcblxuICAgICAgY29uc29sZS5sb2coZm9ybWF0dGVkKTtcblxuICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydERhdGEodGhpcy5jb2x1bW5zLCB0aGlzLmRhdGFTZXQsIGZvcm1hdHRlZCwgdHlwZSwgdGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMsIGNvbmZpZyk7XG4gICAgfVxuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgb2JqOiB7XG4gICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucyxcbiAgICAgICAgZmlsdGVyczogW11cbiAgICAgIH0sXG4gICAgICBldmVudFR5cGU6ICdkb3dubG9hZENzdidcbiAgICB9XG4gICAgaWYgKHR5cGUgPT0gJ3hsc3gnKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudClcblxuICB9XG5cbiAgb25Gb250Q2hhbmdlKCkge1xuICAgIHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSA9IHRoaXMuYm9keVRleHRGb250c1NpemU7XG4gICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgZm9udEZhaW1seTogdGhpcy5mb250RmFpbWx5LFxuICAgICAgYm9keVRleHRGb250c1NpemU6IHRoaXMuYm9keVRleHRGb250c1NpemUsXG4gICAgICBoZWFkZXJUZXh0Rm9udHNTaXplOiB0aGlzLmhlYWRlclRleHRGb250c1NpemUsXG4gICAgICBvZGRSb3dzQmFja2dyb3VuZENvbG9yOiB0aGlzLnJvd1NoYWRpbmdFbmFibGVkID8gdGhpcy5vZGRSb3dzQmFja2dyb3VuZENvbG9yIDogdW5kZWZpbmVkLFxuICAgICAgc2hvd1ZlcnRpY2FsQm9yZGVyOiB0aGlzLnNob3dWZXJ0aWNhbEJvcmRlcixcbiAgICAgIHNlbGVjdGVkVGFibGVMYXlvdXQ6IHRoaXMuc2VsZWN0ZWRUYWJsZUxheW91dCxcbiAgICAgIGdsb2JhbFNlYXJjaDogdGhpcy50YWJsZVNlYXJjaFxuICAgIH1cbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIG9iajoge1xuICAgICAgICBkYXRhOiBjb25maWdcbiAgICAgIH0sXG4gICAgICBldmVudFR5cGU6ICdjb25maWcnXG4gICAgfVxuICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZXZlbnQpXG5cbiAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gIH1cblxuICBvbkdsb2JhbFNlYXJjaCgpIHtcbiAgICAvLyBDbG9zZSBleHBhbmRlZCByb3dzIGJlZm9yZSBzZWFyY2hpbmdcbiAgdGhpcy5jbG9zZUFsbEV4cGFuZGVkUm93cygpO1xuXG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBvYmo6IHtcbiAgICAgICAgdGFibGVTZWFyY2g6IHRoaXMudGFibGVTZWFyY2hcbiAgICAgIH0sXG4gICAgICBldmVudFR5cGU6ICdzZWFyY2gnXG4gICAgfVxuICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZXZlbnQpXG4gICAgaWYgKHRoaXMudGFibGVGaWx0ZXJWaWV3SWQpIHtcbiAgICAgIHRoaXMuc2F2ZVByZXNldCgnbW91c2VVcCcpO1xuICAgIH1cbiAgICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICB9XG5cbiAgb25TZWFyY2hJbnB1dChldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCB2YWx1ZSA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgLy8gY29uc29sZS5sb2coJ1NlYXJjaCB2YWx1ZTonLCB2YWx1ZSk7XG5cbiAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICB0aGlzLnRhYmxlU2VhcmNoID0gJyc7XG4gICAgICB0aGlzLm9uR2xvYmFsU2VhcmNoKCk7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tGaWx0ZXJDaGFuZ2VzRWZmZWN0KCk6IGFueSB7XG4gICAgaWYgKCF0aGlzLnRhYmxlRmlsdGVyVmlld0lkKSByZXR1cm4gdHJ1ZVxuICAgIGNvbnN0IGZpbmREZWZhdWx0RmlsdGVyID0gdGhpcy50YWJsZVZpZXc/LmZpbmQoKGVsZTogYW55KSA9PiBlbGU/LmlkID09IHRoaXMudGFibGVGaWx0ZXJWaWV3SWQpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZUZpbHRlcnMgPSAoZmlsdGVyczogYW55W10gfCB1bmRlZmluZWQpOiBhbnlbXSA9PiB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZmlsdGVycykpIHJldHVybiBbXTtcbiAgICAgIGNvbnN0IGNsb25lZCA9IGZpbHRlcnMubWFwKGYgPT4ge1xuICAgICAgICBjb25zdCBpdGVtID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmID8/IHt9KSk7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpdGVtLl9pZHMpKSBpdGVtLl9pZHMgPSBbXTtcbiAgICAgICAgaXRlbS5faWRzID0gaXRlbS5faWRzLnNsaWNlKCkuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIGEgPT09ICdudW1iZXInICYmIHR5cGVvZiBiID09PSAnbnVtYmVyJykgcmV0dXJuIGEgLSBiO1xuICAgICAgICAgIHJldHVybiAoJycgKyBhKS5sb2NhbGVDb21wYXJlKCcnICsgYik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChpdGVtLnF1ZXJ5ID09PSBudWxsKSB7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGl0ZW0ucXVlcnkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGl0ZW0ucXVlcnkuX2lkcykpIGl0ZW0ucXVlcnkuX2lkcyA9IFtdO1xuICAgICAgICAgIGl0ZW0ucXVlcnkuX2lkcyA9IGl0ZW0ucXVlcnkuX2lkcy5zbGljZSgpLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGEgPT09ICdudW1iZXInICYmIHR5cGVvZiBiID09PSAnbnVtYmVyJykgcmV0dXJuIGEgLSBiO1xuICAgICAgICAgICAgcmV0dXJuICgnJyArIGEpLmxvY2FsZUNvbXBhcmUoJycgKyBiKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfSk7XG4gICAgICBjbG9uZWQuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgZmEgPSAoYS5maWVsZCB8fCAnJykgKyAnfCcgKyAoYS50eXBlIHx8ICcnKTtcbiAgICAgICAgY29uc3QgZmIgPSAoYi5maWVsZCB8fCAnJykgKyAnfCcgKyAoYi50eXBlIHx8ICcnKTtcbiAgICAgICAgcmV0dXJuIGZhLmxvY2FsZUNvbXBhcmUoZmIpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBjbG9uZWQ7XG4gICAgfTtcblxuICAgIGNvbnN0IGRlZXBFcXVhbCA9IChhOiBhbnksIGI6IGFueSk6IGJvb2xlYW4gPT4ge1xuICAgICAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlO1xuXG4gICAgICBpZiAodHlwZW9mIGEgIT09ICdvYmplY3QnIHx8IGEgPT09IG51bGwgfHwgdHlwZW9mIGIgIT09ICdvYmplY3QnIHx8IGIgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGEgPT09IGI7XG4gICAgICB9XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGEpICE9PSBBcnJheS5pc0FycmF5KGIpKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XG4gICAgICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKCFkZWVwRXF1YWwoYVtpXSwgYltpXSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qga2V5c0EgPSBPYmplY3Qua2V5cyhhKTtcbiAgICAgIGNvbnN0IGtleXNCID0gT2JqZWN0LmtleXMoYik7XG4gICAgICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5c0EpIHtcbiAgICAgICAgaWYgKCFrZXlzQi5pbmNsdWRlcyhrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICghZGVlcEVxdWFsKGFba2V5XSwgYltrZXldKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBjb25zdCBub3JtYWxpemVkQSA9IG5vcm1hbGl6ZUZpbHRlcnMoZmluZERlZmF1bHRGaWx0ZXI/LmZpbHRlcnMpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRCID0gbm9ybWFsaXplRmlsdGVycyh0aGlzLmZpbHRlcnNDb25maWcpO1xuICAgIGNvbnN0IGlzU2FtZSA9IGRlZXBFcXVhbChub3JtYWxpemVkQSwgbm9ybWFsaXplZEIpO1xuICAgIHJldHVybiBpc1NhbWU7XG4gIH1cblxuXG5cbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyBDZWxsIFNlbGVjdGlvbiBJbXBsZW1lbnRlZCBIZXJlIEltcGxlbWVudGVkIEhlcmVcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4gIHNlbGVjdGVkQ2VsbHM6IGFueVtdID0gW107XG4gIHNlbGVjdGVkS2V5czogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG4gIHNlbGVjdGlvblN0YXJ0OiBhbnkgPSBudWxsO1xuICBpc1NlbGVjdGluZyA9IGZhbHNlO1xuICBzdGFydFNlbGVjdGlvbihcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGNvbEluZGV4OiBudW1iZXIsXG4gICAgc3ViQ29sSW5kZXg6IG51bWJlciB8IG51bGwsXG4gICAgZmllbGQ6IHN0cmluZyxcbiAgICBldmVudDogTW91c2VFdmVudCxcbiAgICBzZWN0aW9uOiBzdHJpbmdcbiAgKSB7XG4gICAgLy8gZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcy5jbGVhcigpO1xuICAgIGNvbnN0IHNhZmVTdWIgPSBzdWJDb2xJbmRleCA/PyAwO1xuICAgIGNvbnN0IGtleSA9IGAke3Jvd0luZGV4fS0ke2NvbEluZGV4fS0ke3NhZmVTdWJ9LSR7ZmllbGR9YDtcblxuICAgIHRoaXMuc2VsZWN0aW9uU3RhcnQgPSB7IHJvd0luZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXg6IHNhZmVTdWIsIGZpZWxkLCBrZXkgfTtcbiAgICB0aGlzLmlzU2VsZWN0aW5nID0gdHJ1ZTtcbiAgICB0aGlzLnNlbGVjdGVkS2V5cy5jbGVhcigpO1xuICAgIHRoaXMuc2VsZWN0ZWRLZXlzLmFkZChrZXkpO1xuICAgIHRoaXMuc2VsZWN0ZWRDZWxscyA9IFt0aGlzLnNlbGVjdGlvblN0YXJ0XTtcbiAgICBjb25zdCBtb3VzZVVwSGFuZGxlciA9ICgpID0+IHtcbiAgICAgIHRoaXMuZW5kU2VsZWN0aW9uKCk7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgbW91c2VVcEhhbmRsZXIpO1xuICAgIH07XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG1vdXNlVXBIYW5kbGVyKTtcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbkJvdW5kYXJpZXMoKVxuICB9XG5cblxuICBleHRlbmRTZWxlY3Rpb24oXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBjb2xJbmRleDogbnVtYmVyLFxuICAgIHN1YkNvbEluZGV4OiBudW1iZXIgfCBudWxsLFxuICAgIGZpZWxkOiBzdHJpbmcsXG4gICAgZXZlbnQ6IE1vdXNlRXZlbnQsXG4gICAgc2VjdGlvbjogc3RyaW5nXG4gICkge1xuICAgIGlmICghdGhpcy5pc1NlbGVjdGluZyB8fCAhdGhpcy5zZWxlY3Rpb25TdGFydCkgcmV0dXJuO1xuXG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLnNlbGVjdGlvblN0YXJ0O1xuICAgIGNvbnN0IHRhcmdldFN1YkNvbEluZGV4ID0gc3ViQ29sSW5kZXggPz8gMDtcbiAgICBjb25zdCBuZXdLZXlzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcbiAgICBjb25zdCBuZXdDZWxsczogYW55W10gPSBbXTtcbiAgICBjb25zdCBtaW5Sb3cgPSBNYXRoLm1pbihzdGFydC5yb3dJbmRleCwgcm93SW5kZXgpO1xuICAgIGNvbnN0IG1heFJvdyA9IE1hdGgubWF4KHN0YXJ0LnJvd0luZGV4LCByb3dJbmRleCk7XG4gICAgY29uc3QgY29sdW1uc1RvU2VsZWN0ID0gdGhpcy5nZXRDb2x1bW5TZWxlY3Rpb25SYW5nZShzdGFydC5jb2xJbmRleCwgY29sSW5kZXgsIHN0YXJ0LnN1YkNvbEluZGV4LCB0YXJnZXRTdWJDb2xJbmRleCk7XG5cbiAgICBmb3IgKGxldCByID0gbWluUm93OyByIDw9IG1heFJvdzsgcisrKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbEluZm8gb2YgY29sdW1uc1RvU2VsZWN0KSB7XG4gICAgICAgIGNvbnN0IGsgPSBgJHtyfS0ke2NvbEluZm8uY29sSW5kZXh9LSR7Y29sSW5mby5zdWJDb2xJbmRleH0tJHtzZWN0aW9ufWA7XG4gICAgICAgIG5ld0tleXMuYWRkKGspO1xuICAgICAgICBuZXdDZWxscy5wdXNoKHtcbiAgICAgICAgICByb3dJbmRleDogcixcbiAgICAgICAgICBjb2xJbmRleDogY29sSW5mby5jb2xJbmRleCxcbiAgICAgICAgICBzdWJDb2xJbmRleDogY29sSW5mby5zdWJDb2xJbmRleCxcbiAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICBrZXk6IGtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZEtleXMgPSBuZXdLZXlzO1xuICAgIHRoaXMuc2VsZWN0ZWRDZWxscyA9IG5ld0NlbGxzO1xuICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uQm91bmRhcmllcygpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcblxuICAgIC8vIEFkZCBhdXRvLXNjcm9sbGluZyBsb2dpY1xuICAgIHRoaXMuaGFuZGxlQ2VsbEF1dG9TY3JvbGwoZXZlbnQpO1xuICB9XG5cblxuXG5cbiAgZ2V0Q29sdW1uU2VsZWN0aW9uUmFuZ2UoXG4gICAgc3RhcnRDb2w6IG51bWJlcixcbiAgICBlbmRDb2w6IG51bWJlcixcbiAgICBzdGFydFN1YjogbnVtYmVyLFxuICAgIGVuZFN1YjogbnVtYmVyXG4gICk6IHsgY29sSW5kZXg6IG51bWJlcjsgc3ViQ29sSW5kZXg6IG51bWJlciB9W10ge1xuICAgIGNvbnN0IHJlc3VsdDogeyBjb2xJbmRleDogbnVtYmVyOyBzdWJDb2xJbmRleDogbnVtYmVyIH1bXSA9IFtdO1xuICAgIGNvbnN0IG1pbkNvbCA9IE1hdGgubWluKHN0YXJ0Q29sLCBlbmRDb2wpO1xuICAgIGNvbnN0IG1heENvbCA9IE1hdGgubWF4KHN0YXJ0Q29sLCBlbmRDb2wpO1xuXG4gICAgY29uc3QgaXNMZWZ0VG9SaWdodCA9IHN0YXJ0Q29sIDw9IGVuZENvbDtcbiAgICBmb3IgKGxldCBjID0gbWluQ29sOyBjIDw9IG1heENvbDsgYysrKSB7XG4gICAgICBjb25zdCBzdWJDb2xDb3VudCA9IHRoaXMuZ2V0U3ViQ29sdW1uQ291bnQoYyk7XG5cbiAgICAgIGlmIChjID09PSBzdGFydENvbCAmJiBjID09PSBlbmRDb2wpIHtcbiAgICAgICAgY29uc3QgbWluU3ViID0gTWF0aC5taW4oc3RhcnRTdWIsIGVuZFN1Yik7XG4gICAgICAgIGNvbnN0IG1heFN1YiA9IE1hdGgubWF4KHN0YXJ0U3ViLCBlbmRTdWIpO1xuICAgICAgICBmb3IgKGxldCBzID0gbWluU3ViOyBzIDw9IG1heFN1YiAmJiBzIDwgc3ViQ29sQ291bnQ7IHMrKykge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHsgY29sSW5kZXg6IGMsIHN1YkNvbEluZGV4OiBzIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChjID09PSBzdGFydENvbCkge1xuICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodCkge1xuICAgICAgICAgIGZvciAobGV0IHMgPSBzdGFydFN1YjsgcyA8IHN1YkNvbENvdW50OyBzKyspIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHsgY29sSW5kZXg6IGMsIHN1YkNvbEluZGV4OiBzIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8PSBzdGFydFN1YiAmJiBzIDwgc3ViQ29sQ291bnQ7IHMrKykge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goeyBjb2xJbmRleDogYywgc3ViQ29sSW5kZXg6IHMgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChjID09PSBlbmRDb2wpIHtcbiAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHQpIHtcbiAgICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8PSBlbmRTdWIgJiYgcyA8IHN1YkNvbENvdW50OyBzKyspIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHsgY29sSW5kZXg6IGMsIHN1YkNvbEluZGV4OiBzIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKGxldCBzID0gZW5kU3ViOyBzIDwgc3ViQ29sQ291bnQ7IHMrKykge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goeyBjb2xJbmRleDogYywgc3ViQ29sSW5kZXg6IHMgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzdWJDb2xDb3VudDsgcysrKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goeyBjb2xJbmRleDogYywgc3ViQ29sSW5kZXg6IHMgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZ2V0U3ViQ29sdW1uQ291bnQoY29sSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLmNvbHVtbnMgfHwgY29sSW5kZXggPCAwIHx8IGNvbEluZGV4ID49IHRoaXMuY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnNbY29sSW5kZXhdO1xuICAgIGlmIChjb2x1bW4uY2hpbGRyZW4gJiYgQXJyYXkuaXNBcnJheShjb2x1bW4uY2hpbGRyZW4pKSB7XG4gICAgICByZXR1cm4gY29sdW1uLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgaXNHcm91cENvbHVtbihjb2xJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3ViQ29sdW1uQ291bnQoY29sSW5kZXgpID4gMTtcbiAgfVxuICBlbmRTZWxlY3Rpb24oKSB7XG4gICAgdGhpcy5pc1NlbGVjdGluZyA9IGZhbHNlO1xuICAgIHRoaXMuc3RvcEF1dG9TY3JvbGwoKTtcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbkJvdW5kYXJpZXMoKTtcbiAgfVxuICBpc1NlbGVjdGVkKFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgY29sSW5kZXg6IG51bWJlcixcbiAgICBzdWJDb2xJbmRleDogbnVtYmVyIHwgbnVsbCxcbiAgICBmaWVsZDogc3RyaW5nLFxuICAgIHNlY3Rpb246IHN0cmluZ1xuICApIHtcbiAgICBjb25zdCBzYWZlU3ViID0gc3ViQ29sSW5kZXggPz8gMDtcbiAgICBjb25zdCBrZXkgPSBgJHtyb3dJbmRleH0tJHtjb2xJbmRleH0tJHtzYWZlU3VifS0ke3NlY3Rpb259YDtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEtleXMuaGFzKGtleSk7XG4gIH1cblxuXG4gIHByaXZhdGUgc2VsZWN0aW9uQm91bmRzOiB7XG4gICAgdG9wOiBudW1iZXIgfCBudWxsO1xuICAgIGJvdHRvbTogbnVtYmVyIHwgbnVsbDtcbiAgICBsZWZ0OiB7IGNvbEluZGV4OiBudW1iZXI7IHN1YkNvbEluZGV4OiBudW1iZXIgfSB8IG51bGw7XG4gICAgcmlnaHQ6IHsgY29sSW5kZXg6IG51bWJlcjsgc3ViQ29sSW5kZXg6IG51bWJlciB9IHwgbnVsbDtcbiAgfSA9IHsgdG9wOiBudWxsLCBib3R0b206IG51bGwsIGxlZnQ6IG51bGwsIHJpZ2h0OiBudWxsIH07XG5cbiAgdXBkYXRlU2VsZWN0aW9uQm91bmRhcmllcygpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZENlbGxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25Cb3VuZHMgPSB7IHRvcDogbnVsbCwgYm90dG9tOiBudWxsLCBsZWZ0OiBudWxsLCByaWdodDogbnVsbCB9O1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdldCBhbGwgdW5pcXVlIHJvdyBpbmRpY2VzIGFuZCBmaW5kIG1pbi9tYXhcbiAgICBjb25zdCByb3dJbmRpY2VzID0gWy4uLm5ldyBTZXQodGhpcy5zZWxlY3RlZENlbGxzLm1hcChjZWxsID0+IGNlbGwucm93SW5kZXgpKV07XG4gICAgdGhpcy5zZWxlY3Rpb25Cb3VuZHMudG9wID0gTWF0aC5taW4oLi4ucm93SW5kaWNlcyk7XG4gICAgdGhpcy5zZWxlY3Rpb25Cb3VuZHMuYm90dG9tID0gTWF0aC5tYXgoLi4ucm93SW5kaWNlcyk7XG5cbiAgICAvLyBGb3IgbGVmdC9yaWdodCBib3VuZGFyaWVzLCB3ZSBuZWVkIHRvIGNvbnNpZGVyIGJvdGggY29sSW5kZXggYW5kIHN1YkNvbEluZGV4XG4gICAgY29uc3QgbGVmdE1vc3QgPSB0aGlzLmZpbmRMZWZ0TW9zdENlbGwoKTtcbiAgICBjb25zdCByaWdodE1vc3QgPSB0aGlzLmZpbmRSaWdodE1vc3RDZWxsKCk7XG5cbiAgICB0aGlzLnNlbGVjdGlvbkJvdW5kcy5sZWZ0ID0gbGVmdE1vc3Q7XG4gICAgdGhpcy5zZWxlY3Rpb25Cb3VuZHMucmlnaHQgPSByaWdodE1vc3Q7XG4gIH1cbiAgZmluZExlZnRNb3N0Q2VsbCgpOiB7IGNvbEluZGV4OiBudW1iZXI7IHN1YkNvbEluZGV4OiBudW1iZXIgfSB8IG51bGwge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkQ2VsbHMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IG1pbkNvbEluZGV4ID0gTWF0aC5taW4oLi4udGhpcy5zZWxlY3RlZENlbGxzLm1hcChjZWxsID0+IGNlbGwuY29sSW5kZXgpKTtcbiAgICBjb25zdCBsZWZ0Q29sQ2VsbHMgPSB0aGlzLnNlbGVjdGVkQ2VsbHMuZmlsdGVyKGNlbGwgPT4gY2VsbC5jb2xJbmRleCA9PT0gbWluQ29sSW5kZXgpO1xuICAgIGNvbnN0IG1pblN1YkNvbEluZGV4ID0gTWF0aC5taW4oLi4ubGVmdENvbENlbGxzLm1hcChjZWxsID0+IGNlbGwuc3ViQ29sSW5kZXgpKTtcblxuICAgIHJldHVybiB7IGNvbEluZGV4OiBtaW5Db2xJbmRleCwgc3ViQ29sSW5kZXg6IG1pblN1YkNvbEluZGV4IH07XG4gIH1cbiAgZmluZFJpZ2h0TW9zdENlbGwoKTogeyBjb2xJbmRleDogbnVtYmVyOyBzdWJDb2xJbmRleDogbnVtYmVyIH0gfCBudWxsIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZENlbGxzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBtYXhDb2xJbmRleCA9IE1hdGgubWF4KC4uLnRoaXMuc2VsZWN0ZWRDZWxscy5tYXAoY2VsbCA9PiBjZWxsLmNvbEluZGV4KSk7XG4gICAgY29uc3QgcmlnaHRDb2xDZWxscyA9IHRoaXMuc2VsZWN0ZWRDZWxscy5maWx0ZXIoY2VsbCA9PiBjZWxsLmNvbEluZGV4ID09PSBtYXhDb2xJbmRleCk7XG4gICAgY29uc3QgbWF4U3ViQ29sSW5kZXggPSBNYXRoLm1heCguLi5yaWdodENvbENlbGxzLm1hcChjZWxsID0+IGNlbGwuc3ViQ29sSW5kZXgpKTtcblxuICAgIHJldHVybiB7IGNvbEluZGV4OiBtYXhDb2xJbmRleCwgc3ViQ29sSW5kZXg6IG1heFN1YkNvbEluZGV4IH07XG4gIH1cbiAgaXNUb3BCb3JkZXIocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlciwgc3ViQ29sSW5kZXg6IG51bWJlciB8IG51bGwsIHNlY3Rpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNhZmVTdWIgPSBzdWJDb2xJbmRleCA/PyAwO1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkS2V5cy5oYXMoYCR7cm93SW5kZXh9LSR7Y29sSW5kZXh9LSR7c2FmZVN1Yn0tJHtzZWN0aW9ufWApO1xuICAgIHJldHVybiBpc1NlbGVjdGVkICYmIHRoaXMuc2VsZWN0aW9uQm91bmRzLnRvcCAhPT0gbnVsbCAmJiByb3dJbmRleCA9PT0gdGhpcy5zZWxlY3Rpb25Cb3VuZHMudG9wO1xuICB9XG4gIGlzQm90dG9tQm9yZGVyKHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIsIHN1YkNvbEluZGV4OiBudW1iZXIgfCBudWxsLCBzZWN0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBzYWZlU3ViID0gc3ViQ29sSW5kZXggPz8gMDtcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5zZWxlY3RlZEtleXMuaGFzKGAke3Jvd0luZGV4fS0ke2NvbEluZGV4fS0ke3NhZmVTdWJ9LSR7c2VjdGlvbn1gKTtcbiAgICByZXR1cm4gaXNTZWxlY3RlZCAmJiB0aGlzLnNlbGVjdGlvbkJvdW5kcy5ib3R0b20gIT09IG51bGwgJiYgcm93SW5kZXggPT09IHRoaXMuc2VsZWN0aW9uQm91bmRzLmJvdHRvbTtcbiAgfVxuICBpc0xlZnRCb3JkZXIocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlciwgc3ViQ29sSW5kZXg6IG51bWJlciB8IG51bGwsIHNlY3Rpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNhZmVTdWIgPSBzdWJDb2xJbmRleCA/PyAwO1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkS2V5cy5oYXMoYCR7cm93SW5kZXh9LSR7Y29sSW5kZXh9LSR7c2FmZVN1Yn0tJHtzZWN0aW9ufWApO1xuICAgIHJldHVybiBpc1NlbGVjdGVkICYmIHRoaXMuc2VsZWN0aW9uQm91bmRzLmxlZnQgIT09IG51bGwgJiZcbiAgICAgIGNvbEluZGV4ID09PSB0aGlzLnNlbGVjdGlvbkJvdW5kcy5sZWZ0LmNvbEluZGV4ICYmXG4gICAgICBzYWZlU3ViID09PSB0aGlzLnNlbGVjdGlvbkJvdW5kcy5sZWZ0LnN1YkNvbEluZGV4O1xuICB9XG5cbiAgaXNSaWdodEJvcmRlcihyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyLCBzdWJDb2xJbmRleDogbnVtYmVyIHwgbnVsbCwgc2VjdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2FmZVN1YiA9IHN1YkNvbEluZGV4ID8/IDA7XG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRLZXlzLmhhcyhgJHtyb3dJbmRleH0tJHtjb2xJbmRleH0tJHtzYWZlU3VifS0ke3NlY3Rpb259YCk7XG4gICAgcmV0dXJuIGlzU2VsZWN0ZWQgJiYgdGhpcy5zZWxlY3Rpb25Cb3VuZHMucmlnaHQgIT09IG51bGwgJiZcbiAgICAgIGNvbEluZGV4ID09PSB0aGlzLnNlbGVjdGlvbkJvdW5kcy5yaWdodC5jb2xJbmRleCAmJlxuICAgICAgc2FmZVN1YiA9PT0gdGhpcy5zZWxlY3Rpb25Cb3VuZHMucmlnaHQuc3ViQ29sSW5kZXg7XG4gIH1cblxuICBpc1RvcExlZnRDb3JuZXIocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlciwgc3ViQ29sSW5kZXg6IG51bWJlciB8IG51bGwsIHNlY3Rpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVG9wQm9yZGVyKHJvd0luZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pICYmIHRoaXMuaXNMZWZ0Qm9yZGVyKHJvd0luZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pO1xuICB9XG5cbiAgaXNUb3BSaWdodENvcm5lcihyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyLCBzdWJDb2xJbmRleDogbnVtYmVyIHwgbnVsbCwgc2VjdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNUb3BCb3JkZXIocm93SW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCwgc2VjdGlvbikgJiYgdGhpcy5pc1JpZ2h0Qm9yZGVyKHJvd0luZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pO1xuICB9XG5cbiAgaXNCb3R0b21MZWZ0Q29ybmVyKHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIsIHN1YkNvbEluZGV4OiBudW1iZXIgfCBudWxsLCBzZWN0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0JvdHRvbUJvcmRlcihyb3dJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4LCBzZWN0aW9uKSAmJiB0aGlzLmlzTGVmdEJvcmRlcihyb3dJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4LCBzZWN0aW9uKTtcbiAgfVxuXG4gIGlzQm90dG9tUmlnaHRDb3JuZXIocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlciwgc3ViQ29sSW5kZXg6IG51bWJlciB8IG51bGwsIHNlY3Rpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzQm90dG9tQm9yZGVyKHJvd0luZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pICYmIHRoaXMuaXNSaWdodEJvcmRlcihyb3dJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4LCBzZWN0aW9uKTtcbiAgfVxuXG5cbiAgY2VsbFNlbGVjdGlvbkF1dG9TY3JvbGxJbnRlcnZhbDogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSBzY3JvbGxTcGVlZCA9IDE1MDtcbiAgcHJpdmF0ZSBzY3JvbGxNYXJnaW4gPSAzMDtcbiAgaGFuZGxlQ2VsbEF1dG9TY3JvbGwoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAodGhpcy5jZWxsU2VsZWN0aW9uQXV0b1Njcm9sbEludGVydmFsKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuY2VsbFNlbGVjdGlvbkF1dG9TY3JvbGxJbnRlcnZhbCk7XG4gICAgICB0aGlzLmNlbGxTZWxlY3Rpb25BdXRvU2Nyb2xsSW50ZXJ2YWwgPSBudWxsO1xuICAgIH1cbiAgICBjb25zdCBob3Jpem9udGFsQ29udGFpbmVyID0gdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHZlcnRpY2FsQ29udGFpbmVyID0gdGhpcy5tYWluU2Nyb2xsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFob3Jpem9udGFsQ29udGFpbmVyIHx8ICF2ZXJ0aWNhbENvbnRhaW5lcikgcmV0dXJuO1xuICAgIGNvbnN0IGhvcml6b250YWxSZWN0ID0gaG9yaXpvbnRhbENvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBtb3VzZVggPSBldmVudC5jbGllbnRYO1xuICAgIGNvbnN0IHZlcnRpY2FsUmVjdCA9IHZlcnRpY2FsQ29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IG1vdXNlWSA9IGV2ZW50LmNsaWVudFk7XG4gICAgY29uc3QgbmVhclRvcCA9IG1vdXNlWSAtIHZlcnRpY2FsUmVjdC50b3AgPCB0aGlzLnNjcm9sbE1hcmdpbjtcbiAgICBjb25zdCBuZWFyQm90dG9tID0gdmVydGljYWxSZWN0LmJvdHRvbSAtIG1vdXNlWSA8IHRoaXMuc2Nyb2xsTWFyZ2luO1xuICAgIGNvbnN0IG5lYXJMZWZ0ID0gbW91c2VYIC0gaG9yaXpvbnRhbFJlY3QubGVmdCA8IHRoaXMuc2Nyb2xsTWFyZ2luO1xuICAgIGNvbnN0IG5lYXJSaWdodCA9IGhvcml6b250YWxSZWN0LnJpZ2h0IC0gbW91c2VYIDwgdGhpcy5zY3JvbGxNYXJnaW47XG4gICAgbGV0IHNjcm9sbFggPSAwO1xuICAgIGxldCBzY3JvbGxZID0gMDtcbiAgICBpZiAobmVhclRvcCkgc2Nyb2xsWSA9IC10aGlzLnNjcm9sbFNwZWVkO1xuICAgIGlmIChuZWFyQm90dG9tKSBzY3JvbGxZID0gdGhpcy5zY3JvbGxTcGVlZDtcbiAgICBpZiAobmVhckxlZnQpIHNjcm9sbFggPSAtdGhpcy5zY3JvbGxTcGVlZDtcbiAgICBpZiAobmVhclJpZ2h0KSBzY3JvbGxYID0gdGhpcy5zY3JvbGxTcGVlZDtcbiAgICBpZiAoc2Nyb2xsWCAhPT0gMCB8fCBzY3JvbGxZICE9PSAwKSB7XG4gICAgICB0aGlzLmNlbGxTZWxlY3Rpb25BdXRvU2Nyb2xsSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIGlmIChzY3JvbGxYICE9PSAwKSB7XG4gICAgICAgICAgaG9yaXpvbnRhbENvbnRhaW5lci5zY3JvbGxCeShzY3JvbGxYLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Nyb2xsWSAhPT0gMCkge1xuICAgICAgICAgIHZlcnRpY2FsQ29udGFpbmVyLnNjcm9sbEJ5KDAsIHNjcm9sbFkpO1xuICAgICAgICB9XG4gICAgICB9LCA4KTtcbiAgICB9XG4gIH1cblxuICBzdG9wQXV0b1Njcm9sbCgpIHtcbiAgICBpZiAodGhpcy5jZWxsU2VsZWN0aW9uQXV0b1Njcm9sbEludGVydmFsKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuY2VsbFNlbGVjdGlvbkF1dG9TY3JvbGxJbnRlcnZhbCk7XG4gICAgICB0aGlzLmNlbGxTZWxlY3Rpb25BdXRvU2Nyb2xsSW50ZXJ2YWwgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgLy8gUm93IFNlbGVjdGlvbiBmcm9tIHRoZSBJbmRleGluZyBJbXBsZW1lbnRlZCBIZXJlXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuICByb3dTZWxlY3RlZEluZGV4ZXM6IFNldDxudW1iZXI+ID0gbmV3IFNldCgpO1xuICByb3dTZWxlY3RpbmcgPSBmYWxzZTtcbiAgcm93U2VsZWN0aW9uU3RhcnRJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIGF1dG9TY3JvbGxJbnRlcnZhbDogYW55ID0gbnVsbDtcblxuICBnZXQgZmlyc3RTZWxlY3RlZFJvdygpOiBudW1iZXIgfCBudWxsIHtcbiAgICBpZiAodGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMuc2l6ZSA9PT0gMCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIE1hdGgubWluKC4uLnRoaXMucm93U2VsZWN0ZWRJbmRleGVzKTtcbiAgfVxuXG4gIGdldCBsYXN0U2VsZWN0ZWRSb3coKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMucm93U2VsZWN0ZWRJbmRleGVzLnNpemUgPT09IDApIHJldHVybiBudWxsO1xuICAgIHJldHVybiBNYXRoLm1heCguLi50aGlzLnJvd1NlbGVjdGVkSW5kZXhlcyk7XG4gIH1cblxuXG4gIG9uUm93TW91c2VEb3duKGluZGV4OiBudW1iZXIsIGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnJvd1NlbGVjdGluZyA9IHRydWU7XG4gICAgdGhpcy5zZWxlY3RlZEtleXMuY2xlYXIoKTtcbiAgICB0aGlzLnJvd1NlbGVjdGlvblN0YXJ0SW5kZXggPSBpbmRleDtcbiAgICB0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcy5jbGVhcigpO1xuICAgIHRoaXMucm93U2VsZWN0ZWRJbmRleGVzLmFkZChpbmRleCk7XG4gICAgdGhpcy5hY3RpdmVDZWxsID0gJyc7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgY29uc3QgbW91c2VNb3ZlSGFuZGxlciA9IChlOiBNb3VzZUV2ZW50KSA9PiB0aGlzLmhhbmRsZUF1dG9TY3JvbGwoZSk7XG4gICAgY29uc3QgbW91c2VVcEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9uUm93TW91c2VVcCgpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG1vdXNlVXBIYW5kbGVyKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG1vdXNlTW92ZUhhbmRsZXIpO1xuICAgICAgaWYgKHRoaXMuYXV0b1Njcm9sbEludGVydmFsKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuYXV0b1Njcm9sbEludGVydmFsKTtcbiAgICAgICAgdGhpcy5hdXRvU2Nyb2xsSW50ZXJ2YWwgPSBudWxsO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgbW91c2VVcEhhbmRsZXIpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG1vdXNlTW92ZUhhbmRsZXIpO1xuICB9XG5cbiAgb25Sb3dNb3VzZU92ZXIoaW5kZXg6IG51bWJlciwgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMucm93U2VsZWN0aW5nIHx8IHRoaXMucm93U2VsZWN0aW9uU3RhcnRJbmRleCA9PT0gbnVsbCkgcmV0dXJuO1xuICAgIHRoaXMucm93U2VsZWN0ZWRJbmRleGVzLmNsZWFyKCk7XG4gICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1pbih0aGlzLnJvd1NlbGVjdGlvblN0YXJ0SW5kZXgsIGluZGV4KTtcbiAgICBjb25zdCBlbmQgPSBNYXRoLm1heCh0aGlzLnJvd1NlbGVjdGlvblN0YXJ0SW5kZXgsIGluZGV4KTtcbiAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgIHRoaXMucm93U2VsZWN0ZWRJbmRleGVzLmFkZChpKTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coWy4uLnRoaXMucm93U2VsZWN0ZWRJbmRleGVzXSk7XG4gIH1cblxuICBvblJvd01vdXNlVXAoKSB7XG4gICAgdGhpcy5yb3dTZWxlY3RpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnJvd1NlbGVjdGlvblN0YXJ0SW5kZXggPSBudWxsO1xuICB9XG4gIGhhbmRsZUF1dG9TY3JvbGwoZTogTW91c2VFdmVudCkge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMubWFpblNjcm9sbD8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuO1xuXG4gICAgY29uc3QgcmVjdCA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBlZGdlU2l6ZSA9IDQwXG4gICAgbGV0IHNjcm9sbEFtb3VudCA9IDA7XG5cbiAgICBpZiAoZS5jbGllbnRZIDwgcmVjdC50b3AgKyBlZGdlU2l6ZSkge1xuICAgICAgc2Nyb2xsQW1vdW50ID0gLTE1MDtcbiAgICB9IGVsc2UgaWYgKGUuY2xpZW50WSA+IHJlY3QuYm90dG9tIC0gZWRnZVNpemUpIHtcbiAgICAgIHNjcm9sbEFtb3VudCA9IDE1MDtcbiAgICB9XG5cbiAgICBpZiAoc2Nyb2xsQW1vdW50ICE9PSAwKSB7XG4gICAgICBpZiAoIXRoaXMuYXV0b1Njcm9sbEludGVydmFsKSB7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSAoKSA9PiB7XG4gICAgICAgICAgY29udGFpbmVyLnNjcm9sbFRvcCArPSBzY3JvbGxBbW91bnQ7XG4gICAgICAgICAgdGhpcy5hdXRvU2Nyb2xsSW50ZXJ2YWwgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuYXV0b1Njcm9sbEludGVydmFsID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5hdXRvU2Nyb2xsSW50ZXJ2YWwpIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5hdXRvU2Nyb2xsSW50ZXJ2YWwpO1xuICAgICAgICB0aGlzLmF1dG9TY3JvbGxJbnRlcnZhbCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICAvLyBnZXRTZWxlY3RlZERhdGFGb3JDb3B5KCk6IGFueVtdW10ge1xuICAvLyAgIGNvbnN0IGNvcGllZFJvd3M6IGFueVtdW10gPSBbXTtcbiAgLy8gICBjb25zdCBmaW5kUm93QnlWaXJ0dWFsSW5kZXggPSAodkluZGV4OiBudW1iZXIpID0+XG4gIC8vICAgICB0aGlzLmRhdGFTZXQuZmluZCgocjogYW55KSA9PiByLl9fdmlydHVhbEluZGV4ID09PSB2SW5kZXgpO1xuICAvLyAgIGlmICh0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcyAmJiB0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcy5zaXplID4gMCkge1xuICAvLyAgICAgY29uc3Qgc29ydGVkSW5kZXhlcyA9IFsuLi50aGlzLnJvd1NlbGVjdGVkSW5kZXhlc10uc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAvLyAgICAgZm9yIChjb25zdCB2SW5kZXggb2Ygc29ydGVkSW5kZXhlcykge1xuICAvLyAgICAgICBjb25zdCByb3cgPSBmaW5kUm93QnlWaXJ0dWFsSW5kZXgodkluZGV4KTtcbiAgLy8gICAgICAgaWYgKCFyb3cpIGNvbnRpbnVlO1xuICAvLyAgICAgICBjb25zdCByb3dWYWx1ZXMgPSB0aGlzLmNvbHVtbnMuZmxhdE1hcChjb2wgPT5cbiAgLy8gICAgICAgICBjb2wuY2hpbGRyZW4gJiYgQXJyYXkuaXNBcnJheShjb2wuY2hpbGRyZW4pXG4gIC8vICAgICAgICAgICA/IGNvbC5jaGlsZHJlbi5tYXAoKGM6IHsgZmllbGQ6IHN0cmluZyB9KSA9PlxuICAvLyAgICAgICAgICAgICAgIHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjLmZpZWxkKSA/PyAnJ1xuICAvLyAgICAgICAgICAgICApXG4gIC8vICAgICAgICAgICA6IHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpID8/ICcnXG4gIC8vICAgICAgICk7XG4gIC8vICAgICAgIGNvcGllZFJvd3MucHVzaChyb3dWYWx1ZXMpO1xuICAvLyAgICAgfVxuICAvLyAgIH1cblxuICAvLyAgIGlmICh0aGlzLnNlbGVjdGVkQ2VsbHMgJiYgdGhpcy5zZWxlY3RlZENlbGxzLmxlbmd0aCA+IDApIHtcbiAgLy8gICAgIGNvbnN0IHJvd3NNYXAgPSBuZXcgTWFwPG51bWJlciwgYW55W10+KCk7XG4gIC8vICAgICBmb3IgKGNvbnN0IGNlbGwgb2YgdGhpcy5zZWxlY3RlZENlbGxzKSB7XG4gIC8vICAgICAgIGNvbnN0IHJvdyA9IGZpbmRSb3dCeVZpcnR1YWxJbmRleChjZWxsLnJvd0luZGV4KTtcbiAgLy8gICAgICAgaWYgKCFyb3cpIGNvbnRpbnVlO1xuXG4gIC8vICAgICAgIGNvbnN0IGNvbCA9IHRoaXMuY29sdW1uc1tjZWxsLmNvbEluZGV4XTtcbiAgLy8gICAgICAgbGV0IGZpZWxkTmFtZSA9IGNvbD8uZmllbGQ7XG4gIC8vICAgICAgIGlmIChjb2w/LmNoaWxkcmVuICYmIGNvbC5jaGlsZHJlbltjZWxsLnN1YkNvbEluZGV4XSkge1xuICAvLyAgICAgICAgIGZpZWxkTmFtZSA9IGNvbC5jaGlsZHJlbltjZWxsLnN1YkNvbEluZGV4XS5maWVsZDtcbiAgLy8gICAgICAgfVxuICAvLyAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBmaWVsZE5hbWUpID8/ICcnO1xuXG4gIC8vICAgICAgIGlmICghcm93c01hcC5oYXMoY2VsbC5yb3dJbmRleCkpIHJvd3NNYXAuc2V0KGNlbGwucm93SW5kZXgsIFtdKTtcbiAgLy8gICAgICAgcm93c01hcC5nZXQoY2VsbC5yb3dJbmRleCkhLnB1c2godmFsdWUpO1xuICAvLyAgICAgfVxuXG4gIC8vICAgICBjb25zdCBzb3J0ZWRDZWxscyA9IFsuLi5yb3dzTWFwLmVudHJpZXMoKV1cbiAgLy8gICAgICAgLnNvcnQoKFthXSwgW2JdKSA9PiBhIC0gYilcbiAgLy8gICAgICAgLm1hcCgoW18sIHZdKSA9PiB2KTtcblxuICAvLyAgICAgY29waWVkUm93cy5wdXNoKC4uLnNvcnRlZENlbGxzKTtcbiAgLy8gICB9XG5cbiAgLy8gICBpZiAoY29waWVkUm93cy5sZW5ndGggPT09IDApIHtcbiAgLy8gICAgIGNvbnN0IGFjdGl2ZUNlbGwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuYWN0aXZlLWNlbGwnKTtcbiAgLy8gICAgIGlmIChhY3RpdmVDZWxsKSByZXR1cm4gW1thY3RpdmVDZWxsLnRleHRDb250ZW50Py50cmltKCkgfHwgJyddXTtcbiAgLy8gICB9XG4gIC8vICAgY29uc3QgbWF4Q29scyA9IGNvcGllZFJvd3MucmVkdWNlKChtYXgsIHJvdykgPT4gTWF0aC5tYXgobWF4LCByb3cubGVuZ3RoKSwgMCk7XG4gIC8vICAgY29uc3Qgbm9ybWFsaXplZCA9IGNvcGllZFJvd3MubWFwKHJvdyA9PiB7XG4gIC8vICAgICBjb25zdCBuZXdSb3cgPSBbLi4ucm93XTtcbiAgLy8gICAgIHdoaWxlIChuZXdSb3cubGVuZ3RoIDwgbWF4Q29scykgbmV3Um93LnB1c2goJycpOyBcbiAgLy8gICAgIHJldHVybiBuZXdSb3c7XG4gIC8vICAgfSk7XG4gIC8vICAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG4gIC8vIH1cblxuXG4gIHVuZG9TdGFjazogYW55W11bXSA9IFtdO1xuICByZWRvU3RhY2s6IGFueVtdW10gPSBbXTtcblxuICBwcml2YXRlIGNsb25lRGF0YShkYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gIH1cblxuICBwZXJmb3JtQ3V0KHNlbGVjdGVkRGF0YTogYW55W11bXSkge1xuICAgIC8vIFNhdmUgY3VycmVudCBzdGF0ZSBmb3IgdW5kb1xuICAgIHRoaXMudW5kb1N0YWNrLnB1c2godGhpcy5jbG9uZURhdGEodGhpcy52aXNpYmxlUm93cykpO1xuICAgIHRoaXMucmVkb1N0YWNrID0gW107IC8vIENsZWFyIHJlZG8gc3RhY2sgb24gbmV3IGFjdGlvblxuXG4gICAgLy8gUGVyZm9ybSBjdXRcbiAgICB0aGlzLmNvcHlTZXJ2aWNlLmN1dFdpdGhBbmltYXRpb24oc2VsZWN0ZWREYXRhKTtcbiAgICBjb25zdCB7IHVwZGF0ZWRSb3dzIH0gPSB0aGlzLmNvcHlTZXJ2aWNlLmN1dFNlbGVjdGVkU2VsZWN0ZWREYXRhKFxuICAgICAgdGhpcy52aXNpYmxlUm93cyxcbiAgICAgIHRoaXMucm93U2VsZWN0ZWRJbmRleGVzLFxuICAgICAgdGhpcy5zZWxlY3RlZENlbGxzLFxuICAgICAgdGhpcy5jb2x1bW5zLFxuICAgICAgdGhpcy5zZXROZXN0ZWRWYWx1ZS5iaW5kKHRoaXMpXG4gICAgKTtcblxuICAgIC8vIGNvbnNvbGUubG9nKCdVcGRhdGVkIFJvd3M6ICcsIHVwZGF0ZWRSb3dzKTtcbiAgfVxuXG5cblxuICBnZXRTZWxlY3RlZERhdGFGb3JDb3B5KCk6IGFueVtdW10ge1xuICAgIHJldHVybiB0aGlzLmNvcHlTZXJ2aWNlLmdldFNlbGVjdGVkRGF0YUZvckNvcHkoXG4gICAgICB0aGlzLmRhdGFTZXQsXG4gICAgICB0aGlzLmNvbHVtbnMsXG4gICAgICB0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcyxcbiAgICAgIHRoaXMuc2VsZWN0ZWRDZWxscyxcbiAgICAgIHRoaXMuZ2V0TmVzdGVkVmFsdWUuYmluZCh0aGlzKVxuICAgICk7XG4gIH1cblxuXG4gIHBhZ2VTaXplS2V5TWFwOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG4gIHByaXZhdGUgYnVpbGRQYWdlU2l6ZUtleU1hcCgpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2VTaXplS2V5TWFwID0ge307XG5cbiAgICB0aGlzLnBhZ2VTaXplT3B0aW9ucy5mb3JFYWNoKChzaXplLCBpbmRleCkgPT4ge1xuICAgICAgLy8gS2V5czogMeKAkzksIHRoZW4gMCBmb3IgMTB0aCBpdGVtXG4gICAgICBjb25zdCBrZXkgPVxuICAgICAgICBpbmRleCA8IDlcbiAgICAgICAgICA/IFN0cmluZyhpbmRleCArIDEpXG4gICAgICAgICAgOiBpbmRleCA9PT0gOVxuICAgICAgICAgID8gJzAnXG4gICAgICAgICAgOiBudWxsO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHRoaXMucGFnZVNpemVLZXlNYXBba2V5XSA9IHNpemU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgaXNGb3JtRmllbGQgPVxuICAgICAgdGFyZ2V0LnRhZ05hbWUgPT09ICdJTlBVVCcgfHxcbiAgICAgIHRhcmdldC50YWdOYW1lID09PSAnVEVYVEFSRUEnIHx8XG4gICAgICB0YXJnZXQuaXNDb250ZW50RWRpdGFibGU7XG4gICAgaWYgKGlzRm9ybUZpZWxkIHx8IHRoaXMubG9hZGluZykgcmV0dXJuO1xuXG4gICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmICFldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5nb1RvTmV4dFBhZ2UoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBDdHJsICsgQXJyb3cgTGVmdCDihpIgUHJldmlvdXMgUGFnZVxuICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiAhZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuZ29Ub1ByZXZpb3VzUGFnZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEN0cmwgKyBTaGlmdCArIEFycm93IFJpZ2h0IOKGkiBMYXN0IFBhZ2VcbiAgICBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmdvVG9MYXN0UGFnZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBDdHJsICsgU2hpZnQgKyBBcnJvdyBMZWZ0IOKGkiBGaXJzdCBQYWdlXG4gICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmdvVG9GaXJzdFBhZ2UoKTtcbiAgICAgIHJldHVybjtcbiAgICB9IFxuXG4gICAgLy8gQ3RybCArIFNoaWZ0ICsgQXJyb3cgUmlnaHQg4oaSIExhc3QgUGFnZVxuICAgIGNvbnN0IE1JTl9IRUlHSFQgPSAyODtcbiAgICBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmhlYWRlclJvd0hlaWdodCArPSAxO1xuICAgICAgdGhpcy5yb3dIZWlnaHQgKz0gMTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDdHJsICsgU2hpZnQgKyBBcnJvdyBSaWdodCDihpIgTGFzdCBQYWdlXG4gICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgIHRoaXMuaGVhZGVyUm93SGVpZ2h0ID0gTWF0aC5tYXgoTUlOX0hFSUdIVCwgdGhpcy5oZWFkZXJSb3dIZWlnaHQgLSAxKTtcbiAgICAgdGhpcy5yb3dIZWlnaHQgPSBNYXRoLm1heChNSU5fSEVJR0hULCB0aGlzLnJvd0hlaWdodCAtIDEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAgICAgXG5cbiAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5rZXkgPT09ICcvJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmICh0aGlzLmdsb2JhbFNlYXJjaElucHV0KSB7XG4gICAgICAgIGNvbnN0IGlucHV0RWwgPSB0aGlzLmdsb2JhbFNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlucHV0RWwuZm9jdXMoKTtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxPdXRsaW5lID0gaW5wdXRFbC5zdHlsZS5vdXRsaW5lO1xuICAgICAgICBjb25zdCBvcmlnaW5hbEJveFNoYWRvdyA9IGlucHV0RWwuc3R5bGUuYm94U2hhZG93O1xuICAgICAgICBpbnB1dEVsLnN0eWxlLnNldFByb3BlcnR5KCdvdXRsaW5lJywgJzJweCBzb2xpZCAjNGY5Y2ZmJywgJ2ltcG9ydGFudCcpO1xuICAgICAgICAgaW5wdXRFbC5zdHlsZS5zZXRQcm9wZXJ0eSgnYm94LXNoYWRvdycsICcwIDAgOHB4IDJweCAjNGY5Y2ZmJywgJ2ltcG9ydGFudCcpOyBcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaW5wdXRFbC5zdHlsZS5zZXRQcm9wZXJ0eSgnb3V0bGluZScsIG9yaWdpbmFsT3V0bGluZSB8fCAnJywgJ2ltcG9ydGFudCcpO1xuICAgICAgICAgIGlucHV0RWwuc3R5bGUuc2V0UHJvcGVydHkoJ2JveC1zaGFkb3cnLCBvcmlnaW5hbEJveFNoYWRvdyB8fCAnJywgJ2ltcG9ydGFudCcpO1xuICAgICAgICB9LCAxMDAwKTtcblxuXG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgIGlmIChldmVudC5jdHJsS2V5ICYmIGV2ZW50LmFsdEtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3InKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuYXV0b3NpemVBbGxDb2x1bW5zKCk7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgaWYgKGV2ZW50LmFsdEtleSAmJiBldmVudC5rZXk/LnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09ICdyJykge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmF1dG9TaXplQ29sdW1uc0J5UmF0aW8oKVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2MnKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuZG93bmxvYWRDc3YoJ2NzdicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnZScpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5kb3dubG9hZENzdigneGxzeCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2InKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyID0gIXRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyO1xuICAgICAgICB0aGlzLm9uRm9udENoYW5nZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2gnKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMucm93U2hhZGluZ0VuYWJsZWQgPSAhdGhpcy5yb3dTaGFkaW5nRW5hYmxlZDtcbiAgICAgICAgdGhpcy5vbkZvbnRDaGFuZ2UoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3MnKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuc2V0VGFibGVMYXlvdXQoJ3NtYWxsJylcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICdtJykge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnNldFRhYmxlTGF5b3V0KCdtZWRpdW0nKVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2wnKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuc2V0VGFibGVMYXlvdXQoJ2xhcmdlJylcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgIFxuXG5cbiAgICAgaWYgKGV2ZW50LmFsdEtleSkge1xuICAgICBjb25zdCBuZXdMaW1pdCA9IHRoaXMucGFnZVNpemVLZXlNYXBbZXZlbnQua2V5XTtcbiAgICAgIGlmIChuZXdMaW1pdCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0ICE9PSBuZXdMaW1pdCkge1xuICAgICAgICAgIHRoaXMucGFnaW5hdGlvbkNvbmZpZy5saW1pdCA9IG5ld0xpbWl0O1xuICAgICAgICAgIHRoaXMub25QYWdlU2l6ZUNoYW5nZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG5cblxuICAgIGNvbnN0IHRhYmxlQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmRhdGEtZ3JpZC1ib2R5LXdyYXBwZXInKTtcbiAgICBpZiAodGFibGVDb250YWluZXIgJiYgIXRhYmxlQ29udGFpbmVyLmNvbnRhaW5zKHRhcmdldCkpIHJldHVybjtcbiAgICBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjJykge1xuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQ2VsbHM/Lmxlbmd0aCAmJiAhdGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMuc2l6ZSkgcmV0dXJuXG4gICAgICBjb25zdCBzZWxlY3RlZERhdGEgPSB0aGlzLmdldFNlbGVjdGVkRGF0YUZvckNvcHkoKTtcbiAgICAgIC8vIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmNvcHlTZXJ2aWNlLmNvcHlUb0NsaXBib2FyZChzZWxlY3RlZERhdGEpO1xuXG4gICAgfSBlbHNlIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3gnKSB7XG4gICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRDZWxscz8ubGVuZ3RoIHx8ICF0aGlzLmVuYWJsZUN1dCkgcmV0dXJuXG4gICAgICBjb25zdCBzZWxlY3RlZERhdGEgPSB0aGlzLmdldFNlbGVjdGVkRGF0YUZvckNvcHkoKTtcbiAgICAgIC8vIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnBlcmZvcm1DdXQoc2VsZWN0ZWREYXRhKTtcblxuICAgIH0gZWxzZSBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICd6Jykge1xuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQ2VsbHM/Lmxlbmd0aCkgcmV0dXJuXG4gICAgICAvLyBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy51bmRvKCk7XG5cbiAgICB9IGVsc2UgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAneScpIHtcbiAgICAgIGlmICghdGhpcy5zZWxlY3RlZENlbGxzPy5sZW5ndGgpIHJldHVyblxuICAgICAgLy8gZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMucmVkbygpO1xuICAgIH0gZWxzZSBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQua2V5ID09PSAnYScpIHtcbiAgICAgIC8vIOKchSBTZWxlY3QgYWxsIGNlbGxzXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5zZWxlY3RBbGxDZWxscygpO1xuICAgICAgfVxuICB9XG5cbiAgZ29Ub05leHRQYWdlKCk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2U7XG4gICAgY29uc3QgdG90YWxQYWdlcyA9IHRoaXMucGFnaW5hdGlvbkNvbmZpZy50b3RhbFBhZ2VzO1xuICAgIGlmIChjdXJyZW50UGFnZSA+PSB0b3RhbFBhZ2VzKSByZXR1cm47XG4gICAgdGhpcy5nb1RvUGFnZShjdXJyZW50UGFnZSArIDEpO1xuICB9XG5cbiAgZ29Ub1ByZXZpb3VzUGFnZSgpOiB2b2lkIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2U7XG4gICAgICBpZiAoY3VycmVudFBhZ2UgPD0gMSkgcmV0dXJuO1xuICAgICAgdGhpcy5nb1RvUGFnZShjdXJyZW50UGFnZSAtIDEpO1xuICAgIH1cblxuICAgIGdvVG9GaXJzdFBhZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlID09PSAxKSByZXR1cm47XG4gICAgdGhpcy5nb1RvUGFnZSgxKTtcbiAgfVxuXG4gIGdvVG9MYXN0UGFnZSgpOiB2b2lkIHtcbiAgICBjb25zdCBsYXN0UGFnZSA9IHRoaXMucGFnaW5hdGlvbkNvbmZpZy50b3RhbFBhZ2VzO1xuICAgIGlmICh0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZSA9PT0gbGFzdFBhZ2UpIHJldHVybjtcbiAgICB0aGlzLmdvVG9QYWdlKGxhc3RQYWdlKTtcbiAgfVxuXG5cblxuXG4gIHNlbGVjdEFsbENlbGxzKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRDZWxscyA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRLZXlzLmNsZWFyKCk7XG4gICAgdGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMuY2xlYXIoKTtcblxuICAgIC8vIFNldCBzZWxlY3Rpb24gc3RhcnQgbGlrZSBzaW5nbGUgc2VsZWN0aW9uIChmaXJzdCBjZWxsKVxuICAgIGlmICh0aGlzLmRhdGFTZXQubGVuZ3RoICYmIHRoaXMuY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGZpcnN0RmllbGQgPSB0aGlzLmNvbHVtbnNbMF0uZmllbGQgfHwgdGhpcy5jb2x1bW5zWzBdLm5hbWU7XG4gICAgICB0aGlzLnNlbGVjdGlvblN0YXJ0ID0ge1xuICAgICAgICByb3dJbmRleDogMCxcbiAgICAgICAgY29sSW5kZXg6IDAsXG4gICAgICAgIHN1YkNvbEluZGV4OiAwLFxuICAgICAgICBmaWVsZDogZmlyc3RGaWVsZCxcbiAgICAgICAga2V5OiBgMC0wLTAtJHtmaXJzdEZpZWxkfWAsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuaXNTZWxlY3RpbmcgPSB0cnVlO1xuXG4gICAgZm9yIChsZXQgcm93SW5kZXggPSAwOyByb3dJbmRleCA8PSB0aGlzLmRhdGFTZXQ/Lmxlbmd0aDsgcm93SW5kZXgrKykge1xuICAgICAgaWYgKCFyb3dJbmRleCkgY29udGludWU7XG4gICAgICBjb25zdCByb3cgPSB0aGlzLmRhdGFTZXRbcm93SW5kZXhdO1xuICAgICAgdGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMuYWRkKHJvd0luZGV4KTtcblxuICAgICAgLy8gZm9yIChsZXQgY29sSW5kZXggPSAwOyBjb2xJbmRleCA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGNvbEluZGV4KyspIHtcbiAgICAgIC8vICAgY29uc3QgY29sID0gdGhpcy5jb2x1bW5zW2NvbEluZGV4XTtcbiAgICAgIC8vICAgY29uc3QgZmllbGQgPSBjb2wuZmllbGQgfHwgY29sLm5hbWU7XG4gICAgICAvLyAgIGlmKCFjb2wuaXNfdmlzaWJsZSkgY29udGludWU7XG5cbiAgICAgIC8vICAgaWYgKGNvbC5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAvLyAgICAgY29sLmNoaWxkcmVuLmZvckVhY2goKHN1YjogYW55LCBzdWJDb2xJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAvLyAgICAgICBjb25zdCBrZXkgPSBgJHtyb3dJbmRleH0tJHtjb2xJbmRleH0tJHtzdWJDb2xJbmRleH0tJHtmaWVsZH1gO1xuICAgICAgLy8gICAgICAgdGhpcy5zZWxlY3RlZEtleXMuYWRkKGtleSk7XG4gICAgICAvLyAgICAgICB0aGlzLnNlbGVjdGVkQ2VsbHMucHVzaCh7XG4gICAgICAvLyAgICAgICAgIHJvd0luZGV4LFxuICAgICAgLy8gICAgICAgICBjb2xJbmRleCxcbiAgICAgIC8vICAgICAgICAgc3ViQ29sSW5kZXgsXG4gICAgICAvLyAgICAgICAgIGZpZWxkLFxuICAgICAgLy8gICAgICAgICBrZXksXG4gICAgICAvLyAgICAgICB9KTtcbiAgICAgIC8vICAgICB9KTtcbiAgICAgIC8vICAgfSBlbHNlIHtcbiAgICAgIC8vICAgICBjb25zdCBrZXkgPSBgJHtyb3dJbmRleH0tJHtjb2xJbmRleH0tMC0ke2ZpZWxkfWA7XG4gICAgICAvLyAgICAgdGhpcy5zZWxlY3RlZEtleXMuYWRkKGtleSk7XG4gICAgICAvLyAgICAgdGhpcy5zZWxlY3RlZENlbGxzLnB1c2goe1xuICAgICAgLy8gICAgICAgcm93SW5kZXgsXG4gICAgICAvLyAgICAgICBjb2xJbmRleCxcbiAgICAgIC8vICAgICAgIHN1YkNvbEluZGV4OiAwLFxuICAgICAgLy8gICAgICAgZmllbGQsXG4gICAgICAvLyAgICAgICBrZXksXG4gICAgICAvLyAgICAgfSk7XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH1cbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgaGlnaGxpZ2h0aW5nIGFuZCBVSVxuICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uQm91bmRhcmllcygpO1xuXG4gICAgLy8gU3RvcCBcInNlbGVjdGluZ1wiIG1vZGUgc2luY2UgaXQncyBhIG9uZS10aW1lIHNlbGVjdC1hbGxcbiAgICB0aGlzLmlzU2VsZWN0aW5nID0gZmFsc2U7XG4gIH1cblxuXG5cbiAgdW5kbygpIHtcbiAgICBpZiAodGhpcy51bmRvU3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcHJldlN0YXRlID0gdGhpcy51bmRvU3RhY2sucG9wKCkhO1xuICAgICAgdGhpcy5yZWRvU3RhY2sucHVzaCh0aGlzLmNsb25lRGF0YSh0aGlzLnZpc2libGVSb3dzKSk7XG4gICAgICB0aGlzLnZpc2libGVSb3dzID0gdGhpcy5jbG9uZURhdGEocHJldlN0YXRlKTtcbiAgICB9XG4gIH1cblxuICByZWRvKCkge1xuICAgIGlmICh0aGlzLnJlZG9TdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBuZXh0U3RhdGUgPSB0aGlzLnJlZG9TdGFjay5wb3AoKSE7XG4gICAgICB0aGlzLnVuZG9TdGFjay5wdXNoKHRoaXMuY2xvbmVEYXRhKHRoaXMudmlzaWJsZVJvd3MpKTtcbiAgICAgIHRoaXMudmlzaWJsZVJvd3MgPSB0aGlzLmNsb25lRGF0YShuZXh0U3RhdGUpO1xuICAgIH1cbiAgfVxuXG5cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpwYXN0ZScsIFsnJGV2ZW50J10pXG4gIGFzeW5jIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSB7XG4gICAgaWYoIXRoaXMuZW5hYmxlQ3V0KSByZXR1cm47XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IHRhZyA9IHRhcmdldD8udGFnTmFtZT8udG9Mb3dlckNhc2UoKTtcbiAgICBpZiAodGFnID09PSAnaW5wdXQnIHx8IHRhZyA9PT0gJ3RleHRhcmVhJyB8fCB0YXJnZXQ/LmdldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJykgPT09ICd0cnVlJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5zZWxlY3RlZENlbGxzPy5sZW5ndGggfHwgIXRoaXMuYWN0aXZlQ2VsbCkgcmV0dXJuO1xuXG4gICAgY29uc3QgdGV4dCA9IGV2ZW50LmNsaXBib2FyZERhdGE/LmdldERhdGEoJ3RleHQnKTtcbiAgICBpZiAoIXRleHQpIHJldHVybjtcbiAgICBjb25zdCB1c2VyQ29uZmlybWVkID0gYXdhaXQgdGhpcy5zaG93Q29uZmlybWF0aW9uTW9kYWwoXG4gICAgICAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHBhc3RlIHRoZSBjb3BpZWQgZGF0YT8nXG4gICAgKTtcblxuICAgIGlmICghdXNlckNvbmZpcm1lZCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydENlbGwgPSB0aGlzLnNlbGVjdGVkQ2VsbHM/LlswXTtcbiAgICBpZiAoIXN0YXJ0Q2VsbCkgcmV0dXJuO1xuXG4gICAgY29uc3QgdXBkYXRlZFJvd3MgPSBhd2FpdCB0aGlzLmNvcHlTZXJ2aWNlLnBhc3RlRnJvbUNsaXBib2FyZFRleHQoXG4gICAgICB0ZXh0LFxuICAgICAgdGhpcy52aXNpYmxlUm93cyxcbiAgICAgIHRoaXMuY29sdW1ucyxcbiAgICAgIHN0YXJ0Q2VsbC5yb3dJbmRleCxcbiAgICAgIHN0YXJ0Q2VsbC5jb2xJbmRleCxcbiAgICAgIHN0YXJ0Q2VsbC5zdWJDb2xJbmRleFxuICAgICk7XG5cbiAgICBpZiAodXBkYXRlZFJvd3M/LnVwZGF0ZVJvd3M/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdCh7XG4gICAgICAgIGRhdGE6IHVwZGF0ZWRSb3dzPy51cGRhdGVSb3dzLFxuICAgICAgICBldmVudFR5cGU6ICdvbkNlbGxFZGl0JyxcbiAgICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgICAgIGNvbHVtbjogdXBkYXRlZFJvd3M/LmN1cnJlbnRDb2x1bXNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHNob3dDb25maXJtYXRpb25Nb2RhbChtZXNzYWdlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBjb25zdCBvdmVybGF5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBvdmVybGF5LmNsYXNzTGlzdC5hZGQoJ2N1c3RvbS1vdmVybGF5LXdyYXBwZXInKTtcbiAgICAgIG92ZXJsYXkuaW5uZXJIVE1MID0gYFxuICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1vdmVybGF5XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tbW9kYWxcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLW1vZGFsLWJvZHlcIj5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwibW9kYWwtbWVzc2FnZVwiPiR7bWVzc2FnZX08L3A+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWNvbmZpcm1cIj5Db25maXJtPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tY2FuY2VsXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG92ZXJsYXkpO1xuICAgICAgY29uc3QgY29uZmlybUJ0biA9IG92ZXJsYXkucXVlcnlTZWxlY3RvcignLmJ0bi1jb25maXJtJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBjb25zdCBjYW5jZWxCdG4gPSBvdmVybGF5LnF1ZXJ5U2VsZWN0b3IoJy5idG4tY2FuY2VsJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG92ZXJsYXkpO1xuICAgICAgfTtcbiAgICAgIGNvbmZpcm1CdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBjYW5jZWxCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG5cblxuXG5cbiAgaXNEYXRlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIWlzTmFOKG5ldyBEYXRlKHZhbHVlKT8uZ2V0VGltZSgpKTtcbiAgfVxuXG5cbiAgLy8gSG9sZCBleHBhbmRlZCBJRHMgKGFycmF5IGZvciBtdWx0aXBsZSwgc2luZ2xlIHZhbHVlIGZvciBzaW5nbGUpXG4gIGV4cGFuZGVkZWREZXRhaWxSb3dzOiAoc3RyaW5nIHwgbnVtYmVyKVtdIHwgc3RyaW5nIHwgbnVtYmVyID0gJyc7XG5cbiAgdG9nZ2xlRGV0YWlsUm93RXhwYW5kKHJvdzogYW55KSB7XG4gICAgY29uc3QgaWQgPSByb3c/LmlkIHx8IHJvdz8uX2lkO1xuICAgIGlmICh0aGlzLmdyaWRUeXBlID09PSAnQXNzZXRzJyAmJiByb3c/LmRldGFpbD8uY29sdW1ucykge1xuICAgICAgcm93LmRldGFpbC5jb2x1bW5zLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICBpdGVtLndpZHRoID0gaXRlbT8ud2lkdGggfHwgKHRoaXMuZGF0YUdyaWRDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCAvIHJvdy5kZXRhaWwuY29sdW1ucz8ubGVuZ3RoKVxuICAgICAgfSk7XG4gICAgICB0aGlzLnByZXZpZXdOZXN0ZWRDb2xzID0gdGhpcy5kZWVwQ2xvbmVDb2x1bW5zKHJvdy5kZXRhaWwuY29sdW1ucyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmtlZXBNdWx0aXBsZUV4cGFuZGVkRGV0YWlscykge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuZXhwYW5kZWRlZERldGFpbFJvd3MpKSB7XG4gICAgICAgIHRoaXMuZXhwYW5kZWRlZERldGFpbFJvd3MgPSBbXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV4cGFuZGVkID0gdGhpcy5leHBhbmRlZGVkRGV0YWlsUm93cyBhcyAoc3RyaW5nIHwgbnVtYmVyKVtdO1xuICAgICAgY29uc3QgaW5kZXggPSBleHBhbmRlZC5pbmRleE9mKGlkKTtcblxuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgZXhwYW5kZWQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4cGFuZGVkLnB1c2goaWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5leHBhbmRlZGVkRGV0YWlsUm93cyA9PT0gaWQpIHtcbiAgICAgICAgdGhpcy5leHBhbmRlZGVkRGV0YWlsUm93cyA9ICcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5leHBhbmRlZGVkRGV0YWlsUm93cyA9IGlkO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdm9pZCB0aGlzLnJpZ2h0UGlubmVkSGVhZGVyPy5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgdGhpcy5jZW50ZXJQaW5uZWRCb2R5Py5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgdGhpcy5yaWdodFBpbm5lZEJvZHk/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMzAwKVxuICB9XG5cbiAgaXNEZXRhaWxzRXhwYW5kZWQocm93OiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBpZCA9IHJvdz8uaWQgfHwgcm93Py5faWQ7XG5cbiAgICBpZiAodGhpcy5rZWVwTXVsdGlwbGVFeHBhbmRlZERldGFpbHMpIHtcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMuZXhwYW5kZWRlZERldGFpbFJvd3MpICYmXG4gICAgICAgIHRoaXMuZXhwYW5kZWRlZERldGFpbFJvd3MuaW5jbHVkZXMoaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5leHBhbmRlZGVkRGV0YWlsUm93cyA9PT0gaWQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0RmlsdGVyVmFsdWUob3B0aW9uOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBvcHRpb24/LnZhbHVlID8/IG9wdGlvbjtcbiAgfVxuXG5cbiAgb3BlbkluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgdG9nZ2xlTWVudShpOiBudW1iZXIsIGV2ZW50PzogTW91c2VFdmVudCkge1xuICAgIGlmIChldmVudCkgeyBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgfVxuICAgIHRoaXMub3BlbkluZGV4ID0gdGhpcy5vcGVuSW5kZXggPT09IGkgPyBudWxsIDogaTtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ25lc3RlZFRhYmxlJylcbiAgbmVzdGVkVGFibGUhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgZ2V0IGhhc1ZlcnRpY2FsU2Nyb2xsKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5uZXN0ZWRUYWJsZSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLm5lc3RlZFRhYmxlLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gdGhpcy5uZXN0ZWRUYWJsZS5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgfVxuXG4gIGdldCBoYXNIb3Jpem9udGFsU2Nyb2xsKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5uZXN0ZWRUYWJsZSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGVsID0gdGhpcy5uZXN0ZWRUYWJsZS5uYXRpdmVFbGVtZW50O1xuICAgIHJldHVybiBlbC5zY3JvbGxXaWR0aCA+IGVsLmNsaWVudFdpZHRoO1xuICB9XG5cblxuICBnZXRUb3RhbEFtb3VudChjb2x1bW46IGFueSkge1xuICAgIGlmICghY29sdW1uPy5pc19hbW91bnQpIHJldHVybjtcbiAgICBjb25zdCB0b3RhbCA9IHRoaXMub3JpZ2luYWxEYXRhU2V0LnJlZHVjZSgoc3VtLCByb3cpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gcm93W2NvbHVtbi5maWVsZF0gfHwgMDtcbiAgICAgIHJldHVybiBzdW0gKyB2YWx1ZTtcbiAgICB9LCAwKTtcbiAgICBpZiAoIXRvdGFsKSByZXR1cm4gYCR7dGhpcy5jdXJyZW5jeVN5bWJvbH0gMC4wMGBcbiAgICByZXR1cm4gYCR7dGhpcy5jdXJyZW5jeVN5bWJvbH0gJHt0aGlzLmZvcm1hdEN1cnJlbmN5LnRyYW5zZm9ybSh0b3RhbCwgdGhpcy5jdXJyZW5jeUZvcm1hdCl9YDtcbiAgfVxuXG4gIGRyb3BDb2x1bW4oZXZlbnQ6IENka0RyYWdEcm9wPGFueVtdPiwgcm93OiBhbnkpIHtcbiAgICAvLyBSZW9yZGVyIHRoZSBjb2x1bW5zIGFycmF5XG4gICAgbW92ZUl0ZW1JbkFycmF5KHJvdy5kZXRhaWwuY29sdW1ucywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgfVxuXG4gIGN1cnJlbnRTdWJTb3J0Q29sdW1uOiBzdHJpbmcgfCBudWxsID0gbnVsbDsgLy8gYWN0aXZlIGNvbHVtblxuICBjdXJyZW50U29ydERpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgPSAnYXNjJzsgLy8gYWN0aXZlIGRpcmVjdGlvblxuXG4gIHNvcnROZXN0ZWRDb2woY29sOiBhbnksIHJvdzogYW55KSB7XG4gICAgY29uc3QgZGF0YVNldCA9IHJvdz8uZGV0YWlsPy5yZXN1bHQ7XG4gICAgaWYgKHRoaXMuY3VycmVudFN1YlNvcnRDb2x1bW4gPT09IGNvbC5maWVsZCkge1xuICAgICAgdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gJ2Rlc2MnIDogJ2FzYyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudFN1YlNvcnRDb2x1bW4gPSBjb2wuZmllbGQ7XG4gICAgICB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID0gJ2FzYyc7XG4gICAgfVxuICAgIGNvbC5vcmRlcl9ieSA9IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb247XG5cbiAgICAvLyBTb3J0IGNvcHkgaW5zdGVhZCBvZiBtdXRhdGluZ1xuICAgIGNvbnN0IHNvcnRlZCA9IFsuLi5kYXRhU2V0XS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBsZXQgYVZhbCA9IGFbY29sLmZpZWxkXTtcbiAgICAgIGxldCBiVmFsID0gYltjb2wuZmllbGRdO1xuICAgICAgYVZhbCA9IGFWYWwgPT0gbnVsbCA/ICcnIDogYVZhbDtcbiAgICAgIGJWYWwgPSBiVmFsID09IG51bGwgPyAnJyA6IGJWYWw7XG5cbiAgICAgIGlmIChjb2wudHlwZSA9PT0gJ2RhdGUnKSB7XG4gICAgICAgIGFWYWwgPSBuZXcgRGF0ZShhVmFsKS5nZXRUaW1lKCk7XG4gICAgICAgIGJWYWwgPSBuZXcgRGF0ZShiVmFsKS5nZXRUaW1lKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFOdW0gPSBwYXJzZUZsb2F0KGFWYWwpO1xuICAgICAgY29uc3QgYk51bSA9IHBhcnNlRmxvYXQoYlZhbCk7XG4gICAgICBjb25zdCBib3RoTnVtYmVycyA9ICFpc05hTihhTnVtKSAmJiAhaXNOYU4oYk51bSk7XG5cbiAgICAgIGlmIChib3RoTnVtYmVycykge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyBhTnVtIC0gYk51bSA6IGJOdW0gLSBhTnVtO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY29tcCA9IFN0cmluZyhhVmFsKS5sb2NhbGVDb21wYXJlKFN0cmluZyhiVmFsKSk7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID09PSAnYXNjJyA/IGNvbXAgOiAtY29tcDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJvdy5kZXRhaWwucmVzdWx0ID0gc29ydGVkO1xuXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cblxuICBnZXRDb2x1bW5XaWR0aFB4KHJvdzogYW55LCBjb2w6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKGNvbC53aWR0aCkgcmV0dXJuIGNvbC53aWR0aCArICdweCc7XG4gICAgY29uc3QgcGl4ZWxzID0gdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keT8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0V2lkdGggLyByb3cuZGV0YWlsPy5jb2x1bW5zLmxlbmd0aDtcbiAgICByZXR1cm4gcGl4ZWxzICsgJ3B4JztcbiAgfVxuXG4gIGZ1bGxzY3JlZW5JbWFnZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cblxuICAvLyBBc3Nlc3RzIE5lc3RlZCBUYWJsZSBXb3JrIEltcGxlbWVudGVkIEhlcmVcblxuICBwaW5VbnBpbkNvbHVtKGNvbDogYW55LCB2YWx1ZTogJ2xlZnQnIHwgJ3JpZ2h0JyB8IG51bGwsIGNvbHVtbnM6IGFueVtdKSB7XG4gICAgY29sLnBpbm5lZCA9IHZhbHVlO1xuICAgIGNvbnN0IGxlZnQgPSBjb2x1bW5zLmZpbHRlcihjID0+IGMucGlubmVkID09PSAnbGVmdCcpO1xuICAgIGNvbnN0IG1pZGRsZSA9IGNvbHVtbnMuZmlsdGVyKGMgPT4gIWMucGlubmVkIHx8IGMucGlubmVkID09PSBudWxsKTtcbiAgICBjb25zdCByaWdodCA9IGNvbHVtbnMuZmlsdGVyKGMgPT4gYy5waW5uZWQgPT09ICdyaWdodCcpO1xuICAgIGNvbHVtbnMubGVuZ3RoID0gMDtcbiAgICBjb2x1bW5zLnB1c2goLi4ubGVmdCwgLi4ubWlkZGxlLCAuLi5yaWdodCk7XG4gICAgdGhpcy5hY3RpdmVDb2wgPSBudWxsO1xuICB9XG5cbiAgZ2V0TGVmdFBpbm5lZENvdW50KGNvbHVtbnM6IGFueVtdKTogbnVtYmVyIHtcbiAgICByZXR1cm4gY29sdW1ucy5maWx0ZXIoYyA9PiBjLnBpbm5lZCA9PT0gJ2xlZnQnKS5sZW5ndGg7XG4gIH1cblxuICBnZXRSaWdodFBpbm5lZENvdW50KGNvbHVtbnM6IGFueVtdKTogbnVtYmVyIHtcbiAgICByZXR1cm4gY29sdW1ucy5maWx0ZXIoYyA9PiBjLnBpbm5lZCA9PT0gJ3JpZ2h0JykubGVuZ3RoO1xuICB9XG5cbiAgZ2V0U3RpY2t5TGVmdChjb2x1bW5zOiBhbnlbXSwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgbGV0IGxlZnQgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kZXg7IGkrKykge1xuICAgICAgY29uc3QgcHJldkNvbCA9IGNvbHVtbnNbaV07XG4gICAgICBpZiAocHJldkNvbC5waW5uZWQgPT09ICdsZWZ0Jykge1xuICAgICAgICBsZWZ0ICs9IHByZXZDb2wud2lkdGggfHwgMTAwO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYCR7bGVmdH1weGA7XG4gIH1cblxuICBwcmV2aWV3TmVzdGVkQ29sczogYW55W10gPSBbXTtcbiAgb25OZXN0ZWRDb2xTb3J0KGV2ZW50OiBDZGtEcmFnU29ydEV2ZW50PGFueVtdPiwgY29sdW1uczogYW55W10pOiB2b2lkIHtcbiAgICBpZiAoIWV2ZW50IHx8ICFjb2x1bW5zKSByZXR1cm47XG4gICAgY29uc3QgZmlyc3RQb3NpdGlvbnMgPSBuZXcgTWFwPEhUTUxFbGVtZW50LCBudW1iZXI+KCk7XG4gICAgY29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgIGNvbnN0IGNvbENlbGxzID0gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZmllbGQ9XCIke2NvbC5maWVsZH1cIl1gKSkgYXMgSFRNTEVsZW1lbnRbXTtcbiAgICAgIGNvbENlbGxzLmZvckVhY2goKGVsKSA9PiBmaXJzdFBvc2l0aW9ucy5zZXQoZWwsIGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQpKTtcbiAgICB9KTtcbiAgICBtb3ZlSXRlbUluQXJyYXkoY29sdW1ucywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRDZWxscyA9IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2ZpZWxkPVwiJHtjb2wuZmllbGR9XCJdYCkpIGFzIEhUTUxFbGVtZW50W107XG4gICAgICAgIHVwZGF0ZWRDZWxscy5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld0xlZnQgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuICAgICAgICAgIGNvbnN0IG9sZExlZnQgPSBmaXJzdFBvc2l0aW9ucy5nZXQoZWwpID8/IG5ld0xlZnQ7XG4gICAgICAgICAgY29uc3QgZGVsdGFYID0gb2xkTGVmdCAtIG5ld0xlZnQ7XG5cbiAgICAgICAgICBpZiAoZGVsdGFYICE9PSAwKSB7XG4gICAgICAgICAgICBlbC5zdHlsZS50cmFuc2l0aW9uID0gJ25vbmUnO1xuICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVgoJHtkZWx0YVh9cHgpYDtcbiAgICAgICAgICAgIHZvaWQgZWwub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICBlbC5zdHlsZS50cmFuc2l0aW9uID0gJ3RyYW5zZm9ybSAyNTBtcyBlYXNlJztcbiAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGVYKDApJztcbiAgICAgICAgICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zaXRpb24gPSAnJztcbiAgICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gJyc7XG4gICAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBjbGVhbnVwKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgY2xlYW51cCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cblxuICBzYXZlU2VsZWN0aW9uKHNlbGVjdGVkSWRzOiBzdHJpbmdbXSwgdGFibGVUeXBlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRhYmxlVHlwZSkgcmV0dXJuO1xuICAgIGNvbnN0IHN0b3JlZCA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2RhdGF0YWJsZVNlbGVjdGlvbnMnKSB8fCAne1wic2VsZWN0ZWRSb3dzXCI6IHt9fScpO1xuICAgIGNvbnN0IGFsbFNlbGVjdGVkID0gc3RvcmVkLnNlbGVjdGVkUm93cyB8fCB7fTtcbiAgICBhbGxTZWxlY3RlZFt0YWJsZVR5cGVdID0gc2VsZWN0ZWRJZHM7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICAnZGF0YXRhYmxlU2VsZWN0aW9ucycsXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHNlbGVjdGVkUm93czogYWxsU2VsZWN0ZWQsXG4gICAgICAgIGxpc3RpbmdUeXBlOiB0YWJsZVR5cGVcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG5cbiAgcmVzdG9yZVNlbGVjdGlvbih0YWJsZVR5cGU6IHN0cmluZykge1xuICAgIGNvbnN0IHN0b3JlZCA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2RhdGF0YWJsZVNlbGVjdGlvbnMnKSB8fCAne30nKTtcbiAgICBjb25zdCBpZHMgPSBzdG9yZWQuc2VsZWN0ZWRSb3dzPy5bdGFibGVUeXBlXSB8fCBbXTtcbiAgICB0aGlzLnNlbGVjdGVkUm93cyA9IG5ldyBTZXQoaWRzKTtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFJvd3M7XG4gIH1cblxuXG5cbiAgaXNPdXRzaWRlQ29udGFpbmVyID0gZmFsc2U7XG4gIHByaXZhdGUgY29udGFpbmVyUmVjdDogRE9NUmVjdCB8IG51bGwgPSBudWxsO1xuXG5cbiAgb25EcmFnU3RhcnRlZChjb2w6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudERyYWdnaW5nQ29sdW1uID0gY29sO1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkYXRhLWdyaWQtbWFpbi1jb250YWluZXInKTtcbiAgICB0aGlzLmNvbnRhaW5lclJlY3QgPSBjb250YWluZXI/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIHx8IG51bGw7XG4gIH1cblxuICBvbkRyYWdNb3ZlZChldmVudDogQ2RrRHJhZ01vdmUpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29udGFpbmVyUmVjdCkgcmV0dXJuO1xuXG4gICAgY29uc3QgeyB4LCB5IH0gPSBldmVudC5wb2ludGVyUG9zaXRpb247XG4gICAgY29uc3QgaXNPdXRzaWRlID1cbiAgICAgIHggPCB0aGlzLmNvbnRhaW5lclJlY3QubGVmdCB8fFxuICAgICAgeCA+IHRoaXMuY29udGFpbmVyUmVjdC5yaWdodCB8fFxuICAgICAgeSA8IHRoaXMuY29udGFpbmVyUmVjdC50b3AgfHxcbiAgICAgIHkgPiB0aGlzLmNvbnRhaW5lclJlY3QuYm90dG9tO1xuXG4gICAgLy8gaWYgKGlzT3V0c2lkZSAhPT0gdGhpcy5pc091dHNpZGVDb250YWluZXIpIHtcbiAgICAvLyAgIHRoaXMuaXNPdXRzaWRlQ29udGFpbmVyID0gaXNPdXRzaWRlO1xuICAgIC8vIH1cbiAgfVxuXG4gIG9uRHJhZ0VuZGVkKCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gaWYgKHRoaXMuaXNPdXRzaWRlQ29udGFpbmVyICYmIHRoaXMuY3VycmVudERyYWdnaW5nQ29sdW1uKSB7XG4gICAgICAvLyAgIHRoaXMuY3VycmVudERyYWdnaW5nQ29sdW1uIS5pc192aXNpYmxlID0gZmFsc2U7XG4gICAgICB0aGlzLmN1cnJlbnREcmFnZ2luZ0NvbHVtbiA9IG51bGw7XG4gICAgICB0aGlzLmlzT3V0c2lkZUNvbnRhaW5lciA9IGZhbHNlO1xuICAgICAgLy8gICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAvLyB9XG4gICAgfSwgMTAwKTtcbiAgICB0aGlzLmNvbnRhaW5lclJlY3QgPSBudWxsO1xuICB9XG5cbiAgZ2V0U3RhcnRJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhZ2luYXRpb25Db25maWcudG90YWxSZXN1bHRzID09PSAwXG4gICAgICA/IDBcbiAgICAgIDogKHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlIC0gMSkgKiB0aGlzLnBhZ2luYXRpb25Db25maWcubGltaXQgKyAxIHx8IDA7XG4gIH1cblxuICBoYXNBbnlEZWZhdWx0VmlldygpIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZVZpZXc/LnNvbWUoKHgpID0+IHguaXNfZGVmYXVsdCB8fCB4LmlzX3RlbXApO1xuICB9XG5cblxuICBnZXQgaXNUYWJsZVByZXNldE5vdENoYW5nZWQoKSB7XG4gICAgaWYgKHRoaXMudGFibGVGaWx0ZXJWaWV3SWQpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBjdXJyUHJlc2V0ID0gdGhpcy5jdXJyZXRhVGFibGVQcmVzZXRGb3JVcGRhdGU7XG5cbiAgICBjb25zdCBjdXJyZW50UHJlc2V0Q29sdW1ucyA9IGN1cnJQcmVzZXQ/LmNvbHVtbnM/Lm1hcCgoY29sOiB7IGZpZWxkOiBhbnk7IHdpZHRoOiBhbnk7IHBpbm5lZDogYW55OyB9KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmaWVsZDogY29sLmZpZWxkLFxuICAgICAgICB3aWR0aDogY29sLndpZHRoLFxuICAgICAgICBwaW5uZWQ6IGNvbC5waW5uZWRcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zPy5tYXAoY29sID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpZWxkOiBjb2wuZmllbGQsXG4gICAgICAgIHdpZHRoOiBjb2wud2lkdGgsXG4gICAgICAgIHBpbm5lZDogY29sLnBpbm5lZFxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3RyaW5nc0N1cnJlbnRQcmVzdENvbHMgPSBKU09OLnN0cmluZ2lmeShjdXJyZW50UHJlc2V0Q29sdW1ucyk7XG4gICAgY29uc3Qgc3RyaW5nQ29sdW1ucyA9IEpTT04uc3RyaW5naWZ5KGNvbHVtbnMpO1xuICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLmZpbHRlcnNDb25maWcubWFwKChmaWx0ZXIpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpbGVkOiBmaWx0ZXIuZmllbGQsXG4gICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgY29uZGl0aW9uOiBmaWx0ZXI/LnF1ZXJ5Py5jb25kaXRpb24sXG4gICAgICAgICAgZmlyc3RfY29uZGl0aW9uOiBmaWx0ZXI/LnF1ZXJ5Py5maXJzdF9jb25kaXRpb24sXG4gICAgICAgICAgZmlyc3RfdmFsdWU6IGZpbHRlcj8ucXVlcnk/LmZpcnN0X3ZhbHVlLFxuICAgICAgICAgIHNlY29uZF9jb25kaXRpb246IGZpbHRlcj8ucXVlcnk/LnNlY29uZF9jb25kaXRpb24sXG4gICAgICAgICAgc2Vjb25kX3ZhbHVlOiBmaWx0ZXI/LnF1ZXJ5Py5zZWNvbmRfdmFsdWUsXG4gICAgICAgIH0sXG4gICAgICAgIF9pZHM6IGZpbHRlcj8uX2lkc1xuICAgICAgfVxuICAgIH0pXG5cbiAgICBjb25zdCBjdXJyZW50UHJlc2V0RmlsdGVycyA9IGN1cnJQcmVzZXQ/LmZpbHRlcnM/Lm1hcCgoZmlsdGVyOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpbGVkOiBmaWx0ZXIuZmllbGQsXG4gICAgICAgIHF1ZXJ5OiBmaWx0ZXIucXVlcnksXG4gICAgICAgIF9pZHM6IGZpbHRlcj8uX2lkc1xuICAgICAgfVxuICAgIH0pXG5cblxuICAgIC8vIGNvbnNvbGUubG9nKFwiZmlsdGVyIGNvbmdpZzogXCIsIGZpbHRlcnMpO1xuICAgIC8vIGNvbnNvbGUubG9nKFwiY3VycmVudCBwcmVzZXQgZmlsdGVyczogXCIsIGN1cnJlbnRQcmVzZXRGaWx0ZXJzKTtcblxuICAgIC8vIGNvbnNvbGUubG9nKCdpc0VxdWFsJywgc3RyaW5nc0N1cnJlbnRQcmVzdENvbHMgPT0gc3RyaW5nQ29sdW1ucyk7XG4gICAgLy8gY29uc29sZS5sb2coJ0N1cnJlbnQgVGVtcCBQcmVzZXQgOiAnLCBjdXJyUHJlc2V0KVxuICAgIC8vIGNvbnNvbGUubG9nKCdDdXJyZW50IFRlbXAgUHJlc2V0IENvbHMgY29sdW1uczogJywgY3VycmVudFByZXNldENvbHVtbnMpXG4gICAgLy8gY29uc29sZS5sb2coJ0N1cnJlbnQgY29sdW1uczogJywgY29sdW1ucyk7XG5cbiAgICBpZiAoIWN1cnJlbnRQcmVzZXRDb2x1bW5zKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gKGN1cnJlbnRQcmVzZXRDb2x1bW5zICYmIChzdHJpbmdzQ3VycmVudFByZXN0Q29scyA9PSBzdHJpbmdDb2x1bW5zKSAmJiAoSlNPTi5zdHJpbmdpZnkoZmlsdGVycykgPT0gSlNPTi5zdHJpbmdpZnkoY3VycmVudFByZXNldEZpbHRlcnMpKSAmJiAodGhpcy5mb250RmFpbWx5ID09IGN1cnJQcmVzZXQuY29uZmlnLmZvbnRGYWltbHkpXG4gICAgICAmJiAodGhpcy5ib2R5VGV4dEZvbnRzU2l6ZSA9PSBjdXJyUHJlc2V0LmNvbmZpZy5ib2R5VGV4dEZvbnRzU2l6ZSkgJiZcbiAgICAgICh0aGlzLmhlYWRlclRleHRGb250c1NpemUgPT0gdGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplKVxuICAgICAgJiYgdGhpcy5jdXJyZXRhVGFibGVQcmVzZXRGb3JVcGRhdGUuY29uZmlnLnNob3dWZXJ0aWNhbEJvcmRlciA9PSB0aGlzLnNob3dWZXJ0aWNhbEJvcmRlclxuICAgICAgJiYgdGhpcy5jdXJyZXRhVGFibGVQcmVzZXRGb3JVcGRhdGUuY29uZmlnLmZvbnRGYWltbHkgPT0gdGhpcy5mb250RmFpbWx5XG4gICAgICAmJiB0aGlzLmN1cnJldGFUYWJsZVByZXNldEZvclVwZGF0ZS5jb25maWcuc2VsZWN0ZWRUYWJsZUxheW91dCA9PSB0aGlzLnNlbGVjdGVkVGFibGVMYXlvdXRcbiAgICAgICYmIHRoaXMuY3VycmV0YVRhYmxlUHJlc2V0Rm9yVXBkYXRlLmNvbmZpZy5ib2R5VGV4dEZvbnRzU2l6ZSA9PSB0aGlzLmJvZHlUZXh0Rm9udHNTaXplXG4gICAgICAmJiB0aGlzLmN1cnJldGFUYWJsZVByZXNldEZvclVwZGF0ZS5jb25maWcucm93U2hhZGluZ0VuYWJsZWQgPT0gdGhpcy5yb3dTaGFkaW5nRW5hYmxlZCk7XG5cbiAgICAvLyByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIG9uQWN0aW9uQnV0dG9uQ2xpY2soYnV0dG9uOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0ZXh0ID0gYnV0dG9uPy50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIGlmICh0ZXh0ID09ICdhY3RpdmUgZGF0YScgfHwgdGV4dCA9PSAnYWN0aXZlJyB8fCB0ZXh0ID09ICdkYXRhIGFjdGl2ZScgfHwgdGV4dCA9PSAndW5hcmNoaXZlZCBkYXRhJyB8fCB0ZXh0ID09ICd1bmFyY2hpdmUgZGF0YScpIHRoaXMuY2xlYXJTZWxlY3Rpb25TdGF0ZSh0aGlzLnRhYmxlVHlwZSk7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIGxpc3RpbmdUeXBlOiB0aGlzLmxpc3RpbmdUeXBlLFxuICAgICAgICBvYmo6IGJ1dHRvblxuICAgICAgfSxcbiAgICAgIGV2ZW50VHlwZTogXCJvbkFjdGlvbkJ1dHRvbkNsaWNrXCIsXG4gICAgfTtcbiAgICB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KGV2ZW50KTtcbiAgfVxuXG5cbiAgc2V0QWN0aXZlVGFiKHRhYjogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlVGFiID0gdGFiO1xuICAgIGNvbnN0IGFsbFRhYnMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhY3RpdmVUYWJzJykgfHwgJ3t9Jyk7XG4gICAgYWxsVGFic1t0aGlzLnRhYmxlVHlwZV0gPSB0YWI7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2FjdGl2ZVRhYnMnLCBKU09OLnN0cmluZ2lmeShhbGxUYWJzKSk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZGF0YToge1xuICAgICAgICB0YWJsZVR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgICAgICBvYmo6IHRhYlxuICAgICAgfSxcbiAgICAgIGV2ZW50VHlwZTogJ29uVGFiQ2hhbmdlJyxcbiAgICB9O1xuXG4gICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudCk7XG4gIH1cblxuICBnZXRCYWNrZ3JvdW5kQ29sb3Iocm93OiBhbnksIGlzRXZlbjogYm9vbGVhbiwgc2VjdGlvbjogJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5ob3ZlcmVkUm93SWQgPT09IChyb3cuX2lkIHx8IHJvdy5pZCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvd0hvdmVyQ29sb3I7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzUm93U2VsZWN0ZWQocm93KSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2hlY2tlZFJvd0JhY2tncm91bmRDb2xvcjtcbiAgICB9XG4gICAgbGV0IGJhc2VDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKHRoaXMucm93U2hhZGluZ0VuYWJsZWQpIHtcbiAgICAgIGJhc2VDb2xvciA9IGlzRXZlbiA/IHRoaXMuZXZlblJvd3NCYWNrZ3JvdW5kQ29sb3IgOiB0aGlzLm9kZFJvd3NCYWNrZ3JvdW5kQ29sb3I7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJhc2VDb2xvciA9IHRoaXMuZXZlblJvd3NCYWNrZ3JvdW5kQ29sb3I7XG4gICAgfVxuICAgIGlmICghYmFzZUNvbG9yKSB7XG4gICAgICBpZiAoc2VjdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIGJhc2VDb2xvciA9IHRoaXMubGVmdFBpbm5lZEJhY2tncm91bmRDb2xvcjtcbiAgICAgIH0gZWxzZSBpZiAoc2VjdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICBiYXNlQ29sb3IgPSB0aGlzLnJpZ2h0UGlubmVkQmFja2dyb3VuZENvbG9yO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmFzZUNvbG9yID0gdGhpcy5ib2R5QmFja2dyb3VuZENvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmFzZUNvbG9yO1xuICB9XG5cbiAgaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY2VudGVyUGlubmVkSGVhZGVyPy5uYXRpdmVFbGVtZW50KSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgZWwgPSB0aGlzLmNlbnRlclBpbm5lZEhlYWRlci5uYXRpdmVFbGVtZW50O1xuICAgIHJldHVybiBlbC5zY3JvbGxXaWR0aCA+IGVsLmNsaWVudFdpZHRoO1xuICB9XG5cblxuICBnZXRTYWZlQ29tbWVudChkZXNjcmlwdGlvbjogc3RyaW5nKTogU2FmZUh0bWwge1xuICAgIHJldHVybiB0aGlzLmNsZWFuRWRpdG9yQ29udGVudChkZXNjcmlwdGlvbik7XG4gIH1cbiAgY2xlYW5FZGl0b3JDb250ZW50KGNvbnRlbnQ6IHN0cmluZyk6IFNhZmVIdG1sIHtcbiAgIHJldHVybiB0aGlzLmh0bWxTYW5hdGl6ZXJTZXJ2aWNlLmNsZWFuRWRpdG9yQ29udGVudChjb250ZW50KTtcbiAgfVxuXG4gIGdldEV4dGVudGlvbih1cmw6IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh1cmwgIT09ICctJykge1xuICAgICAgaWYgKHR5cGVvZiAodXJsKSA9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdXJsLnNwbGl0KCcuJykucG9wKClcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh1cmwpKSB7XG4gICAgICAgIHJldHVybiB1cmxbMF0uc3BsaXQoJy4nKS5wb3AoKVxuICAgICAgfSBlbHNlIHJldHVybiAnLSdcbiAgICB9XG4gICAgZWxzZSByZXR1cm4gJy0nXG4gIH1cblxuICBkb3dubG9hZEF0dGNobWVudCh1cmw6IGFueSwgZmlsZT86IGFueSkge1xuICAgIC8vIHRoaXMub25FdmVudC5lbWl0KHtcbiAgICAvLyAgIGRvd25sb2FkOiB0cnVlLFxuICAgIC8vIH0pO1xuICAgIC8vIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZGF0YSlcbiAgICAvLyBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgbGluay5ocmVmID0gdXJsO1xuICAgIGxpbmsuZG93bmxvYWQgPSAnJztcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuICAgIGxpbmsuY2xpY2soKTtcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspO1xuXG4gIH1cbiAgZnVsbEltYWdlU3JjOiBzdHJpbmcgfCBudWxsID0gJyc7XG4gIG9wZW5GdWxsSW1hZ2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGlmICh0YXJnZXQudGFnTmFtZSA9PT0gJ0lNRycpIHtcbiAgICAgIHRoaXMuZnVsbEltYWdlU3JjID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnc3JjJyk7XG4gICAgfVxuICB9XG5cbiAgYWRkU3R5bGVzVG9JbWFnZXMoKTogdm9pZCB7XG4gICAgY29uc3QgaW1hZ2VzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmNvbW1lbnQtY29udGVudCBpbWcnKTtcbiAgICBpbWFnZXMuZm9yRWFjaCgoaW1nKSA9PiB7XG4gICAgICAvLyBBcHBseSBpbmxpbmUgc3R5bGVzIGRpcmVjdGx5XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGltZywgJ3dpZHRoJywgJzcwcHgnKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoaW1nLCAnYm9yZGVyLXJhZGl1cycsICcxNnB4Jyk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGltZywgJ21hcmdpbicsICc4cHgnKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoaW1nLCAnY3Vyc29yJywgJ3BvaW50ZXInKTtcblxuICAgICAgLy8gQWRkIGNsaWNrIGxpc3RlbmVyIHRvIHNob3cgZnVsbHNjcmVlbiBpbWFnZSBvbiBjbGlja1xuICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oaW1nLCAnY2xpY2snLCAoKSA9PiB0aGlzLm9uSW1hZ2VDbGljaygoaW1nIGFzIEhUTUxJbWFnZUVsZW1lbnQpLnNyYykpO1xuICAgIH0pO1xuICB9XG5cbiAgb25JbWFnZUNsaWNrKHNyYzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5mdWxsc2NyZWVuSW1hZ2UgPSBzcmM7XG4gIH1cblxuICBAVmlld0NoaWxkKCdmdWxsc2NyZWVuSW1hZ2VUZW1wbGF0ZScpIGZ1bGxzY3JlZW5JbWFnZVRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcbiAgcHJpdmF0ZSBmdWxsc2NyZWVuVmlld1JlZjogRW1iZWRkZWRWaWV3UmVmPGFueT4gfCBudWxsID0gbnVsbDtcblxuICBpY29uTWFwOiBSZWNvcmQ8c3RyaW5nLCAocm93OiBhbnksIGNvbDogYW55KSA9PiBzdHJpbmc+ID0ge1xuICAgIGF0dGFjaG1lbnRzX2NvdW50OiAoKSA9PiB0aGlzLnNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2F0dGFjaG1lbnRzLnN2ZycsXG4gICAgY29tbWVudF9jb3VudDogKCkgPT4gdGhpcy5zaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jb21tZW50cy5zdmcnLFxuICAgIHByaW9yaXR5OiAocm93LCBjb2wpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9XG4gICAgICAgIHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpPy52YWx1ZSB8fFxuICAgICAgICB0aGlzLmdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKT8ubmFtZSB8fFxuICAgICAgICB0aGlzLmdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5zaW5nbGVTcGFBc3NldHNQYXRoICtcbiAgICAgICAgJ2RhdGEtZ3JpZC9pY29ucy8nICtcbiAgICAgICAgKHZhbCA/PyAnZGVmYXVsdCcpICtcbiAgICAgICAgJy5zdmcnXG4gICAgICApO1xuICAgIH0sXG4gIH07XG5cbiAgdG9nZ2xlRnVsbHNjcmVlbigpIHtcbiAgICB0aGlzLmlzRnVsbFNjcmVlbiA9ICF0aGlzLmlzRnVsbFNjcmVlbjtcbiAgICBjb25zdCBlbGVtID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IGFzIGFueTtcbiAgICBpZiAoIWRvY3VtZW50LmZ1bGxzY3JlZW5FbGVtZW50KSB7XG4gICAgICBpZiAoZWxlbS5yZXF1ZXN0RnVsbHNjcmVlbikge1xuICAgICAgICBlbGVtLnJlcXVlc3RGdWxsc2NyZWVuKCk7XG4gICAgICB9IGVsc2UgaWYgKGVsZW0ubW96UmVxdWVzdEZ1bGxTY3JlZW4pIHtcbiAgICAgICAgZWxlbS5tb3pSZXF1ZXN0RnVsbFNjcmVlbigpO1xuICAgICAgfSBlbHNlIGlmIChlbGVtLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKSB7XG4gICAgICAgIGVsZW0ud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4oKTtcbiAgICAgIH0gZWxzZSBpZiAoZWxlbS5tc1JlcXVlc3RGdWxsc2NyZWVuKSB7XG4gICAgICAgIGVsZW0ubXNSZXF1ZXN0RnVsbHNjcmVlbigpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4pIHtcbiAgICAgICAgZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKTtcbiAgICAgIH0gZWxzZSBpZiAoKGRvY3VtZW50IGFzIGFueSkubW96Q2FuY2VsRnVsbFNjcmVlbikge1xuICAgICAgICAoZG9jdW1lbnQgYXMgYW55KS5tb3pDYW5jZWxGdWxsU2NyZWVuKCk7XG4gICAgICB9IGVsc2UgaWYgKChkb2N1bWVudCBhcyBhbnkpLndlYmtpdEV4aXRGdWxsc2NyZWVuKSB7XG4gICAgICAgIChkb2N1bWVudCBhcyBhbnkpLndlYmtpdEV4aXRGdWxsc2NyZWVuKCk7XG4gICAgICB9IGVsc2UgaWYgKChkb2N1bWVudCBhcyBhbnkpLm1zRXhpdEZ1bGxzY3JlZW4pIHtcbiAgICAgICAgKGRvY3VtZW50IGFzIGFueSkubXNFeGl0RnVsbHNjcmVlbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQ2VsbEV2ZW50KGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmN1c3RvbUNlbGxFdmVudC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgZmxhdHRlbkdyb3VwKHJvdzogYW55KTogYW55W10ge1xuICAgIGNvbnN0IHJlc3VsdDogYW55W10gPSBbXTtcbiAgICBjb25zdCB0cmF2ZXJzZSA9IChub2RlOiBhbnkpID0+IHtcbiAgICAgIGlmICghbm9kZSkgcmV0dXJuO1xuICAgICAgaWYgKG5vZGUuaXNHcm91cCkge1xuICAgICAgICBub2RlLmNoaWxkcmVuPy5mb3JFYWNoKChjaGlsZDogYW55KSA9PiB0cmF2ZXJzZShjaGlsZCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0LnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0cmF2ZXJzZShyb3cpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBzZWxlY3RHcm91cFJvdyhlOiBFdmVudCwgcm93OiBhbnkpIHtcbiAgICBjb25zdCBjaGVja2JveCA9IGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgaXNDaGVja2VkID0gY2hlY2tib3guY2hlY2tlZDtcbiAgICAvLyBHZXQgYWxsIGRlZXAgZGF0YSByb3dzIChsZWFmIHJvd3MpXG4gICAgY29uc3QgbGVhZlJvd3MgPSB0aGlzLmZsYXR0ZW5Hcm91cChyb3cpO1xuICAgIGlmIChpc0NoZWNrZWQpIHtcbiAgICAgIGxlYWZSb3dzLmZvckVhY2gociA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0gci5faWQgfHwgci5pZDtcbiAgICAgICAgaWYgKGlkKSB0aGlzLnNlbGVjdGVkUm93cy5hZGQoaWQpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlYWZSb3dzLmZvckVhY2gociA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0gci5faWQgfHwgci5pZDtcbiAgICAgICAgaWYgKGlkKSB0aGlzLnNlbGVjdGVkUm93cy5kZWxldGUoaWQpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IGlkcyA9IEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJvd3MpO1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZGF0YToge1xuICAgICAgICBsaXN0aW5nVHlwZTogdGhpcy5saXN0aW5nVHlwZSxcbiAgICAgICAgb2JqOiBpZHNcbiAgICAgIH0sXG4gICAgICBldmVudFR5cGU6IFwib25TZWxlY3RSb3dcIixcbiAgICB9XG4gICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgZ2V0R3JvdXBDaGVja2VkU3RhdGUocm93OiBhbnkpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXJvdy5pc0dyb3VwKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgbGVhZlJvd3MgPSB0aGlzLmZsYXR0ZW5Hcm91cChyb3cpO1xuICAgIGxldCBjaGVja2VkQ291bnQgPSAwO1xuICAgIGxlYWZSb3dzLmZvckVhY2gociA9PiB7XG4gICAgICBjb25zdCBpZCA9IHIuX2lkIHx8IHIuaWQ7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFJvd3MuaGFzKGlkKSkgY2hlY2tlZENvdW50Kys7XG4gICAgfSk7XG4gICAgaWYgKGNoZWNrZWRDb3VudCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChjaGVja2VkQ291bnQgPT09IGxlYWZSb3dzLmxlbmd0aCkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldENlbGxUaXRsZShyb3c6IGFueSwgY29sOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbCA9IHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpO1xuXG4gICAgaWYgKCF0aGlzLmlzTmVzdGVkVmFsdWVBcnJheShyb3csIGNvbC5maWVsZCkpIHtcbiAgICAgIGlmIChjb2wudHlwZSA9PT0gJ2RhdGUnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbW1vblNldmljZS5mb3JtYXREYXRlVmFsdWUodmFsLCB0aGlzLmRhdGVGb3JtYXQpO1xuICAgICAgfSBlbHNlIGlmIChjb2w/LmlzX2Ftb3VudCkge1xuICAgICAgICBpZiAoIXZhbCkgcmV0dXJuIGAwLjAwYFxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRDdXJyZW5jeS50cmFuc2Zvcm0odmFsLCB0aGlzLmN1cnJlbmN5Rm9ybWF0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgdmFsPy52YWx1ZSA/P1xuICAgICAgICB2YWw/Lm5hbWUgPz9cbiAgICAgICAgdmFsID8/XG4gICAgICAgIChjb2wuaXNfYW1vdW50ID8gJzAnIDogJy0nKVxuICAgICAgKSArICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGZpcnN0ID0gdmFsPy5bMF07XG5cbiAgICByZXR1cm4gKFxuICAgICAgZmlyc3Q/LmRlcGFydG1lbnRfbmFtZSA/P1xuICAgICAgZmlyc3Q/LnJvbGVOYW1lID8/XG4gICAgICBmaXJzdD8uZnVsbF9uYW1lID8/XG4gICAgICBmaXJzdD8udmFsdWUgPz9cbiAgICAgIGZpcnN0Py5uYW1lID8/XG4gICAgICAnLSdcbiAgICApO1xuICB9XG5cblxuICBmaW5pc2hFZGl0KGV2ZW50OiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZygnY2VsbCBlZGl0ZWRkZGRkZGRkZGRkZGRkZDogJywgZXZlbnQpXG4gIH1cblxuXG4gIGdldER5bmFtaWNSaWdodChjb2w6IGFueSwgc2VjdGlvbjogc3RyaW5nLCBjb2xJbmRleDogbnVtYmVyLCBzdWJDb2xJbmRleDogbnVtYmVyKXtcbiAgICBpZihzZWN0aW9uID09ICdyaWdodCcgJiYgdGhpcy5wcmV2aWV3UmlnaHRQaW5uZWRDb2x1bW5zPy5sZW5ndGggPT0gMSAmJiBjb2wud2lkdGggPCAyMDApe1xuICAgICAgcmV0dXJuIDEwMDtcbiAgICB9ZWxzZSBpZihzZWN0aW9uID09ICdyaWdodCcpe1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2UgaWYoc2VjdGlvbiA9PSAncHJldmlld0NlbnRlckNvbHVtbnMnICYmIGNvbEluZGV4ID09ICh0aGlzLnByZXZpZXdDZW50ZXJDb2x1bW5zPy5sZW5ndGggLSAxKSAmJiBjb2wud2lkdGggPCAyMDApe1xuICAgICAgcmV0dXJuIDIwMFxuICAgIH1lbHNle1xuICAgICAgcmV0dXJuIGNvbC53aWR0aCAtIDQ1O1xuICAgIH1cbiAgfVxuXG4gIGJsdXJJbnB1dChldmVudDogRXZlbnQsIHJvdzogYW55LCBjb2w6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQ/LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGlucHV0Py5ibHVyKCk7XG4gICAgdGhpcy5zZXRBY3RpdmVDZWxsKHJvdywgY29sKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICB0aGlzLmVkaXRpbmdLZXkgPSAnJztcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMCk7XG4gIH1cblxuZ2V0VmFsaWRBY3Rpb25zKGVsZW1lbnQ6IGFueSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHRoaXMuYWN0aW9uVmFsaWRhdG9yLmdldFZhbGlkQWN0aW9ucyhcbiAgICB0aGlzLm9yaWdpbmFsQWN0aW9ucywgLy8gQWx3YXlzIHBhc3Mgb3JpZ2luYWwgdW5tb2RpZmllZCBhY3Rpb25zXG4gICAgZWxlbWVudCxcbiAgICB7XG4gICAgICAvLyB1c2VySWQ6IHRoaXMuaWQsXG4gICAgICB0YWJsZVR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgICAgc2hvd1VuTGluazogdGhpcy5zaG93VW5MaW5rLFxuICAgICAgcGFja2FnZURhdGE6IHRoaXMucGFja2FnZURhdGFcbiAgICB9XG4gICk7XG59XG5wcml2YXRlIGlzU3RhdHVzRmllbGQoZmllbGROYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKCFmaWVsZE5hbWUpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgbG93ZXJGaWVsZCA9IGZpZWxkTmFtZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gbG93ZXJGaWVsZCA9PT0gJ3N0YXR1cycgfHwgXG4gICAgICAgICBsb3dlckZpZWxkLmluY2x1ZGVzKCdzdGF0dXMnKSB8fCBcbiAgICAgICAgIGxvd2VyRmllbGQgPT09ICdhdmFpbHN0YXR1cycgfHxcbiAgICAgICAgIGxvd2VyRmllbGQgPT09ICdhY2NvdW50X3N0YXR1cycgfHxcbiAgICAgICAgIGxvd2VyRmllbGQgPT09ICdpc19jdXN0b21fZ3JhZGUnO1xufVxuXG4vKipcbiAqIENhcGl0YWxpemVzIHRoZSBmaXJzdCBsZXR0ZXIgb2YgZWFjaCB3b3JkIGluIGEgc3RyaW5nXG4gKiBIYW5kbGVzOiBzcGFjZWQgd29yZHMsIGNhbWVsQ2FzZSwgc25ha2VfY2FzZSwga2ViYWItY2FzZSwgYW5kIGNvbXBvdW5kIHdvcmRzXG4gKi9cbnByaXZhdGUgY2FwaXRhbGl6ZVN0YXR1cyh2YWx1ZTogYW55KTogc3RyaW5nIHtcbiByZXR1cm4gdGhpcy5jb21tb25TZXZpY2UuY2FwaXRhbGl6ZVN0YXR1cyh2YWx1ZSk7XG59XG5cblxuICBncmlkQ29udGV4dCA9IHtcbiAgICBhcHBseUZpbHRlcjogKGNvbDogYW55KSA9PiB0aGlzLmFwcGx5RmlsdGVyT25Db2x1bW4oY29sKSxcbiAgICBjbGVhckZpbHRlcjogKGNvbDogYW55KSA9PiB0aGlzLnJlbW92ZUZpbHRlckZyb21Db2x1bW4oY29sKVxuICB9O1xuXG4gIHByaXZhdGUgY2xvc2VBbGxGaWx0ZXJNZW51cygpOiB2b2lkIHtcbiAgICB0aGlzLmlzRmlsdGVyT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuaXNBY3RpdmVGaWx0ZXJPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5hY3RpdmVUb3BCdXR0b24gPSAnJztcbiAgICB0aGlzLmFjdGl2ZUZpbHRlckNlbGwgPSBudWxsO1xuICAgIHRoaXMuaXNUaHJlZURvdHNGaWx0ZXJPcGVuID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGVtaXRGaWx0ZXJzKCk6IHZvaWQge1xuICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jb21tb25TZXZpY2UubWFpbkNvbnRhaW5lckxlZnQgPVxuICAgICAgICB0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcblxuICAgICAgdGhpcy5maWx0ZXJPcHRpb25zLmVtaXQoZmlsdGVycyk7XG4gICAgfSwgMjAwKTtcbiAgfVxuXG5cblxuICBhcHBseUZpbHRlck9uQ29sdW1uKGNvbDogYW55KSB7XG4gICAgdGhpcy5jbG9zZUFsbEZpbHRlck1lbnVzKCk7XG4gICAgY29uc3QgZmlsdGVyID0ge1xuICAgICAgZmllbGQ6IGNvbC5maWVsZCxcbiAgICAgIHNlYXJjaDogY29sLnNlYXJjaCxcbiAgICAgIHF1ZXJ5OiBjb2wucXVlcnksXG4gICAgICB0eXBlOiBjb2wudHlwZSxcbiAgICAgIF9pZHM6IGNvbC5faWRzXG4gICAgfTtcblxuICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSB0aGlzLmZpbHRlcnNDb25maWcuZmluZEluZGV4KGYgPT4gZi5maWVsZCA9PT0gY29sLmZpZWxkKTtcblxuICAgIGlmIChleGlzdGluZ0luZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5maWx0ZXJzQ29uZmlnW2V4aXN0aW5nSW5kZXhdID0gZmlsdGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlcnNDb25maWcucHVzaChmaWx0ZXIpO1xuICAgIH1cbiAgICB0aGlzLmNvbW1vblNldmljZS5yZXBsYWNlQ29sdW1uUXVlcnkodGhpcy5jb2x1bW5zLCBjb2wsIGNvbC5xdWVyeSk7XG4gICAgdGhpcy5lbWl0RmlsdGVycygpO1xuXG4gIH1cblxuICByZW1vdmVGaWx0ZXJGcm9tQ29sdW1uKGNvbDogYW55KSB7XG4gICAgdGhpcy5jbG9zZUFsbEZpbHRlck1lbnVzKCk7XG4gICAgY29uc3QgZW1wdHlRdWVyeSA9IHtcbiAgICAgIGZpcnN0X2NvbmRpdGlvbjogbnVsbCxcbiAgICAgIGZpcnN0X3ZhbHVlOiBudWxsLFxuICAgICAgY29uZGl0aW9uOiAnbm9uZScsXG4gICAgICBzZWNvbmRfY29uZGl0aW9uOiBudWxsLFxuICAgICAgc2Vjb25kX3ZhbHVlOiBudWxsXG4gICAgfTtcblxuICAgIHRoaXMuY29tbW9uU2V2aWNlLnJlcGxhY2VDb2x1bW5RdWVyeSh0aGlzLmNvbHVtbnMsIGNvbCwgZW1wdHlRdWVyeSk7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZpbHRlcnNDb25maWcuZmluZEluZGV4KChmOiBhbnkpID0+IGYuZmllbGQgPT09IGNvbC5maWVsZCk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5maWx0ZXJzQ29uZmlnLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlRmlsdGVyQ2VsbCA9IG51bGw7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuZW1pdEZpbHRlcnMoKTtcbiAgfVxuXG4gIGdldEZvcm1hdGVkRGF0ZSh2YWwgOiBhbnkpe1xuICAgIHJldHVybiB0aGlzLmNvbW1vblNldmljZS5mb3JtYXREYXRlVmFsdWUodmFsLCB0aGlzLmRhdGVGb3JtYXQpO1xuICB9XG5cbmNsb3NlQWxsRXhwYW5kZWRSb3dzKCk6IHZvaWQge1xuICBpZiAodGhpcy5rZWVwTXVsdGlwbGVFeHBhbmRlZERldGFpbHMpIHtcbiAgICB0aGlzLmV4cGFuZGVkZWREZXRhaWxSb3dzID0gW107XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5leHBhbmRlZGVkRGV0YWlsUm93cyA9ICcnO1xuICB9XG4gIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbn1cbn0iLCI8ZGl2IGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmUgaC0xMDBcIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG1iLTIgYWxpZ24taXRlbXMtY2VudGVyIHBvc2l0aW9uLXJlbGF0aXZlXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJuYXYgbmF2LXRhYnNcIiAqbmdJZj1cInRhYnM/Lmxlbmd0aFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibmF2IG5hdi10YWJzXCIgaWQ9XCJuYXYtdGFiXCIgcm9sZT1cInRhYmxpc3RcIj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZXRBY3RpdmVUYWIodGFiKVwiXG4gICAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlVGFiID09IHRhYlwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgdGFiIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImdsb2JhbC1zZWFyY2hcIiBbc3R5bGUud2lkdGgucHhdPVwiMzUwXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKm5nSWY9XCJlbmFibGVHbG9iYWxTZWFyY2hcIlxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvc2VhcmNoLnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG14LTIgcG9zaXRpb24tYWJzb2x1dGUgaWNvblwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICNnbG9iYWxTZWFyY2hJbnB1dFxuICAgICAgICAgICpuZ0lmPVwiZW5hYmxlR2xvYmFsU2VhcmNoXCJcbiAgICAgICAgICBzdHlsZT1cImhlaWdodDogMzZweFwiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVHlwZSB0byBzZWFyY2gsIHRoZW4gcHJlc3MgRW50ZXJcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwidGFibGVTZWFyY2hcIlxuICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9uR2xvYmFsU2VhcmNoKClcIlxuICAgICAgICAgIChpbnB1dCk9XCJvblNlYXJjaElucHV0KCRldmVudClcIlxuICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgdGFibGUtcmlnaHQtdG9wLWFjdGlvbnNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJidXR0b25zPy5sZW5ndGhcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBidXR0b25zOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgYWN0aW9uLWJ1dHRvbnMtcm93IG1zLTJcIlxuICAgICAgICAgICpuZ0lmPVwiYnV0dG9uPy5oYXNfcGVybWlzc2lvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8YVxuICAgICAgICAgICAgaHJlZj1cIkphdmFTY3JpcHQ6dm9pZCgwKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25BY3Rpb25CdXR0b25DbGljayhidXR0b24ubmFtZSlcIlxuICAgICAgICAgICAgW2NsYXNzLm1lLTJdPVwiaSA9PSBidXR0b25zLmxlbmd0aCAtMVwiXG4gICAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBidXR0b24tc21hbGwgYnRuIGJvcmRlciBib3JkZXItcHJpbWFyeSBidG4tYWN0aXZlLXByaW1hcnkgIHAtMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgcHgtM1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgKm5nSWY9XCJidXR0b24uaXNfc2hvd0ljb25cIlxuICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zLycgKyBidXR0b24uaWNvbiArICcuc3ZnJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgY2xhc3M9XCJsYWJlbC1oaWRkZW4gdGV4dC13aGl0ZVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5tcy0wXT1cImJ1dHRvbi5pc19zaG93SWNvblwiXG4gICAgICAgICAgICAgID57eyBidXR0b24/Lm5hbWUgfX08L3NwYW5cbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCIhc2hvd0ZpbHRlclJvd1wiXG4gICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgcG9zaXRpb24tcmVsYXRpdmUgYWN0aW9uLWJ1dHRvbnMtcm93XCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU9wZW5GaWx0ZXIoKVwiXG4gICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2hvd0ZpbHRlcnNcIlxuICAgICAgPlxuICAgICAgICA8YVxuICAgICAgICAgIGhyZWY9XCJKYXZhU2NyaXB0OnZvaWQoMClcIlxuICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi1zbWFsbCBidG4gYnRuLWFjdGl2ZS1wcmltYXJ5IGJvcmRlciBib3JkZXItcHJpbWFyeSBtZS0yIHAtMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgcHgtM1wiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9maWx0ZXItMi5zdmcnXCJcbiAgICAgICAgICAgIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMlwiXG4gICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsLWhpZGRlbiB0ZXh0LXdoaXRlXCI+RmlsdGVyczwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICpuZ0lmPVwiYWN0aXZlRmlsdGVyZWRDb2x1bW5zPy5sZW5ndGhcIlxuICAgICAgICAgIHN0eWxlPVwiXG4gICAgICAgICAgICB3aWR0aDogN3B4O1xuICAgICAgICAgICAgaGVpZ2h0OiA3cHg7XG4gICAgICAgICAgICBib3gtc2hhZG93OiAwcHggMHB4IDNweCAjMDAyMmZmO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDAsIDYwLCAyNTUpO1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgcmlnaHQ6IDE2cHg7XG4gICAgICAgICAgICB0b3A6IDEwcHg7XG4gICAgICAgICAgXCJcbiAgICAgICAgICBjbGFzcz1cInJvdW5kZWQtY2lyY2xlIGQtYmxvY2tcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgZC1ub25lXCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFjdGlvbnMoJ2FkdmFuY2UtZmlsdGVyJylcIlxuICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVRvcEJ1dHRvbiA9PT0gJ2FkdmFuY2UtZmlsdGVyJ1wiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy96b29tLWNoYXJnZS5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiB0b3AtaWNvbiBtZS0yXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyIGFjdGlvbi1idXR0b25zLXJvd1wiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVBY3Rpb25zKCdzZXR0aW5nJylcIlxuICAgICAgICBbY2xhc3MuYWN0aXZlXT1cIlxuICAgICAgICAgIGFjdGl2ZVRvcEJ1dHRvbiA9PT0gJ3NldHRpbmcnIHx8XG4gICAgICAgICAgYWN0aXZlVG9wQnV0dG9uID09PSAndGFibGUtbGF5b3V0JyB8fFxuICAgICAgICAgIGFjdGl2ZVRvcEJ1dHRvbiA9PT0gJ3RhYmxlLXByZXNldHMnIHx8XG4gICAgICAgICAgYWN0aXZlVG9wQnV0dG9uID09PSAnc2hvdy1oaWRlLWNvbHVtbnMnXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDwhLS0gPHNwYW5cbiAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3NldHRpbmdzLTIuc3ZnJ1wiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gdG9wLWljb24gbWUtMlwiXG4gICAgICAgID48L3NwYW4+IC0tPlxuICAgICAgICA8YVxuICAgICAgICAgIGhyZWY9XCJKYXZhU2NyaXB0OnZvaWQoMClcIlxuICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi1zbWFsbCBidG4gYnRuLWFjdGl2ZS1wcmltYXJ5IGJvcmRlciBib3JkZXItcHJpbWFyeSBwLTAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHB4LTNcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvc2V0dGluZ3MtMi5zdmcnXCJcbiAgICAgICAgICAgIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMlwiXG4gICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsLWhpZGRlbiB0ZXh0LXdoaXRlXCI+U2V0dGluZzwvc3Bhbj5cbiAgICAgICAgPC9hPlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cImFjdGl2ZVRvcEJ1dHRvbiA9PT0gJ3NldHRpbmcnXCJcbiAgICAgICAgICBjbGFzcz1cImFjdGlvbnMtZHJvcGRvd24gbXQtMSBhY3Rpb25zLWRyb3Bkb3duLXNldHRpbmdcIlxuICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IHNob3cgc2hhZG93IGN1c3RvbS1tZW51XCI+XG4gICAgICAgICAgICA8IS0tIFRhYmxlIExheW91dCAtLT5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgdG9nZ2xlQWN0aW9ucygndGFibGUtbGF5b3V0JylcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgID48c3BhblxuICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvdGFibGUtMi5zdmcnXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICBUYWJsZSBMYXlvdXQ8L3NwYW5cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGV2cm9uLXJpZ2h0LnN2ZydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPCEtLSBUYWJsZSBQcmVzZXRzIC0tPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgdG9nZ2xlQWN0aW9ucygndGFibGUtcHJlc2V0cycpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgID48c3BhblxuICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvbGlzdC1kZXRhaWxzLnN2ZydcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgIFRhYmxlIFByZXNldHM8L3NwYW5cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGV2cm9uLXJpZ2h0LnN2ZydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICA8IS0tIENvbHVtbnMgLS0+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAqbmdJZj1cIiFzaG93U2lkZU1lbnVcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyB0b2dnbGVBY3Rpb25zKCdzaG93LWhpZGUtY29sdW1ucycpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhbGlnbi1pdGVtcy1jZW50ZXIgZC1mbGV4XCJcbiAgICAgICAgICAgICAgICA+PHNwYW5cbiAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZXllLnN2ZydcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICBDb2x1bW5zPC9zcGFuXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXV0ZWQtdGV4dFwiPnt7IGNvbHVtbnNDb3VudCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2E+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1kaXZpZGVyXCI+PC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gRmlsdGVyIC0tPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU9wZW5GaWx0ZXIoKTsgYWN0aXZlVG9wQnV0dG9uID0gJyc7XCJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhc2hvd0ZpbHRlclJvd1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2ZpbHRlci0yLnN2ZydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTIgbXQtMSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgIEZpbHRlclxuICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICA8IS0tIERvd25sb2FkIC0tPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkQ3N2KCdjc3YnKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Rvd25sb2FkLnN2ZydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTIgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICBDU1YgRXhwb3J0XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAqbmdJZj1cImVuYWJsZUV4cG9ydFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZENzdigneGxzeCcpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZG93bmxvYWQuc3ZnJ1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMiBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgIEV4Y2VsIEV4cG9ydFxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPCEtLSBGb250IEZhbWlseSAmIEZvbnQgU2l6ZSAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHBiLTIgcHQtMlwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBGb250IEZhbWlseSAtLT5cbiAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtXCJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZm9udEZhaW1seVwiXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uRm9udENoYW5nZSgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBmb250IG9mIGZvbnRGYW1pbGllc1wiIFt2YWx1ZV09XCJmb250XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGZvbnQgfX1cbiAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBGb250IFNpemUgLS0+XG4gICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbVwiXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uRm9udENoYW5nZSgpXCJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiYm9keVRleHRGb250c1NpemVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHNpemUgb2YgZm9udFNpemVzXCIgW3ZhbHVlXT1cInNpemVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgc2l6ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gVGFibGUgTGF5b3V0IC0tPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY3RpdmVUb3BCdXR0b24gPT09ICd0YWJsZS1sYXlvdXQnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YWJsZUxheW91dFwiXG4gICAgICAgICAgICBjbGFzcz1cImFjdGlvbnMtZHJvcGRvd24gbXQtMVwiXG4gICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZVwiXG4gICAgICAgICAgPjwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIFRhYmxlIFByZXNldHMgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY3RpdmVUb3BCdXR0b24gPT09ICd0YWJsZS1wcmVzZXRzJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFibGVQcmVzZXRcIlxuICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb25zLWRyb3Bkb3duIG10LTFcIlxuICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGVcIlxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBUYWJsZSBQcmVzZXRzIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aXZlVG9wQnV0dG9uID09PSAnc2hvdy1oaWRlLWNvbHVtbnMnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzaG93SGlkZUNvbHVtbnNcIlxuICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb25zLWRyb3Bkb3duIG10LTFcIlxuICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGVcIlxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1idXR0b25zLXJvd1wiICpuZ0lmPVwic2hvd0Z1bGxTY3JlZW5CdXR0b25cIj5cbiAgICAgICAgPGFcbiAgICAgICAgICAqbmdJZj1cIiFpc0Z1bGxTY3JlZW5cIlxuICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi1zbWFsbCBidG4gYnRuLWFjdGl2ZS1wcmltYXJ5IGJvcmRlciBib3JkZXItcHJpbWFyeSBleHBlbmQgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRnVsbHNjcmVlbigpXCJcbiAgICAgICAgICBkYXRhLWJzLXRvZ2dsZT1cInRvb2x0aXBcIlxuICAgICAgICAgIGRhdGEtYnMtcGxhY2VtZW50PVwidG9wXCJcbiAgICAgICAgICB0aXRsZT1cIk1pbmltaXNlXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7IG1pbkFycm93OiAhaXNGdWxsU2NyZWVuLCBtYXhBcnJvdzogaXNGdWxsU2NyZWVuIH1cIlxuICAgICAgICAgIHN0eWxlPVwidHJhbnNpdGlvbjogY29sb3IgMC4yc1wiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9leHBlbmQuc3ZnJ1wiXG4gICAgICAgICAgICBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTIgbWItMVwiXG4gICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgICAgICA8YVxuICAgICAgICAgICpuZ0lmPVwiaXNGdWxsU2NyZWVuXCJcbiAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBidXR0b24tc21hbGwgYnRuIGJ0bi1hY3RpdmUtcHJpbWFyeSBib3JkZXIgYm9yZGVyLXByaW1hcnkgZXhwZW5kIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUZ1bGxzY3JlZW4oKVwiXG4gICAgICAgICAgZGF0YS1icy10b2dnbGU9XCJ0b29sdGlwXCJcbiAgICAgICAgICBkYXRhLWJzLXBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgICAgdGl0bGU9XCJNYXhpbWlzZVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyBtaW5BcnJvdzogIWlzRnVsbFNjcmVlbiwgbWF4QXJyb3c6IGlzRnVsbFNjcmVlbiB9XCJcbiAgICAgICAgICBzdHlsZT1cInRyYW5zaXRpb246IGNvbG9yIDAuMnNcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvbWluaW1pemUuc3ZnJ1wiXG4gICAgICAgICAgICBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTIgbWItMVwiXG4gICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICA8IS0tIEV4YW1wbGUgc2luZ2xlIGRhbmdlciBidXR0b24gLS0+XG5cbiAgICAgICAgPCEtLSA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtIGQtZmxleCBnYXAtMiBhY3Rpb24tYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWN0aW9ucygnYWN0aW9ucycpXCJcbiAgICAgICAgPlxuICAgICAgICAgIEFjdGlvblxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL1ZlY3Rvci5zdmcnXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwiYWN0aXZlVG9wQnV0dG9uID09PSAnYWN0aW9ucydcIlxuICAgICAgICAgIGNsYXNzPVwiYWN0aW9ucy1kcm9wZG93biBtdC0xXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IHNob3dcIj5cbiAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCIjXCI+QWN0aW9uPC9hPlxuICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgaHJlZj1cIiNcIj5Bbm90aGVyIGFjdGlvbjwvYT5cbiAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCIjXCI+U29tZXRoaW5nIGVsc2UgaGVyZTwvYT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1kaXZpZGVyXCI+PC9kaXY+XG4gICAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiI1wiPlNlcGFyYXRlZCBsaW5rPC9hPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgICpuZ0lmPVwic2hvd0ZpbHRlcnMgJiYgIXNob3dGaWx0ZXJSb3dcIlxuICAgIGNsYXNzPVwidG9wLWZpbHRlci1yb3cgYm9yZGVyLXRvcCBweS0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgIFtzdHlsZS5oZWlnaHQucHhdPVwidG9wRmlsdGVyUm93SGVpZ2h0XCJcbiAgPlxuICAgIDwhLS0gTEVGVCBTSURFIChGaWx0ZXIgdGFncyArIEZpbHRlciBidXR0b24pIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTIgYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBhY3RpdmVGaWx0ZXJlZENvbHVtbnM7IHRyYWNrQnk6IHRyYWNrQnlGaWVsZFwiXG4gICAgICAgICAgY2xhc3M9XCJmaWx0ZXItdGFnc1wiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgIGlzQWN0aXZlRmlsdGVyT3BlbiA9IHRydWU7XG4gICAgICAgICAgICAgIGFjdGl2ZVRvcEJ1dHRvbiA9ICdmaWx0ZXItY29sdW1ucyc7XG4gICAgICAgICAgICAgIG9wZW5GaWx0ZXIoY29sKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIG11dGVkLXRleHQgYWRkLWZpbHRlci1idXR0b24gYWN0aXZlLWZpbHRlcnNcIlxuICAgICAgICAgICAgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogbm93cmFwXCJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiXG4gICAgICAgICAgICAgIGNvbD8uZmllbGQgPT0gc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LmZpZWxkICYmXG4gICAgICAgICAgICAgIGlzQWN0aXZlRmlsdGVyT3BlbiAmJlxuICAgICAgICAgICAgICBhY3RpdmVUb3BCdXR0b24gPT0gJ2ZpbHRlci1jb2x1bW5zJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlYWRlci10YWcgbXQtMFwiPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sPy5waW5uZWRcIlxuICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvcGluLnN2ZydcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICB7eyBjb2wuaGVhZGVyIH19XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyByZW1vdmVDb2x1bW5GaWx0ZXJGcm9tQ29sdW1uKGNvbClcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jcm9zcy1wcmltYXJ5LnN2ZydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGNyb3NzLXNlY29uZGFyeSBtcy0yIG1iLTFcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgYWN0aXZlVG9wQnV0dG9uID09PSAnZmlsdGVyLWNvbHVtbnMnICYmXG4gICAgICAgICAgICAgIGNvbD8uZmllbGQgPT0gc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LmZpZWxkICYmXG4gICAgICAgICAgICAgIGlzQWN0aXZlRmlsdGVyT3BlblxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlsdGVyQ29sdW1uczsgY29udGV4dDogeyBjb2x1bW46IGNvbCB9XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb25zLWRyb3Bkb3duIG10LTFcIlxuICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIEZpbHRlciBCdXR0b24gLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiYWRkLWZpbHRlci1idXR0b24tbWVudVwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFjdGlvbnMoJ2ZpbHRlci1jb2x1bW5zJyk7IGlzQWN0aXZlRmlsdGVyT3BlbiA9IGZhbHNlXCJcbiAgICAgICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBtdXRlZC10ZXh0IGFkZC1maWx0ZXItYnV0dG9uIGJ1dHRvbi1maWx0ZXJcIlxuICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDcwcHhcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvcGx1cy5zdmcnXCJcbiAgICAgICAgICAgIGNsYXNzPVwibWUtMiBkYXRhLWdyaWQtc3ZnLWljb25cIlxuICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgRmlsdGVyXG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdJZj1cImFjdGl2ZVRvcEJ1dHRvbiA9PT0gJ2ZpbHRlci1jb2x1bW5zJyAmJiAhaXNBY3RpdmVGaWx0ZXJPcGVuXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlsdGVyQ29sdW1uc1wiXG4gICAgICAgICAgICBjbGFzcz1cImFjdGlvbnMtZHJvcGRvd24gbXQtMVwiXG4gICAgICAgICAgPjwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBSSUdIVCBTSURFIChVcGRhdGUgKyBSZXNldCkgLS0+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKGNsaWNrKT1cInNhdmVQcmVzZXQoKVwiXG4gICAgICAgIGNsYXNzPVwidGV4dC1wcmltYXJ5IGN1cnNvci1wb2ludGVyIGFsbC1maWx0ZXJzLXJlc2V0LWJ1dHRvblwiXG4gICAgICAgICpuZ0lmPVwiIWNoZWNrRmlsdGVyQ2hhbmdlc0VmZmVjdCgpXCJcbiAgICAgID5cbiAgICAgICAgVXBkYXRlIFZpZXdcbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwidGV4dC1wcmltYXJ5IGN1cnNvci1wb2ludGVyIGFsbC1maWx0ZXJzLXJlc2V0LWJ1dHRvblwiXG4gICAgICAgICpuZ0lmPVwiIXRhYmxlRmlsdGVyVmlld0lkICYmIGFjdGl2ZUZpbHRlcmVkQ29sdW1ucz8ubGVuZ3RoXCJcbiAgICAgICAgKGNsaWNrKT1cImNsZWFyQWxsRmlsdGVycygpXCJcbiAgICAgID5cbiAgICAgICAgUmVzZXRcbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgW3N0eWxlLmhlaWdodF09XCJcbiAgICAgIHNob3dGaWx0ZXJzID8gJ2NhbGMoMTAwJSAtICcgKyB0b3BGaWx0ZXJSb3dIZWlnaHQgKyAncHgpJyA6ICcxMDAlJ1xuICAgIFwiXG4gICAgY2RrRHJvcExpc3RHcm91cFxuICAgIGNsYXNzPVwiZGF0YS1ncmlkLXRhYmxlLXdyYXBwZXIgb3ZlcmZsb3ctaGlkZGVuXCJcbiAgICAjZGF0YUdyaWRDb250YWluZXJcbiAgICBbc3R5bGUuZm9udEZhbWlseV09XCJmb250RmFpbWx5XCJcbiAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImJvZHlCYWNrZ3JvdW5kQ29sb3JcIlxuICAgIGlkPVwiZGF0YS1ncmlkLW1haW4tY29udGFpbmVyXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwic2hvd1Jvd3NHcm91cGluZ1wiXG4gICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICBbY2RrRHJvcExpc3REYXRhXT1cImNvbHVtbnNcIlxuICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJcbiAgICAgICAgdG9wR3JvdXBlZEJhZGdlc0JhY2tncm91bmRDb2xvciB8fCBoZWFkZXJCYWNrZ3JvdW5kQ29sb3JcbiAgICAgIFwiXG4gICAgICBjZGtEcm9wTGlzdFxuICAgICAgKGNka0Ryb3BMaXN0RW50ZXJlZCk9XCJlbnRlclRvVG9wUm93R3JvdXBpbmcoJGV2ZW50KVwiXG4gICAgICAoY2RrRHJvcExpc3RFeGl0ZWQpPVwiZXhpdGVkRnJvbVRoZVRvcFJvdygkZXZlbnQpXCJcbiAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwib25Ecm9wVG9wR3JvdXAoJGV2ZW50KVwiXG4gICAgICBbY2RrRHJvcExpc3RFbnRlclByZWRpY2F0ZV09XCJjYW5FbnRlclRvUm93c0dyb3VwaW5nXCJcbiAgICAgIGlkPVwicm93cy1ncm91cGluZy10b3AtY29udGFpbmVyXCJcbiAgICAgIGNsYXNzPVwiYm9yZGVyLWJlbG93IGQtZmxleCBweC00IGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImQtZmxleCBnYXAtMiBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICBbc3R5bGUuY29sb3JdPVwiaGVhZGVyVGV4dENvbG9yXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2p1c3RpZnkuc3ZnJ1wiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFkcmFnZ2luZ0luR3JvdXBBcmVhICYmICFncm91cGVkQ29sdW1ucz8ubGVuZ3RoXCI+XG4gICAgICAgICAgRHJhZyBoZXJlIHRvIHNldCByb3cgZ3JvdXBzXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2RrRHJvcExpc3RPcmllbnRhdGlvbj1cImhvcml6b250YWxcIlxuICAgICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJvbkdyb3VwUmVvcmRlcigkZXZlbnQpXCJcbiAgICAgICAgICBjbGFzcz1cImQtZmxleFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgICBbY2RrRHJhZ0xvY2tBeGlzXT1cIid4J1wiXG4gICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgbGV0IGNoaWxkIG9mIGdyb3VwZWRDb2x1bW5zO1xuICAgICAgICAgICAgICBsZXQgaSA9IGluZGV4O1xuICAgICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5RmllbGRcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICB0b3BHcm91cGluZ1Jvd1BsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY2hpbGQsXG4gICAgICAgICAgICAgICAgICBzaG93Q2hldnJvbjpcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZENvbHVtbnMubGVuZ3RoID4gMSAmJiBpICE9IGdyb3VwZWRDb2x1bW5zLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgY2RrRHJhZ1ByZXZpZXdcbiAgICAgICAgICAgICAgPjxkaXYgY2xhc3M9XCJwLTIgYm9yZGVyIGQtZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFkcmFnZ2luZ0luR3JvdXBBcmVhXCJcbiAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvd3MtbW92ZS5zdmcnXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXY+e3sgY2hpbGQuaGVhZGVyIH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImQtZmxleCBvdmVyZmxvdy1oaWRkZW5cIlxuICAgICAgW3N0eWxlLmhlaWdodF09XCJcbiAgICAgICAgJ2NhbGMoMTAwJSAtICcgK1xuICAgICAgICAoc2hvd1Jvd3NHcm91cGluZ1xuICAgICAgICAgID8gaGVhZGVyUm93SGVpZ2h0ICsgZm9vdGVyUm93SGVpZ2h0XG4gICAgICAgICAgOiBmb290ZXJSb3dIZWlnaHQpICtcbiAgICAgICAgJ3B4KSdcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImgtMTAwXCJcbiAgICAgICAgW3N0eWxlLndpZHRoXT1cIlxuICAgICAgICAgICFzaG93U2lkZU1lbnVcbiAgICAgICAgICAgID8gJzEwMCUnXG4gICAgICAgICAgICA6IHNpZGVNZW51VmlzaWJsZVxuICAgICAgICAgICAgPyAnY2FsYygxMDAlIC0gMjgwcHgpJ1xuICAgICAgICAgICAgOiAnY2FsYygxMDAlIC0gMzBweCknXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoLTEwMCB0cmFuc2l0aW9uIHBvc2l0aW9uLXJlbGF0aXZlIHctMTAwXCI+XG4gICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPlxuICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT5cbiAgICAgICAgICA8IS0tIERhdGEgR3JpZCBIZWFkZXIgc3RhcnRzIGhlcmUgLS0+XG4gICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPlxuICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLWhlYWRlci13cmFwcGVyIHctMTAwXCJcbiAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJoZWFkZXJUZXh0Q29sb3JcIlxuICAgICAgICAgICAgW3N0eWxlLmZvbnRTaXplLnB4XT1cImhlYWRlclRleHRGb250c1NpemVcIlxuICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJoZWFkZXJCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgW2NsYXNzLmJvcmRlci1iZWxvd109XCIhaGFzQW55VmlzaWJsZUNvbHVtblwiXG4gICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIlxuICAgICAgICAgICAgICBzaG93Q29sdW1uc0dyb3VwaW5nICYmIHNob3dGaWx0ZXJSb3dcbiAgICAgICAgICAgICAgICA/IGhlYWRlclJvd0hlaWdodCAqIDNcbiAgICAgICAgICAgICAgICA6IHNob3dDb2x1bW5zR3JvdXBpbmcgfHwgc2hvd0ZpbHRlclJvd1xuICAgICAgICAgICAgICAgID8gaGVhZGVyUm93SGVpZ2h0ICogMlxuICAgICAgICAgICAgICAgIDogaGVhZGVyUm93SGVpZ2h0XG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPlxuICAgICAgICAgICAgPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG4gICAgICAgICAgICA8IS0tIERhdGEgR3JpZCBMZWZ0IFBpbm5lZCBIZWFkZXIgc3RhcnRzIGhlcmUgLS0+XG4gICAgICAgICAgICA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbiAgICAgICAgICAgIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1oZWFkZXIgbGVmdC1waW5uZWRcIlxuICAgICAgICAgICAgICAjbGVmdFBpbm5lZEhlYWRlclxuICAgICAgICAgICAgICBbY2xhc3MuYm9yZGVyLXJpZ2h0XT1cImhhc0xlZnRQaW5uZWRDb2x1bW5zXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd1NlcmlhbE51bWJlclwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJjaGVja2JveGVzQmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdC1hbGwtY2hlY2tib3gtY2VsbCBib3JkZXItYmVsb3dcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCI1NVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJcbiAgICAgICAgICAgICAgICAgIHNob3dDb2x1bW5zR3JvdXBpbmcgJiYgc2hvd0ZpbHRlclJvd1xuICAgICAgICAgICAgICAgICAgICA/IGhlYWRlclJvd0hlaWdodCAqIDNcbiAgICAgICAgICAgICAgICAgICAgOiBzaG93Q29sdW1uc0dyb3VwaW5nIHx8IHNob3dGaWx0ZXJSb3dcbiAgICAgICAgICAgICAgICAgICAgPyBoZWFkZXJSb3dIZWlnaHQgKiAyXG4gICAgICAgICAgICAgICAgICAgIDogaGVhZGVyUm93SGVpZ2h0XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIFMuTm9cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd0NoZWNrYm94ZXNcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiY2hlY2tib3hlc0JhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3QtYWxsLWNoZWNrYm94LWNlbGwgYm9yZGVyLWJlbG93XCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIlxuICAgICAgICAgICAgICAgICAgc2hvd0NvbHVtbnNHcm91cGluZyAmJiBzaG93RmlsdGVyUm93XG4gICAgICAgICAgICAgICAgICAgID8gaGVhZGVyUm93SGVpZ2h0ICogM1xuICAgICAgICAgICAgICAgICAgICA6IHNob3dDb2x1bW5zR3JvdXBpbmcgfHwgc2hvd0ZpbHRlclJvd1xuICAgICAgICAgICAgICAgICAgICA/IGhlYWRlclJvd0hlaWdodCAqIDJcbiAgICAgICAgICAgICAgICAgICAgOiBoZWFkZXJSb3dIZWlnaHRcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImhhc0FueVZpc2libGVDb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTZweDsgaGVpZ2h0OiAxNnB4XCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJpc0luZGV0ZXJtaW5hdGVTdGF0ZShkYXRhU2V0KVwiXG4gICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0FsbFNlbGVjdGVkKGRhdGFTZXQpXCJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsKGRhdGFTZXQpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiaGVhZGVyQmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleFwiXG4gICAgICAgICAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgICAgICAgICBpZD1cImxlZnQtcGlubmVkLWhlYWRlclwiXG4gICAgICAgICAgICAgICAgY2RrRHJvcExpc3RPcmllbnRhdGlvbj1cImhvcml6b250YWxcIlxuICAgICAgICAgICAgICAgIFtjZGtEcm9wTGlzdERhdGFdPVwibGVmdFBpbm5lZENvbHVtbnNcIlxuICAgICAgICAgICAgICAgIChjZGtEcm9wTGlzdEVudGVyZWQpPVwib25Ecm9wTGlzdEVudGVyKCRldmVudCwgJ2xlZnQnKVwiXG4gICAgICAgICAgICAgICAgKGNka0Ryb3BMaXN0U29ydGVkKT1cIlxuICAgICAgICAgICAgICAgICAgb25Tb3J0R3JvdXAoJGV2ZW50LCAncHJldmlld0xlZnRQaW5uZWRDb2x1bW5zJylcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwib25Ecm9wR3JvdXAoKVwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJtaW4td2lkdGg6IDFweFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImRyYWdhYmxlLWhlYWRlclwiXG4gICAgICAgICAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwiY29sXCJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICBsZXQgY29sIG9mIGxlZnRQaW5uZWRDb2x1bW5zO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5RmllbGRcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgIGhlYWRlckNlbGw7XG4gICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246ICdwcmV2aWV3TGVmdFBpbm5lZENvbHVtbnMnXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNka0RyYWdQcmV2aWV3XG4gICAgICAgICAgICAgICAgICAgID48ZGl2IGNsYXNzPVwicC0yIGJvcmRlciBkLWZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZHJhZ2dpbmdJbkdyb3VwQXJlYVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvd3MtbW92ZS5zdmcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3sgY29sLmhlYWRlciB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgY2RrRHJhZ1BsYWNlaG9sZGVyPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWRyYWdnaW5nSW5Hcm91cEFyZWFcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJDZWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkcmFnZ2luZ0luR3JvdXBBcmVhXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBnYXAtMiBtcy0yXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm9wYWNpdHk6IDAuNlwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbD8uY2hpbGRyZW4/Lmxlbmd0aDsgZWxzZSBzaW5nbGVDb2xcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNoaWxkIG9mIGNvbC5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlGaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcEdyb3VwaW5nUm93UGxhY2Vob2xkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY2hpbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDaGV2cm9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbC5jaGlsZHJlbi5sZW5ndGggPiAxICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSAhPSBjb2wuY2hpbGRyZW4ubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzaW5nbGVDb2w+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wR3JvdXBpbmdSb3dQbGFjZWhvbGRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDaGV2cm9uOiBjb2w/LmNoaWxkcmVuPy5sZW5ndGggPiAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG4gICAgICAgICAgICA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbiAgICAgICAgICAgIDwhLS0gRGF0YSBHcmlkIENlbnRlciBQaW5uZWQgSGVhZGVyIHN0YXJ0cyBoZXJlIC0tPlxuICAgICAgICAgICAgPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG4gICAgICAgICAgICA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtaGVhZGVyIGNlbnRlci1zY3JvbGxhYmxlXCJcbiAgICAgICAgICAgICAgI2NlbnRlclBpbm5lZEhlYWRlclxuICAgICAgICAgICAgICAoc2Nyb2xsKT1cIm9uQ2VudGVyQm9keVNjcm9sbCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgaWQ9XCJjZW50ZXItcGlubmVkLWhlYWRlclwiXG4gICAgICAgICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgICAgICAgIFtjZGtEcm9wTGlzdENvbm5lY3RlZFRvXT1cIlxuICAgICAgICAgICAgICAgIHNob3dSb3dzR3JvdXBpbmcgPyBbJ3Jvd3MtZ3JvdXBpbmctdG9wLWNvbnRhaW5lciddIDogW11cbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJjZW50ZXJDb2x1bW5zXCJcbiAgICAgICAgICAgICAgY2RrRHJvcExpc3RPcmllbnRhdGlvbj1cImhvcml6b250YWxcIlxuICAgICAgICAgICAgICBbY2RrRHJvcExpc3RTb3J0aW5nRGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlQ29sdW1uR3JvdXBpbmcgJiYgZHJhZ2dpbmdJbkdyb3VwQXJlYVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAoY2RrRHJvcExpc3RFbnRlcmVkKT1cIm9uRHJvcExpc3RFbnRlcigkZXZlbnQsICdjZW50ZXInKVwiXG4gICAgICAgICAgICAgIChjZGtEcm9wTGlzdFNvcnRlZCk9XCJvblNvcnRHcm91cCgkZXZlbnQsICdwcmV2aWV3Q2VudGVyQ29sdW1ucycpXCJcbiAgICAgICAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJvbkRyb3BHcm91cCgpXCJcbiAgICAgICAgICAgICAgW3N0eWxlLm1heFdpZHRoXT1cIlxuICAgICAgICAgICAgICAgICdjYWxjKDEwMCUgLSAnICtcbiAgICAgICAgICAgICAgICAocmlnaHRQaW5uZWRIZWFkZXIub2Zmc2V0V2lkdGggKyBsZWZ0UGlubmVkSGVhZGVyLm9mZnNldFdpZHRoKSArXG4gICAgICAgICAgICAgICAgJ3B4KSdcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZ3JvdXBlZENvbHVtbnM/Lmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJtaW4td2lkdGg6IDIwMHB4XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImgtMTAwIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgI2NvbHVtbnNHcm91cGVkQm94XG4gICAgICAgICAgICAgICAgaWQ9XCJncm91cEJveEhlYWRlckRpdlwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCB3LTEwMCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgYm9yZGVyLWJlbG93XCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiXG4gICAgICAgICAgICAgICAgICAgIHNob3dGaWx0ZXJSb3cgPyBoZWFkZXJSb3dIZWlnaHQgKiAyIDogaGVhZGVyUm93SGVpZ2h0XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcy0zXCI+R3JvdXA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGhyZWUtZG90cyBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlblRocmVlRG90c01lbnUoJGV2ZW50LCAnZ3JvdXAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVGhyZWVEb3RzRmlsdGVyT3BlbiA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEtZ3JpZC9pY29ucy90aHJlZS1kb3RzLXZlcnRpY2FsLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb25SZXNpemVHcm91cEJveCgkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJlc2l6ZS1oYW5kbGVcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAtMnB4XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEtZ3JpZC9pY29ucy9yZXNpemUtaGFuZGxlLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImJvcmRlci1iZWxvd1wiXG4gICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBjdXJzb3ItcG9pbnRlciBib3JkZXItYmVsb3dcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwibWluLXdpZHRoOiAzMHB4OyBoZWlnaHQ6IDEwMCVcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZ3JpZFR5cGUgPT09ICdBc3NldHMnIHx8IGdyaWRUeXBlID09PSAnVGFza3MnXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRyYWdhYmxlLWhlYWRlclwiXG4gICAgICAgICAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cIlxuICAgICAgICAgICAgICAgICAgY2hlY2tDb2x1bW5Hcm91cGluZ1N0YXR1cyhjb2wpO1xuICAgICAgICAgICAgICAgICAgZHJhZ1N0YXJ0T25Hcm91cChjb2wpO1xuICAgICAgICAgICAgICAgICAgb25EcmFnU3RhcnRlZChjb2wpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAoY2RrRHJhZ01vdmVkKT1cIm9uRHJhZ01vdmVkKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjZGtEcmFnRW5kZWQpPVwib25EcmFnRW5kZWQoKVwiXG4gICAgICAgICAgICAgICAgY2RrRHJhZ1xuICAgICAgICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJjb2xcIlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgbGV0IGNvbCBvZiBjZW50ZXJDb2x1bW5zO1xuICAgICAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlJZFxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJDZWxsO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjb2wsXG4gICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogJ3ByZXZpZXdDZW50ZXJDb2x1bW5zJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgY2RrRHJhZ1ByZXZpZXdcbiAgICAgICAgICAgICAgICAgID48ZGl2IGNsYXNzPVwicC0yIGJvcmRlciBkLWZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaXNPdXRzaWRlQ29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAoZHJhZ2dpbmdJbkdyb3VwQXJlYVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2RhdGEtZ3JpZC9pY29ucy9qdXN0aWZ5LnN2ZydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdkYXRhLWdyaWQvaWNvbnMvYXJyb3dzLW1vdmUuc3ZnJylcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNPdXRzaWRlQ29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2V5ZS1jcm9zcy5zdmcnXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj57eyBjb2wuaGVhZGVyIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjZGtEcmFnUGxhY2Vob2xkZXI+XG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWRyYWdnaW5nSW5Hcm91cEFyZWFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJDZWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246ICdjZW50ZXJDb2x1bW5zJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRyYWdnaW5nSW5Hcm91cEFyZWEgJiYgIWlzT3V0c2lkZUNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGdhcC0yIG1zLTJcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm9wYWNpdHk6IDAuNlwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2w/LmNoaWxkcmVuPy5sZW5ndGg7IGVsc2Ugc2luZ2xlQ29sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZCBvZiBjb2wuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlJZFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hpbGQ/LmlzX2dyb3VwYWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcEdyb3VwaW5nUm93UGxhY2Vob2xkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY2hpbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDaGV2cm9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbC5jaGlsZHJlbi5sZW5ndGggPiAxICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSAhPSBjb2wuY2hpbGRyZW4ubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NpbmdsZUNvbD5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy5pc19ncm91cGFibGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BHcm91cGluZ1Jvd1BsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY29sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0NoZXZyb246IGNvbD8uY2hpbGRyZW4/Lmxlbmd0aCA+IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbiAgICAgICAgICAgIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPlxuICAgICAgICAgICAgPCEtLSBEYXRhIEdyaWQgUmlnaHQgUGlubmVkIEhlYWRlciBzdGFydHMgaGVyZSAtLT5cbiAgICAgICAgICAgIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPlxuICAgICAgICAgICAgPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiaGVhZGVyQmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgICAgICAgaWQ9XCJyaWdodC1waW5uZWQtaGVhZGVyXCJcbiAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0Q29ubmVjdGVkVG9dPVwiXG4gICAgICAgICAgICAgICAgc2hvd1Jvd3NHcm91cGluZyA/IFsncm93cy1ncm91cGluZy10b3AtY29udGFpbmVyJ10gOiBbXVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjZGtEcm9wTGlzdE9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLWhlYWRlciByaWdodC1waW5uZWRcIlxuICAgICAgICAgICAgICAoY2RrRHJvcExpc3RTb3J0ZWQpPVwiXG4gICAgICAgICAgICAgICAgb25Tb3J0R3JvdXAoJGV2ZW50LCAncHJldmlld1JpZ2h0UGlubmVkQ29sdW1ucycpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIChjZGtEcm9wTGlzdEVudGVyZWQpPVwib25Ecm9wTGlzdEVudGVyKCRldmVudCwgJ3JpZ2h0JylcIlxuICAgICAgICAgICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cIm9uRHJvcEdyb3VwKClcIlxuICAgICAgICAgICAgICAjcmlnaHRQaW5uZWRIZWFkZXJcbiAgICAgICAgICAgICAgY2xhc3M9XCJyaWdodC1waW5uZWQtaGVhZGVyIGQtZmxleFwiXG4gICAgICAgICAgICAgIHN0eWxlPVwibWluLXdpZHRoOiAwLjJweFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRyYWdhYmxlLWhlYWRlclwiXG4gICAgICAgICAgICAgICAgY2RrRHJhZ1xuICAgICAgICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJjb2xcIlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgbGV0IGNvbCBvZiByaWdodFBpbm5lZENvbHVtbnM7XG4gICAgICAgICAgICAgICAgICBsZXQgaSA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUlkXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlckNlbGw7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNvbCxcbiAgICAgICAgICAgICAgICAgICAgICBwaW5uZWRSaWdodDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiAncmlnaHQnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjZGtEcmFnUHJldmlld1xuICAgICAgICAgICAgICAgICAgPjxkaXYgY2xhc3M9XCJwLTIgYm9yZGVyIGQtZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFkcmFnZ2luZ0luR3JvdXBBcmVhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YS1ncmlkL2ljb25zL2Fycm93cy1tb3ZlLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7IGNvbC5oZWFkZXIgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNka0RyYWdQbGFjZWhvbGRlcj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhZHJhZ2dpbmdJbkdyb3VwQXJlYVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlckNlbGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY29sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogJ3JpZ2h0J1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRyYWdnaW5nSW5Hcm91cEFyZWFcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBnYXAtMiBtcy0yXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJvcGFjaXR5OiAwLjZcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy5jaGlsZHJlbj8ubGVuZ3RoOyBlbHNlIHNpbmdsZUNvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2hpbGQgb2YgY29sLmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5SWRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcEdyb3VwaW5nUm93UGxhY2Vob2xkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDaGV2cm9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wuY2hpbGRyZW4ubGVuZ3RoID4gMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICE9IGNvbC5jaGlsZHJlbi5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NpbmdsZUNvbD5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BHcm91cGluZ1Jvd1BsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0NoZXZyb246IGNvbD8uY2hpbGRyZW4/Lmxlbmd0aCA+IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT5cbiAgICAgICAgICA8IS0tIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPlxuICAgICAgICAgIDwhLS0gRGF0YSBHcmlkIEJvZHkgc3RhcnRzIGhlcmUgLS0+XG4gICAgICAgICAgPCEtLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT5cbiAgICAgICAgICA8IS0tIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiaC0xMDAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICpuZ0lmPVwiIWRhdGFTZXQ/Lmxlbmd0aCAmJiAhbG9hZGluZyAmJiAhZGF0YVNldExvYWRpbmdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDwhLS0gPGRpdlxuICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvcmVjb3JkLW5vdC1mb3VuZC5zdmcnXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICA+PC9kaXY+IC0tPlxuICAgICAgICAgICAgPGRpdj5ObyBSZWNvcmQgRm91bmQ8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgdy0xMDAgaC0xMDAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGxvYWRpbmctb3ZlcmxheVwiXG4gICAgICAgICAgICAqbmdJZj1cImxvYWRpbmcgfHwgZGF0YVNldExvYWRpbmdcIlxuICAgICAgICAgICAgc3R5bGU9XCJcbiAgICAgICAgICAgICAgei1pbmRleDogOTk5O1xuICAgICAgICAgICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMXB4KTtcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImJvZHlCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyLWJvcmRlciB0ZXh0LXByaW1hcnlcIiByb2xlPVwic3RhdHVzXCI+XG4gICAgICAgICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJsb2FkZXJcIj48L3NwYW4+IC0tPlxuICAgICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+TG9hZGluZy4uLjwvc3Bhbj4gLS0+XG4gICAgICAgICAgICAgIDwhLS0gPC9kaXY+IC0tPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1ib2R5LXdyYXBwZXIgcG9zaXRpb24tcmVsYXRpdmUgZC1mbGV4XCJcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiYm9keVdyYXBwZXJIZWlnaHRcIlxuICAgICAgICAgICAgc3R5bGU9XCJvdmVyZmxvdy15OiBhdXRvOyBvdmVyZmxvdy14OiBoaWRkZW5cIlxuICAgICAgICAgICAgI21haW5TY3JvbGxcbiAgICAgICAgICAgIChzY3JvbGwpPVwib25NYWluU2Nyb2xsKCRldmVudClcIlxuICAgICAgICAgICAgW3N0eWxlLnNjcm9sbGJhcldpZHRoXT1cInZlcnRpY2FsU2Nyb2xsYmFyV2lkdGhcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDwhLS0gTEVGVCBQSU5ORUQgLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiXG4gICAgICAgICAgICAgICAgIWdyb3VwZWRDb2x1bW5zLmxlbmd0aCA/IG9yaWdpbmFsRGF0YVNldC5sZW5ndGggKiByb3dIZWlnaHQgOiAwXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IFtjbGFzcy5oLTEwMF09XCJvcmlnaW5hbERhdGFTZXQubGVuZ3RoIDwgOFwiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtYm9keSBsZWZ0LXBpbm5lZC1ib2R5IHctMTAwXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cIm92ZXJmbG93LXk6IGhpZGRlblwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmJvcmRlci1yaWdodF09XCJoYXNMZWZ0UGlubmVkQ29sdW1uc1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnRyYW5zcGFyZW50LWJvcmRlci1yaWdodF09XCIhaGFzTGVmdFBpbm5lZENvbHVtbnNcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS50cmFuc2Zvcm1dPVwiJ3RyYW5zbGF0ZVkoJyArIHRyYW5zbGF0ZVkgKyAncHgpJ1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJsZWZ0UGlubmVkQmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuaC0xMDBdPVwib3JpZ2luYWxEYXRhU2V0Lmxlbmd0aCA8IDhcIlxuICAgICAgICAgICAgICAgKm5nSWY9XCIhbG9hZGluZyAmJiAhZGF0YVNldExvYWRpbmdcIlxuICAgICAgICAgICAgICAgIFtAcm93RHluYW1pY109XCJyb3dBbmltYXRpb25cIlxuXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJvdyBvZiB2aXNpYmxlUm93cztcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUlkXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICByb3dDZWxsO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogcm93LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uczogcHJldmlld0xlZnRQaW5uZWRDb2x1bW5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNFdmVuOiAoc3RhcnRJbmRleCArIGkpICUgMiA9PT0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzT2RkOiAoc3RhcnRJbmRleCArIGkpICUgMiAhPT0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTGVmdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246ICdsZWZ0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVG90YWxSb3c6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93VG90YWxBbW91bnRSb3cgJiYgb3JpZ2luYWxEYXRhU2V0Py5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICByb3dDZWxsO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogeyBfX3ZpcnR1YWxJbmRleDogMCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uczogcHJldmlld0xlZnRQaW5uZWRDb2x1bW5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNFdmVuOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzT2RkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246ICdsZWZ0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVG90YWxSb3c6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gQ0VOVEVSIC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImgtMTAwXCJcbiAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNlbnRlclBpbm5lZEhlYWRlci5jbGllbnRXaWR0aFwiXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiYm9keUJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1ib2R5IGNlbnRlci1zY3JvbGxhYmxlXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuaC0xMDBdPVwib3JpZ2luYWxEYXRhU2V0Lmxlbmd0aCA8IDhcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwib3ZlcmZsb3cteTogaGlkZGVuOyBvdmVyZmxvdy14OiBhdXRvXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUudHJhbnNmb3JtXT1cIid0cmFuc2xhdGVZKCcgKyB0cmFuc2xhdGVZICsgJ3B4KSdcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiYm9keUJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgICAgI2NlbnRlclNjcm9sbGFibGVCb2R5XG4gICAgICAgICAgICAgICAgKHNjcm9sbCk9XCJvbkNlbnRlckJvZHlTY3JvbGwoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJveFNoYWRvd109XCJoYXNMZWZ0UGlubmVkQ29sdW1ucyA/IGxlZnRQaW5uZWRCb3hzaGFkb3c6ICdub25lJ1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBbQHJvd0R5bmFtaWNdPVwicm93QW5pbWF0aW9uXCIgKm5nSWY9XCIhbG9hZGluZyAmJiAhZGF0YVNldExvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJvdyBvZiB2aXNpYmxlUm93cztcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUlkXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICByb3dDZWxsO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogcm93LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uczogcHJldmlld0NlbnRlckNvbHVtbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0V2ZW46IChzdGFydEluZGV4ICsgaSkgJSAyID09PSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNPZGQ6IChzdGFydEluZGV4ICsgaSkgJSAyICE9PSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1RvdGFsUm93OiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1RvdGFsQW1vdW50Um93ICYmIG9yaWdpbmFsRGF0YVNldD8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgcm93Q2VsbDtcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IHsgX192aXJ0dWFsSW5kZXg6IDAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnM6IHByZXZpZXdDZW50ZXJDb2x1bW5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNFdmVuOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzT2RkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNUb3RhbFJvdzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBSSUdIVCBQSU5ORUQgLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwicmlnaHQtcGlubmVkLWJvZHktd3JhcHBlclwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiaGFzUmlnaHRQaW5uZWRDb2x1bW5zXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmgtMTAwXT1cIm9yaWdpbmFsRGF0YVNldC5sZW5ndGggPCA4XCJcbiAgICAgICAgICAgICAgW3N0eWxlLm1heFdpZHRoLnB4XT1cIlxuICAgICAgICAgICAgICAgIGlzU2Nyb2xsYmFyVmlzaWJsZVxuICAgICAgICAgICAgICAgICAgPyByaWdodFBpbm5lZEhlYWRlci5vZmZzZXRXaWR0aCAtIDE1XG4gICAgICAgICAgICAgICAgICA6IHJpZ2h0UGlubmVkSGVhZGVyLm9mZnNldFdpZHRoXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwicmlnaHRQaW5uZWRCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtYm9keSByaWdodC1waW5uZWQtYm9keSB3LTEwMCBoLTEwMFwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJvdmVyZmxvdy15OiBoaWRkZW5cIlxuICAgICAgICAgICAgICAgIFtzdHlsZS50cmFuc2Zvcm1dPVwiJ3RyYW5zbGF0ZVkoJyArIHRyYW5zbGF0ZVkgKyAncHgpJ1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJveFNoYWRvd109XCJoYXNSaWdodFBpbm5lZENvbHVtbnMgPyByaWdodFBpbm5lZEJveHNoYWRvdzogJ25vbmUnXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cInJpZ2h0UGlubmVkQmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFsb2FkaW5nICYmICFkYXRhU2V0TG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgW0Byb3dEeW5hbWljXT1cInJvd0FuaW1hdGlvblwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJvdyBvZiB2aXNpYmxlUm93cztcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUlkXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICByb3dDZWxsO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogcm93LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uczogcHJldmlld1JpZ2h0UGlubmVkQ29sdW1ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRXZlbjogKHN0YXJ0SW5kZXggKyBpKSAlIDIgPT09IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc09kZDogKHN0YXJ0SW5kZXggKyBpKSAlIDIgIT09IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiAncmlnaHQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNUb3RhbFJvdzogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dUb3RhbEFtb3VudFJvdyAmJiBvcmlnaW5hbERhdGFTZXQ/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgIHJvd0NlbGw7XG4gICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiB7IF9fdmlydHVhbEluZGV4OiAwIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zOiBwcmV2aWV3UmlnaHRQaW5uZWRDb2x1bW5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNFdmVuOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzT2RkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246ICdyaWdodCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1RvdGFsUm93OiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIHN0eWxlPVwidG9wOiBhdXRvOyBsZWZ0OiBhdXRvXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBmdWxsc2NyZWVuSW1hZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGNkci5kZXRlY3RDaGFuZ2VzKClcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImRhdGFHcmlkQ29udGFpbmVyLm9mZnNldFdpZHRoXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJcbiAgICAgICAgICAgICAgICBkYXRhR3JpZENvbnRhaW5lci5vZmZzZXRIZWlnaHQgLSAoZm9vdGVyUm93SGVpZ2h0ICsgMTAwKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cImltYWdlLW1vZGFsIGZ1bGwtaW1hZ2UtbW9kYWxcIlxuICAgICAgICAgICAgICAqbmdJZj1cImZ1bGxzY3JlZW5JbWFnZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICBbc3JjXT1cImZ1bGxzY3JlZW5JbWFnZVwiXG4gICAgICAgICAgICAgICAgYWx0PVwiRnVsbHNjcmVlbiBJbWFnZVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZFJvd3Muc2l6ZSA+IDAgJiYgc2hvd1Rhc2tiYXJcIlxuICAgICAgICAgICAgICBjbGFzcz1cInRhc2tiYXIgdy0xMDBcIlxuICAgICAgICAgICAgICBbc3R5bGUuYm90dG9tLnB4XT1cIjBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWQtcm93cy1hY3Rpb24tYmFyXCIgW0BzbGlkZVVwXT5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlbGVjdGVkLWNvdW50XCI+XG4gICAgICAgICAgICAgICAgICB7eyBzZWxlY3RlZFJvd3Muc2l6ZSB9fSBzZWxlY3RlZCBvZlxuICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgcGFnaW5hdGlvbkNvbmZpZy50b3RhbFJlc3VsdHMgfHxcbiAgICAgICAgICAgICAgICAgICAgICBjb25maWc/LnBhZ2luYXRpb25QYXJhbXM/LnRvdGFsSXRlbXNcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICBUb3RhbFxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWJ1dHRvbnMgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIHRhc2tiYXJBY3Rpb25zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGlvbj8uaGFzX3Blcm1pc3Npb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb24tYnRuIHZlcmlmaWVkIGJ0biB7eyBhY3Rpb24gfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uVmVyaWZ5Q2xpY2soYWN0aW9uPy5hY3Rpb25OYW1lKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+e3sgYWN0aW9uPy5hY3Rpb25OYW1lIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrYmFyQWN0aW9ucy5sZW5ndGggPiAxICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGkgIT09IHRhc2tiYXJBY3Rpb25zLmxlbmd0aCAtIDEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGFza2JhckFjdGlvbnNbaSArIDFdPy5oYXNfcGVybWlzc2lvblxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID58PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xlYXJTZWxlY3Rpb25TdGF0ZSh0YWJsZVR5cGUpO3NlbGVjdGVkUm93cy5jbGVhcigpO1wiIGNsYXNzPVwiY2xlYXItYnRuIG1zLTIgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLXgtY2lyY2xlXCI+PC9pPiBDbGVhciBTZWxlY3Rpb25cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gVmVydGljYWwgRmFrZSBzY3JvbGwgQmFyIC0tPlxuICAgICAgICAgIDwhLS0gPGRpdlxuICAgICAgICAgICAgKHNjcm9sbCk9XCJvbk1haW5GYWtlU2Nyb2xsKCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJmYWtlLXNjcm9sbGJhciBmYWtlLXNjcm9sbGJhci12ZXJ0aWNhbCBkLW5vbmVcIlxuICAgICAgICAgICAgW3N0eWxlLnNjcm9sbGJhcldpZHRoXT1cInZlcnRpY2FsU2Nyb2xsYmFyV2lkdGhcIlxuICAgICAgICAgICAgW3N0eWxlLnRvcC5weF09XCJcbiAgICAgICAgICAgICAgc2hvd0NvbHVtbnNHcm91cGluZyAmJiBzaG93RmlsdGVyUm93XG4gICAgICAgICAgICAgICAgPyBoZWFkZXJSb3dIZWlnaHQgKiAzXG4gICAgICAgICAgICAgICAgOiBzaG93Q29sdW1uc0dyb3VwaW5nIHx8IHNob3dGaWx0ZXJSb3dcbiAgICAgICAgICAgICAgICA/IGhlYWRlclJvd0hlaWdodCAqIDJcbiAgICAgICAgICAgICAgICA6IGhlYWRlclJvd0hlaWdodFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICNmYWtlU2Nyb2xsXG4gICAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cImJvZHlXcmFwcGVySGVpZ2h0XCJcbiAgICAgICAgICAgIHN0eWxlPVwiXG4gICAgICAgICAgICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgICAgICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgICAgICAgICAgICAgd2lkdGg6IDE3cHg7XG4gICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGYxZjJmMztcbiAgICAgICAgICAgICAgei1pbmRleDogMTA7XG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHQgKiBkYXRhU2V0TGVuZ3RoXCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIEhvcml6aW50YWwgRmFrZSBTY3JvbGxiYXJzIC0tPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIlxuICAgICAgICAgICpuZ0lmPVwiaGFzU2Nyb2xsICYmICFzaG91bGRSZXN0b3JlU2Nyb2xsXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtzdHlsZS5zY3JvbGxiYXJXaWR0aF09XCJob3JpemludGFsU2Nyb2xsYmFyV2lkdGhcIlxuICAgICAgICAgICAgY2xhc3M9XCJmYWtlLWhvcml6aW50YWwtc2Nyb2xsYmFyXCJcbiAgICAgICAgICAgICNmYWtlU2Nyb2xsXG4gICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwibGVmdFBpbm5lZEhlYWRlci5vZmZzZXRXaWR0aFwiXG4gICAgICAgICAgICBzdHlsZT1cIm92ZXJmbG93LXg6IHNjcm9sbFwiXG4gICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtzdHlsZS5zY3JvbGxiYXJXaWR0aF09XCJob3JpemludGFsU2Nyb2xsYmFyV2lkdGhcIlxuICAgICAgICAgICAgKHNjcm9sbCk9XCJvbkNlbnRlckJvZHlTY3JvbGwoJGV2ZW50KVwiXG4gICAgICAgICAgICBjbGFzcz1cImZha2UtaG9yaXppbnRhbC1zY3JvbGxiYXJcIlxuICAgICAgICAgICAgI2hvcml6aW50YWxGYWtlU2Nyb2xsXG4gICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY2VudGVyUGlubmVkSGVhZGVyLm9mZnNldFdpZHRoXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IFtzdHlsZS53aWR0aC5weF09XCJjZW50ZXJQaW5uZWRIZWFkZXIuc2Nyb2xsV2lkdGggLSAxMFwiPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtzdHlsZS5zY3JvbGxiYXJXaWR0aF09XCJob3JpemludGFsU2Nyb2xsYmFyV2lkdGhcIlxuICAgICAgICAgICAgY2xhc3M9XCJmYWtlLWhvcml6aW50YWwtc2Nyb2xsYmFyXCJcbiAgICAgICAgICAgICNmYWtlU2Nyb2xsXG4gICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwicmlnaHRQaW5uZWRIZWFkZXIub2Zmc2V0V2lkdGhcIlxuICAgICAgICAgICAgc3R5bGU9XCJvdmVyZmxvdy14OiBzY3JvbGxcIlxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBTaWRlIE1lbnUgSW1wbGVtZW50ZWQgSGVyZSAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJzaG93U2lkZU1lbnVcIlxuICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwic2lkZU1lbnVWaXNpYmxlID8gMjgwIDogMzBcIlxuICAgICAgICBjbGFzcz1cInJpZ2h0LW1lbnUgaC0xMDBcIlxuICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cInNpZGVtZW51QmFja2dyb3VuZENvbG9yXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImgtMTAwIGQtZmxleCBmbGV4LXJvdy1yZXZlcnNlXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMzBweFwiXG4gICAgICAgICAgICBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgW2NsYXNzLmJvcmRlci1zdGFydF09XCJzaWRlTWVudVZpc2libGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNpZGVNZW51KCdjb2xzJylcIlxuICAgICAgICAgICAgICBbY2xhc3MuYmctZmZmXT1cIlxuICAgICAgICAgICAgICAgIGN1cnJlbnRPcGVuZWRTaWRlTWVudWUgPT0gJ2NvbHMnICYmIHNpZGVNZW51VmlzaWJsZVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbY2xhc3MuYm9yZGVyLWJlbG93XT1cInNpZGVNZW51VmlzaWJsZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY29sdW1ucy1idXR0b24gZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3VpLWNoZWNrcy1ncmlkLnN2ZydcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2lkZS1tZW51ZS10ZXh0XCI+Q29sdW1uczwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNpZGVNZW51KCdmaWx0cnMnKVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5iZy1mZmZdPVwiXG4gICAgICAgICAgICAgICAgY3VycmVudE9wZW5lZFNpZGVNZW51ZSA9PSAnZmlsdHJzJyAmJiBzaWRlTWVudVZpc2libGVcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmJvcmRlci1iZWxvd109XCJcbiAgICAgICAgICAgICAgICBzaWRlTWVudVZpc2libGUgJiYgY3VycmVudE9wZW5lZFNpZGVNZW51ZSA9PSAnZmlsdHJzJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cImNvbHVtbnMtYnV0dG9uIGQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9maWx0ZXItMi5zdmcnXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpZGUtbWVudWUtdGV4dFwiPkZpbHRlcjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJoLTEwMFwiXG4gICAgICAgICAgICAqbmdJZj1cInNpZGVNZW51VmlzaWJsZVwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7IHdpZHRoOiBzaWRlTWVudVZpc2libGUgPyAnMjUwcHgnIDogJycgfVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImgtMTAwXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImN1cnJlbnRPcGVuZWRTaWRlTWVudWUgPT0gJ2NvbHMnICYmIHNpZGVNZW51VmlzaWJsZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29sdW1uUGFubmVsXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPCEtLSBDb2x1bW4gSXRlbXMgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbi1wYW5lbC1ib2R5IHB4LTNcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zOyB0cmFja0J5OiB0cmFja0J5RmllbGRcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2x1bW5QYW5lbEl0ZW07IGNvbnRleHQ6IHsgY29sOiBjb2wgfVwiXG4gICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxociAvPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpZGUtbWVudS1yb3ctZ3JvdXBzXCIgc3R5bGU9XCJoZWlnaHQ6IDMwJVwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInNpZGVNZW51Um93R3JvdXBzXCJcbiAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImN1cnJlbnRPcGVuZWRTaWRlTWVudWUgPT0gJ2ZpbHRycycgJiYgc2lkZU1lbnVWaXNpYmxlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzaWRlRmlsdGVyc1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiZm9vdGVyUm93SGVpZ2h0XCJcbiAgICAgIGNsYXNzPVwiYm9yZGVyLXRvcFwiXG4gICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImZvb3RlclJvd0JhY2tncm91bmRDb2xvclwiXG4gICAgICAqbmdJZj1cInBhZ2luYXRpb25Db25maWdcIlxuICAgID5cbiAgICAgIDwhLS0gUm93czogPHNwYW4gY2xhc3M9XCJmdy01MDAgbXMtMVwiPnt7IGRhdGFTZXQubGVuZ3RoIH19PC9zcGFuPiAtLT5cblxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInBhZ2luYXRpb24tY29udGFpbmVyXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJmb290ZXJSb3dIZWlnaHRcIlxuICAgICAgICBbc3R5bGUucGFkZGluZy5weF09XCJmb290ZXJQYWRkaW5nXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2Utc2l6ZVwiPlxuICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwicGFnaW5hdGlvbkNvbmZpZy5saW1pdFwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgc2l6ZSBvZiBwYWdlU2l6ZU9wdGlvbnNcIiBbdmFsdWVdPVwic2l6ZVwiPlxuICAgICAgICAgICAgICB7eyBzaXplIH19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlcGFyYXRvclwiPiBwZXIgcGFnZSA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYWdlLWluZm9cIj5cbiAgICAgICAgICBSZXN1bHRzOlxuICAgICAgICAgIHt7IChwYWdpbmF0aW9uQ29uZmlnLnBhZ2UgLSAxKSAqIHBhZ2luYXRpb25Db25maWcubGltaXQgKyAxIH19LXt7XG4gICAgICAgICAgICBwYWdpbmF0aW9uQ29uZmlnLnBhZ2UgKiBwYWdpbmF0aW9uQ29uZmlnLmxpbWl0IDxcbiAgICAgICAgICAgIHBhZ2luYXRpb25Db25maWcudG90YWxSZXN1bHRzXG4gICAgICAgICAgICAgID8gcGFnaW5hdGlvbkNvbmZpZy5wYWdlICogcGFnaW5hdGlvbkNvbmZpZy5saW1pdFxuICAgICAgICAgICAgICA6IHBhZ2luYXRpb25Db25maWcudG90YWxSZXN1bHRzXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvZlxuICAgICAgICAgIHt7IHBhZ2luYXRpb25Db25maWcudG90YWxSZXN1bHRzIH19XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYWdlLWJ1dHRvbnNcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwiZ29Ub1BhZ2UocGFnaW5hdGlvbkNvbmZpZy5wYWdlIC0gMSlcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInBhZ2luYXRpb25Db25maWcucGFnZSA9PT0gMVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAg4oC5XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwYWdlIG9mIHZpc2libGVQYWdlc1wiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cInBhZ2UgIT09ICcuLi4nXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9QYWdlKHBhZ2UpXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJwYWdlID09PSBwYWdpbmF0aW9uQ29uZmlnLnBhZ2VcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBwYWdlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicGFnZSA9PT0gJy4uLidcIj4uLi48L3NwYW4+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwiZ29Ub1BhZ2UocGFnaW5hdGlvbkNvbmZpZy5wYWdlICsgMSlcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInBhZ2luYXRpb25Db25maWcucGFnZSA9PT0gcGFnaW5hdGlvbkNvbmZpZy50b3RhbFJlc3VsdHNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIOKAulxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cbjwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxuPCEtLSBIZWFkZXIgQ2VsbCBUZW1wbGF0ZSAtLT5cbjwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxuPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XG5cbjxuZy10ZW1wbGF0ZVxuICAjaGVhZGVyQ2VsbFxuICBsZXQtY29sXG4gIGxldC1waW5uZWRSaWdodD1cInBpbm5lZFJpZ2h0XCJcbiAgbGV0LWk9XCJpbmRleFwiXG4gIGxldC1jb2x1bW5JbmRleD1cImluZGV4XCJcbiAgbGV0LXNlY3Rpb25zPVwic2VjdGlvblwiXG4gIGxldC1jYWxsZWRGcm9tTmVzdGVkUGxhY2Vob2xkZXI9XCJjYWxsZWRGcm9tTmVzdGVkUGxhY2Vob2xkZXJcIlxuPlxuICA8ZGl2PlxuICAgIDwhLS0gR3JvdXAgSGVhZGVyIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuY2hpbGRyZW4/Lmxlbmd0aCA+IDA7IGVsc2UgZmxhdEhlYWRlclwiPlxuICAgICAgPGRpdiBjZGtEcm9wbGlzdEdyb3VwIGNsYXNzPVwiZ3JvdXAtY29sdW1uLXdyYXBwZXJcIj5cbiAgICAgICAgPCEtLSBQYXJlbnQgSGVhZGVyIC0tPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJzaG91bGRUaGVHcm91cEhlYWRlclNob3coY29sKVwiXG4gICAgICAgICAgY2xhc3M9XCJoZWFkZXItY2VsbCBncm91cC1oZWFkZXJcIlxuICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgICBbc3R5bGUubWluLWhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgICAgW2NsYXNzLmJvcmRlci1yaWdodF09XCJzaG93VmVydGljYWxCb3JkZXJcIlxuICAgICAgICAgIFtzdHlsZS5ncmlkQ29sdW1uXT1cIidzcGFuICcgKyBjb2wuY2hpbGRyZW4ubGVuZ3RoXCJcbiAgICAgICAgICBbc3R5bGUuZm9udFdlaWdodF09XCJoZWFkZXJGb250V2VpZ2h0XCJcbiAgICAgICAgICBbY2xhc3MuZmxleC1yb3ctcmV2ZXJzZV09XCJwaW5uZWRSaWdodFwiXG4gICAgICAgICAgW2NsYXNzLmp1c3RpZnktY29udGVudC1lbmRdPVwicGlubmVkUmlnaHRcIlxuICAgICAgICAgIHN0eWxlPVwiZ3JpZC1yb3c6IDFcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJncm91cC1oZWFkZXItY29udGVudFwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiY29sLmhlYWRlclwiXG4gICAgICAgICAgICBbY2xhc3MubXMtMl09XCJwaW5uZWRSaWdodFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgY29sLmhlYWRlciB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwicmVzaXplLWhhbmRsZVwiXG4gICAgICAgICAgICAoZGJsY2xpY2spPVwiYXV0b3NpemVDb2x1bW4oY29sLmNoaWxkcmVuKVwiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIlxuICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IG9uUmVzaXplR3JvdXAoJGV2ZW50LCBjb2wsIHBpbm5lZFJpZ2h0KVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3Jlc2l6ZS1oYW5kbGUuc3ZnJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBDaGlsZCBIZWFkZXJzIGFuZCBGaWx0ZXJzIC0tPlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImQtZmxleFwiXG4gICAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgICBjZGtEcm9wTGlzdE9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiXG4gICAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJjb2wuY2hpbGRyZW5cIlxuICAgICAgICAgIChjZGtEcm9wTGlzdFNvcnRlZCk9XCJvbkNoaWxkRHJvcGxpc3RTb3J0ZWQoJGV2ZW50LCBzZWN0aW9ucylcIlxuICAgICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwib25DaGlsZERyb3BsaXN0RHJvcGVkKCRldmVudClcIlxuICAgICAgICAgIFtjZGtEcm9wTGlzdFNvcnRpbmdEaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgICAgICAgW2Nka0Ryb3BMaXN0Q29ubmVjdGVkVG9dPVwiXG4gICAgICAgICAgICBzaG93Um93c0dyb3VwaW5nID8gWydyb3dzLWdyb3VwaW5nLXRvcC1jb250YWluZXInXSA6IFtdXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJjaGlsZFwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY2hpbGQgb2YgY29sLmNoaWxkcmVuOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8IS0tIENoaWxkIEhlYWRlciAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGlsZC5pc192aXNpYmxlICYmICFjaGlsZFsnaXNSb3dHcm91cGVkJ11cIj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNka0RyYWdIYW5kbGVcbiAgICAgICAgICAgICAgICBjbGFzcz1cImhlYWRlci1jZWxsIG9uZS1yb3ctaGVhZGVyLWNlbGxzIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYm9yZGVyLXJpZ2h0XT1cInNob3dWZXJ0aWNhbEJvcmRlclwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZmllbGRdPVwiY2hpbGQuZmllbGRcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjaGlsZC53aWR0aFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJjaGlsZC53aWR0aFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICBbc3R5bGUubWF4LWhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5mb250V2VpZ2h0XT1cImhlYWRlckZvbnRXZWlnaHRcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwiZ3JpZC1yb3c6IDJcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5maWx0ZXItYXBwbGllZC1vbi10ZXh0XT1cImlzRmlsdGVyQXBwbGllZE9uQ29sdW1uKGNoaWxkKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBoLTEwMCBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZsZXgtcm93LXJldmVyc2VdPVwicGlubmVkUmlnaHRcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWVsbGlwc2lzIGgtMTAwIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDBcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2wuaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Mudy0xMDBdPVwicGlubmVkUmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWVsbGlwc2lzIGgtMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lZGl0YWJsZS1oZWFkZXJdPVwiY2hpbGQ/LmlzX2VkaXRhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlblRocmVlRG90c01lbnUoJGV2ZW50LCBjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5GaWx0ZXJvblRocmVlRG90c0NsaWNrKGNoaWxkKVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBjaGlsZC5oZWFkZXIgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmUgZC1mbGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmxleC1yb3ctcmV2ZXJzZV09XCJwaW5uZWRSaWdodFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MubWUtMl09XCJwaW5uZWRSaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjaGlsZC5waW5uZWRcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvcGluLWJsdWUuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRocmVlLWRvdHMgcC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlblRocmVlRG90c01lbnUoJGV2ZW50LCBjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzVGhyZWVEb3RzRmlsdGVyT3BlbiA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEtZ3JpZC9pY29ucy90aHJlZS1kb3RzLXZlcnRpY2FsLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIE9ubHkgc2hvdyBtZW51IGlmIHRoaXMgY29sdW1uIGlzIGFjdGl2ZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlQ29sID09PSBjaGlsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInRvcDogLTUwJTsgei1pbmRleDogMjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC0oIWNoaWxkPy5waW5uZWQgPyBjZW50ZXJQaW5uZWRIZWFkZXIuc2Nyb2xsTGVmdCA6IDApXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnRvcC5weF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNUaHJlZURvdHNGaWx0ZXJPcGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzaG93RmlsdGVyUm93IHx8IHNob3dDb2x1bW5zR3JvdXBpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaGVhZGVyUm93SGVpZ2h0ICogMiAtIDEwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGhlYWRlclJvd0hlaWdodCAtIDEwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5NZW51O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbDogY2hpbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc05lc3RlZFRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IHNlY3Rpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXg6IGNvbHVtbkluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRDb2xJbmRleDogaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicmVzaXplLWhhbmRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiYXV0b3NpemVDb2x1bW4oY2hpbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25SZXNpemVDb2x1bW4oJGV2ZW50LCBjaGlsZClcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YS1ncmlkL2ljb25zL3Jlc2l6ZS1oYW5kbGUuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPCEtLSBGaWx0ZXIgQ2VsbCAtLT5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd0ZpbHRlclJvd1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJoZWFkZXJCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaGVhZGVyLWNlbGwgZmlsdGVyLWNlbGxcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ib3JkZXItcmlnaHRdPVwic2hvd1ZlcnRpY2FsQm9yZGVyXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5maWVsZF09XCJjaGlsZC5maWVsZFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNoaWxkLndpZHRoXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cImNoaWxkLndpZHRoXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICBbc3R5bGUubWF4LWhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ib3JkZXItcmlnaHRdPVwic2hvd1ZlcnRpY2FsQm9yZGVyXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImdyaWQtcm93OiAzXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGVhZGVyLWNlbGwgZmlsdGVyLWNlbGxcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuZmllbGRdPVwiY29sLmZpZWxkXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjb2wud2lkdGhcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJjb2wud2lkdGhcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJGaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNoaWxkLmZpbHRlclZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25GaWx0ZXJDaGFuZ2UoY2hpbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgKHBhc3RlKT1cIm9uRmlsdGVyQ2hhbmdlKGNoaWxkKTsgYXBwbHlEcm9wZG93bkZpbHRlcigpXCJcbiAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGNoaWxkPy50eXBlID09ICdkcm9wZG93bicgfHwgY2hpbGQ/LnR5cGUgPT0gJ2ltYWdlJyB8fCBjaGlsZD8udHlwZSA9PSAnYXJyYXknXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZC1zZWFyY2gtaW5wdXRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgY2hpbGQ/LnR5cGUgPT0gJ2Ryb3Bkb3duJyB8fCBjaGlsZD8udHlwZSA9PSAnaW1hZ2UnIHx8IGNoaWxkPy50eXBlID09ICdhcnJheSdcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICBvcGVuRmlsdGVyRnJvbURpc2FibGVkU2VhcmNoZWRJbnB1dChjaGlsZClcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiYXBwbHlEcm9wZG93bkZpbHRlcigpXCJcbiAgICAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLWljb24td3JhcHBlclwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IG9wZW5GaWx0ZXIoY2hpbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZpbHRlci1hcHBsaWVkXT1cImlzRmlsdGVyQXBwbGllZE9uQ29sdW1uKGNoaWxkKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5wZS1ub25lXT1cImNoaWxkPy50eXBlID09ICdpbWFnZSdcIlxuICAgICAgICAgICAgICAgICAgICA+PHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZmlsdGVyLTIuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzRmlsdGVyQXBwbGllZE9uQ29sdW1uKGNoaWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiA3cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDdweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggM3B4ICM3NDg2ZmY7XG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMCAxNjMgMjMzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiA0cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3A6IDEycHg7XG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdW5kZWQtY2lyY2xlIGQtYmxvY2tcIlxuICAgICAgICAgICAgICAgICAgICA+PC9zcGFuXG4gICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgZmlsdGVyLXJvdy1maWx0ZXItd3JhcHBlclwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlRmlsdGVyQ2VsbD8uZmllbGQgPT0gY2hpbGQ/LmZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ0b3A6IDEwMCU7IHJpZ2h0OiAwOyB6LWluZGV4OiA5OVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGNoaWxkPy5waW5uZWQgPyAwIDogLWNlbnRlclBpbm5lZEhlYWRlci5zY3JvbGxMZWZ0XG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlck1lbnU7IGNvbnRleHQ6IHsgY29sOiBjaGlsZCB9XCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgY2RrRHJhZ1ByZXZpZXdcbiAgICAgICAgICAgICAgPjxkaXYgY2xhc3M9XCJwLTIgYm9yZGVyIGQtZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICFkcmFnZ2luZ0luR3JvdXBBcmVhIHx8XG4gICAgICAgICAgICAgICAgICAgIChjaGlsZC5pc19ncm91cGFibGUgJiYgZHJhZ2dpbmdJbkdyb3VwQXJlYSlcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvd3MtbW92ZS5zdmcnXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJkcmFnZ2luZ0luR3JvdXBBcmVhICYmICFjaGlsZC5pc19ncm91cGFibGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvYmFuLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdj57eyBjaGlsZC5oZWFkZXIgfX08L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNka0RyYWdQbGFjZWhvbGRlcj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFkcmFnZ2luZ0luR3JvdXBBcmVhXCIgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICBjaGlsZEhlYWRlclBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNoaWxkLFxuICAgICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnM6IHNlY3Rpb25zLFxuICAgICAgICAgICAgICAgICAgICBjYWxsZWRGcm9tTmVzdGVkUGxhY2Vob2xkZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJkcmFnZ2luZ0luR3JvdXBBcmVhICYmIGNoaWxkPy5pc19ncm91cGFibGVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGdhcC0yIG1zLTJcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwib3BhY2l0eTogMC42XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIHRvcEdyb3VwaW5nUm93UGxhY2Vob2xkZXI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNoaWxkLFxuICAgICAgICAgICAgICAgICAgICAgIHNob3dDaGV2cm9uOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICBwaW5uZWRSaWdodDogcGlubmVkUmlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnM6IHNlY3Rpb25zLFxuICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIEZsYXQgSGVhZGVyIHx8IFNpbmdsZSBIZWFkZXIgQ2VsbC0tPlxuICAgIDxuZy10ZW1wbGF0ZSAjZmxhdEhlYWRlcj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJncm91cC1jb2x1bW4td3JhcHBlclwiXG4gICAgICAgICpuZ0lmPVwiY29sLmlzX3Zpc2libGUgJiYgIWNvbFsnaXNSb3dHcm91cGVkJ11cIlxuICAgICAgPlxuICAgICAgICA8IS0tIEZ1bGwtaGVpZ2h0IEhlYWRlciBDZWxsIChzcGFucyAyIHJvd3MgdmlzdWFsbHkpIC0tPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJoZWFkZXItY2VsbCBvbmUtcm93LWhlYWRlci1jZWxsc1wiXG4gICAgICAgICAgW2F0dHIuZmllbGRdPVwiY29sLmZpZWxkXCJcbiAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY29sLndpZHRoXCJcbiAgICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cImNvbC53aWR0aFwiXG4gICAgICAgICAgW2NsYXNzLmJvcmRlci1yaWdodF09XCJzaG93VmVydGljYWxCb3JkZXJcIlxuICAgICAgICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cIlxuICAgICAgICAgICAgc2hvd0NvbHVtbnNHcm91cGluZyA/IGhlYWRlclJvd0hlaWdodCAqIDIgOiBoZWFkZXJSb3dIZWlnaHRcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiXG4gICAgICAgICAgICBzaG93Q29sdW1uc0dyb3VwaW5nID8gaGVhZGVyUm93SGVpZ2h0ICogMiA6IGhlYWRlclJvd0hlaWdodFxuICAgICAgICAgIFwiXG4gICAgICAgICAgW3N0eWxlLmZvbnRXZWlnaHRdPVwiaGVhZGVyRm9udFdlaWdodFwiXG4gICAgICAgICAgc3R5bGU9XCJncmlkLXJvdzogMSAvIHNwYW4gMlwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBoLTEwMCBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gdy0xMDAgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmZsZXgtcm93LXJldmVyc2VdPVwicGlubmVkUmlnaHRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWVsbGlwc2lzIGgtMTAwIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDBcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2wuaGVhZGVyXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1lbGxpcHNpcyBoLTEwMCBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuZWRpdGFibGUtaGVhZGVyXT1cImNvbD8uaXNfZWRpdGFibGVcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmZpbHRlci1hcHBsaWVkLW9uLXRleHRdPVwiaXNGaWx0ZXJBcHBsaWVkT25Db2x1bW4oY29sKVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgIG9wZW5UaHJlZURvdHNNZW51KCRldmVudCwgY29sKTtcbiAgICAgICAgICAgICAgICAgICAgb3BlbkZpbHRlcm9uVGhyZWVEb3RzQ2xpY2soY29sKVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBjb2wuaGVhZGVyIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlIGQtZmxleFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmZsZXgtcm93LXJldmVyc2VdPVwicGlubmVkUmlnaHRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLm1lLTJdPVwicGlubmVkUmlnaHRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sPy5waW5uZWRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvcGluLWJsdWUuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBbY2xhc3MubWUtMl09XCJjb2wub3JkZXJfYnlcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwic29ydGluZ0NvbmZpZz8uZmllbGQgPT0gY29sLmZpZWxkXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8IS0tIEFzY2VuZGluZyBTb3J0IEljb24gLS0+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNvcnRpbmdDb25maWc/Lm9yZGVyX2J5ID09ICdhc2MnXCJcbiAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9zb3J0LWFzYy5zdmcnXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBtdC0xIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNvcnREZXNjKGNvbClcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInNvcnRpbmdDb25maWc/Lm9yZGVyX2J5ID09PSAnYXNjJ1wiXG4gICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICA8IS0tIERlc2NlbmRpbmcgU29ydCBJY29uIC0tPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzb3J0aW5nQ29uZmlnPy5vcmRlcl9ieSA9PSAnZGVzYydcIlxuICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3NvcnQtZGVzYy5zdmcnXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBtdC0xIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNvcnRBc2MoY29sKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic29ydGluZ0NvbmZpZz8ub3JkZXJfYnkgPT09ICdkZXNjJ1wiXG4gICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGhyZWUtZG90cyBwLTFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICBvcGVuVGhyZWVEb3RzTWVudSgkZXZlbnQsIGNvbCk7XG4gICAgICAgICAgICAgICAgICAgIGlzVGhyZWVEb3RzRmlsdGVyT3BlbiA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAgICAgICAgICAgJ2RhdGEtZ3JpZC9pY29ucy90aHJlZS1kb3RzLXZlcnRpY2FsLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8IS0tIE9ubHkgc2hvdyBtZW51IGlmIHRoaXMgY29sdW1uIGlzIGFjdGl2ZSAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlQ29sID09PSBjb2xcIlxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ0b3A6IC01MCU7IHotaW5kZXg6IDIxXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cIlxuICAgICAgICAgICAgICAgICAgICAtKCFjb2w/LnBpbm5lZCA/IGNlbnRlclBpbm5lZEhlYWRlci5zY3JvbGxMZWZ0IDogMClcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUudG9wLnB4XT1cIlxuICAgICAgICAgICAgICAgICAgICBpc1RocmVlRG90c0ZpbHRlck9wZW5cbiAgICAgICAgICAgICAgICAgICAgICA/IHNob3dGaWx0ZXJSb3cgfHwgc2hvd0NvbHVtbnNHcm91cGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBoZWFkZXJSb3dIZWlnaHQgKiAyIC0gMTBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaGVhZGVyUm93SGVpZ2h0IC0gMTBcbiAgICAgICAgICAgICAgICAgICAgICA6IDBcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk1lbnU7XG4gICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sOiBjb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc05lc3RlZFRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IHNlY3Rpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXg6IGNvbHVtbkluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRDb2xJbmRleDogMFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInJlc2l6ZS1oYW5kbGVcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnctMTAwXT1cImNvbC5waW5uZWQgPT0gJ3JpZ2h0J1wiXG4gICAgICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiYXV0b3NpemVDb2x1bW4oY29sKVwiXG4gICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIlxuICAgICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IG9uUmVzaXplQ29sdW1uKCRldmVudCwgY29sKVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3Jlc2l6ZS1oYW5kbGUuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBGaWx0ZXIgQ2VsbCAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwic2hvd0ZpbHRlclJvd1wiXG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJoZWFkZXJCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgIGNsYXNzPVwiaGVhZGVyLWNlbGwgZmlsdGVyLWNlbGxcIlxuICAgICAgICAgIFtjbGFzcy5ib3JkZXItcmlnaHRdPVwic2hvd1ZlcnRpY2FsQm9yZGVyXCJcbiAgICAgICAgICBbYXR0ci5maWVsZF09XCJjb2wuZmllbGRcIlxuICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjb2wud2lkdGhcIlxuICAgICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiY29sLndpZHRoXCJcbiAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgICBbc3R5bGUubWF4LWhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgICA+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJGaWx0ZXJcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb2wuZmlsdGVyVmFsdWVcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25GaWx0ZXJDaGFuZ2UoY29sKVwiXG4gICAgICAgICAgICBbcmVhZG9ubHldPVwiY29sPy50eXBlID09ICdkcm9wZG93bicgfHwgY29sPy50eXBlID09ICdpbWFnZScgfHwgY29sPy50eXBlID09ICdhcnJheSdcIlxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkLXNlYXJjaC1pbnB1dF09XCJcbiAgICAgICAgICAgICAgY29sPy50eXBlID09ICdkcm9wZG93bicgfHwgY29sPy50eXBlID09ICdpbWFnZScgfHwgY29sPy50eXBlID09ICdhcnJheSdcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAocGFzdGUpPVwib25QYXN0ZUluRmlsdGVyUm93U2VhcmNoKCRldmVudCwgY29sKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb3BlbkZpbHRlckZyb21EaXNhYmxlZFNlYXJjaGVkSW5wdXQoY29sKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImFwcGx5RHJvcGRvd25GaWx0ZXIoKVwiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJmaWx0ZXItaWNvbi13cmFwcGVyXCJcbiAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IG9wZW5GaWx0ZXIoY29sKVwiXG4gICAgICAgICAgICBbY2xhc3MuZmlsdGVyLWFwcGxpZWRdPVwiaXNGaWx0ZXJBcHBsaWVkT25Db2x1bW4oY29sKVwiXG4gICAgICAgICAgICBbY2xhc3MucGUtbm9uZV09XCJjb2w/LnR5cGUgPT0gJ2ltYWdlJ1wiXG4gICAgICAgICAgICA+PHNwYW5cbiAgICAgICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9maWx0ZXItMi5zdmcnXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAqbmdJZj1cImlzRmlsdGVyQXBwbGllZE9uQ29sdW1uKGNvbClcIlxuICAgICAgICAgICAgICBzdHlsZT1cIlxuICAgICAgICAgICAgICAgIHdpZHRoOiA3cHg7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA3cHg7XG4gICAgICAgICAgICAgICAgYm94LXNoYWRvdzogMHB4IDBweCAzcHggIzc0ODZmZjtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMCAxNjMgMjMzKTtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgcmlnaHQ6IDRweDtcbiAgICAgICAgICAgICAgICB0b3A6IDEycHg7XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwicm91bmRlZC1jaXJjbGUgZC1ibG9ja1wiXG4gICAgICAgICAgICA+PC9zcGFuXG4gICAgICAgICAgPjwvc3Bhbj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgZmlsdGVyLXJvdy1maWx0ZXItd3JhcHBlclwiXG4gICAgICAgICAgICAqbmdJZj1cImFjdGl2ZUZpbHRlckNlbGwgPT09IGNvbFwiXG4gICAgICAgICAgICBzdHlsZT1cInRvcDogMTAwJTsgcmlnaHQ6IDA7IHotaW5kZXg6IDk5XCJcbiAgICAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cImNvbD8ucGlubmVkID8gMCA6IC1jZW50ZXJQaW5uZWRIZWFkZXIuc2Nyb2xsTGVmdFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlck1lbnU7IGNvbnRleHQ6IHsgY29sOiBjb2wgfVwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxuPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cbjwhLS0gQm9keSBDZWxsIFRlbXBsYXRlIC0tPlxuPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cbjwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XG5cbjxuZy10ZW1wbGF0ZVxuICAjcm93Q2VsbFxuICBsZXQtcm93XG4gIGxldC1jb2x1bW5zPVwiY29sdW1uc1wiXG4gIGxldC1pc0V2ZW49XCJpc0V2ZW5cIlxuICBsZXQtaXNPZGQ9XCJpc09kZFwiXG4gIGxldC1pc0xlZnRTZWN0aW9uPVwiaXNMZWZ0XCJcbiAgbGV0LXNlY3Rpb249XCJzZWN0aW9uXCJcbiAgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIlxuICBsZXQtaXNUb3RhbFJvdz1cImlzVG90YWxSb3dcIlxuPlxuICA8IS0tIENoZWNrIGlmIHJvdyBpcyBhIGdyb3VwIC0tPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJncm91cFJvd1RlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93LCBkZXB0aDogMCB9XCJcbiAgPjwvbmctY29udGFpbmVyPlxuICA8bmctdGVtcGxhdGUgI2dyb3VwUm93VGVtcGxhdGUgbGV0LXJvdyBsZXQtZGVwdGg9XCJkZXB0aFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cuaXNHcm91cDsgZWxzZSByZWd1bGFyUm93XCI+XG4gICAgICA8IS0tIEdyb3VwIEhlYWRlciAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJncm91cC1oZWFkZXItcm93IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiXG4gICAgICAgIFtjbGFzcy5ib3JkZXItYmVsb3ddPVwic2VjdGlvbiAhPT0gJ2NlbnRlcidcIlxuICAgICAgICBbc3R5bGUud2lkdGhdPVwiXG4gICAgICAgICAgc2VjdGlvbiA9PT0gJ2NlbnRlcidcbiAgICAgICAgICAgID8gKGNlbnRlclNjcm9sbGFibGVCb2R5Py5zY3JvbGxXaWR0aCA/PyAwKSArICdweCdcbiAgICAgICAgICAgIDogJzEwMCUnXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cInNlY3Rpb24gPT0gJ2xlZnQnXCJcbiAgICAgICAgICBjbGFzcz1cImgtMTAwIGQtZmxleFwiXG4gICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImxlZnRQaW5uZWRIZWFkZXIub2Zmc2V0V2lkdGggLSAxXCJcbiAgICAgICAgICBbY2xhc3Mucm93LXNlbGVjdGVkXT1cInJvd1NlbGVjdGVkSW5kZXhlcy5oYXMocm93Ll9fdmlydHVhbEluZGV4KVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cInNob3dTZXJpYWxOdW1iZXJcIlxuICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogNTBweFwiXG4gICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgaC0xMDAgYm9yZGVyLXJpZ2h0IGp1c3RpZnktY29udGVudC1lbmQgcGUtMiBzLW5vXCJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiY2hlY2tib3hlc0JhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiNTVcIlxuICAgICAgICAgICAgW3N0eWxlLmN1cnNvcl09XCJcbiAgICAgICAgICAgICAgJ3VybCgnICtcbiAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAgICdkYXRhLWdyaWQvaWNvbnMvYXJyb3ctcmlnaHQuc3ZnKSwgYXV0bydcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIm9uUm93TW91c2VEb3duKHJvdy5fX3ZpcnR1YWxJbmRleCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAobW91c2VvdmVyKT1cIm9uUm93TW91c2VPdmVyKHJvdy5fX3ZpcnR1YWxJbmRleCwgJGV2ZW50KVwiXG4gICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiY2hlY2tib3hlc0NvbG9yXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBnZXRTdGFydEluZGV4KCkgKyAocm93Ll9fdmlydHVhbEluZGV4IC0gMSkgfHwgXCJcIiB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cInNob3dDaGVja2JveGVzXCJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDUwcHhcIlxuICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgaC0xMDAgYm9yZGVyLXJpZ2h0XCJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiY2hlY2tib3hlc0JhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICBbY2xhc3Mucm93LXNlbGVjdGVkXT1cInJvd1NlbGVjdGVkSW5kZXhlcy5oYXMocm93Ll9fdmlydHVhbEluZGV4KVwiXG4gICAgICAgICAgICBbY2xhc3MubGVmdC1zZWxlY3Rpb24tYm9yZGVyXT1cIlxuICAgICAgICAgICAgICByb3dTZWxlY3RlZEluZGV4ZXMuaGFzKHJvdy5fX3ZpcnR1YWxJbmRleClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbY2xhc3MuZmlyc3Qtcm93LXNlbGVjdGVkXT1cImZpcnN0U2VsZWN0ZWRSb3cgPT09IHJvdy5fX3ZpcnR1YWxJbmRleFwiXG4gICAgICAgICAgICBbY2xhc3MubGFzdC1yb3ctc2VsZWN0ZWRdPVwibGFzdFNlbGVjdGVkUm93ID09PSByb3cuX192aXJ0dWFsSW5kZXhcIlxuICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImNoZWNrYm94ZXNDb2xvclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDE2cHg7IGhlaWdodDogMTZweFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cImdldEdyb3VwQ2hlY2tlZFN0YXRlKHJvdykgPT09IHRydWVcIlxuICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJnZXRHcm91cENoZWNrZWRTdGF0ZShyb3cpID09PSB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInNlbGVjdEdyb3VwUm93KCRldmVudCwgcm93KVwiXG4gICAgICAgICAgICAvPlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cInNlY3Rpb24gPT0gJ2NlbnRlcidcIlxuICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjZW50ZXJQaW5uZWRIZWFkZXIuc2Nyb2xsV2lkdGhcIlxuICAgICAgICAgIFtzdHlsZS5taW5XaWR0aC5weF09XCJjZW50ZXJQaW5uZWRIZWFkZXIuc2Nyb2xsV2lkdGhcIlxuICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwcy0yIGgtMTAwIGJvcmRlci1iZWxvd1wiXG4gICAgICAgICAgW2NsYXNzLnJvdy1zZWxlY3RlZF09XCJyb3dTZWxlY3RlZEluZGV4ZXMuaGFzKHJvdy5fX3ZpcnR1YWxJbmRleClcIlxuICAgICAgICAgIFtjbGFzcy5maXJzdC1yb3ctc2VsZWN0ZWRdPVwiZmlyc3RTZWxlY3RlZFJvdyA9PT0gcm93Ll9fdmlydHVhbEluZGV4XCJcbiAgICAgICAgICBbY2xhc3MubGFzdC1yb3ctc2VsZWN0ZWRdPVwibGFzdFNlbGVjdGVkUm93ID09PSByb3cuX192aXJ0dWFsSW5kZXhcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCJcbiAgICAgICAgICAgIFtzdHlsZS5wYWRkaW5nTGVmdC5weF09XCJkZXB0aCA+IDAgPyBkZXB0aCAqIDMwIDogMFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0yIGZpbHRlci1pY29uLXdyYXBwZXJcIiAoY2xpY2spPVwidG9nZ2xlRXhwYW5kKHJvdylcIj5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBhbGlnbi1pdGVtcy1jZW50ZXIgZC1mbGV4XCJcbiAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgcm93LmlzRXhwYW5kXG4gICAgICAgICAgICAgICAgICAgID8gc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1kb3duLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgOiBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGV2cm9uLXJpZ2h0LnN2ZydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHN0cm9uZyAoY2xpY2spPVwidG9nZ2xlRXhwYW5kKHJvdylcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+XG4gICAgICAgICAgICAgIHt7IHJvdy5ncm91cFZhbHVlIH19ICh7eyBjb3VudExlYWZSb3dzKHJvdykgfX0pXG4gICAgICAgICAgICA8L3N0cm9uZz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwic2VjdGlvbiA9PSAncmlnaHQnXCJcbiAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwicmlnaHRQaW5uZWRIZWFkZXIub2Zmc2V0V2lkdGhcIlxuICAgICAgICAgIFtjbGFzcy5yb3ctc2VsZWN0ZWRdPVwicm93U2VsZWN0ZWRJbmRleGVzLmhhcyhyb3cuX192aXJ0dWFsSW5kZXgpXCJcbiAgICAgICAgICBbY2xhc3MuZmlyc3Qtcm93LXNlbGVjdGVkXT1cImZpcnN0U2VsZWN0ZWRSb3cgPT09IHJvdy5fX3ZpcnR1YWxJbmRleFwiXG4gICAgICAgICAgW2NsYXNzLmxhc3Qtcm93LXNlbGVjdGVkXT1cImxhc3RTZWxlY3RlZFJvdyA9PT0gcm93Ll9fdmlydHVhbEluZGV4XCJcbiAgICAgICAgPjwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gUmVjdXJzaXZlIENoaWxkcmVuIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImdyb3VwLWNoaWxkcmVuXCIgKm5nSWY9XCJyb3cuaXNFeHBhbmRcIiBbQHNsaWRlVG9nZ2xlXT5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjaGlsZCBvZiByb3cuY2hpbGRyZW47IGxldCBpID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlJZFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hpbGQuaXNHcm91cDsgZWxzZSBkYXRhUm93XCI+XG4gICAgICAgICAgICA8IS0tIFJlY3Vyc2l2ZSBjYWxsIGZvciBuZXN0ZWQgZ3JvdXAgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgZ3JvdXBSb3dUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogY2hpbGQsIGRlcHRoOiBkZXB0aCArIDEgfVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNkYXRhUm93PlxuICAgICAgICAgICAgPCEtLSBSZWd1bGFyIGRhdGEgcm93IC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgIHJvd0NlbGw7XG4gICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjaGlsZCxcbiAgICAgICAgICAgICAgICAgIGNvbHVtbnM6IGNvbHVtbnMsXG4gICAgICAgICAgICAgICAgICBpc0V2ZW46IGkgJSAyID09PSAwLFxuICAgICAgICAgICAgICAgICAgaXNPZGQ6IGkgJSAyICE9PSAwLFxuICAgICAgICAgICAgICAgICAgaXNMZWZ0OiBpc0xlZnRTZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgc2VjdGlvbjogc2VjdGlvbixcbiAgICAgICAgICAgICAgICAgIGlzVG90YWxSb3c6IGlzVG90YWxSb3dcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8IS0tIFJlZ3VsYXIgcm93IChub3QgYSBncm91cCkgLS0+XG4gIDxuZy10ZW1wbGF0ZSAjcmVndWxhclJvdz5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImQtZmxleFwiXG4gICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiXG4gICAgICBbc3R5bGUubWluSGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiXG4gICAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgY3Vyc29yLXBvaW50ZXIgYm9yZGVyLWJlbG93XCJcbiAgICAgICAgc3R5bGU9XCJtaW4td2lkdGg6IDMwcHg7IGhlaWdodDogMTAwJVwiXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgc2VjdGlvbiA9PSAnY2VudGVyJyAmJiAoZ3JpZFR5cGUgPT09ICdBc3NldHMnIHx8IGdyaWRUeXBlID09PSAnVGFza3MnKVxuICAgICAgICBcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgJ2JhY2tncm91bmQtY29sb3InOiByb3dTZWxlY3RlZEluZGV4ZXMuaGFzKHJvdy5fX3ZpcnR1YWxJbmRleClcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiBnZXRCYWNrZ3JvdW5kQ29sb3Iocm93LCBpc0V2ZW4sIHNlY3Rpb24pXG4gICAgICAgIH1cIlxuICAgICAgICBbY2xhc3Muc2VsZWN0ZWQtY2VsbF09XCJyb3dTZWxlY3RlZEluZGV4ZXMuaGFzKHJvdy5fX3ZpcnR1YWxJbmRleClcIlxuICAgICAgICBbY2xhc3MuZmlyc3Qtcm93LXNlbGVjdGVkXT1cImZpcnN0U2VsZWN0ZWRSb3cgPT09IHJvdy5fX3ZpcnR1YWxJbmRleFwiXG4gICAgICAgIFtjbGFzcy5sYXN0LXJvdy1zZWxlY3RlZF09XCJsYXN0U2VsZWN0ZWRSb3cgPT09IHJvdy5fX3ZpcnR1YWxJbmRleFwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZURldGFpbFJvd0V4cGFuZChyb3cpXCJcbiAgICAgICAgICAqbmdJZj1cInJvdz8uZGV0YWlsPy5yZXN1bHQ/Lmxlbmd0aCB8fCBncmlkVHlwZSA9PT0gJ1Rhc2tzJ1wiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZmlsdGVyLWljb24td3JhcHBlclwiXG4gICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgIGlzRGV0YWlsc0V4cGFuZGVkKHJvdylcbiAgICAgICAgICAgICAgPyBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGV2cm9uLWRvd24uc3ZnJ1xuICAgICAgICAgICAgICA6IHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZXZyb24tcmlnaHQuc3ZnJ1xuICAgICAgICAgIFwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICA8L3NwYW4+XG4gICAgICA8ZGl2XG4gICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiXG4gICAgICAgICAgc2VjdGlvbiA9PSAnY2VudGVyJyAmJiBncm91cGVkQ29sdW1ucz8ubGVuZ3RoID8gZ3JvdXBCb3hQYWRkaW5nIDogMFxuICAgICAgICBcIlxuICAgICAgICBbY2xhc3Mucm93LXNlbGVjdGVkXT1cInJvd1NlbGVjdGVkSW5kZXhlcy5oYXMocm93Ll9fdmlydHVhbEluZGV4KVwiXG4gICAgICAgIFtjbGFzcy5maXJzdC1yb3ctc2VsZWN0ZWRdPVwiZmlyc3RTZWxlY3RlZFJvdyA9PT0gcm93Ll9fdmlydHVhbEluZGV4XCJcbiAgICAgICAgW2NsYXNzLmxhc3Qtcm93LXNlbGVjdGVkXT1cImxhc3RTZWxlY3RlZFJvdyA9PT0gcm93Ll9fdmlydHVhbEluZGV4XCJcbiAgICAgICAgKGNvbnRleHRtZW51KT1cIm9uUmlnaHRDbGljaygkZXZlbnQsIHJvdylcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiXG4gICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXJvdyBoLTEwMFwiXG4gICAgICAgIFtjbGFzcy5ldmVuLXJvd109XCJpc0V2ZW5cIlxuICAgICAgICBbY2xhc3Mub2RkLXJvd109XCJpc09kZFwiXG4gICAgICAgIFtjbGFzcy5ob3ZlcmVkLXJvd109XCJob3ZlcmVkUm93SWQgPT09IChyb3cuX2lkIHx8IHJvdy5pZClcIlxuICAgICAgICAobW91c2VlbnRlcik9XCJvblJvd0hvdmVyKHJvdylcIlxuICAgICAgICAobW91c2VsZWF2ZSk9XCJvblJvd0xlYXZlKClcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgJ2JhY2tncm91bmQtY29sb3InOiBnZXRCYWNrZ3JvdW5kQ29sb3Iocm93LCBpc0V2ZW4sIHNlY3Rpb24pXG4gICAgICAgIH1cIlxuICAgICAgICBbc3R5bGUubWluSGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiXG4gICAgICAgIFtzdHlsZS5tYXhIZWlnaHQucHhdPVwicm93SGVpZ2h0XCJcbiAgICAgID48L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgKGNvbnRleHRtZW51KT1cIm9uUmlnaHRDbGljaygkZXZlbnQsIHJvdylcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiXG4gICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXJvd1wiXG4gICAgICAgIFtjbGFzcy5ldmVuLXJvd109XCJpc0V2ZW5cIlxuICAgICAgICBbY2xhc3Mub2RkLXJvd109XCJpc09kZFwiXG4gICAgICAgIFtjbGFzcy5ob3ZlcmVkLXJvd109XCJob3ZlcmVkUm93SWQgPT09IChyb3cuX2lkIHx8IHJvdy5pZClcIlxuICAgICAgICAobW91c2VlbnRlcik9XCJvblJvd0hvdmVyKHJvdylcIlxuICAgICAgICAobW91c2VsZWF2ZSk9XCJvblJvd0xlYXZlKClcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgJ2JhY2tncm91bmQtY29sb3InOiBnZXRCYWNrZ3JvdW5kQ29sb3Iocm93LCBpc0V2ZW4sIHNlY3Rpb24pXG4gICAgICAgIH1cIlxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJjaGVja2JveGVzQmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICBjbGFzcz1cInNlbGVjdC1hbGwtY2hlY2tib3gtY2VsbCBqdXN0aWZ5LWNvbnRlbnQtZW5kIHBlLTIgcy1ub1wiXG4gICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cIjU1XCJcbiAgICAgICAgICAqbmdJZj1cImlzTGVmdFNlY3Rpb24gJiYgc2hvd1NlcmlhbE51bWJlclwiXG4gICAgICAgICAgIFtzdHlsZS5mb250U2l6ZS5weF09XCJib2R5VGV4dEZvbnRzU2l6ZVwiXG4gICAgICAgICAgW3N0eWxlLmN1cnNvcl09XCJcbiAgICAgICAgICAgICd1cmwoJyArXG4gICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICtcbiAgICAgICAgICAgICdkYXRhLWdyaWQvaWNvbnMvYXJyb3ctcmlnaHQuc3ZnKSwgYXV0bydcbiAgICAgICAgICBcIlxuICAgICAgICAgIChtb3VzZWRvd24pPVwib25Sb3dNb3VzZURvd24ocm93Ll9fdmlydHVhbEluZGV4LCAkZXZlbnQpXCJcbiAgICAgICAgICAobW91c2VvdmVyKT1cIm9uUm93TW91c2VPdmVyKHJvdy5fX3ZpcnR1YWxJbmRleCwgJGV2ZW50KVwiXG4gICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImNoZWNrYm94ZXNDb2xvclwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBnZXRTdGFydEluZGV4KCkgKyAocm93Ll9fdmlydHVhbEluZGV4IC0gMSkgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cIlxuICAgICAgICAgICAgcm93U2VsZWN0ZWRJbmRleGVzLmhhcyhyb3cuX192aXJ0dWFsSW5kZXgpXG4gICAgICAgICAgICAgID8gc2VsZWN0ZWRSb3dzQmFja2dyb3VuZENvbG9yXG4gICAgICAgICAgICAgIDogY2hlY2tib3hlc0JhY2tncm91bmRDb2xvclxuICAgICAgICAgIFwiXG4gICAgICAgICAgY2xhc3M9XCJzZWxlY3QtYWxsLWNoZWNrYm94LWNlbGxcIlxuICAgICAgICAgICpuZ0lmPVwiaXNMZWZ0U2VjdGlvbiAmJiBzaG93Q2hlY2tib3hlc1wiXG4gICAgICAgICAgW2NsYXNzLmxlZnQtc2VsZWN0aW9uLWJvcmRlcl09XCJcbiAgICAgICAgICAgIHJvd1NlbGVjdGVkSW5kZXhlcy5oYXMocm93Ll9fdmlydHVhbEluZGV4KVxuICAgICAgICAgIFwiXG4gICAgICAgICAgW2NsYXNzLmZpcnN0LXJvdy1zZWxlY3RlZF09XCJmaXJzdFNlbGVjdGVkUm93ID09PSByb3cuX192aXJ0dWFsSW5kZXhcIlxuICAgICAgICAgIFtjbGFzcy5sYXN0LXJvdy1zZWxlY3RlZF09XCJsYXN0U2VsZWN0ZWRSb3cgPT09IHJvdy5fX3ZpcnR1YWxJbmRleFwiXG4gICAgICAgICAgW3N0eWxlLm1pbkhlaWdodC5weF09XCJyb3dIZWlnaHQgLSAxXCJcbiAgICAgICAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiXG4gICAgICAgID5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICpuZ0lmPVwiaGFzQW55VmlzaWJsZUNvbHVtblwiXG4gICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTZweDsgaGVpZ2h0OiAxNnB4XCJcbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJpc1Jvd1NlbGVjdGVkKHJvdylcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVSb3dTZWxlY3Rpb24ocm93KVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBSZW5kZXIgYWxsIGNvbHVtbnMgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgIGxldCBjb2wgb2YgY29sdW1ucztcbiAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlGaWVsZDtcbiAgICAgICAgICAgIGxldCBjb2xJbmRleCA9IGluZGV4XG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuY2hpbGRyZW4/Lmxlbmd0aCA+IDA7IGVsc2UgZmxhdENvbHVtblwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICBsZXQgY2hpbGQgb2YgY29sLmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlGaWVsZDtcbiAgICAgICAgICAgICAgICBsZXQgc3ViQ29sSW5kZXggPSBpbmRleFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hpbGQ/LmlzX3Zpc2libGUgJiYgIWNoaWxkPy5pc1Jvd0dyb3VwZWRcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICBjZWxsVGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICBjb2w6IGNoaWxkLFxuICAgICAgICAgICAgICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgICAgICAgICAgICAgIHJvd0luZGV4OiByb3dJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xJbmRleDogY29sSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgc3ViQ29sSW5kZXg6IHN1YkNvbEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IHNlY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgaXNUb3RhbFJvdzogaXNUb3RhbFJvd1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZmxhdENvbHVtbj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2w/LmlzX3Zpc2libGUgJiYgIWNvbD8uaXNSb3dHcm91cGVkXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgY2VsbFRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICBjb2w6IGNvbCxcbiAgICAgICAgICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgICAgICAgICAgIHJvd0luZGV4OiByb3dJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgY29sSW5kZXg6IGNvbEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBzdWJDb2xJbmRleDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogc2VjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgaXNUb3RhbFJvdzogaXNUb3RhbFJvd1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICBbQHNsaWRlVG9nZ2xlXVxuICAgICAgKm5nSWY9XCJzZWN0aW9uID09PSAnbGVmdCcgJiYgaXNEZXRhaWxzRXhwYW5kZWQocm93KVwiXG4gICAgICBjbGFzcz1cImFjY29yZGlvbi1kZXRhaWxzXCJcbiAgICAgIHN0eWxlPVwibWF4LWhlaWdodDogMzUwcHg7IG92ZXJmbG93OiBoaWRkZW5cIlxuICAgICAgW3N0eWxlLm1heEhlaWdodC5weF09XCJoYXNIb3Jpem9udGFsU2Nyb2xsID8gMzM5IDogMzQxXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgbGVmdFJpZ2h0TmVzdGVkUGxhY2Vob2xkZXI7XG4gICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IHJvdyB9XG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgIFtAc2xpZGVUb2dnbGVdXG4gICAgICAqbmdJZj1cInNlY3Rpb24gPT09ICdjZW50ZXInICYmIGlzRGV0YWlsc0V4cGFuZGVkKHJvdylcIlxuICAgICAgY2xhc3M9XCJhY2NvcmRpb24tZGV0YWlscyBjZW50ZXItc2VjdGlvblwiXG4gICAgICBzdHlsZT1cIlxuICAgICAgICBtYXgtaGVpZ2h0OiAzNTBweDtcbiAgICAgICAgb3ZlcmZsb3cteTogaGlkZGVuO1xuICAgICAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgICAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47XG4gICAgICBcIlxuICAgICAgI25lc3RlZFRhYmxlXG4gICAgICBbc3R5bGUud2lkdGhdPVwiXG4gICAgICAgIGhhc1JpZ2h0UGlubmVkQ29sdW1uc1xuICAgICAgICAgID8gJzEwMCUnXG4gICAgICAgICAgOiBoYXNWZXJ0aWNhbFNjcm9sbFxuICAgICAgICAgID8gJ2NhbGMoMTAwJSAtIDEycHgpJ1xuICAgICAgICAgIDogJzEwMCUnXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJncmlkVHlwZSA9PSAnQXNzZXRzJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJuZXN0ZWRUYWJsZVRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93IH1cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJncmlkVHlwZSA9PSAnVGFza3MnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgdGFza01hbmFnZW1lbnRUZW1wbGF0ZTtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgdGFza0RldGFpbHM6IHJvdyB9XG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICBbQHNsaWRlVG9nZ2xlXVxuICAgICAgKm5nSWY9XCJzZWN0aW9uID09PSAncmlnaHQnICYmIGlzRGV0YWlsc0V4cGFuZGVkKHJvdylcIlxuICAgICAgY2xhc3M9XCJhY2NvcmRpb24tZGV0YWlsc1wiXG4gICAgICBzdHlsZT1cIm1heC1oZWlnaHQ6IDM1MHB4OyBvdmVyZmxvdzogaGlkZGVuXCJcbiAgICAgIFtzdHlsZS5tYXhIZWlnaHQucHhdPVwiaGFzSG9yaXpvbnRhbFNjcm9sbCA/IDMzOSA6IDM0MVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgIGxlZnRSaWdodE5lc3RlZFBsYWNlaG9sZGVyO1xuICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiByb3cgfVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIEFjdHVhbCBDZWxsIGlzIEhlcmUgLS0+XG48bmctdGVtcGxhdGVcbiAgI2NlbGxUZW1wbGF0ZVxuICBsZXQtY29sPVwiY29sXCJcbiAgbGV0LXJvdz1cInJvd1wiXG4gIGxldC1zZWN0aW9uPVwic2VjdGlvblwiXG4gIGxldC1zdWJDb2xJbmRleD1cInN1YkNvbEluZGV4XCJcbiAgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIlxuICBsZXQtY29sSW5kZXg9XCJjb2xJbmRleFwiXG4gIGxldC1pc1RvdGFsUm93PVwiaXNUb3RhbFJvd1wiXG4+XG4gIDxkaXZcbiAgICAjY2VsbENvbnRhaW5lclxuICAgIChjbGljayk9XCJcbiAgICAgIGVkaXRpbmdLZXkgPSAnJzsgc2V0QWN0aXZlQ2VsbChyb3csIGNvbCk7IGNvbGxhcHNlQWxsRXhwYW5kZWRDZWxscygpXG4gICAgXCJcbiAgICBbc3R5bGUuZm9udFdlaWdodF09XCJib2R5Rm9udFdlaWdodFwiXG4gICAgW2NsYXNzLmJvcmRlci1yaWdodF09XCJzaG93VmVydGljYWxCb3JkZXJcIlxuICAgIGNsYXNzPVwiY2VsbCBvdmVyZmxvdy12aXNpYmxlIHBvc2l0aW9uLXJlbGF0aXZlIGRhdGEtZ3JpZC1jZWxsXCJcbiAgICBbYXR0ci5maWVsZF09XCJjb2wuZmllbGRcIlxuICAgIFtzdHlsZS53aWR0aC5weF09XCJjb2wud2lkdGhcIlxuICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiY29sLndpZHRoXCJcbiAgICBbc3R5bGUuZm9udFNpemUucHhdPVwiYm9keVRleHRGb250c1NpemVcIlxuICAgIFtzdHlsZS5taW5IZWlnaHQucHhdPVwicm93SGVpZ2h0XCJcbiAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiXG4gICAgW2NsYXNzLmFjdGl2ZS1jZWxsXT1cIlxuICAgICAgaXNBY3RpdmVDZWxsKHJvdywgY29sKSAmJiAhaXNFZGl0aW5nKHJvdywgY29sKSAmJiBzZWxlY3RlZEtleXMuc2l6ZSA9PSAxXG4gICAgXCJcbiAgICAoZGJsY2xpY2spPVwiXG4gICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGVuYWJsZUVkaXQocm93LCBjb2wsIGZhbHNlLCBjZWxsQ29udGFpbmVyKVxuICAgIFwiXG4gICAgW2NsYXNzLnJvdy1zZWxlY3RlZF09XCJyb3dTZWxlY3RlZEluZGV4ZXMuaGFzKHJvdy5fX3ZpcnR1YWxJbmRleClcIlxuICAgIFtjbGFzcy5maXJzdC1yb3ctc2VsZWN0ZWRdPVwiZmlyc3RTZWxlY3RlZFJvdyA9PT0gcm93Py5fX3ZpcnR1YWxJbmRleFwiXG4gICAgW2NsYXNzLmxhc3Qtcm93LXNlbGVjdGVkXT1cImxhc3RTZWxlY3RlZFJvdyA9PT0gcm93Py5fX3ZpcnR1YWxJbmRleFwiXG4gICAgdGFiaW5kZXg9XCItMVwiXG4gICAgKGtleWRvd24uZW50ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IGVuYWJsZUVkaXQocm93LCBjb2wpXCJcbiAgICAobW91c2Vkb3duKT1cIlxuICAgICAgc3RhcnRTZWxlY3Rpb24oXG4gICAgICAgIHJvdy5fX3ZpcnR1YWxJbmRleCxcbiAgICAgICAgY29sSW5kZXgsXG4gICAgICAgIHN1YkNvbEluZGV4ID8/IDAsXG4gICAgICAgIGNvbC5maWVsZCxcbiAgICAgICAgJGV2ZW50LFxuICAgICAgICBzZWN0aW9uXG4gICAgICApXG4gICAgXCJcbiAgICAobW91c2VlbnRlcik9XCJcbiAgICAgIGV4dGVuZFNlbGVjdGlvbihcbiAgICAgICAgcm93Ll9fdmlydHVhbEluZGV4LFxuICAgICAgICBjb2xJbmRleCxcbiAgICAgICAgc3ViQ29sSW5kZXggPz8gMCxcbiAgICAgICAgY29sLmZpZWxkLFxuICAgICAgICAkZXZlbnQsXG4gICAgICAgIHNlY3Rpb25cbiAgICAgIClcbiAgICBcIlxuICAgIChtb3VzZXVwKT1cImVuZFNlbGVjdGlvbigpXCJcbiAgICBbY2xhc3Muc2VsZWN0ZWQtY2VsbF09XCJcbiAgICAgIGlzU2VsZWN0ZWQoXG4gICAgICAgIHJvdy5fX3ZpcnR1YWxJbmRleCxcbiAgICAgICAgY29sSW5kZXgsXG4gICAgICAgIHN1YkNvbEluZGV4ID8/IDAsXG4gICAgICAgIGNvbC5maWVsZCxcbiAgICAgICAgc2VjdGlvblxuICAgICAgKVxuICAgIFwiXG4gICAgW2NsYXNzLnRvcC1ib3JkZXJdPVwiXG4gICAgICBpc1RvcEJvcmRlcihyb3cuX192aXJ0dWFsSW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCwgc2VjdGlvbilcbiAgICBcIlxuICAgIFtjbGFzcy5ib3R0b20tYm9yZGVyXT1cIlxuICAgICAgaXNCb3R0b21Cb3JkZXIocm93Ll9fdmlydHVhbEluZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pXG4gICAgXCJcbiAgICBbY2xhc3MubGVmdC1ib3JkZXJdPVwiXG4gICAgICBpc0xlZnRCb3JkZXIocm93Ll9fdmlydHVhbEluZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pXG4gICAgXCJcbiAgICBbY2xhc3MucmlnaHQtYm9yZGVyXT1cIlxuICAgICAgaXNSaWdodEJvcmRlcihyb3cuX192aXJ0dWFsSW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCwgc2VjdGlvbilcbiAgICBcIlxuICAgIFtjbGFzcy50b3AtbGVmdC1jb3JuZXJdPVwiXG4gICAgICBpc1RvcExlZnRDb3JuZXIocm93Ll9fdmlydHVhbEluZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pXG4gICAgXCJcbiAgICBbY2xhc3MudG9wLXJpZ2h0LWNvcm5lcl09XCJcbiAgICAgIGlzVG9wUmlnaHRDb3JuZXIocm93Ll9fdmlydHVhbEluZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pXG4gICAgXCJcbiAgICBbY2xhc3MuYm90dG9tLWxlZnQtY29ybmVyXT1cIlxuICAgICAgaXNCb3R0b21MZWZ0Q29ybmVyKHJvdy5fX3ZpcnR1YWxJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4LCBzZWN0aW9uKVxuICAgIFwiXG4gICAgW2NsYXNzLmJvdHRvbS1yaWdodC1jb3JuZXJdPVwiXG4gICAgICBpc0JvdHRvbVJpZ2h0Q29ybmVyKHJvdy5fX3ZpcnR1YWxJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4LCBzZWN0aW9uKVxuICAgIFwiXG4gID5cbiAgICA8IS0tICAobW91c2Vkb3duKT1cInN0YXJ0U2VsZWN0aW9uKHJvdy5fX3ZpcnR1YWxJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4ID8/IDAsIGNvbC5maWVsZCwgJGV2ZW50KVwiXG4gIChtb3VzZWVudGVyKT1cImV4dGVuZFNlbGVjdGlvbihyb3cuX192aXJ0dWFsSW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCA/PyAwLCBjb2wuZmllbGQsICRldmVudClcIlxuICAobW91c2V1cCk9XCJlbmRTZWxlY3Rpb24oKVwiXG4gIFtjbGFzcy5zZWxlY3RlZC1jZWxsXT1cImlzU2VsZWN0ZWQocm93Ll9fdmlydHVhbEluZGV4LCBjb2xJbmRleCwgIHN1YkNvbEluZGV4ID8/IDAsIGNvbC5maWVsZClcIiAtLT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInRhYmxlLWNlbGxcIlxuICAgICAgW2NsYXNzLmFjdGl2ZS1mb3ItZWRpdGluZ109XCJcbiAgICAgICAgaXNFZGl0aW5nKHJvdywgY29sKSAmJlxuICAgICAgICAoZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpPy5sZW5ndGggPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgIGdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKT8ubGVuZ3RoIDw9IDUwIHx8IGNvbC50eXBlID09ICdpbWFnZScpXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgaXNFZGl0aW5nKHJvdywgY29sKSAmJlxuICAgICAgICAgICAgKGdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKT8ubGVuZ3RoID09PSB1bmRlZmluZWQgfHwgY29sLnR5cGUgPT0gJ2ltYWdlJyB8fFxuICAgICAgICAgICAgICAoZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpPy5sZW5ndGggPD0gNTAgJiZcbiAgICAgICAgICAgICAgICAhZXhwYW5kZWRDZWxscy5zaXplKSk7XG4gICAgICAgICAgZWxzZSB2aWV3TW9kZVxuICAgICAgICBcIlxuICAgICAgPlxuXG4gICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5jZWxsRWRpdG9yOyBlbHNlIGJ1aWx0SW5FZGl0b3JzXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICBbY2VsbEVkaXRvcl09XCJjb2wuY2VsbEVkaXRvclwiXG4gICAgICAgICAgICAgICAgW3Jvd0RhdGFdPVwicm93XCJcbiAgICAgICAgICAgICAgICBbY29sRGF0YV09XCJjb2xcIlxuICAgICAgICAgICAgICAgIFtjZWxsVmFsdWVdPVwiZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpXCJcbiAgICAgICAgICAgICAgICAoZWRpdG9yRXZlbnQpPVwiZmluaXNoRWRpdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLXRlbXBsYXRlICNidWlsdEluRWRpdG9ycz5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29sPy50eXBlXCI+XG4gICAgICAgICAgPCEtLSBUZXh0IElucHV0IC0tPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHQgLSAxMFwiXG4gICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2lucHV0J1wiXG4gICAgICAgICAgICAjZGF0ZUlucHV0PVwibmdNb2RlbFwiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZClcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJkaXNhYmxlRWRpdChyb3csIGNvbCwgZGF0ZUlucHV0KVwiXG4gICAgICAgICAgICAoYmx1cik9XCJkaXNhYmxlRWRpdChyb3csIGNvbClcIlxuICAgICAgICAgICAgYXV0b2ZvY3VzXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJibHVySW5wdXQoJGV2ZW50LCByb3csIGNvbClcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2lzLWludmFsaWQnOiBkYXRlSW5wdXQuaW52YWxpZCB8fCAhaXNWYWx1ZVZhbGlkKHJvdywgY29sLCBkYXRlSW5wdXQpXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAvPlxuXG4gICAgICAgICAgPCEtLSBOdW1iZXIgSW5wdXQgLS0+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodCAtIDhcIlxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCJcbiAgICAgICAgICAgICNudW1iZXJJbnB1dD1cIm5nTW9kZWxcIlxuICAgICAgICAgICAgI251bWJlclJlZlxuICAgICAgICAgICAgKGtleXByZXNzKT1cImFsbG93T25seU51bWJlcnMoJGV2ZW50KVwiXG4gICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cImdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpXCJcbiAgICAgICAgICAgIChibHVyKT1cImRpc2FibGVFZGl0KHJvdywgY29sLCBudW1iZXJJbnB1dClcIlxuICAgICAgICAgICAgYXV0b2ZvY3VzXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJibHVySW5wdXQoJGV2ZW50LCByb3csIGNvbClcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2lzLWludmFsaWQnOiBudW1iZXJJbnB1dC5pbnZhbGlkIHx8ICFpc1ZhbHVlVmFsaWQocm93LCBjb2wsIG51bWJlcklucHV0KVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgLz5cblxuICAgICAgICAgIDwhLS0gRGF0ZSBJbnB1dCAtLT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicm93SGVpZ2h0IC0gOFwiXG4gICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGUnXCJcbiAgICAgICAgICAgIHR5cGU9XCJkYXRlXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cImdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpXCJcbiAgICAgICAgICAgIChibHVyKT1cImRpc2FibGVFZGl0KHJvdywgY29sLCBkYXRlSW5wdXQpXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImRpc2FibGVFZGl0KHJvdywgY29sLCBkYXRlSW5wdXQpXCJcbiAgICAgICAgICAgIGF1dG9mb2N1c1xuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgICAgICNkYXRlSW5wdXQ9XCJuZ01vZGVsXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImJsdXJJbnB1dCgkZXZlbnQsIHJvdywgY29sKVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogZGF0ZUlucHV0LmludmFsaWQgfHwgIWlzVmFsdWVWYWxpZChyb3csIGNvbCwgZGF0ZUlucHV0KVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTtcIlxuICAgICAgICAgIC8+XG5cbiAgICAgICAgICA8IS0tIEltYWdlIFVwbG9hZCAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInaW1hZ2UnXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICBhY2NlcHQ9XCJpbWFnZS8qXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHQgLSA4XCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkltYWdlQ2hhbmdlKCRldmVudCwgcm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICBoaWRkZW5cbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgKm5nSWY9XCJnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZClcIlxuICAgICAgICAgICAgICBbc3JjXT1cImdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKVwiXG4gICAgICAgICAgICAgIGFsdD1cInByZXZpZXdcIlxuICAgICAgICAgICAgICB3aWR0aD1cIjMyXCJcbiAgICAgICAgICAgICAgaGVpZ2h0PVwiMzJcIlxuICAgICAgICAgICAgICBzdHlsZT1cIm9iamVjdC1maXQ6IGNvdmVyOyBib3JkZXItcmFkaXVzOiA0cHhcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gRHJvcGRvd24gLS0+XG4gICAgICAgICAgPCEtLSBuZy1zZWxlY3QgbGlrZSBkcm9wZG93biAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2Ryb3Bkb3duJ1wiXG4gICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duIHctMTAwXCJcbiAgICAgICAgICAgIChibHVyKT1cImRpc2FibGVFZGl0KHJvdywgY29sKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPCEtLSBUcmlnZ2VyIC0tPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtIHRleHQtc3RhcnQgdy0xMDAgdGV4dC1lbGxpcHNpc1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW3N0eWxlLm1pbkhlaWdodC5weF09XCJyb3dIZWlnaHQgLSAxMFwiXG4gICAgICAgICAgICAgIGRhdGEtYnMtZGlzcGxheT1cInN0YXRpY1wiXG4gICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpPy52YWx1ZSB8fFxuICAgICAgICAgICAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCk/Lm5hbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcGxhY2Vob2xkZXI+IFNlbGVjdCBvcHRpb25zLi4uIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPCEtLSBNZW51IC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLW1lbnUgdy0xMDAgcC0wIGNlbGwtZWRpdGluZy1kcm9wZG93bi1tZW51IHJvdW5kZWQtM1wiXG4gICAgICAgICAgICAgIFtjbGFzcy5zaG93XT1cImlzRWRpdGluZyhyb3csIGNvbClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8IS0tIFNlYXJjaCAtLT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHktMSBlZGl0aW5nLWRyb3Bkb3duLXNlYXJjaC1pbnB1dFwiICpuZ0lmPVwiY29sPy5jb2x1bW5fZHJvcGRvd25fdmFsdWU/Lmxlbmd0aCA+IDVcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVkaXRpbkRyb3Bkb3duU2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCBcbiAgICAgICAgICAgICAgICBpdGVtU2l6ZT1cIjM1XCIgXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi12aWV3cG9ydFwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDEyMHB4XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoY29sLmNvbHVtbl9kcm9wZG93bl92YWx1ZSB8IGZpbHRlcjogZWRpdGluRHJvcGRvd25TZWFyY2ggOiAndmFsdWUnKSBhcyBmaWx0ZXJlZE9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgIDwhLS0gRHJvcGRvd24gSXRlbXMgLS0+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICpjZGtWaXJ0dWFsRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpID09IG9wdGlvbj8udmFsdWUgfHwgZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpID09IG9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHgtMiBweS0xIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZHJvcGRvd24taXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXROZXN0ZWRWYWx1ZShyb3csIGNvbCwgb3B0aW9uLCB0cnVlKTsgZWRpdGluZ0tleSA9IG51bGxcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0wIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZm9yXT1cImNvbC5maWVsZCArICctJyArIChvcHRpb24udmFsdWUgfHwgb3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24udmFsdWUgfHwgb3B0aW9uIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPCEtLSBTaG93IHdoZW4gbm8gZmlsdGVyZWQgcmVzdWx0cyAtLT5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIiFmaWx0ZXJlZE9wdGlvbnM/Lmxlbmd0aFwiIGNsYXNzPVwicHgtMiBweS0xIGQtYmxvY2sgdGV4dC1jZW50ZXJcIj5ObyBSZWNvcmQgRm91bmQ8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8IS0tIEZvciBBcnJheSB0eXBlIHZhbHVlcyAtLT5cblxuICAgICAgICAgIDwhLS0gTVVMVEkgU0VMRUNUIChBUlJBWSkgLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidhcnJheSdcIlxuICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93biB3LTEwMFwiXG4gICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgKGJsdXIpPVwib25BcnJheUJsdXIocm93LCBjb2wpXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImNvbW1pdEFycmF5KHJvdywgY29sKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPCEtLSBUcmlnZ2VyIC0tPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbSB0ZXh0LXN0YXJ0IHctMTAwIHRleHQtZWxsaXBzaXNcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCJcbiAgICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICBbc3R5bGUubWluSGVpZ2h0LnB4XT1cInJvd0hlaWdodCAtIDEwXCJcbiAgICAgICAgICAgIGRhdGEtYnMtZGlzcGxheT1cInN0YXRpY1wiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRBcnJheVRlbXAocm93LCBjb2wpLmxlbmd0aDsgZWxzZSBhcnJheVBsYWNlaG9sZGVyXCI+XG4gICAgICAgICAgICAgICAgICB7eyBkaXNwbGF5QXJyYXlMYWJlbHMocm93LCBjb2wpIH19XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cblxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2FycmF5UGxhY2Vob2xkZXI+XG4gICAgICAgICAgICAgICAgU2VsZWN0IG9wdGlvbnMuLi5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8IS0tIE1lbnUgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudSB3LTEwMCBwLTAgY2VsbC1lZGl0aW5nLWRyb3Bkb3duLW1lbnUgcm91bmRlZC0zXCIgW2NsYXNzLmludmlzaWJsZV09XCIhbWVudVJlYWR5XCIgW2NsYXNzLnNob3ddPVwiaXNFZGl0aW5nKHJvdywgY29sKVwiPlxuICAgICAgICAgICAgICA8IS0tIFNlYXJjaCAtLT5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbD8uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlPy5sZW5ndGggPiA1XCIgY2xhc3M9XCJweC0yIHB5LTEgYXJyYXktc2VhcmNoLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIlxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlZGl0aW5Ecm9wZG93blNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPCEtLSBPcHRpb25zIC0tPlxuICAgICAgICAgICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IGl0ZW1TaXplPVwiMzVcIiBzdHlsZT1cImhlaWdodDogMTIwcHhcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGNvbC5jb2x1bW5fZHJvcGRvd25fdmFsdWUgfCBmaWx0ZXI6IGVkaXRpbkRyb3Bkb3duU2VhcmNoIDogJ3ZhbHVlJykgYXMgZmlsdGVyZWRPcHRpb25zXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICpjZGtWaXJ0dWFsRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcHgtMiBweS0xIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgbS0wIG1lLTJcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQXJyYXlTZWxlY3RlZChyb3csIGNvbCwgb3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVBcnJheVRlbXAocm93LCBjb2wsIG9wdGlvbik7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgY29tbWl0QXJyYXkocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxNnB4OyBoZWlnaHQ6IDE2cHg7IG1heC13aWR0aDogMTZweDsgbWF4LWhlaWdodDogMTZweFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbj8udmFsdWUgfHwgb3B0aW9uIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPCEtLSBTaG93IHdoZW4gZmlsdGVyZWQgbGlzdCBpcyBlbXB0eSAtLT5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIiFmaWx0ZXJlZE9wdGlvbnM/Lmxlbmd0aFwiIGNsYXNzPVwicHgtMiBweS0xIGQtYmxvY2sgdGV4dC1jZW50ZXJcIj5ObyBSZWNvcmQgRm91bmQ8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG5cblxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidlbWFpbCdcIlxuICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHQgLSAxMFwiXG4gICAgICAgICAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cInJvd0hlaWdodCAtIDEwXCJcbiAgICAgICAgICAgICNlbWFpbE1vZGVsPVwibmdNb2RlbFwiXG4gICAgICAgICAgICAjZW1haWxJbnB1dFxuICAgICAgICAgICAgdHlwZT1cImVtYWlsXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cImdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpXCJcbiAgICAgICAgICAgIG5hbWU9XCJ7eyBjb2wuZmllbGQgfX1cIlxuICAgICAgICAgICAgcGF0dGVybj1cIl5bYS16QS1aMC05Ll8lKy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsfSRcIlxuICAgICAgICAgICAgKGJsdXIpPVwiZGlzYWJsZUVkaXQocm93LCBjb2wsIGVtYWlsTW9kZWwpXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImJsdXJJbnB1dCgkZXZlbnQsIHJvdywgY29sKVwiXG4gICAgICAgICAgICBhdXRvZm9jdXNcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogZW1haWxNb2RlbC5pbnZhbGlkIHx8ICFpc1ZhbHVlVmFsaWQocm93LCBjb2wsIGVtYWlsTW9kZWwpXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDwhLS0gRGVmYXVsdCBmYWxsYmFjayAtLT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICpuZ1N3aXRjaERlZmF1bHRcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicm93SGVpZ2h0IC0gMTBcIlxuICAgICAgICAgICAgW3N0eWxlLm1heEhlaWdodC5weF09XCJyb3dIZWlnaHQgLSAxMFwiXG4gICAgICAgICAgICAjdGV4dE1vZGVsPVwibmdNb2RlbFwiXG4gICAgICAgICAgICAjdGV4dElucHV0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJibHVySW5wdXQoJGV2ZW50LCByb3csIGNvbClcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwiZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZClcIlxuICAgICAgICAgICAgbmFtZT1cInt7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAoYmx1cik9XCJkaXNhYmxlRWRpdChyb3csIGNvbCwgdGV4dE1vZGVsKVwiXG4gICAgICAgICAgICBhdXRvZm9jdXNcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogdGV4dE1vZGVsLmludmFsaWQgfHwgIWlzVmFsdWVWYWxpZChyb3csIGNvbCwgdGV4dE1vZGVsKVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBEaXNwbGF5IG1vZGUgLS0+XG4gICAgICA8bmctdGVtcGxhdGUgI3ZpZXdNb2RlPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIHctMTAwIG92ZXJmbG93LWhpZGRlblwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzZXMoY29sLCBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCkpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDwhLS0gRmllbGQgaWNvbiAoZm9yIFRhc2tzIGdyaWQpIC0tPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwiZ3JpZFR5cGUgPT09ICdUYXNrcycgJiYgaWNvbk1hcFtjb2wuZmllbGRdICYmICFpc1RvdGFsUm93XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyIG1lLTJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiaWNvbk1hcFtjb2wuZmllbGRdKHJvdywgY29sKVwiXG4gICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPCEtLSDinIUgQ3VzdG9tIGNlbGwgcmVuZGVyZXIgc3VwcG9ydCAtLT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmNlbGxSZW5kZXJlciAmJiAhaXNUb3RhbFJvdzsgZWxzZSBkZWZhdWx0Q2VsbFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICBbY2VsbFJlbmRlckluaXRdPVwiY29sLmNlbGxSZW5kZXJlclwiXG4gICAgICAgICAgICAgIFtyb3dEYXRhXT1cInJvd1wiXG4gICAgICAgICAgICAgIFtjb2xEYXRhXT1cImNvbFwiXG4gICAgICAgICAgICAgIFtjZWxsVmFsdWVdPVwiZ2V0TmVzdGVkVmFsdWUocm93LCBjb2w/LmZpZWxkKVwiXG4gICAgICAgICAgICAgIChjZWxsRXZlbnQpPVwib25DZWxsRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDwhLS0g8J+nviBEZWZhdWx0IHRleHQtYmFzZWQgY2VsbCByZW5kZXJpbmcgLS0+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q2VsbD5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgI2NlbGxUZXh0XG4gICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1lbGxpcHNpcyBmbGV4LWdyb3ctMVwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCJnZXRDZWxsVGl0bGUocm93LCBjb2wpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPCEtLSBOb3JtYWwgY2VsbCAtLT5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICBjb2w/LnR5cGUgIT09ICdpbWFnZScgJiZcbiAgICAgICAgICAgICAgICAgIGNvbD8uZmllbGQgIT0gJ2ltYWdlJyAmJlxuICAgICAgICAgICAgICAgICAgY29sPy5maWVsZCAhPSAnaW52b2ljZS5pbnZvaWNlX2ltYWdlJyAmJlxuICAgICAgICAgICAgICAgICAgIWlzVG90YWxSb3dcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5pc19hbW91bnRcIj57e1xuICAgICAgICAgICAgICAgICAgY3VycmVuY3lTeW1ib2xcbiAgICAgICAgICAgICAgICB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIHt7Z2V0Q2VsbFRpdGxlKHJvdywgY29sKX19XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDwhLS0gVG90YWwgcm93IC0tPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNUb3RhbFJvd1wiPlxuICAgICAgICAgICAgICAgIHt7IGdldFRvdGFsQW1vdW50KGNvbCkgfX1cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPCEtLSBJbnZvaWNlIEltYWdlIC0tPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmZpZWxkID09ICdpbnZvaWNlLmludm9pY2VfaW1hZ2UnXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IHpvb206IDAuN1wiPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCkgfHwgJ0F0dGFjaG1lbnQnIH19XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkQXR0Y2htZW50KGdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKSlcIlxuICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAgICAgICAgICAgICAgICdkYXRhLWdyaWQvZG9jdW1lbnQtaWNvbnMvJyArXG4gICAgICAgICAgICAgICAgICAgICAgZ2V0RXh0ZW50aW9uKGdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKSkgK1xuICAgICAgICAgICAgICAgICAgICAgICcuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPCEtLSBJbWFnZSBjZWxsIC0tPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy50eXBlID09ICdpbWFnZScgJiYgIWlzVG90YWxSb3dcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0SW1hZ2VQbGFjZWhvbGRlcjtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyByb3c6IHJvdywgY29sOiBjb2wgfVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgKCFjb2w/LmNlbGxSZW5kZXJlciAmJiBzaG93Q2VsbERldGFpbHNCb3ggJiZcbiAgICAgICAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCk/Lmxlbmd0aCA+IDUwICYmIGNvbD8udHlwZSAhPT0gJ2ltYWdlJykgfHxcbiAgICAgICAgICAgICAgKGlzTmVzdGVkVmFsdWVBcnJheShyb3csIGNvbC5maWVsZCkgJiZcbiAgICAgICAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCk/Lmxlbmd0aCA+IDEpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJ0b2dnbGUtaWNvbiBkYXRhLWdyaWQtc3ZnLWljb24gbXMtMiBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICBpc0V4cGFuZGVkKHJvdywgY29sKVxuICAgICAgICAgICAgICAgID8gc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1kb3duLnN2ZydcbiAgICAgICAgICAgICAgICA6IHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZXZyb24tcmlnaHQuc3ZnJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICB0b2dnbGVFeHBhbmRPZkxvbmdDZWxsVGV4dChyb3csIGNvbCwgY29sdW1ucywgZmFsc2UpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKGRibGNsaWNrKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8IS0tIEV4cGFuZCAvIENvbGxhcHNlIGljb24gLS0+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gRXhwYW5kZWQgdGV4dCAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgdy0xMDAgZXhwYW5kZWQtYm94XCJcbiAgICAgICAgICAqbmdJZj1cImlzRXhwYW5kZWQocm93LCBjb2wpXCJcbiAgICAgICAgICBbc3R5bGUuekluZGV4XT1cImdldFpJbmRleChyb3csIGNvbClcIlxuICAgICAgICAgIHN0eWxlPVwidG9wOiAxMDAlOyBsZWZ0OiAwXCJcbiAgICAgICAgICBbYXR0ci5pZF09XCIocm93LmlkIHx8IHJvdy5faWQpICsgJy0nICsgKGNvbC5pZCB8fCBjb2wuX2lkKVwiXG4gICAgICAgICAgW2NsYXNzLmludmlzaWJsZV09XCIhc2hvd0RldGFpbHNCb3hcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgZnVsbFRleHRUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgICAgICAgIGNvbDogY29sLFxuICAgICAgICAgICAgICAgIGlzQXJyYXk6IGlzTmVzdGVkVmFsdWVBcnJheShyb3csIGNvbC5maWVsZClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIEhlYWRlcnMgQWN0aW9uIExpc3QgT24gY2xpY2tpbmcgdGhyZWUgZG90cyAtLT5cblxuPG5nLXRlbXBsYXRlXG4gICNjb2x1bW5NZW51XG4gIGxldC1jb2w9XCJjb2xcIlxuICBsZXQtaXNOZXN0ZWRUYWJsZT1cImlzTmVzdGVkVGFibGVcIlxuICBsZXQtY29sdW1ucz1cImNvbHVtbnNcIlxuICBsZXQtc2VjdGlvbj1cInNlY3Rpb25cIlxuICBsZXQtY29sdW1uSW5kZXg9XCJjb2x1bW5JbmRleFwiXG4gIGxldC1jaGlsZENvbEluZGV4PVwiY2hpbGRDb2xJbmRleFwiXG4+XG4gIDxkaXZcbiAgICBjbGFzcz1cImNvbHVtbi1tZW51IHRocmVlLWRvdHMtY29sLW1lbnVcIlxuICAgIFtjbGFzcy52aXN1YWxseS1oaWRkZW5dPVwiaXNNZW51ZUhpZGRlblwiXG4gICAgKm5nSWY9XCJhY3RpdmVDb2wgJiYgIWlzVGhyZWVEb3RzRmlsdGVyT3BlblwiXG4gICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJkcm9wZG93bnNCYWNrZ3JvdW5kQ29sb3JcIlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgIFtzdHlsZS5jb2xvcl09XCJoZWFkZXJUZXh0Q29sb3JcIlxuICA+XG4gICAgPCEtLSBTb3J0IEFzY2VuZGluZyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLWJlbG93IHBiLTJcIiBbY2xhc3MuZGlzYWJsZS1zb3J0aW5nXT1cIiFjb2wuaXNfc29ydGFibGVcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwibXV0ZWQtdGV4dCBmcy03XCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTJweFwiPlNvcnQ8L3NwYW4+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgY29sdW1uVGhyZWVkb3RzTXVudUNvbmZpZz8uc2hvd0FzY2VuZGluZyAmJlxuICAgICAgICAgIChzb3J0aW5nQ29uZmlnPy5maWVsZCAhPSBjb2wuZmllbGQgfHxcbiAgICAgICAgICAgIHNvcnRpbmdDb25maWc/Lm9yZGVyX2J5ID09ICdkZXNjJylcbiAgICAgICAgXCJcbiAgICAgICAgY2xhc3M9XCJjb2x1bW4tbWVudS1pdGVtXCJcbiAgICAgICAgKGNsaWNrKT1cInNvcnRBc2MoYWN0aXZlQ29sKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvdy11cC5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgU29ydCBBc2NlbmRpbmdcbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFNvcnQgRGVzY2VuZGluZyAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBjb2x1bW5UaHJlZWRvdHNNdW51Q29uZmlnPy5zaG93RGVzY2VuZGluZyAmJlxuICAgICAgICAgIChzb3J0aW5nQ29uZmlnPy5maWVsZCAhPSBjb2wuZmllbGQgfHxcbiAgICAgICAgICAgIHNvcnRpbmdDb25maWc/Lm9yZGVyX2J5ID09ICdhc2MnKVxuICAgICAgICBcIlxuICAgICAgICBjbGFzcz1cImNvbHVtbi1tZW51LWl0ZW1cIlxuICAgICAgICAoY2xpY2spPVwic29ydERlc2MoYWN0aXZlQ29sKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvdy1kb3duLnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgICBTb3J0IERlc2NlbmRpbmdcbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgc29ydGluZ0NvbmZpZz8uZmllbGQgPT09IGNvbC5maWVsZCAmJlxuICAgICAgICAgIChzb3J0aW5nQ29uZmlnPy5vcmRlcl9ieSA9PT0gJ2FzYycgfHxcbiAgICAgICAgICAgIHNvcnRpbmdDb25maWc/Lm9yZGVyX2J5ID09PSAnZGVzYycpXG4gICAgICAgIFwiXG4gICAgICAgIGNsYXNzPVwiY29sdW1uLW1lbnUtaXRlbVwiXG4gICAgICAgIChjbGljayk9XCJyZXNldFNvcnQoYWN0aXZlQ29sKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Fycm93LWNvdW50ZXJjbG9ja3dpc2Uuc3ZnJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICAgIFJlc2V0IFNvcnRcbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJweS0yIGJvcmRlci1iZWxvdyB0aHJlZS1kb3RzLWZpbHRlclwiIFtjbGFzcy5kaXNhYmxlLXNvcnRpbmddPVwiY29sPy50eXBlID09ICdpbWFnZScgfHwgIWNvbC5pc19zZWFyY2hfYWJsZVwiPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cImNvbHVtblRocmVlZG90c011bnVDb25maWc/LnNob3dGaWx0ZXJcIlxuICAgICAgICBjbGFzcz1cImNvbHVtbi1tZW51LWl0ZW0gdGhyZWUtZG90cy1maWx0ZXJcIlxuICAgICAgICAoY2xpY2spPVwib3BlbkZpbHRlcm9uVGhyZWVEb3RzQ2xpY2soY29sKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9maWx0ZXItMi5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgRmlsdGVyXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJweS0yIGJvcmRlci1iZWxvd1wiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtdXRlZC10ZXh0IGZzLTdcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMnB4XCI+UGluPC9zcGFuPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cImNvbHVtblRocmVlZG90c011bnVDb25maWc/LnNob3dQaW5sZWZ0ICYmIGNvbD8ucGlubmVkICE9PSAnbGVmdCdcIlxuICAgICAgICBjbGFzcz1cImNvbHVtbi1tZW51LWl0ZW1cIlxuICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHVwZGF0ZUNvbHVtblBpbkluU291cmNlQnlGaWVsZChcbiAgICAgICAgICAgIGFjdGl2ZUNvbCxcbiAgICAgICAgICAgICdsZWZ0JyxcbiAgICAgICAgICAgIGlzTmVzdGVkVGFibGUsXG4gICAgICAgICAgICBjb2x1bW5zXG4gICAgICAgICAgKVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvcGluLWxlZnQuc3ZnJ1wiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgID48L3NwYW5cbiAgICAgICAgPlBpbiBMZWZ0XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIGNvbHVtblRocmVlZG90c011bnVDb25maWc/LnNob3dQaW5yaWdodCAmJiBjb2w/LnBpbm5lZCAhPT0gJ3JpZ2h0J1xuICAgICAgICBcIlxuICAgICAgICBjbGFzcz1cImNvbHVtbi1tZW51LWl0ZW1cIlxuICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHVwZGF0ZUNvbHVtblBpbkluU291cmNlQnlGaWVsZChcbiAgICAgICAgICAgIGFjdGl2ZUNvbCxcbiAgICAgICAgICAgICdyaWdodCcsXG4gICAgICAgICAgICBpc05lc3RlZFRhYmxlLFxuICAgICAgICAgICAgY29sdW1uc1xuICAgICAgICAgIClcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3Bpbi1yaWdodC5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgID48L3NwYW5cbiAgICAgICAgPlBpbiBSaWdodFxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJjb2w/LnBpbm5lZFwiXG4gICAgICAgIGNsYXNzPVwiY29sdW1uLW1lbnUtaXRlbVwiXG4gICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgdXBkYXRlQ29sdW1uUGluSW5Tb3VyY2VCeUZpZWxkKFxuICAgICAgICAgICAgYWN0aXZlQ29sLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIGlzTmVzdGVkVGFibGUsXG4gICAgICAgICAgICBjb2x1bW5zXG4gICAgICAgICAgKVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9sYXlvdXQtdGhyZWUtY29sdW1ucy5zdmcnXG4gICAgICAgICAgXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgICAgPjwvc3BhblxuICAgICAgICA+VW5waW5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJjb2x1bW5UaHJlZWRvdHNNdW51Q29uZmlnPy5zaG93QXV0b3NpemVUaGlzQ29sdW1uXCJcbiAgICAgIGNsYXNzPVwiY29sdW1uLW1lbnUtaXRlbVwiXG4gICAgICAoY2xpY2spPVwiYXV0b3NpemVDb2x1bW4oYWN0aXZlQ29sKVwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvd3MtZXhwYW5kLXZlcnRpY2FsLnN2ZydcbiAgICAgICAgXCJcbiAgICAgICAgY2xhc3M9XCJtZS0yXCJcbiAgICAgID48L3NwYW4+XG4gICAgICBBdXRvc2l6ZSBUaGlzIENvbHVtblxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBBdXRvc2l6ZSBBbGwgQ29sdW1ucyAtLT5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cImNvbHVtblRocmVlZG90c011bnVDb25maWc/LnNob3dBdXRvc2l6ZUFsbENvbHVtbnNcIlxuICAgICAgY2xhc3M9XCJjb2x1bW4tbWVudS1pdGVtXCJcbiAgICAgIChjbGljayk9XCJhdXRvc2l6ZUFsbENvbHVtbnMoKVwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvd3MtYW5nbGUtZXhwYW5kLnN2ZydcbiAgICAgICAgXCJcbiAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICA+PC9zcGFuXG4gICAgICA+QXV0b3NpemUgQWxsIENvbHVtbnNcbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gR3JvdXAgQnkgLS0+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJzaG93Um93c0dyb3VwaW5nXCJcbiAgICAgIGNsYXNzPVwiY29sdW1uLW1lbnUtaXRlbVwiXG4gICAgICAoY2xpY2spPVwiZ3JvdXBCeShhY3RpdmVDb2wpXCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlLXNvcnRpbmddPVwiIWNvbC5pc19ncm91cGFibGVcIlxuICAgID5cbiAgICAgIDxzcGFuXG4gICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZGlhZ3JhbS0zLnN2ZydcIlxuICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgID48L3NwYW4+XG4gICAgICBHcm91cCBieSB7eyBjb2wuaGVhZGVyIH19XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIENob29zZSBDb2x1bW5zIC0tPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwiY29sdW1uVGhyZWVkb3RzTXVudUNvbmZpZz8uc2hvd0Nob3NlQ29sdW1uc1wiXG4gICAgICBjbGFzcz1cImNvbHVtbi1tZW51LWl0ZW1cIlxuICAgICAgKGNsaWNrKT1cImNob29zZUNvbHVtbnMoKVwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy91aS1jaGVja3MtZ3JpZC5zdmcnXCJcbiAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICA+PC9zcGFuPlxuICAgICAgQ2hvb3NlIENvbHVtbnNcbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUmVzZXQgQ29sdW1ucyAtLT5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cImNvbHVtblRocmVlZG90c011bnVDb25maWc/LnNob3dSZXNldENvbHVtbnNcIlxuICAgICAgY2xhc3M9XCJjb2x1bW4tbWVudS1pdGVtXCJcbiAgICAgIChjbGljayk9XCJyZXNldENvbHVtbnMoKVwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvdy1jb3VudGVyY2xvY2t3aXNlLnN2ZydcbiAgICAgICAgXCJcbiAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICA+PC9zcGFuXG4gICAgICA+UmVzZXQgQ29sdW1uc1xuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIEBzbGlkZVRvZ2dsZVxuICAgICpuZ0lmPVwiaXNUaHJlZURvdHNGaWx0ZXJPcGVuICYmIGNvbD8uaXNfc2VhcmNoX2FibGVcIlxuICAgIGNsYXNzPVwidGhyZWUtZG90cy1jb2wtbWVudSBwb3NpdGlvbi1yZWxhdGl2ZVwiXG4gICAgW3N0eWxlLnJpZ2h0LnB4XT1cImdldER5bmFtaWNSaWdodChjb2wsIHNlY3Rpb24sIGNvbHVtbkluZGV4LCBjaGlsZENvbEluZGV4KVwiXG4gICAgW2NsYXNzLnZpc3VhbGx5LWhpZGRlbl09XCJpc01lbnVlSGlkZGVuXCJcbiAgPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy5maWx0ZXJSZW5kZXJlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItbWVudS1jb250YWluZXIgZmlsdGVyLW1lbnUgcC0wXCIgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJkcm9wZG93bnNCYWNrZ3JvdW5kQ29sb3JcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgW2NlbGxSZW5kZXJJbml0XT1cImNvbC5maWx0ZXJSZW5kZXJlclwiXG4gICAgICAgICAgICAgIFtjb2xEYXRhXT1cImNvbFwiXG4gICAgICAgICAgICAgIChjZWxsRXZlbnQpPVwib25DZWxsRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtjb250ZXh0XT1cImdyaWRDb250ZXh0XCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbD8uZmlsdGVyUmVuZGVyZXJcIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlck1lbnU7IGNvbnRleHQ6IHsgY29sOiBjb2wgfVwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gRmlsdGVyIE1lbnVlIC0tPlxuPG5nLXRlbXBsYXRlICNmaWx0ZXJNZW51IGxldC1jb2w9XCJjb2xcIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZmlsdGVyLW1lbnUtY29udGFpbmVyIGZpbHRlci1tZW51XCJcbiAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImRyb3Bkb3duc0JhY2tncm91bmRDb2xvclwiXG4gICAgKm5nSWY9XCIhY29sPy5maWx0ZXJSZW5kZXJlclwiXG4gID5cbiAgICA8IS0tIERyb3Bkb3duIFR5cGUgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbD8udHlwZSA9PT0gJ2Ryb3Bkb3duJyB8fCBjb2w/LnR5cGUgPT09ICdhcnJheSc7IGVsc2UgdGV4dEZpbHRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1kcm9wZG93bi1zZWN0aW9uIHAtMVwiPlxuXG4gICAgPCEtLSBTZWFyY2ggaW5wdXQgLS0+XG4gICAgPGlucHV0XG4gICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIlxuICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICBbKG5nTW9kZWwpXT1cImFkZEZpbHRlckNvbHVtbklucHV0XCJcbiAgICAvPlxuXG4gICAgPCEtLSBGaWx0ZXIgKyBSZXN1bHQgSGFuZGxpbmcgLS0+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgKHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy5jb2x1bW5fZHJvcGRvd25fdmFsdWVcbiAgICAgICAgICB8IGZpbHRlciA6IGFkZEZpbHRlckNvbHVtbklucHV0IDogJ3ZhbHVlJykgYXMgZmlsdGVyZWRPcHRpb25zXG4gICAgICBcIlxuICAgID5cbiA8IS0tIENoZWNrIGlmIGNvbHVtbl9kcm9wZG93bl92YWx1ZSBleGlzdHMgYW5kIGhhcyBkYXRhIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LmNvbHVtbl9kcm9wZG93bl92YWx1ZT8ubGVuZ3RoOyBlbHNlIG5vRHJvcGRvd25EYXRhXCI+XG4gICAgICA8IS0tIERBVEEgRk9VTkQgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyZWRPcHRpb25zLmxlbmd0aDsgZWxzZSBub0RhdGFGb3VuZFwiPlxuXG4gICAgICAgIDwhLS0gU2VsZWN0IEFsbCAob25seSB3aGVuIGRhdGEgZXhpc3RzKSAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWItMSBtdC0yIG1zLTEgc2VsZWN0LWFsbC1maWx0ZXJcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJcbiAgICAgICAgICAgICAgICAoY3VycmVudEZpbHRlclNlbGVjdGVkSWRzPy5zaXplID8/IDApID09PVxuICAgICAgICAgICAgICAgIChzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlPy5sZW5ndGggPz8gMClcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiXG4gICAgICAgICAgICAgICAgKGN1cnJlbnRGaWx0ZXJTZWxlY3RlZElkcz8uc2l6ZSA/PyAwKSA+IDAgJiZcbiAgICAgICAgICAgICAgICAoY3VycmVudEZpbHRlclNlbGVjdGVkSWRzPy5zaXplID8/IDApIDxcbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LmNvbHVtbl9kcm9wZG93bl92YWx1ZT8ubGVuZ3RoID8/IDApXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsU2lkZUZpbHRlcnMoY29sLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgaWQ9XCJzZWxlY3RBbGxfe3sgY29sLmZpZWxkIH19XCJcbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwic2VsZWN0QWxsX3t7IGNvbC5maWVsZCB9fVwiPlxuICAgICAgICAgICAgU2VsZWN0IEFsbFxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gVmlydHVhbCBTY3JvbGwgLS0+XG4gICAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnRcbiAgICAgICAgICBpdGVtU2l6ZT1cIjMyXCJcbiAgICAgICAgICBjbGFzcz1cImZpbHRlci12aWV3cG9ydFwiXG4gICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDEyMHB4XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjayBtYi0xIG1zLTFcIlxuICAgICAgICAgICAgKmNka1ZpcnR1YWxGb3I9XCJsZXQgb3B0aW9uIG9mIGZpbHRlcmVkT3B0aW9uczsgdHJhY2tCeTogdHJhY2tCeUlkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgW2lkXT1cIm9wdGlvbj8uaWQgPz8gb3B0aW9uPy5faWQgPz8gb3B0aW9uXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiXG4gICAgICAgICAgICAgICAgY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmhhcyhvcHRpb24/LmlkID8/IG9wdGlvbj8uX2lkID8/IG9wdGlvbilcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVTZWxlY3Rpb25JbkZpbHRlcihvcHRpb24pXCJcbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgZnctc2VtaWJvbGRcIlxuICAgICAgICAgICAgICBbZm9yXT1cIm9wdGlvbj8uaWQgPz8gb3B0aW9uPy5faWQgPz8gb3B0aW9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgKG9wdGlvbj8udmFsdWUgPz8gb3B0aW9uPy5uYW1lID8/IG9wdGlvbikgfCB0aXRsZWNhc2UgfX1cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuXG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBOTyBEQVRBIEZPVU5EIC0tPlxuICAgICAgPG5nLXRlbXBsYXRlICNub0RhdGFGb3VuZD5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwidGV4dC1jZW50ZXIgdGV4dC1tdXRlZCBtdC0yXCJcbiAgICAgICAgICAqbmdJZj1cImFkZEZpbHRlckNvbHVtbklucHV0XCJcbiAgICAgICAgPlxuICAgICAgICAgIE5vIFJlY29yZCBGb3VuZFxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBOTyBEUk9QRE9XTiBEQVRBIEFWQUlMQUJMRSAtLT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNub0Ryb3Bkb3duRGF0YT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgdGV4dC1tdXRlZCBtdC0zIG1iLTNcIj5cbiAgICAgICAgICAgICBObyBSZWNvcmQgRm91bmRcbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cblxuXG4gICAgPCEtLSBUZXh0IEZpbHRlciBTZWN0aW9uIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSAjdGV4dEZpbHRlcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItdGV4dC1zZWN0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTJcIj5cbiAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtIGN1c3RvbS1zZWxlY3RcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaXJzdENvbmRpdGlvblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdzdHJpbmcnXCI+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJjb250YWluXCI+Q29udGFpbnM8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImRvZXNfbm90X2NvbnRhaW5cIj5Eb2VzIE5vdCBDb250YWluPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFsczwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYmVmb3JlXCI+U3RhcnRzIFdpdGg8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+RW5kcyBXaXRoPC9vcHRpb24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdkYXRlJyB8fCBzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAndGltZSdcIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzIFRvPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJub3RfZXF1YWxcIj5Ob3QgRXF1YWw8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+QWZ0ZXI8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPkJlZm9yZTwvb3B0aW9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ251bWJlcidcIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzIFRvPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5MZXNzIFRoZW4gPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhZnRlclwiPkdyZWF0ZXIgVGhlbiA8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImxlc3NfdGhlbl9lcXVhbFwiPmxlc3MgdGhlbiBFcXVhbCB0bzwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZ3JlYXRlcl90aGVuX2VxdWFsXCI+R3JlYXRlciB0aGVuIEVxdWFsIHRvIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIFt0eXBlXT1cImNvbD8udHlwZSA9PSAnc3RyaW5nJyA/ICd0ZXh0JyA6IGNvbD8udHlwZVwiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIG1iLTNcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVmFsdWVcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiZmlyc3RWYWx1ZVwiXG4gICAgICAgICAgI2ZpbHRlck1lbnVlVGV4dGNoSW5wdXRcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJhcHBseURyb3Bkb3duRmlsdGVyKClcIlxuICAgICAgICAvPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTMgZC1mbGV4IGZsZXgtcm93XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2staW5saW5lIG0tMCBjb2wtNCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGZpbHRlci1yYWRpby1pbnB1dHNcIlxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBuYW1lPVwiY29uZGl0aW9uXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb25kaXRpb25cIlxuICAgICAgICAgICAgICB2YWx1ZT1cImFuZFwiXG4gICAgICAgICAgICAgIGlkPVwiYW5kX3t7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwiY2RyLmRldGVjdENoYW5nZXMoKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBtYi0wIG10LTFcIiBmb3I9XCJhbmRfe3sgY29sLmZpZWxkIH19XCJcbiAgICAgICAgICAgICAgPkFORDwvbGFiZWxcbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmUgbS0wIGNvbC00IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTEgZ2FwLTFcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgZmlsdGVyLXJhZGlvLWlucHV0c1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIG5hbWU9XCJjb25kaXRpb25cIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbmRpdGlvblwiXG4gICAgICAgICAgICAgIHZhbHVlPVwib3JcIlxuICAgICAgICAgICAgICBpZD1cIm9yX3t7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwiY2RyLmRldGVjdENoYW5nZXMoKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBtYi0wIG10LTFcIiBmb3I9XCJvcl97eyBjb2wuZmllbGQgfX1cIlxuICAgICAgICAgICAgICA+T1I8L2xhYmVsXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2staW5saW5lIG0tMCBjb2wtNCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xIGdhcC0xXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGZpbHRlci1yYWRpby1pbnB1dHNcIlxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBuYW1lPVwiY29uZGl0aW9uXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb25kaXRpb25cIlxuICAgICAgICAgICAgICB2YWx1ZT1cIm5vbmVcIlxuICAgICAgICAgICAgICBpZD1cIm5vbmVfe3sgY29sLmZpZWxkIH19XCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjZHIuZGV0ZWN0Q2hhbmdlcygpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIG1iLTAgbXQtMVwiIGZvcj1cIm5vbmVfe3sgY29sLmZpZWxkIH19XCJcbiAgICAgICAgICAgICAgPk5vbmU8L2xhYmVsXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IEBzbGlkZVRvZ2dsZSAqbmdJZj1cImZpcnN0VmFsdWUgJiYgY29uZGl0aW9uICE9ICdub25lJ1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTJcIj5cbiAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbSBjdXN0b20tc2VsZWN0XCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWNvbmRDb25kaXRpb25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ3N0cmluZydcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiY29udGFpblwiPkNvbnRhaW5zPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImRvZXNfbm90X2NvbnRhaW5cIj5Eb2VzIE5vdCBDb250YWluPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPlN0YXJ0cyBXaXRoPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+RW5kcyBXaXRoPC9vcHRpb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAnZGF0ZScgfHwgc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ3RpbWUnXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzIFRvPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm5vdF9lcXVhbFwiPk5vdCBFcXVhbDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhZnRlclwiPkFmdGVyPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPkJlZm9yZTwvb3B0aW9uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdudW1iZXInXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzIFRvPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPkxlc3MgVGhlbiA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5HcmVhdGVyIFRoZW4gPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImxlc3NfdGhlbl9lcXVhbFwiPmxlc3MgdGhlbiBFcXVhbCB0bzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJncmVhdGVyX3RoZW5fZXF1YWxcIj5HcmVhdGVyIHRoZW4gRXF1YWwgdG8gPC9vcHRpb24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBbdHlwZV09XCJjb2w/LnR5cGUgPT0gJ3N0cmluZycgPyAndGV4dCcgOiBjb2w/LnR5cGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIG1iLTNcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWNvbmQgVmFsdWVcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWNvbmRWYWx1ZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPCEtLSBBY3Rpb25zIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTIgbXQtMlwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnkgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCJcbiAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDMwcHhcIlxuICAgICAgICAoY2xpY2spPVwiYXBwbHlEcm9wZG93bkZpbHRlcigpXCJcbiAgICAgID5cbiAgICAgICAgQXBwbHlcbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLXNlY29uZGFyeSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDBcIlxuICAgICAgICBzdHlsZT1cImhlaWdodDogMzBweFwiXG4gICAgICAgIChjbGljayk9XCJyZXNldFNpZGVGaWx0ZXIoY29sKVwiXG4gICAgICA+XG4gICAgICAgIFJlc2V0XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFNpZGUgTWVudWUgLS0+XG5cbjwhLS0gQ29sdW1uIFBhbm5lbCAvIFBpdm90IE1vZGUgLyBTZWFyY2hpbmcgLS0+XG5cbjxuZy10ZW1wbGF0ZSAjY29sdW1uUGFubmVsPlxuICA8ZGl2IGNsYXNzPVwiY29sdW1uLXBhbmVsLWhlYWRlclwiPlxuICAgIDwhLS0gUGl2b3QgVG9nZ2xlIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTIgcGl2b3QtbW9kZSBweC01IG1zLTIgZC1ub25lXCJcbiAgICA+XG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IG1lLTJcIlxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICBpZD1cInBpdm90VG9nZ2xlXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJwaXZvdE1vZGVcIlxuICAgICAgLz5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJwaXZvdFRvZ2dsZVwiPlBpdm90IE1vZGU8L2xhYmVsPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTZWxlY3QgQWxsICYgU2VhcmNoIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTIgcHgtMyBtdC0zXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImZpbHRlci1pY29uLXdyYXBwZXIgbWUtMlwiICpuZ0lmPVwic2hvd0NvbHVtbnNHcm91cGluZ1wiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwidG9nZ2xlLWljb24gZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgYWNjb3JkaW9uU3RhdGUgPT09ICdhbGwnXG4gICAgICAgICAgICAgID8gc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1kb3duLnN2ZydcbiAgICAgICAgICAgICAgOiBhY2NvcmRpb25TdGF0ZSA9PT0gJ3NvbWUnXG4gICAgICAgICAgICAgID8gc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZGFzaC5zdmcnXG4gICAgICAgICAgICAgIDogc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXG4gICAgICAgICAgXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWxsQWNjb3JkaW9ucygpXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgbWUtMlwiXG4gICAgICAgIFtjaGVja2VkXT1cImFsbENvbHVtbnNTZWxlY3RlZCgpXCJcbiAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVBbGxDb2x1bW5zVmlzaWJpbGl0eSgpXCJcbiAgICAgIC8+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBjb2x1bW5zLi4uXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJjb2x1bW5TZWFyY2hcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gU2VwYXJhdG9yIC0tPlxuICAgIDxociBjbGFzcz1cIm15LTJcIiAvPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gUmlnaHQgQ29sdW1ucyBNZW51ZSAtLT5cblxuPCEtLSBDb2x1bW4gUGFuZWwgSXRlbSBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZSAjY29sdW1uUGFuZWxJdGVtIGxldC1jb2w9XCJjb2xcIj5cbiAgPCEtLSBHcm91cCBDb2x1bW4gLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuY2hpbGRyZW4/Lmxlbmd0aFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4tZ3JvdXAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImZpbHRlci1pY29uLXdyYXBwZXIgbWUtMlwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwidG9nZ2xlLWljb24gZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbY2xhc3Mucm90YXRlXT1cImNvbC5leHBhbmRlZFwiXG4gICAgICAgICAgKGNsaWNrKT1cImNvbC5leHBhbmRlZCA9ICFjb2wuZXhwYW5kZWRcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtZS0yXCJcbiAgICAgICAgW2lkXT1cIidncm91cF8nICsgY29sLmhlYWRlclwiXG4gICAgICAgIFtjaGVja2VkXT1cImlzQ29sdW1uVmlzaWJsZShjb2wpXCJcbiAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVHcm91cFZpc2liaWxpdHkoY29sKVwiXG4gICAgICAvPlxuICAgICAgPHNwYW5cbiAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9ncmlkLTN4Mi1nYXAuc3ZnJ1wiXG4gICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBtZS0yXCJcbiAgICAgID48L3NwYW4+XG4gICAgICA8bGFiZWxcbiAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTAgdy0xMDBcIlxuICAgICAgICBbZm9yXT1cIidncm91cF8nICsgY29sLmhlYWRlclwiXG4gICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+e3sgY29sLmhlYWRlciB9fTwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cImNvbC5leHBhbmRlZFwiIGNsYXNzPVwicHMtNFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2hpbGQgb2YgY29sLmNoaWxkcmVuOyB0cmFja0J5OiB0cmFja0J5RmllbGRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29sdW1uUGFuZWxJdGVtOyBjb250ZXh0OiB7IGNvbDogY2hpbGQgfVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tIExlYWYgQ29sdW1uIC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbC5jaGlsZHJlbj8ubGVuZ3RoXCI+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMlwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtZS0yXCIgc3R5bGU9XCJ3aWR0aDogMS41cmVtXCI+PC9zcGFuPlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtZS0yXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJjb2wuaXNfdmlzaWJsZVwiXG4gICAgICAgIFtpZF09XCInY29sXycgKyBjb2wuZmllbGRcIlxuICAgICAgICAoY2hhbmdlKT1cIm9uU2lkZU1lbnVDb2x1bW5zVmlzaWJpbGl0eUNoYW5nZSgpXCJcbiAgICAgIC8+XG4gICAgICA8c3BhblxuICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2dyaWQtM3gyLWdhcC5zdmcnXCJcbiAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIG1lLTJcIlxuICAgICAgPjwvc3Bhbj5cbiAgICAgIDxsYWJlbFxuICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMCB3LTEwMFwiXG4gICAgICAgIFtmb3JdPVwiJ2NvbF8nICsgY29sLmZpZWxkXCJcbiAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIj57eyBjb2wuaGVhZGVyIH19PC9zcGFuPlxuICAgICAgPC9sYWJlbD5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIENvbHVtbnMgU2lkZSBGaWx0ZXIgLS0+XG48bmctdGVtcGxhdGUgI3NpZGVGaWx0ZXJzPlxuICA8ZGl2IGNsYXNzPVwicHktMyBweC0yIHBlLTMgaC0xMDBcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImZpbHRlci1pY29uLXdyYXBwZXIgbWUtMlwiICpuZ0lmPVwic2hvd0NvbHVtbnNHcm91cGluZ1wiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwidG9nZ2xlLWljb24gZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgZmlsdGVyQWNjb3JkaW9uU3RhdGUgPT09ICdhbGwnXG4gICAgICAgICAgICAgID8gc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1kb3duLnN2ZydcbiAgICAgICAgICAgICAgOiBmaWx0ZXJBY2NvcmRpb25TdGF0ZSA9PT0gJ3NvbWUnXG4gICAgICAgICAgICAgID8gc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZGFzaC5zdmcnXG4gICAgICAgICAgICAgIDogc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXG4gICAgICAgICAgXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWxsRmlsdGVyQWNjb3JkaW9ucygpXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJjb2x1bW5TZWFyY2hcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cIm92ZXJmbG93LWF1dG8gc2lkZS1maWx0ZXItY29sdW1ucy13cmFwcGVyXCJcbiAgICAgIHN0eWxlPVwiaGVpZ2h0OiBjYWxjKDEwMCUgLSA3MHB4KTsgc2Nyb2xsYmFyLXdpZHRoOiB0aGluXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgIGxldCBjb2wgb2YgY29sdW1ucyB8IGZpbHRlciA6IGNvbHVtblNlYXJjaCA6ICdoZWFkZXInO1xuICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlGaWVsZFxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWx0ZXJQYW5uZWxJdGVtOyBjb250ZXh0OiB7IGNvbDogY29sIH1cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2ZpbHRlclBhbm5lbEl0ZW0gbGV0LWNvbD1cImNvbFwiPlxuICA8IS0tIEdyb3VwIENvbHVtbiAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5jaGlsZHJlbj8ubGVuZ3RoXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJjb2x1bW4tZ3JvdXAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCJcbiAgICAgICpuZ0lmPVwiY29sPy50eXBlICE9PSAnaW1hZ2UnXCJcbiAgICA+XG4gICAgICA8IS0tIENoZXZyb24gdG9nZ2xlIC0tPlxuICAgICAgPHNwYW4gY2xhc3M9XCJmaWx0ZXItaWNvbi13cmFwcGVyIG1lLTJcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cInRvZ2dsZS1pY29uIGRhdGEtZ3JpZC1zdmctaWNvblwiXG4gICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZXZyb24tcmlnaHQuc3ZnJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgW2NsYXNzLnJvdGF0ZV09XCJjb2wuZXhwYW5kZWRGaWx0ZXJcIlxuICAgICAgICAgIChjbGljayk9XCJjb2wuZXhwYW5kZWRGaWx0ZXIgPSAhY29sLmV4cGFuZGVkRmlsdGVyXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cblxuICAgICAgPCEtLSBHcm91cCBsYWJlbCB0b2dnbGUgLS0+XG4gICAgICA8bGFiZWxcbiAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTAgdy0xMDBcIlxuICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiXG4gICAgICAgIChjbGljayk9XCJjb2wuZXhwYW5kZWRGaWx0ZXIgPSAhY29sLmV4cGFuZGVkRmlsdGVyXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmdy1ib2xkIHRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgID57eyBjb2wuaGVhZGVyIH19XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC1wcmltYXJ5IG1zLTFcIlxuICAgICAgICAgICAgKm5nSWY9XCJjb2w/LnF1ZXJ5Py5faWRzPy5sZW5ndGggfHwgY29sPy5xdWVyeT8uX2ZpcnN0X3ZhbHVlXCJcbiAgICAgICAgICAgID4qPC9zcGFuXG4gICAgICAgICAgPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBDaGlsZHJlbiBjb2x1bW5zIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJjb2wuZXhwYW5kZWRGaWx0ZXJcIiBjbGFzcz1cInBzLTRcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNoaWxkIG9mIGNvbC5jaGlsZHJlbjsgdHJhY2tCeTogdHJhY2tCeUZpZWxkXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlclBhbm5lbEl0ZW07IGNvbnRleHQ6IHsgY29sOiBjaGlsZCB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS0gTGVhZiBDb2x1bW4gLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sLmNoaWxkcmVuPy5sZW5ndGhcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCIgKm5nSWY9XCJjb2w/LnR5cGUgIT09ICdpbWFnZSdcIj5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwibWUtMiBmaWx0ZXItaWNvbi13cmFwcGVyIG1lLTJcIlxuICAgICAgICAoY2xpY2spPVwiY29sLmV4cGFuZGVkRmlsdGVyID0gIWNvbC5leHBhbmRlZEZpbHRlclwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJ0b2dnbGUtaWNvbiBkYXRhLWdyaWQtc3ZnLWljb25cIlxuICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGV2cm9uLXJpZ2h0LnN2ZydcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtjbGFzcy5yb3RhdGVdPVwiY29sLmV4cGFuZGVkRmlsdGVyXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cblxuICAgICAgPGxhYmVsXG4gICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0wIHctMTAwXCJcbiAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxuICAgICAgICAoY2xpY2spPVwiY29sLmV4cGFuZGVkRmlsdGVyID0gIWNvbC5leHBhbmRlZEZpbHRlclwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10cnVuY2F0ZSBmdy1ib2xkXCI+e3sgY29sLmhlYWRlciB9fTwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFNob3cgZmlsdGVyIHdoZW4gZXhwYW5kZWQgLS0+XG4gICAgPGRpdiBbQHNsaWRlVG9nZ2xlXSAqbmdJZj1cImNvbC5leHBhbmRlZEZpbHRlclwiIGNsYXNzPVwicHMtNCBwZS0zXCI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwic2lkZU5lc3RlZEZpbHRlcjsgY29udGV4dDogeyBjb2w6IGNvbCB9XCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFNpZGUgTmVzdGVkIEZpbHRlcnMgLS0+XG48bmctdGVtcGxhdGUgI3NpZGVOZXN0ZWRGaWx0ZXIgbGV0LWNvbD1cImNvbFwiPlxuICA8ZGl2IGNsYXNzPVwiXCI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy50eXBlID09PSAnZHJvcGRvd24nIHx8IGNvbD8udHlwZSA9PSAnYXJyYXknOyBlbHNlIHRleHRGaWx0ZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLTFcIj5cblxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIG1iLTJcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInNpZGVOZXN0ZWRGaWx0ZXJTZWFyY2hcIlxuICAgICAgICAvPlxuXG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgKGNvbD8uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlXG4gICAgICAgICAgICAgIHwgZmlsdGVyIDogc2lkZU5lc3RlZEZpbHRlclNlYXJjaCA6ICd2YWx1ZScpIGFzIGZpbHRlcmVkT3B0aW9uc1xuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyZWRPcHRpb25zLmxlbmd0aDsgZWxzZSBub0RhdGFGb3VuZFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWItMSBtcy0xIHNlbGVjdC1hbGwtZmlsdGVyXCI+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJcbiAgICAgICAgICAgICAgICAgIGNvbC5xdWVyeT8uX2lkcz8ubGVuZ3RoID09IGNvbD8uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlPy5sZW5ndGhcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsU2lkZUZpbHRlcnMoY29sLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cIihjb2wucXVlcnk/Ll9pZHM/Lmxlbmd0aCAhPT0gY29sPy5jb2x1bW5fZHJvcGRvd25fdmFsdWU/Lmxlbmd0aCAmJiBjb2wucXVlcnk/Ll9pZHM/Lmxlbmd0aClcIlxuICAgICAgICAgICAgICAgIGlkPVwic2VsZWN0QWxsX3t7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJzZWxlY3RBbGxfe3sgY29sLmZpZWxkIH19XCI+XG4gICAgICAgICAgICAgICAgU2VsZWN0IEFsbFxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gICAgICAgICAgICAgIGl0ZW1TaXplPVwiMzJcIlxuICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLXZpZXdwb3J0XCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDEyMHB4XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjayBtYi0xIG1zLTFcIlxuICAgICAgICAgICAgICAgICpjZGtWaXJ0dWFsRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnNcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb25cIlxuICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiXG4gICAgICAgICAgICAgICAgICAgIGNvbC5xdWVyeT8uX2lkcz8uaW5jbHVkZXMob3B0aW9uPy5faWQgfHwgb3B0aW9uPy5pZCB8fCBvcHRpb24pXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbk9wdGlvblRvZ2dsZShjb2wsIG9wdGlvbilcIlxuICAgICAgICAgICAgICAgICAgaWQ9XCJvcHRpb25fe3sgY29sLmZpZWxkIH19X3t7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbj8uaWQgfHwgb3B0aW9uPy5faWQgfHwgb3B0aW9uXG4gICAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCJcbiAgICAgICAgICAgICAgICAgIFtmb3JdPVwiXG4gICAgICAgICAgICAgICAgICAgICdvcHRpb25fJyArXG4gICAgICAgICAgICAgICAgICAgIGNvbC5maWVsZCArXG4gICAgICAgICAgICAgICAgICAgICdfJyArXG4gICAgICAgICAgICAgICAgICAgIChvcHRpb24/LmlkIHx8IG9wdGlvbj8uX2lkIHx8IG9wdGlvbilcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgKG9wdGlvbi52YWx1ZSB8fCBvcHRpb24pIHwgdGl0bGVjYXNlIH19XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cblxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9EYXRhRm91bmQ+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1jZW50ZXIgdGV4dC1tdXRlZCBtdC0yXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJzaWRlTmVzdGVkRmlsdGVyU2VhcmNoXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgTm8gUmVjb3JkIEZvdW5kXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuXG4gICAgPCEtLSBUZXh0IEZpbHRlciBTZWN0aW9uIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSAjdGV4dEZpbHRlcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItdGV4dC1zZWN0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTJcIj5cbiAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29sLnF1ZXJ5LmZpcnN0X2NvbmRpdGlvblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbD8udHlwZSA9PSAnc3RyaW5nJ1wiPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiY29udGFpblwiPkNvbnRhaW5zPC9vcHRpb24+XG4gICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZG9lc19ub3RfY29udGFpblwiPkRvZXMgTm90IENvbnRhaW48L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5TdGFydHMgV2l0aDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5FbmRzIFdpdGg8L29wdGlvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy50eXBlID09ICdkYXRlJyB8fCBjb2w/LnR5cGUgPT0gJ3RpbWUnXCI+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFscyBUbzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm5vdF9lcXVhbFwiPk5vdCBFcXVhbDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5BZnRlcjwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYmVmb3JlXCI+QmVmb3JlPC9vcHRpb24+RlZcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy50eXBlID09ICdudW1iZXInXCI+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFscyBUbzwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYmVmb3JlXCI+TGVzcyBUaGVuIDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5HcmVhdGVyIFRoZW4gPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJsZXNzX3RoZW5fZXF1YWxcIj5sZXNzIHRoZW4gRXF1YWwgdG88L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImdyZWF0ZXJfdGhlbl9lcXVhbFwiPkdyZWF0ZXIgdGhlbiBFcXVhbCB0byA8L29wdGlvbj5GVlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIFt0eXBlXT1cImNvbD8udHlwZSA9PSAnZGF0ZScgPyAnZGF0ZScgOiAoY29sPy50eXBlID09ICdudW1iZXInID8gJ251bWJlcic6ICd0ZXh0JylcIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSBtYi0zXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlZhbHVlXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbCEucXVlcnkhLmZpcnN0X3ZhbHVlXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTMgZC1mbGV4IGZsZXgtcm93IG11dGVkXCJcbiAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMTRweFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmUgbS0wIGNvbC00IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgZmlsdGVyLXJhZGlvLWlucHV0c1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIG5hbWU9XCJjb25kaXRpb25cIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbCEucXVlcnkuY29uZGl0aW9uXCJcbiAgICAgICAgICAgICAgdmFsdWU9XCJhbmRcIlxuICAgICAgICAgICAgICBpZD1cImFuZF97eyBjb2wuZmllbGQgfX1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgbWItMCBtdC0xXCIgZm9yPVwiYW5kX3t7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAgID5BTkQ8L2xhYmVsXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2staW5saW5lIG0tMCBjb2wtNCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGZpbHRlci1yYWRpby1pbnB1dHNcIlxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBuYW1lPVwiY29uZGl0aW9uXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb2whLnF1ZXJ5LmNvbmRpdGlvblwiXG4gICAgICAgICAgICAgIHZhbHVlPVwib3JcIlxuICAgICAgICAgICAgICBpZD1cIm9yX3t7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBtYi0wIG10LTFcIiBmb3I9XCJvcl97eyBjb2wuZmllbGQgfX1cIlxuICAgICAgICAgICAgICA+T1I8L2xhYmVsXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2staW5saW5lIG0tMCBjb2wtNCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGZpbHRlci1yYWRpby1pbnB1dHNcIlxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBuYW1lPVwiY29uZGl0aW9uXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb2whLnF1ZXJ5LmNvbmRpdGlvblwiXG4gICAgICAgICAgICAgIHZhbHVlPVwibm9uZVwiXG4gICAgICAgICAgICAgIGlkPVwibm9uZV97eyBjb2wuZmllbGQgfX1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBjbGFzcz1cIm5ub25lbS1jaGVjay1sYWJlbCBtYi0wIG10LTFcIlxuICAgICAgICAgICAgICBmb3I9XCJub25lX3t7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAgID5Ob25lPC9sYWJlbFxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0lmPVwiY29sPy5xdWVyeT8uZmlyc3RfdmFsdWUgJiYgY29sPy5xdWVyeT8uY29uZGl0aW9uICE9PSAnbm9uZSdcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWItMlwiPlxuICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb2whLnF1ZXJ5LnNlY29uZF9jb25kaXRpb25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy50eXBlID09ICdzdHJpbmcnXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImNvbnRhaW5cIj5Db250YWluczwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJkb2VzX25vdF9jb250YWluXCI+RG9lcyBOb3QgQ29udGFpbjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFsczwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5TdGFydHMgV2l0aDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhZnRlclwiPkVuZHMgV2l0aDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy50eXBlID09ICdkYXRlJyB8fCBjb2w/LnR5cGUgPT0gJ3RpbWUnXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzIFRvPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJub3RfZXF1YWxcIj5Ob3QgRXF1YWw8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5BZnRlcjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5CZWZvcmU8L29wdGlvbj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbD8udHlwZSA9PSAnbnVtYmVyJ1wiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFscyBUbzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5MZXNzIFRoZW4gPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+R3JlYXRlciBUaGVuIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJsZXNzX3RoZW5fZXF1YWxcIj5sZXNzIHRoZW4gRXF1YWwgdG88L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZ3JlYXRlcl90aGVuX2VxdWFsXCI+R3JlYXRlciB0aGVuIEVxdWFsIHRvIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgW3R5cGVdPVwiY29sPy50eXBlID09ICdkYXRlJyA/ICdkYXRlJyA6ICd0ZXh0J1wiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc20gbWItM1wiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlY29uZCBWYWx1ZVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbCEucXVlcnkuc2Vjb25kX3ZhbHVlXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnkgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCIgc3R5bGU9XCJoZWlnaHQ6IDIycHg7XCIgKGNsaWNrKT1cImFwcGx5RHJvcGRvd25GaWx0ZXIoKVwiPmFwcGx5PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXNlY29uZGFyeSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIiBzdHlsZT1cImhlaWdodDogMjJweDtcIiAoY2xpY2spPVwiYXBwbHlEcm9wZG93bkZpbHRlcigpXCI+cmVzZXQ8L2Rpdj5cblxuICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZ2FwLTIgYm9yZGVyLXRvcFwiXG4gICAgICBzdHlsZT1cImhlaWdodDogMzhweFwiXG4gICAgPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgc3R5bGU9XCJtYXgtaGVpZ2h0OiAzMHB4XCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJ0bi1saWdodCBib3JkZXIgdy0xMDAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG10LTEgYnRuLWxpZ2h0XCJcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgcmVtb3ZlU2lkZUZpbHRlcihjb2wpXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4+Q2xlYXI8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHN0eWxlPVwibWF4LWhlaWdodDogMzBweFwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHctMTAwIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBtdC0xXCJcbiAgICAgICAgKGNsaWNrKT1cImFwcGx5U2lkZUZpbHRlcihjb2wpXCJcbiAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIihjb2w/LnF1ZXJ5LmNvbmRpdGlvbiAhPT0gJ25vbmUnICYmICFjb2w/LnF1ZXJ5Py5zZWNvbmRfdmFsdWUpXCJcbiAgICAgICAgW2NsYXNzLnBlLW5vbmVdPVwiKGNvbCE/LnF1ZXJ5LmNvbmRpdGlvbiAhPT0gJ25vbmUnICYmICFjb2w/LnF1ZXJ5Py5zZWNvbmRfdmFsdWUpXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tdG9wOiAtMXB4XCI+QXBwbHk8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIENlbnRyIE92ZXJsYXkgZm9yIHNob3dpbmcgdGhlIGNob3NlIGNvbHVtbnMgLS0+XG5cbjxkaXYgKm5nSWY9XCJzaG93Q29sdW1uUGFuZWxcIiBjbGFzcz1cImN1c3RvbS1tb2RhbC1vdmVybGF5XCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cImN1c3RvbS1tb2RhbC1jb250ZW50XCJcbiAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImRyb3Bkb3duc0JhY2tncm91bmRDb2xvclwiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibW9kYWxDb2x1bW5QYW5uZWxcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLSBUaGUgZXhpc3RpbmcgbmctdGVtcGxhdGUgeW91IHByb3ZpZGVkIC0tPlxuPG5nLXRlbXBsYXRlICNtb2RhbENvbHVtblBhbm5lbD5cbiAgPGRpdiBjbGFzcz1cImNvbHVtbi1wYW5lbC1oZWFkZXJcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgcHgtMiBwcy0zIHJvdW5kZWQtdG9wLTIgbW9kYS1oZWFkZXJcIlxuICAgICAgW3N0eWxlLmhlaWdodC5weF09XCI0OFwiXG4gICAgPlxuICAgICAgQ2hvb3NlIENvbHVtbnNcbiAgICAgIDxzcGFuIGNsYXNzPVwiZmlsdGVyLWljb24td3JhcHBlclwiIChjbGljayk9XCJjbG9zZU1vZGFsQ29sdW1uUGFuZWwoKVwiXG4gICAgICAgID48c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMveC5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICA+PC9zcGFuXG4gICAgICA+PC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxociBjbGFzcz1cIm15LTBcIiAvPlxuICAgIDxkaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBweC0yIHBlLTNcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cIjQ4XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZmlsdGVyLWljb24td3JhcHBlciBtZS0yXCIgKm5nSWY9XCJzaG93Q29sdW1uc0dyb3VwaW5nXCI+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwidG9nZ2xlLWljb24gZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgIGFjY29yZGlvblN0YXRlID09PSAnYWxsJ1xuICAgICAgICAgICAgICAgID8gc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1kb3duLnN2ZydcbiAgICAgICAgICAgICAgICA6IGFjY29yZGlvblN0YXRlID09PSAnc29tZSdcbiAgICAgICAgICAgICAgICA/IHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Rhc2guc3ZnJ1xuICAgICAgICAgICAgICAgIDogc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFsbEFjY29yZGlvbnMoKVwiXG4gICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtZS0yXCJcbiAgICAgICAgICBbY2hlY2tlZF09XCJhbGxDb2x1bW5zU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVBbGxDb2x1bW5zVmlzaWJpbGl0eSgpXCJcbiAgICAgICAgLz5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggY29sdW1ucy4uLlwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJjaG9zZUNvbHVtbnNTZWFyY2hcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxociBjbGFzcz1cIm10LTAgbWItMVwiIC8+XG4gICAgICA8ZGl2IGNsYXNzPVwicHgtMiBvdmVybGF5LXNjcm9sbGFibGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgbGV0IGNvbCBvZiBjb2x1bW5zIHwgZmlsdGVyIDogY2hvc2VDb2x1bW5zU2VhcmNoIDogJ2hlYWRlcic7XG4gICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5RmllbGRcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2x1bW5QYW5lbEl0ZW07IGNvbnRleHQ6IHsgY29sOiBjb2wgfVwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2lkZU1lbnVSb3dHcm91cHM+XG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gaC0xMDAgZC1ub25lXCI+XG4gICAgPGRpdiBjbGFzcz1cInB4LTMgaC0xMDBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTMgbWItNFwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvanVzdGlmeS5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8c3Bhbj5Sb3cgR3JvdXBzPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiaC01MFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJweC0zIHB5LTIgYm9yZGVyLWRhc2hlZCBoLTEwMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4XCJcbiAgICAgICAgPlxuICAgICAgICAgIERyYWcgaGVyZSB0byBzZXQgcm93IEdyb3Vwc1xuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGhyIGNsYXNzPVwibXQtNFwiIC8+XG5cbiAgICA8ZGl2IGNsYXNzPVwicHgtMyBoLTEwMFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMyBtYi00XCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9qdXN0aWZ5LnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICAgIDxzcGFuPlZhbHVlczwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImgtNTAgZC1mbGV4XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInB4LTMgcHktMiBib3JkZXItZGFzaGVkIGgtMTAwIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDE0cHhcIlxuICAgICAgICA+XG4gICAgICAgICAgRHJhZyBoZXJlIGFnZ3JlZ2F0ZVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPlxuPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG48IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbjwhLS0gRHJhZyBQcmV2aWV3IFRlbXBsYXRlIC0tPlxuPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG48IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbjxuZy10ZW1wbGF0ZSAjZHJhZ1ByZXZpZXcgbGV0LWNvbD5cbiAgPGRpdiBjbGFzcz1cInAtMiBib3JkZXIgZC1mbGV4IGdhcC0yXCI+XG4gICAgPGRpdj5cbiAgICAgIDxzcGFuXG4gICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvYXJyb3dzLW1vdmUuc3ZnJ1wiXG4gICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICA+PC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXY+e3sgY29sLmhlYWRlciB9fTwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gRHJhZyBQbGFjZWhvbGRlciBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZVxuICAjZHJhZ1BsYWNlaG9sZGVyXG4gIGxldC1jb2xcbiAgbGV0LWk9XCJpbmRleFwiXG4gIGxldC1zZWN0aW9uPVwic2VjdGlvblwiXG4gIGxldC1kcmFnZ2luZ0luR3JvdXBBcmVhPVwiZHJhZ2dpbmdJbkdyb3VwQXJlYVwiXG4+XG4gIDxkaXYgKm5nSWY9XCIhZHJhZ2dpbmdJbkdyb3VwQXJlYVwiPlxuICAgIDxkaXZcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIGhlYWRlckNlbGw7XG4gICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjb2wsIGluZGV4OiBpLCBzZWN0aW9uOiBzZWN0aW9uIH1cbiAgICAgIFwiXG4gICAgPjwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cImRyYWdnaW5nSW5Hcm91cEFyZWFcIj5OZXcgUGxhY2Vob2xkZXI8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gVG9wIEdyb3VwIFJvdyBQbGFjZWhvbGRlciAtLT5cbjxuZy10ZW1wbGF0ZSAjdG9wR3JvdXBpbmdSb3dQbGFjZWhvbGRlciBsZXQtY29sIGxldC1zaG93Q2hldnJvbj1cInNob3dDaGV2cm9uXCI+XG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTJcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImQtZmxleCBnYXAtMiB0b3Atcm93LWdyb3VwaW5nLXBsYWNlaG9sZGVyXCJcbiAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwidG9wR3JvdXBlZEJhZGdlc0JhY2tncm91bmRDb2xvclwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2RrRHJhZ0hhbmRsZVxuICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2dyaWQtM3gyLWdhcC5zdmcnXCJcbiAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgID48L3NwYW4+XG4gICAgICA8c3Bhbj57eyBjb2wuaGVhZGVyIH19PC9zcGFuPlxuICAgICAgPHNwYW5cbiAgICAgICAgKGNsaWNrKT1cInVuZ3JvdXBDb2x1bW4oY29sKVwiXG4gICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMveC5zdmcnXCJcbiAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgID48L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwic2hvd0NoZXZyb25cIiBzdHlsZT1cIm9wYWNpdHk6IDAuNjsgZm9udC1zaXplOiAxNHB4XCI+XG4gICAgPHNwYW5cbiAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXCJcbiAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgPjwvc3Bhbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI2NoaWxkSGVhZGVyUGxhY2Vob2xkZXJcbiAgbGV0LWNvbFxuICBsZXQtcGlubmVkUmlnaHQ9XCJwaW5uZWRSaWdodFwiXG4gIGxldC1pPVwiaW5kZXhcIlxuICBsZXQtc2VjdGlvbnM9XCJzZWN0aW9uc1wiXG4+XG4gIDxkaXZcbiAgICBjbGFzcz1cImhlYWRlci1jZWxsIG9uZS1yb3ctaGVhZGVyLWNlbGxzXCJcbiAgICBbY2xhc3MuYm9yZGVyLXJpZ2h0XT1cInNob3dWZXJ0aWNhbEJvcmRlclwiXG4gICAgW3N0eWxlLndpZHRoLnB4XT1cImNvbC53aWR0aFwiXG4gICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJjb2wud2lkdGhcIlxuICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgW3N0eWxlLm1heC1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICBbc3R5bGUuZm9udFdlaWdodF09XCJoZWFkZXJGb250V2VpZ2h0XCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gaC0xMDAgYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMFwiXG4gICAgICAgIFtjbGFzcy5mbGV4LXJvdy1yZXZlcnNlXT1cInBpbm5lZFJpZ2h0XCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwidGV4dC1lbGxpcHNpcyBoLTEwMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICBbdGl0bGVdPVwiY29sLmhlYWRlclwiXG4gICAgICAgICAgW2NsYXNzLnctMTAwXT1cInBpbm5lZFJpZ2h0XCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGNvbC5oZWFkZXIgfX1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmUgZC1mbGV4XCJcbiAgICAgICAgICBbY2xhc3MuZmxleC1yb3ctcmV2ZXJzZV09XCJwaW5uZWRSaWdodFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhyZWUtZG90cyBwLTFcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy90aHJlZS1kb3RzLXZlcnRpY2FsLnN2ZydcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzaXplLWhhbmRsZVwiPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9yZXNpemUtaGFuZGxlLnN2ZydcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgKm5nSWY9XCJzaG93RmlsdGVyUm93XCJcbiAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImhlYWRlckJhY2tncm91bmRDb2xvclwiXG4gICAgY2xhc3M9XCJoZWFkZXItY2VsbCBmaWx0ZXItY2VsbFwiXG4gICAgW2NsYXNzLmJvcmRlci1yaWdodF09XCJzaG93VmVydGljYWxCb3JkZXJcIlxuICAgIFtzdHlsZS53aWR0aC5weF09XCJjb2wud2lkdGhcIlxuICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiY29sLndpZHRoXCJcbiAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICBbc3R5bGUubWF4LWhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgIFtjbGFzcy5ib3JkZXItcmlnaHRdPVwic2hvd1ZlcnRpY2FsQm9yZGVyXCJcbiAgICBzdHlsZT1cImdyaWQtcm93OiAzXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiaGVhZGVyLWNlbGwgZmlsdGVyLWNlbGxcIlxuICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJoZWFkZXJCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNvbC53aWR0aFwiXG4gICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cImNvbC53aWR0aFwiXG4gICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICBbc3R5bGUubWluLWhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgW3N0eWxlLm1heC1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICA+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIkZpbHRlclwiXG4gICAgICAgIFsobmdNb2RlbCldPVwiY29sLmZpbHRlclZhbHVlXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cImNvbD8udHlwZSA9PSAnZHJvcGRvd24nIHx8IGNvbD8udHlwZSA9PSAnaW1hZ2UnIHx8IGNvbD8udHlwZSA9PSAnYXJyYXknXCJcbiAgICAgICAgW2NsYXNzLmRpc2FibGVkLXNlYXJjaC1pbnB1dF09XCJcbiAgICAgICAgICBjb2w/LnR5cGUgPT0gJ2Ryb3Bkb3duJyB8fCBjb2w/LnR5cGUgPT0gJ2ltYWdlJyB8fCBjb2w/LnR5cGUgPT0gJ2FycmF5J1xuICAgICAgICBcIlxuICAgICAgLz5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwiZmlsdGVyLWljb24td3JhcHBlclwiXG4gICAgICAgIChjbGljayk9XCJhY3RpdmVGaWx0ZXJDZWxsID0gY29sOyBhY3RpdmVDb2wgPSBudWxsXCJcbiAgICAgICAgPjxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9maWx0ZXItMi5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICA+PC9zcGFuXG4gICAgICA+PC9zcGFuPlxuXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGVcIlxuICAgICAgICAqbmdJZj1cImFjdGl2ZUZpbHRlckNlbGwgPT09IGNvbFwiXG4gICAgICAgIHN0eWxlPVwidG9wOiAxMDAlOyByaWdodDogMDsgei1pbmRleDogMTA7IGxlZnQ6IDBcIlxuICAgICAgPjwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdGFibGVMYXlvdXQ+XG4gIDxkaXZcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICBjbGFzcz1cInAtMyBzaGFkb3cgYWN0aW9ucy1kcm9wZG93biBtdC0xIGRyb3Bkb3duLW1lbnUgc2hvdyBzaGFkb3cgY3VzdG9tLW1lbnUgdGFibGUtbGF5b3V0XCJcbiAgICBzdHlsZT1cIndpZHRoOiAzMjBweFwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0zXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rIHAtMFwiXG4gICAgICAgIHN0eWxlPVwibWFyZ2luLWxlZnQ6IC0xMHB4XCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFjdGlvbnMoJ3NldHRpbmcnKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvdy1sZWZ0LnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8aDYgY2xhc3M9XCJtYi0wIG1zLTJcIiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA1MDBcIj5UYWJsZSBMYXlvdXQ8L2g2PlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93VGFibGVMYXlvdXRcIj4gXG4gICAgPGhyIGNsYXNzPVwibXktMlwiIC8+XG4gICAgPGRpdiBjbGFzcz1cInctMTAwIG1iLTMgZC1mbGV4XCIgcm9sZT1cImdyb3VwXCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgY2xhc3M9XCJidG4tY2hlY2sgbGF5b3V0LWJ1dHRvbi1jaGVja1wiXG4gICAgICAgIG5hbWU9XCJsYXlvdXRTaXplXCJcbiAgICAgICAgaWQ9XCJzbWFsbFwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIChjaGFuZ2UpPVwiY2hhbmdlVGFibGVMYXlvdXQoJGV2ZW50LCAnc21hbGwnKVwiXG4gICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGVkVGFibGVMYXlvdXQgPT0gJ3NtYWxsJ1wiXG4gICAgICAvPlxuICAgICAgPGxhYmVsXG4gICAgICAgIGNsYXNzPVwiYm9yZGVyIGQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIgbGF5b3V0LWJ1dHRvblwiXG4gICAgICAgIGZvcj1cInNtYWxsXCJcbiAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgIGNvbG9yOiBzZWxlY3RlZFRhYmxlTGF5b3V0ID09ICdzbWFsbCcgPyAnIzAwMCcgOiAnIzcyNzI3MidcbiAgICAgICAgfVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LWJveCBib3JkZXIgbWItMVwiIHN0eWxlPVwiaGVpZ2h0OiA4cHhcIj48L2Rpdj5cbiAgICAgICAgU21hbGxcbiAgICAgIDwvbGFiZWw+XG5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICBjbGFzcz1cImJ0bi1jaGVjayBsYXlvdXQtYnV0dG9uLWNoZWNrXCJcbiAgICAgICAgbmFtZT1cImxheW91dFNpemVcIlxuICAgICAgICBpZD1cIm1lZGl1bVwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGVkVGFibGVMYXlvdXQgPT0gJ21lZGl1bSdcIlxuICAgICAgICAoY2hhbmdlKT1cImNoYW5nZVRhYmxlTGF5b3V0KCRldmVudCwgJ21lZGl1bScpXCJcbiAgICAgIC8+XG4gICAgICA8bGFiZWxcbiAgICAgICAgY2xhc3M9XCJib3JkZXIgbXgtMyBkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIGxheW91dC1idXR0b25cIlxuICAgICAgICBmb3I9XCJtZWRpdW1cIlxuICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgY29sb3I6IHNlbGVjdGVkVGFibGVMYXlvdXQgPT0gJ21lZGl1bScgPyAnIzAwMCcgOiAnIzcyNzI3MidcbiAgICAgICAgfVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LWJveCBib3JkZXIgbWItMVwiIHN0eWxlPVwiaGVpZ2h0OiAxMnB4XCI+PC9kaXY+XG4gICAgICAgIE1lZGl1bVxuICAgICAgPC9sYWJlbD5cblxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgIGNsYXNzPVwiYnRuLWNoZWNrIGxheW91dC1idXR0b24tY2hlY2tcIlxuICAgICAgICBuYW1lPVwibGF5b3V0U2l6ZVwiXG4gICAgICAgIGlkPVwibGFyZ2VcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAoY2hhbmdlKT1cImNoYW5nZVRhYmxlTGF5b3V0KCRldmVudCwgJ2xhcmdlJylcIlxuICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3RlZFRhYmxlTGF5b3V0ID09ICdsYXJnZSdcIlxuICAgICAgLz5cbiAgICAgIDxsYWJlbFxuICAgICAgICBjbGFzcz1cImJvcmRlciBkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIGxheW91dC1idXR0b25cIlxuICAgICAgICBmb3I9XCJsYXJnZVwiXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICBjb2xvcjogc2VsZWN0ZWRUYWJsZUxheW91dCA9PSAnbGFyZ2UnID8gJyMwMDAnIDogJyM3MjcyNzInXG4gICAgICAgIH1cIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy1ib3ggYm9yZGVyIG1iLTFcIiBzdHlsZT1cImhlaWdodDogMTZweFwiPjwvZGl2PlxuICAgICAgICBMYXJnZVxuICAgICAgPC9sYWJlbD5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG4gICAgPGhyIGNsYXNzPVwibXktMlwiIC8+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMlwiPlxuICAgICAgPHNwYW4+U2hvdyBzZXBhcmF0b3JzPC9zcGFuPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2ggbS0wXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICBpZD1cInNlcGFyYXRvcnNcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwic2hvd1ZlcnRpY2FsQm9yZGVyXCJcbiAgICAgICAgICAoY2hhbmdlKT1cIm9uRm9udENoYW5nZSgpXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICA8c3Bhbj5Sb3cgc2hhZGluZzwvc3Bhbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoIG0tMFwiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwicm93U2hhZGluZ0VuYWJsZWRcIlxuICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlUm93U2hhZGluZygpXCJcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIGlkPVwicm93U2hhZGluZ1wiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTJcIj5cbiAgICAgIDxzcGFuPlNob3cgU2lkZSBNZW51PC9zcGFuPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2ggbS0wXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJzaG93U2lkZU1lbnVcIlxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgaWQ9XCJyb3dTaGFkaW5nXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTJcIj5cbiAgICAgIDxzcGFuPlNob3cgRmlsdGVyIFJvdzwvc3Bhbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoIG0tMFwiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwic2hvd0ZpbHRlclJvd1wiXG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICBpZD1cInJvd1NoYWRpbmdcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdGFibGVQcmVzZXQ+XG4gIDxkaXZcbiAgICAqbmdJZj1cImFjdGl2ZVN1YkJ1dHRvbiAhPT0gJ3NhdmUtcHJlc2V0J1wiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgY2xhc3M9XCJwLTMgc2hhZG93IGFjdGlvbnMtZHJvcGRvd24gbXQtMSBkcm9wZG93bi1tZW51IHNob3cgc2hhZG93IGN1c3RvbS1tZW51IHRhYmxlLWxheW91dFwiXG4gICAgc3R5bGU9XCJ3aWR0aDogMjgwcHhcIlxuICA+XG4gICAgPCEtLSBIZWFkZXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItM1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rIHAtMFwiXG4gICAgICAgICAgc3R5bGU9XCJtYXJnaW4tbGVmdDogLTEwcHhcIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVBY3Rpb25zKCdzZXR0aW5nJylcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvYXJyb3ctbGVmdC5zdmcnXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGg2IGNsYXNzPVwibWItMCBtcy0yXCIgc3R5bGU9XCJmb250LXdlaWdodDogNTAwXCI+VGFibGUgUHJlc2V0czwvaDY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwhLS0gU2F2ZSBQcmVzZXQgQnV0dG9uIHdpdGggRHJvcGRvd24gLS0+XG4gICAgICA8ZGl2PlxuICAgICAgICA8YVxuICAgICAgICAgIGNsYXNzPVwidGV4dC1kZWNvcmF0aW9uLW5vbmUgdGV4dC1wcmltYXJ5XCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBpZD1cInNhdmVQcmVzZXREcm9wZG93blwiXG4gICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgdG9nZ2xlU3ViQWN0aW9ucygnc2F2ZS1wcmVzZXQnKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBpc1RhYmxlUHJlc2V0Tm90Q2hhbmdlZCA/IFwiU2F2ZSBwcmVzZXRcIiA6IFwiVXBkYXRlIFByZXNldFwiIH19XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTZWFyY2ggLS0+XG4gICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZ2xvYmFsLXNlYXJjaFwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvc2VhcmNoLnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG14LTIgcG9zaXRpb24tYWJzb2x1dGUgaWNvblwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFByZXNldFRhYmxlXCJcbiAgICAgICAgICB0eXBlPVwic2VhcmNoXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBQcmVzZXQgTGlzdCAtLT5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdJZj1cIlxuICAgICAgICB0YWJsZVZpZXcgfCBmaWx0ZXIgOiBzZWFyY2hUZXh0UHJlc2V0VGFibGUgOiAnbmFtZScgYXMgZmlsdGVyZWRMaXN0XG4gICAgICBcIlxuICAgID5cbiAgICAgIDwhLS0gSWYgZmlsdGVyZWRMaXN0IGV4aXN0cyBhbmQgbm9uZSBpcyBkZWZhdWx0IC0+IHNob3cgZmFsbGJhY2sgLS0+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiIHBiLTUgb3ZlcmZsb3ctYXV0b1wiXG4gICAgICAgIFtzdHlsZS5tYXhIZWlnaHQucHhdPVwiZGF0YUdyaWRDb250YWluZXIub2Zmc2V0SGVpZ2h0IC0gMjUwXCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgIGNsZWFyQWxsRmlsdGVycyh0cnVlKTtcbiAgICAgICAgICAgIG9wZW5JbmRleCA9IG51bGw7XG4gICAgICAgICAgICB0ZW1wX3N0YXRlLmlkID0gJyc7XG4gICAgICAgICAgICBhY3RpdmVUb3BCdXR0b24gPSAnJztcbiAgICAgICAgICAgIGN1cnJldGFUYWJsZVByZXNldEZvclVwZGF0ZSA9IG51bGxcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LXNlbWlib2xkXCI+RGVmYXVsdCBWaWV3PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XG4gICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1kYXJrXCI+Q3JlYXRlZCBieSBzeXN0ZW08L3NtYWxsPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAqbmdJZj1cIiF0YWJsZUZpbHRlclZpZXdJZCAmJiAhaGFzQW55RGVmYXVsdFZpZXcoKVwiXG4gICAgICAgICAgICBjbGFzcz1cImJhZGdlIGJnLWxpZ2h0IHRleHQtcHJpbWFyeSBtcy0yXCJcbiAgICAgICAgICAgID5EZWZhdWx0PC9zcGFuXG4gICAgICAgICAgPlxuICAgICAgICAgIDwhLS0gPHNwYW5cbiAgICAgICAgICAgICpuZ0lmPVwiIXRhYmxlRmlsdGVyVmlld0lkICYmICFoYXNBbnlEZWZhdWx0VmlldygpXCJcbiAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hlY2stYmx1ZS5zdmcnXCJcbiAgICAgICAgICAgIGNsYXNzPVwibWUtMlwiXG4gICAgICAgICAgPjwvc3Bhbj4gLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93biBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiXG4gICAgICAgICAgICAqbmdJZj1cInRhYmxlRmlsdGVyVmlld0lkXCJcbiAgICAgICAgICA+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gVGhlIGxpc3Q6IHJlbmRlciBlYWNoIHRhYmxlIGZyb20gZmlsdGVyZWRMaXN0IC0tPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIlxuICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgbGV0IHRhYmxlIG9mIGZpbHRlcmVkTGlzdDtcbiAgICAgICAgICAgIGxldCBpID0gaW5kZXg7XG4gICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5VGFibGVcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPCEtLSBJdGVtIC0tPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBvcGVuSW5kZXggPSBudWxsOyBhY3RpdmVUb3BCdXR0b24gPSAnJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIHB4LTAgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwic2VsZWN0RmlsdGVyKHRhYmxlKTsgb3BlbkluZGV4ID0gbnVsbFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctc2VtaWJvbGRcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiPlxuICAgICAgICAgICAgICAgIHt7IHRhYmxlPy5uYW1lIH19XG4gICAgICAgICAgICAgICAgPCEtLSB7e3RhYmxlPy5pc190ZW1wfX0gLS0+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICh0YWJsZT8uaXNfdGVtcCAmJiAhdGVtcF9zdGF0ZS5pZCkgfHxcbiAgICAgICAgICAgICAgICAgICAgdGVtcF9zdGF0ZS5pZCA9PSB0YWJsZS5pZFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZWNrLWJsdWUuc3ZnJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWUtMlwiXG4gICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ0YWJsZT8uaXNfZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImJhZGdlIGJnLWxpZ2h0IHRleHQtcHJpbWFyeSBtcy0yXCJcbiAgICAgICAgICAgICAgICAgID5EZWZhdWx0PC9zcGFuXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1kYXJrXCIgKm5nSWY9XCJ0YWJsZT8uY29uZmlnPy5maWx0ZXJOYW1lc1wiIFt0aXRsZV09XCJ0YWJsZT8uY29uZmlnPy5maWx0ZXJOYW1lc1wiPlxuICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICB0YWJsZT8uY29uZmlnPy5maWx0ZXJOYW1lcz8ubGVuZ3RoID4gMjVcbiAgICAgICAgICAgICAgPyAodGFibGU/LmNvbmZpZz8uZmlsdGVyTmFtZXMgfCBzbGljZTowOjI1KSArICcuLi4nXG4gICAgICAgICAgICAgIDogdGFibGU/LmNvbmZpZz8uZmlsdGVyTmFtZXNcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgKHt7IHRhYmxlPy5jb25maWc/LnRvdGFsQ291bnQgfX0pXG4gICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtZGFya1wiICpuZ0lmPVwiIXRhYmxlPy5jb25maWc/LmZpbHRlck5hbWVzXCI+e3sgdGFibGU/LmNyZWF0ZWRBdCB8IGRhdGUgOiBcIk1NTSBkLCB5XCIgfX08L3NtYWxsPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJ0YWJsZT8uaXNfZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZWNrLWJsdWUuc3ZnJ1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtZS0yXCJcbiAgICAgICAgICAgICAgPjwvc3Bhbj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd25cIiAqbmdJZj1cIiF0YWJsZT8uaXNfZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24td3JhcHBlclwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1pY29uIG11dGVkLXRleHRcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlTWVudShpLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIm9wZW5JbmRleCA9PT0gaVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEtZ3JpZC9pY29ucy9ob3Jpem9udGFsLWRvdHMuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZS0yXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICA8IS0tIG1lbnUgLS0+XG4gICAgICAgICAgICAgICAgIDx1bFxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm9wZW5JbmRleCA9PT0gaVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3VzdG9tLWRyb3Bkb3duLW1lbnUgcG9zaXRpb24tZml4ZWQgdG9wLWF1dG9cIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwibWVudVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5yaWdodC5weF09XCIndW5zZXQnXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwiZGF0YUdyaWRDb250YWluZXIub2Zmc2V0V2lkdGggLSAyMDBcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInRvcDogdW5zZXQ7IHJpZ2h0OiB1bnNldFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxsaSByb2xlPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJtZW51aXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25QcmVzZXQodGFibGUsICdzZXRQcmVzZXQnKTsgdGVtcF9zdGF0ZS5pZCA9ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvc3Rhci5zdmcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWUtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgU2V0IGFzIGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cblxuICAgICAgICAgICAgICAgICAgICA8bGkgcm9sZT1cIm5vbmVcIiAqbmdJZj1cIiF0YWJsZS5jb25maXJtRGVsZXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSB0ZXh0LWRhbmdlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidGFibGUuY29uZmlybURlbGV0ZSA9IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLXRvcDogLTRweFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEtZ3JpZC9pY29ucy90cmFzaC1yZWQuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1lLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIERlbGV0ZVxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuXG4gICAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRhYmxlLmNvbmZpcm1EZWxldGVcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29uZmlybS1ibG9ja1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMyBweS0yIHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIDxiciAvPjxiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPuKAnHt7IHRhYmxlPy5uYW1lIH194oCdPC9iXG4gICAgICAgICAgICAgICAgICAgICAgICAgID4/XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQgbWUtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRhYmxlLmNvbmZpcm1EZWxldGUgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLWRhbmdlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvblByZXNldCh0YWJsZSwgJ2RlbGV0ZVByZXNldCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlbGV0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIEl0ZW0gRW5kIEhlcmUgLS0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuXG4gIDxkaXZcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAqbmdJZj1cImFjdGl2ZVN1YkJ1dHRvbiA9PSAnc2F2ZS1wcmVzZXQnXCJcbiAgICBjbGFzcz1cImRyb3Bkb3duLW1lbnUgcC0zIGJhZGdlIG10LTQgc2F2ZS1wcmVzZXQtZHJvcGRvd24gbXQtMVwiXG4gICAgYXJpYS1sYWJlbGxlZGJ5PVwic2F2ZVByZXNldERyb3Bkb3duXCJcbiAgICBzdHlsZT1cIm1pbi13aWR0aDogMjUwcHhcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImZ3LWJvbGQgZnMtMTRweCBtYi0yXCI+XG4gICAgICB7eyBpc1RhYmxlUHJlc2V0Tm90Q2hhbmdlZCA/IFwiU2F2ZSBwcmVzZXRcIiA6IFwiVXBkYXRlIFByZXNldFwiIH19XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZzLTE0cHggbWItMlwiIHN0eWxlPVwibGluZS1oZWlnaHQ6IDIwcHhcIj5cbiAgICAgIFRoaXMgd2lsbCBzYXZlIHRoZSBjdXJyZW50IHRhYmxlIGFkanVzdG1lbnRzIGFzIGEgcHJlc2V0LlxuICAgIDwvZGl2PlxuICAgIDwhLS0gSW5wdXQgLS0+XG4gICAgPGRpdiBjbGFzcz1cIm1iLTJcIj5cbiAgICAgIDxsYWJlbCBmb3I9XCJwcmVzZXROYW1lXCIgY2xhc3M9XCJmb3JtLWxhYmVsIGZzLTEycHggZnctYm9sZFwiXG4gICAgICAgID5QcmVzZXQgTmFtZTwvbGFiZWxcbiAgICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZ2xvYmFsLXNlYXJjaFwiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAjcHJlc2V0TmFtZUN0cmw9XCJuZ01vZGVsXCJcbiAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgIFsobmdNb2RlbCldPVwicHJlc2V0TmFtZVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2lzLWludmFsaWQnOlxuICAgICAgICAgICAgICBwcmVzZXROYW1lQ3RybC5pbnZhbGlkICYmXG4gICAgICAgICAgICAgIChwcmVzZXROYW1lQ3RybC5kaXJ0eSB8fCBwcmVzZXROYW1lQ3RybC50b3VjaGVkKVxuICAgICAgICAgIH1cIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSBwcy0yXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHByZXNldCBuYW1lXCJcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQ2hlY2tib3ggLS0+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWItMlwiPlxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgIFsobmdNb2RlbCldPVwicHJlc2V0RmlsdGVyXCJcbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgaWQ9XCJzYXZlRmlsdGVyc1wiXG4gICAgICAvPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBtdC0xXCIgZm9yPVwic2F2ZUZpbHRlcnNcIj5cbiAgICAgICAgU2F2ZSBhY3RpdmUgZmlsdGVyc1xuICAgICAgPC9sYWJlbD5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gU2F2ZSBCdXR0b24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGdhcC0yXCIgc3R5bGU9XCJoZWlnaHQ6IDMycHhcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAzMnB4XCJcbiAgICAgICAgY2xhc3M9XCJidG4gYm9yZGVyIHctMTAwIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBidG4tbGlnaHRcIlxuICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyB0b2dnbGVBY3Rpb25zKCd0YWJsZS1wcmVzZXRzJylcIlxuICAgICAgICBzdHlsZT1cIm1hcmdpbi10b3A6IC0ycHhcIlxuICAgICAgPlxuICAgICAgICA8c3Bhbj5DYW5jZWw8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgW2Rpc2FibGVkXT1cImNsb3NlRHJvcGRvd24ucHJlc2V0LmxvYWRpbmdcIlxuICAgICAgICAoY2xpY2spPVwic2F2ZVByZXNldChwcmVzZXROYW1lQ3RybClcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDMycHhcIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB3LTEwMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxuICAgICAgPlxuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi10b3A6IC0ycHhcIiAqbmdJZj1cImlzVGFibGVQcmVzZXROb3RDaGFuZ2VkXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjbG9zZURyb3Bkb3duLnByZXNldC5sb2FkaW5nXCJcbiAgICAgICAgICAgID5TYXZlPC9uZy1jb250YWluZXJcbiAgICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNsb3NlRHJvcGRvd24ucHJlc2V0LmxvYWRpbmdcIlxuICAgICAgICAgICAgPjxzcGFuIGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgc3Bpbm5lci1ib3JkZXItc21cIj48L3NwYW5cbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gc3R5bGU9XCJ3aGl0ZS1zcGFjZTogbm93cmFwXCIgKm5nSWY9XCIhaXNUYWJsZVByZXNldE5vdENoYW5nZWRcIlxuICAgICAgICAgID5VcGRhdGUgUHJlc2V0PC9zcGFuXG4gICAgICAgID5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2hvd0hpZGVDb2x1bW5zPlxuICA8ZGl2XG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgY2xhc3M9XCJwLTMgc2hhZG93IGFjdGlvbnMtZHJvcGRvd24gbXQtMSBkcm9wZG93bi1tZW51IHNob3cgc2hhZG93IGN1c3RvbS1tZW51IHRhYmxlLWxheW91dFwiXG4gICAgc3R5bGU9XCJ3aWR0aDogMjgwcHhcIlxuICA+XG4gICAgPCEtLSBIZWFkZXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItM1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rIHAtMFwiXG4gICAgICAgICAgc3R5bGU9XCJtYXJnaW4tbGVmdDogLTEwcHhcIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVBY3Rpb25zKCdzZXR0aW5nJylcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvYXJyb3ctbGVmdC5zdmcnXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGg2IGNsYXNzPVwibWItMCBtcy0yXCIgc3R5bGU9XCJmb250LXdlaWdodDogNTAwXCI+Q29sdW1uczwvaDY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxhXG4gICAgICAgIChjbGljayk9XCJyZXNldENvbHVtbnMoKVwiXG4gICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIlxuICAgICAgICBjbGFzcz1cInRleHQtcHJpbWFyeSB0ZXh0LWRlY29yYXRpb24tbm9uZSBkLW5vbmVcIlxuICAgICAgICA+UmVzZXQ8L2FcbiAgICAgID5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gU2VhcmNoIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGdsb2JhbC1zZWFyY2hcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3NlYXJjaC5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cIm14LTIgcG9zaXRpb24tYWJzb2x1dGUgaWNvbiBkYXRhLWdyaWQtc3ZnLWljb25cIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGNvbHVtblwiXG4gICAgICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJ0b3BTaG93SGlkZUNvbHVtbnNcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPCEtLSBQcmVzZXQgTGlzdCAtLT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiXG4gICAgICBzdHlsZT1cIm92ZXJmbG93OiBhdXRvOyBzY3JvbGxiYXItd2lkdGg6IHRoaW5cIlxuICAgICAgW3N0eWxlLm1heEhlaWdodC5weF09XCJkYXRhR3JpZENvbnRhaW5lci5vZmZzZXRIZWlnaHQgLSAyMjBcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJtdXRlZC10ZXh0IHNob3ctaGlkZS10YWJsZS1sYWJlbCBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIiAqbmdJZj1cImhhc0FueVZpc2libGVDb2x1bW5cIj5cbiAgICAgICAgU2hvdyBpbiB0YWJsZVxuICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICBpZD1cImhpZGVfYWxsXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiYWxsQ29sdW1uc1NlbGVjdGVkKClcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZUFsbENvbHVtbnNWaXNpYmlsaXR5KClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgZnctc2VtaWJvbGRcIiBmb3I9XCJoaWRlX2FsbFwiPlxuICAgICAgICAgICAgICBTaG93L0hpZGUgQWxsIFxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPCEtLSBJdGVtIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICBsZXQgY29sIG9mIGNvbHVtbnMgfCBmaWx0ZXIgOiB0b3BTaG93SGlkZUNvbHVtbnMgOiAnaGVhZGVyJztcbiAgICAgICAgICB0cmFja0J5OiB0cmFja0J5RmllbGRcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwiY29sLmlzX3Zpc2libGVcIlxuICAgICAgICAgIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJvcmRlci0wIHB4LTAgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0xXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNvbD8ucGlubmVkXCJcbiAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZ3JpcC12ZXJ0aWNhbC5zdmcnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1ncmFwIGRhdGEtZ3JpZC1zdmctaWNvblwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb2w/LnBpbm5lZFwiXG4gICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3Bpbi1ibHVlLnN2ZydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLWdyYXAgZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LXNlbWlib2xkXCI+XG4gICAgICAgICAgICAgIHt7IGNvbC5oZWFkZXIgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiIWNvbD8ucXVlcnk/LmZpcnN0X3ZhbHVlICYmICFjb2w/LnF1ZXJ5Py5faWRzPy5sZW5ndGhcIlxuICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDb2x1bW5WaXNpYmlsaXR5KGNvbCwgZmFsc2UpXCJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJ2aXNpYmxlQ29sdW1ucygpLmxlbmd0aCA8PSAyIHx8IGNvbD8uaXNfYWx3YXlzX3Zpc2libGVcIlxuICAgICAgICAgICAgW2NsYXNzLnBlLW5vbmVdPVwidmlzaWJsZUNvbHVtbnMoKS5sZW5ndGggPD0gMiB8fCBjb2w/LmlzX2Fsd2F5c192aXNpYmxlXCJcbiAgICAgICAgICAgIFtjbGFzcy5vcGFjaXR5LTUwXT1cInZpc2libGVDb2x1bW5zKCkubGVuZ3RoIDw9IDIgfHwgY29sPy5pc19hbHdheXNfdmlzaWJsZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9leWUuc3ZnJ1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cImNvbD8ucXVlcnk/LmZpcnN0X3ZhbHVlIHx8IGNvbD8ucXVlcnk/Ll9pZHM/Lmxlbmd0aFwiXG4gICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgc3R5bGU9XCJvcGFjaXR5OiAwLjVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZXllLnN2ZydcIlxuICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gSXRlbSBFbmQgSGVyZSAtLT5cblxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWRpdmlkZXJcIlxuICAgICAgICAqbmdJZj1cImhhc0FueVZpc2libGVDb2x1bW4gJiYgaGFzQW55SW5WaXNpYmxlQ29sdW1uXCJcbiAgICAgID48L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cIm11dGVkLXRleHQgc2hvdy1oaWRlLXRhYmxlLWxhYmVsIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiXG4gICAgICAgICpuZ0lmPVwiaGFzQW55SW5WaXNpYmxlQ29sdW1uXCJcbiAgICAgID5cbiAgICAgICAgSGlkZSBpbiB0YWJsZVxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgIGlkPVwic2hvd19hbGxcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJhbGxDb2x1bW5zU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlQWxsQ29sdW1uc1Zpc2liaWxpdHkoKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBmdy1zZW1pYm9sZFwiIGZvcj1cInNob3dfYWxsXCI+XG4gICAgICAgICAgICAgIFNob3cvSGlkZSBBbGwgXG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zIHwgZmlsdGVyIDogdG9wU2hvd0hpZGVDb2x1bW5zIDogJ2hlYWRlcic7IHRyYWNrQnk6IHRyYWNrQnlGaWVsZFwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiIWNvbC5pc192aXNpYmxlXCJcbiAgICAgICAgICAgIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJvcmRlci0wIHB4LTAgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMVwiPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIiFjb2w/LnBpbm5lZFwiXG4gICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9ncmlwLXZlcnRpY2FsLnN2ZydcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBjdXJzb3ItZ3JhcFwiXG4gICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbD8ucGlubmVkXCJcbiAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3Bpbi1ibHVlLnN2ZydcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBjdXJzb3ItZ3JhcFwiXG4gICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LXNlbWlib2xkXCI+XG4gICAgICAgICAgICAgICAge3sgY29sLmhlYWRlciB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQ29sdW1uVmlzaWJpbGl0eShjb2wsIHRydWUpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZXllLWNyb3NzLnN2ZydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gSXRlbSBFbmQgSGVyZSAtLT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2ZpbHRlckNvbHVtbnMgbGV0LWNvbD1cImNvbHVtblwiPlxuICA8ZGl2XG4gICAgQHNsaWRlVG9nZ2xlXG4gICAgKm5nSWY9XCIhaXNGaWx0ZXJPcGVuICYmIGFjdGl2ZVRvcEJ1dHRvbiA9PSAnZmlsdGVyLWNvbHVtbnMnXCJcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICBjbGFzcz1cInNoYWRvdyBhY3Rpb25zLWRyb3Bkb3duIG10LTEgc2hvdyBzaGFkb3cgY3VzdG9tLW1lbnUgdGFibGUtbGF5b3V0IGZpbHRlci1jb2x1bW5zXCJcbiAgICBzdHlsZT1cIndpZHRoOiAyODBweDsgcmlnaHQ6IHVuc2V0OyBtYXgtd2lkdGg6IDIzMHB4XCJcbiAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImNoZWNrYm94ZXNCYWNrZ3JvdW5kQ29sb3JcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cIm1iLTIgcHgtM1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBnbG9iYWwtc2VhcmNoXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9zZWFyY2guc3ZnJ1wiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbXgtMiBwb3NpdGlvbi1hYnNvbHV0ZSBpY29uXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIkZpbHRlciBieVwiXG4gICAgICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJhZGRGaWx0ZXJDb2x1bW5JbnB1dFwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiXG4gICAgICBzdHlsZT1cIm1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSA1MDBweCk7IG92ZXJmbG93OiBhdXRvXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgIGxldCBjb2wgb2YgY29sdW1ucyB8IGZpbHRlciA6IGFkZEZpbHRlckNvbHVtbklucHV0IDogJ2hlYWRlcic7XG4gICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUZpZWxkXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAoY2xpY2spPVwib3BlbkZpbHRlcihjb2wpXCJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgY29sLmlzX3Zpc2libGUgJiZcbiAgICAgICAgICAgICFjb2w/LnF1ZXJ5Py5maXJzdF92YWx1ZSAmJlxuICAgICAgICAgICAgIWNvbD8ucXVlcnk/Ll9pZHM/Lmxlbmd0aCAmJiBjb2w/LnR5cGUgIT09ICdpbWFnZScgJiYgY29sLmlzX3NlYXJjaF9hYmxlXG4gICAgICAgICAgXCJcbiAgICAgICAgICBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBib3JkZXItMCBweC0wIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgZHJvcGRvd24taXRlbSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0xXCI+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDogLTNweFwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LXNlbWlib2xkIHRleHQtY2FwaXRhbGl6ZVwiIHN0eWxlPVwidGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XCI+XG4gICAgICAgICAgICAgIHt7IGNvbC5oZWFkZXIgIHwgdGl0bGVjYXNlICB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gRHJvcGRvd24gLS0+XG4gIDxkaXZcbiAgICBAc2xpZGVUb2dnbGVcbiAgICAqbmdJZj1cImlzRmlsdGVyT3BlbiAmJiBzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAnZHJvcGRvd24nIHx8IHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdhcnJheSdcIlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgIGNsYXNzPVwic2hhZG93IGFjdGlvbnMtZHJvcGRvd24gbXQtMSBzaG93IHNoYWRvdyBjdXN0b20tbWVudSB0YWJsZS1sYXlvdXQgZmlsdGVyLWNvbHVtbnMgcGItMlwiXG4gICAgc3R5bGU9XCJ3aWR0aDogMjgwcHg7IHJpZ2h0OiB1bnNldDsgbWF4LXdpZHRoOiAyMzBweFwiXG4gICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJjaGVja2JveGVzQmFja2dyb3VuZENvbG9yXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJweC0zIG15LTIgYm9yZGVyLWJlbG93IHB5LTEgcGItMiBtYi0zIGQtZmxleCBwcy0xXCI+XG4gICAgICA8c3BhblxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWN0aW9ucygnZmlsdGVyLWNvbHVtbnMnKTsgaXNBY3RpdmVGaWx0ZXJPcGVuID0gZmFsc2VcIlxuICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Fycm93LWxlZnQuc3ZnJ1wiXG4gICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTIgY3Vyc29yLXBvaW50ZXIgdGV4dC1jYXBpdGFsaXplXCIgc3R5bGU9XCJ0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcIlxuICAgICAgPjwvc3BhblxuICAgICAgPjxiPnt7IHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy5oZWFkZXIgfCB0aXRsZWNhc2UgIH19PC9iPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtYi0yIHB4LTNcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjb2wtMTIgZ2xvYmFsLXNlYXJjaCBwb3NpdGlvbi1yZWxhdGl2ZSBib3JkZXIgcm91bmRlZCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtd3JhcCBweC0yIGZpbHRlci1zZXJhY2gtaW5wdFwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHNlbGVjdGVkIG9mIHNlbGVjdGVkRmlsdGVyT3B0aW9uc1wiXG4gICAgICAgICAgY2xhc3M9XCJiYWRnZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xIG1lLTEgbWItMSB0b3Atcm93LWZpbHRlci1kcm9wZG93biB0ZXh0LWNhcGl0YWxpemVcIiBzdHlsZT1cInRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplO1wiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBzZWxlY3RlZD8udmFsdWUgPyBzZWxlY3RlZC52YWx1ZSA6IHNlbGVjdGVkIHwgdGl0bGVjYXNlIH19XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTZWxlY3Rpb25JbkZpbHRlcihzZWxlY3RlZClcIlxuICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY3Jvc3MtcHJpbWFyeS5zdmcnXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJtZS0yXCJcbiAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSBib3JkZXItMCBmbGV4LWdyb3ctMVwiXG4gICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAwXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VsZWN0ZWRGaWx0ZXJPcHRpb25zPy5sZW5ndGggPyAnJyA6ICdGaWx0ZXIgYnknXCJcbiAgICAgICAgICB0eXBlPVwic2VhcmNoXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRGb3JGaWx0ZXJEcm9wRG93blwiXG4gICAgICAgICAgKGtleWRvd24uYmFja3NwYWNlKT1cImhhbmRsZUJhY2tzcGFjZSgkZXZlbnQpXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCJcbiAgICAgIHN0eWxlPVwibWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDYwMHB4KTsgb3ZlcmZsb3c6IGF1dG9cIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgbGV0IGNvbCBvZiBzZWxlY3RlZENvbHVtbkZvckZpbHRlci5jb2x1bW5fZHJvcGRvd25fdmFsdWVcbiAgICAgICAgICAgIHwgZmlsdGVyIDogc2VhcmNoVGV4dEZvckZpbHRlckRyb3BEb3duIDogJ3ZhbHVlJztcbiAgICAgICAgICBsZXQgaSA9IGluZGV4XG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBib3JkZXItMCBweC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgZHJvcGRvd24taXRlbSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgIFtpZF09XCJpXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmhhcyhjb2wuaWQgfHwgY29sLl9pZCB8fCBjb2wpXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVTZWxlY3Rpb25JbkZpbHRlcihjb2wpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIGZ3LXNlbWlib2xkIHRleHQtY2FwaXRhbGl6ZVwiIHN0eWxlPVwidGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XCIgW2Zvcl09XCJpXCI+XG4gICAgICAgICAgICAgIHt7IGNvbD8udmFsdWUgfHwgY29sPy5uYW1lIHx8IGNvbCB8IHRpdGxlY2FzZSAgfX1cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBnYXAtMiBweC0yIGJvcmRlci10b3BcIlxuICAgICAgc3R5bGU9XCJoZWlnaHQ6IDM4cHhcIlxuICAgID5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAzMnB4XCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJ0bi1saWdodCBib3JkZXIgdy0xMDAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG10LTEgYnRuLWxpZ2h0XCJcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgcmVzZXRGaWx0ZXJDaGFuZ2VzKClcIlxuICAgICAgPlxuICAgICAgICA8c3Bhbj5DYW5jZWw8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAzMnB4XCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdy0xMDAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG10LTFcIlxuICAgICAgICAoY2xpY2spPVwiYXBwbHlEcm9wZG93bkZpbHRlcigpXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tdG9wOiAtMnB4XCI+U2F2ZTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEZvciBUZXh0IGZpZWxkcyBhbmQgbnVtYmVyIGZpZWxkcy0tPlxuXG4gIDxkaXZcbiAgICBAc2xpZGVUb2dnbGVcbiAgICAqbmdJZj1cIlxuICAgICAgaXNGaWx0ZXJPcGVuICYmXG4gICAgICAoc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ3N0cmluZycgfHxcbiAgICAgICAgc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICAgc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ3RpbWUnIHx8XG4gICAgICAgIHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdkYXRlJylcbiAgICBcIlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgIGNsYXNzPVwic2hhZG93IGFjdGlvbnMtZHJvcGRvd24gbXQtMSBzaG93IHNoYWRvdyBjdXN0b20tbWVudSB0YWJsZS1sYXlvdXQgZmlsdGVyLWNvbHVtbnMgcGItMlwiXG4gICAgc3R5bGU9XCJ3aWR0aDogMjEwcHg7IHJpZ2h0OiB1bnNldDsgbWF4LXdpZHRoOiAyMzBweFwiXG4gICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJjaGVja2JveGVzQmFja2dyb3VuZENvbG9yXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJweC0zIGJvcmRlci1iZWxvdyBweS0xIHBiLTIgZC1mbGV4IHBzLTFcIj5cbiAgICAgIDxzcGFuXG4gICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvYXJyb3ctbGVmdC5zdmcnXCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFjdGlvbnMoJ2ZpbHRlci1jb2x1bW5zJyk7IGlzQWN0aXZlRmlsdGVyT3BlbiA9IGZhbHNlXCJcbiAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMiBjdXJzb3ItcG9pbnRlclwiXG4gICAgICA+PC9zcGFuXG4gICAgICA+PGI+e3sgc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LmhlYWRlciB9fTwvYj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIHBvc2l0aW9uLXJlbGF0aXZlIHAtMiB0ZXh0LWZpbHRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTJcIj5cbiAgICAgICAgPHNlbGVjdFxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1zZWxlY3QgZm9ybS1zZWxlY3Qtc20gY3VzdG9tLXNlbGVjdCBib3JkZXJcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiZmlyc3RDb25kaXRpb25cIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdzdHJpbmcnXCI+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiY29udGFpblwiPkNvbnRhaW5zPC9vcHRpb24+XG4gICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImRvZXNfbm90X2NvbnRhaW5cIj5Eb2VzIE5vdCBDb250YWluPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXF1YWxcIj5FcXVhbHM8L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5TdGFydHMgV2l0aDwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+RW5kcyBXaXRoPC9vcHRpb24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ2RhdGUnIHx8IHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICd0aW1lJ1wiPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzIFRvPC9vcHRpb24+XG4gICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm5vdF9lcXVhbFwiPk5vdCBFcXVhbDwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+QWZ0ZXI8L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5CZWZvcmU8L29wdGlvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ251bWJlcidcIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzIFRvPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5MZXNzIFRoZW4gPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhZnRlclwiPkdyZWF0ZXIgVGhlbiA8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImxlc3NfdGhlbl9lcXVhbFwiPmxlc3MgdGhlbiBFcXVhbCB0bzwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZ3JlYXRlcl90aGVuX2VxdWFsXCI+R3JlYXRlciB0aGVuIEVxdWFsIHRvIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibWItMlwiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgZmlyc3QgdmFsdWVcIlxuICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICAgIFt0eXBlXT1cIlxuICAgICAgICAgICAgc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgPyAndGV4dCdcbiAgICAgICAgICAgICAgOiBzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZVxuICAgICAgICAgIFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJmaXJzdFZhbHVlXCJcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJhcHBseURyb3Bkb3duRmlsdGVyKClcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG15LTMgZC1mbGV4IGZsZXgtcm93XCIgc3R5bGU9XCJmb250LXNpemU6IDE0cHhcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmUgY29sLTQgbS0wIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBpZD1cImxvZ2ljYWxBbmRcIlxuICAgICAgICAgICAgICBuYW1lPVwibG9naWNhbE9wZXJhdG9yXCJcbiAgICAgICAgICAgICAgdmFsdWU9XCJhbmRcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbmRpdGlvblwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBtYi0wIG10LTFcIiBmb3I9XCJsb2dpY2FsQW5kXCJcbiAgICAgICAgICAgICAgPkFORDwvbGFiZWxcbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLWlubGluZSBjb2wtNCBtLTAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIGlkPVwibG9naWNhbE9yXCJcbiAgICAgICAgICAgICAgbmFtZT1cImxvZ2ljYWxPcGVyYXRvclwiXG4gICAgICAgICAgICAgIHZhbHVlPVwib3JcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbmRpdGlvblwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBtYi0wIG10LTFcIiBmb3I9XCJsb2dpY2FsT3JcIj5PUjwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmUgY29sLTQgbS0wIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBpZD1cImxvZ2ljYWxOb25lXCJcbiAgICAgICAgICAgICAgbmFtZT1cImxvZ2ljYWxPcGVyYXRvclwiXG4gICAgICAgICAgICAgIHZhbHVlPVwibm9uZVwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29uZGl0aW9uXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIG1iLTAgbXQtMVwiIGZvcj1cImxvZ2ljYWxOb25lXCJcbiAgICAgICAgICAgICAgPk5vbmU8L2xhYmVsXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb25kaXRpb24gIT09ICdub25lJyAmJiBmaXJzdFZhbHVlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTIgbXQtM1wiPlxuICAgICAgICAgICAgPCEtLSBTZWNvbmQgY29uZGl0aW9uIHNlbGVjdCAtLT5cbiAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbSBib3JkZXJcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlY29uZENvbmRpdGlvblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAnc3RyaW5nJ1wiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJjb250YWluXCI+Q29udGFpbnM8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZG9lc19ub3RfY29udGFpblwiPkRvZXMgTm90IENvbnRhaW48L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXF1YWxcIj5FcXVhbHM8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYmVmb3JlXCI+U3RhcnRzIFdpdGg8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5FbmRzIFdpdGg8L29wdGlvbj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdkYXRlJyB8fCBzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAndGltZSdcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXF1YWxcIj5FcXVhbHMgVG88L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibm90X2VxdWFsXCI+Tm90IEVxdWFsPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+QWZ0ZXI8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYmVmb3JlXCI+QmVmb3JlPC9vcHRpb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdudW1iZXInXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzIFRvPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPkxlc3MgVGhlbiA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5HcmVhdGVyIFRoZW4gPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImxlc3NfdGhlbl9lcXVhbFwiPmxlc3MgdGhlbiBFcXVhbCB0bzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJncmVhdGVyX3RoZW5fZXF1YWxcIj5HcmVhdGVyIHRoZW4gRXF1YWwgdG8gPC9vcHRpb24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTJcIj5cbiAgICAgICAgICAgIDwhLS0gU2Vjb25kIHZhbHVlIGlucHV0IC0tPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIFt0eXBlXT1cIlxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICA/ICd0ZXh0J1xuICAgICAgICAgICAgICAgICAgOiBzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHNlY29uZCB2YWx1ZVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlY29uZFZhbHVlXCJcbiAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiYXBwbHlEcm9wZG93bkZpbHRlcigpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGdhcC0yIHB4LTIgYm9yZGVyLXRvcFwiXG4gICAgICBzdHlsZT1cImhlaWdodDogMzhweFwiXG4gICAgPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBbZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXJTZWxlY3RlZElkcz8uc2l6ZSAmJiAhZmlyc3RWYWx1ZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBzdHlsZT1cImhlaWdodDogMzJweFwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBidG4tbGlnaHQgYm9yZGVyIHctMTAwIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBtdC0xIGJ0bi1saWdodFwiXG4gICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHJlc2V0VGV4dEZpbHRlckNoYW5nZXMoKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuPkNhbmNlbDwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBbZGlzYWJsZWRdPVwiKGN1cnJlbnRGaWx0ZXJTZWxlY3RlZElkcz8uc2l6ZSA9PT0gMCAmJiAhZmlyc3RWYWx1ZSkgfHwgKGNvbmRpdGlvbiAhPT0gJ25vbmUnICYmICFzZWNvbmRWYWx1ZSlcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDMycHhcIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB3LTEwMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgbXQtMVwiXG4gICAgICAgIChjbGljayk9XCJhcHBseURyb3Bkb3duRmlsdGVyKClcIlxuICAgICAgPlxuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi10b3A6IC0ycHhcIj5BcHBseTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gRWRpdCBkcm9wZG93biBoZXJlIC0tPlxuPG5nLXRlbXBsYXRlIGxldC1jb2w+XG4gIDxkaXYgY2xhc3M9XCJkcm9wLWRvd24tZWRpdFwiPjwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNmdWxsVGV4dFRlbXBsYXRlXG4gIGxldC1yb3c9XCJyb3dcIlxuICBsZXQtY29sPVwiY29sXCJcbiAgbGV0LWlzQXJyYXk9XCJpc0FycmF5XCJcbj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZnVsbC10ZXh0LWJveFwiXG4gICAgKGRibGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cImRhdGFHcmlkQ29udGFpbmVyLm9mZnNldEhlaWdodCAvIDJcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0VkaXRpbmcocm93LCBjb2wpXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiIWlzQXJyYXlcIlxuICAgICAgICBjbGFzcz1cImZ1bGwtdGV4dC1jb250ZW50XCJcbiAgICAgICAgW3N0eWxlLm1heEhlaWdodC5weF09XCJkYXRhR3JpZENvbnRhaW5lci5vZmZzZXRIZWlnaHQgLyAyXCJcbiAgICAgICAgKGRibGNsaWNrKT1cIlxuICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBlbmFibGVFZGl0KHJvdywgY29sLCB0cnVlKVxuICAgICAgICBcIlxuICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICA+XG4gICAgICAgIHt7XG4gICAgICAgICAgZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpPy52YWx1ZSB8fFxuICAgICAgICAgICAgZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpPy5uYW1lIHx8XG4gICAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZClcbiAgICAgICAgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cImlzQXJyYXlcIj5cbiAgICAgICAgPHVsPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKTsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGxpICpuZ0lmPVwiaSAhPT0gMFwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICBpdGVtPy5kZXBhcnRtZW50X25hbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgaXRlbT8ucm9sZU5hbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgaXRlbT8uZnVsbF9uYW1lIHx8XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0/LnZhbHVlIHx8XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0/Lm5hbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgXCItXCJcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNFZGl0aW5nKHJvdywgY29sKVwiPlxuICAgICAgPHRleHRhcmVhXG4gICAgICAgIChkYmxjbGljayk9XCJcbiAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZW5hYmxlRWRpdChyb3csIGNvbCwgdHJ1ZSlcbiAgICAgICAgXCJcbiAgICAgICAgI3RleHRNb2RlbD1cIm5nTW9kZWxcIlxuICAgICAgICByb3dzPVwiNFwiXG4gICAgICAgICN0ZXh0QXJlYWRJbnB1dFxuICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2wuZmllbGRdXCJcbiAgICAgICAgbmFtZT1cInt7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgIHJlcXVpcmVkXG4gICAgICAgIChibHVyKT1cImRpc2FibGVFZGl0KHJvdywgY29sLCB0ZXh0TW9kZWwpXCJcbiAgICAgICAgKGtleWRvd24uZW50ZXIpPVwidGV4dEFyZWFkSW5wdXQuYmx1cigpXCJcbiAgICAgICAgYXV0b2ZvY3VzXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICdpcy1pbnZhbGlkJzogdGV4dE1vZGVsLmludmFsaWRcbiAgICAgICAgfVwiXG4gICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgID48L3RleHRhcmVhPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEltYWdlUGxhY2Vob2xkZXIgbGV0LXJvdz1cInJvd1wiIGxldC1jb2w9XCJjb2xcIj5cbiAgPHNwYW5cbiAgICBjbGFzcz1cInB4LTIgZC1mbGV4IHctMTAwIGNlbGwtY29udGVudCBpbWFnZS1wbGFjZWhvbGRlclwiXG4gICAgW3RpdGxlXT1cInJvdz8uZnVsbF9uYW1lIHx8IHJvdz8ubmFtZSB8fCAnTi9BJ1wiXG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdJZj1cIlxuICAgICAgICByb3c/LmxvZ28gfHxcbiAgICAgICAgICByb3c/LmFzc2V0SW1hZ2UgfHxcbiAgICAgICAgICByb3c/Lmludm9pY2U/Lmludm9pY2VfaW1hZ2UgfHxcbiAgICAgICAgICByb3c/Lmludm9pY2VfaW1hZ2U7XG4gICAgICAgIGVsc2UgcGxhY2Vob2xkZXJcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgKGNsaWNrKT1cImZ1bGxzY3JlZW5JbWFnZSA9IHJvdz8ubG9nbyB8fCByb3c/LnByb2ZpbGVfcGljdHVyZXM/Lls0XT8ucGF0aCB8fFxuICAgICAgICAgICAgcm93Py5sb2dvIHx8XG4gICAgICAgICAgICByb3c/LmFzc2V0SW1hZ2UgfHxcbiAgICAgICAgICAgIHJvdz8uaW52b2ljZV9pbWFnZVwiXG4gICAgICAgIGNsYXNzPVwicGljXCJcbiAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cInJvd0hlaWdodCAtIDEwXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHQgLSAxMFwiXG4gICAgICAgIFtjbGFzcy5hc3NldHMtcGljXT1cImdyaWRUeXBlID09ICdBc3NldHMnXCJcbiAgICAgID5cbiAgICAgICAgPGltZ1xuICAgICAgICAgIFt3aWR0aF09XCJyb3dIZWlnaHQgLSAxMlwiXG4gICAgICAgICAgW2hlaWdodF09XCJyb3dIZWlnaHQgLSAxMlwiXG4gICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cInJvd0hlaWdodCAtIDEwXCJcbiAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodCAtIDEwXCJcbiAgICAgICAgICBbc3JjXT1cIlxuICAgICAgICAgICAgcm93Py5sb2dvIHx8XG4gICAgICAgICAgICByb3c/LnByb2ZpbGVfcGljdHVyZXM/Lls0XT8ucGF0aCB8fFxuICAgICAgICAgICAgcm93Py5sb2dvIHx8XG4gICAgICAgICAgICByb3c/LmFzc2V0SW1hZ2UgfHxcbiAgICAgICAgICAgIHJvdz8uaW52b2ljZV9pbWFnZVxuICAgICAgICAgIFwiXG4gICAgICAgICAgYWx0PVwiaWNvblwiXG4gICAgICAgICAgY2xhc3M9XCJvcHRpb24taWNvblwiXG4gICAgICAgICAgbG9hZGluZz1cImxhenlcIlxuICAgICAgICAvPlxuICAgICAgPC9zcGFuPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwhLS0gPGRpdlxuICAgICAgY2xhc3M9XCJmdWxsc2NyZWVuLW92ZXJsYXlcIlxuICAgICAgKm5nSWY9XCJmdWxsc2NyZWVuSW1hZ2VcIlxuICAgICAgKGNsaWNrKT1cImZ1bGxzY3JlZW5JbWFnZSA9IG51bGxcIlxuICAgID5cbiAgICAgIDxpbWcgW3NyY109XCJmdWxsc2NyZWVuSW1hZ2VcIiBjbGFzcz1cImZ1bGxzY3JlZW4taW1nXCIgLz5cbiAgICA8L2Rpdj4gLS0+XG5cbiAgICA8bmctdGVtcGxhdGUgI3BsYWNlaG9sZGVyPlxuICAgICAgPHNwYW5cbiAgICAgICAgW25nQ2xhc3NdPVwiZ2V0RHluYW1pY0NsYXNzKHJvdz8uZnVsbF9uYW1lIHx8IHJvdz8ubmFtZSlcIlxuICAgICAgICBjbGFzcz1cInBpYyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHJvdW5kZWQtY2lyY2xlXCJcbiAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cInJvd0hlaWdodCAtIDEyXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHQgLSAxMlwiXG4gICAgICAgIFtzdHlsZS5mb250U2l6ZS5weF09XCJyb3dIZWlnaHQgLyAzXCJcbiAgICAgICAgW2NsYXNzLmFzc2V0cy1waWNdPVwiZ3JpZFR5cGUgPT0gJ0Fzc2V0cydcIlxuICAgICAgPlxuICAgICAgICB7eyBnZXRJbml0aWFscyhyb3c/LmZ1bGxfbmFtZSkgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFJpZ2h0IENsaWNrIE1lbnVlIC0tPlxuPGRpdlxuICBbY2xhc3MuaW52aXNpYmxlXT1cIiFwb3NpdGlvbmVkWWV0XCJcbiAgY2xhc3M9XCJjb250ZXh0LW1lbnUgcC0yXCJcbiAgKm5nSWY9XCJhY3Rpb25IaWRlICYmIGFjdGlvbnM/Lmxlbmd0aFwiXG4gIFtuZ1N0eWxlXT1cInsgJ3RvcC5weCc6IHlQb3MsICdsZWZ0LnB4JzogeFBvcyB9XCJcbiAgW2NsYXNzLnNob3ddPVwiaXNWaXNpYmxlXCJcbiAgYXBwZW5kVG89XCJib2R5XCJcbj5cbiAgPHVsPlxuICAgIDxsaVxuICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBhY3Rpb25zXCJcbiAgICAgIGNsYXNzPVwicm91bmRlZCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgIChjbGljayk9XCJvbkFjdGlvbkNsaWNrKGFjdGlvbilcIlxuICAgID5cbiAgICAgIDxzcGFuXG4gICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvJyArIGFjdGlvbiArICcuc3ZnJ1wiXG4gICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIHJpZ2h0LWNsaWNrLW1lbnUtaWNvbnMgbWUtMlwiXG4gICAgICA+PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWNhcGl0YWxpemUgZnctNTAwXCI+e3sgYWN0aW9uIH19PC9zcGFuPlxuICAgIDwvbGk+XG4gIDwvdWw+XG48L2Rpdj5cblxuPCEtLSBEZXRhaWxzIFRvZ2dsZSBmcm9tIGJvdHRvbSAtLT5cblxuPG5nLXRlbXBsYXRlICNuZXN0ZWRUYWJsZVRlbXBsYXRlIGxldC1yb3c+XG4gIDxkaXZcbiAgICBjbGFzcz1cIm5lc3RlZC10YWJsZSB0YWJsZSB0YWJsZS1zbSB3LTEwMCBtYi0wIGNlbnRlci1uZXN0ZWQtdGFibGUgdy0xMDBcIlxuICAgIHN0eWxlPVwidGFibGUtbGF5b3V0OiBmaXhlZCAhaW1wb3J0YW50XCJcbiAgICAjbmVzdGVkVGFibGVDb250YWluZXJcbiAgPlxuICAgIDx0aGVhZFxuICAgICAgI25lc3RlZEhlYWRlclxuICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJuZXN0ZWRUYWJsZUhlYWRlckJhY2tncm91bmRDb2xvclwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjZGtEcm9wTGlzdFxuICAgICAgICBbY2RrRHJvcExpc3REYXRhXT1cInJvdz8uZGV0YWlsLmNvbHVtbnNcIlxuICAgICAgICBjZGtEcm9wTGlzdE9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiXG4gICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcENvbHVtbigkZXZlbnQsIHJvdylcIlxuICAgICAgICAoY2RrRHJvcExpc3RTb3J0ZWQpPVwib25OZXN0ZWRDb2xTb3J0KCRldmVudCwgcHJldmlld05lc3RlZENvbHMpXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJuZXN0ZWRUYWJsZUhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgIGNsYXNzPVwiZC1mbGV4IHRyIGJvcmRlci1iZWxvd1wiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIHJvdy5kZXRhaWwuY29sdW1uczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNvbD8ud2lkdGggfHwgMjUwXCJcbiAgICAgICAgICBbc3R5bGUubWluV2lkdGgucHhdPVwiY29sPy53aWR0aCB8fCAyNTBcIlxuICAgICAgICAgIFtzdHlsZS5tYXhXaWR0aC5weF09XCJjb2w/LndpZHRoIHx8IDI1MFwiXG4gICAgICAgICAgY2xhc3M9XCJweC00IHRoXCJcbiAgICAgICAgICBbYXR0ci5maWVsZF09XCJjb2wuZmllbGRcIlxuICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwibmVzdGVkVGFibGVIZWFkZXJCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGgtMTAwIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHBvc2l0aW9uLXJlbGF0aXZlIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZWxsaXBzaXNcIiAoY2xpY2spPVwic29ydE5lc3RlZENvbChjb2wsIHJvdylcIj5cbiAgICAgICAgICAgICAge3sgY29sLmhlYWRlciB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yXCI+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjdXJyZW50U3ViU29ydENvbHVtbiA9PSBjb2wuZmllbGRcIlxuICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICtcbiAgICAgICAgICAgICAgICAgIChjb2w/Lm9yZGVyX2J5ID09ICdkZXNjJ1xuICAgICAgICAgICAgICAgICAgICA/ICdkYXRhLWdyaWQvaWNvbnMvc29ydC1kZXNjLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgOiAnZGF0YS1ncmlkL2ljb25zL3NvcnQtYXNjLnN2ZycpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgbXMtMiBzdGFydC01MFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8IS0tIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRocmVlLWRvdHMgcC0xXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlblRocmVlRG90c01lbnUoJGV2ZW50LCBjb2wpXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAgICAgICAgICdkYXRhLWdyaWQvaWNvbnMvdGhyZWUtZG90cy12ZXJ0aWNhbC5zdmcnXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgICAgICAgPCEtLSBPbmx5IHNob3cgbWVudSBpZiB0aGlzIGNvbHVtbiBpcyBhY3RpdmUgLS0+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGl2ZUNvbCA9PT0gY29sXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cInRvcDogLTUwJTsgei1pbmRleDogMjE7IGxlZnQ6IDBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uTWVudTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbDogY29sLFxuICAgICAgICAgICAgICAgICAgICAgIGlzTmVzdGVkVGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uczogcm93Py5kZXRhaWwuY29sdW1uc1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInJlc2l6ZS1oYW5kbGVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiXG4gICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgIG9uUmVzaXplQ29sdW1uKCRldmVudCwgY29sKTtcbiAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvcmVzaXplLWhhbmRsZS5zdmcnXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjZGtEcmFnUHJldmlldz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTIgYm9yZGVyIGQtZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvd3MtbW92ZS5zdmcnXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdj57eyBjb2wuaGVhZGVyIH19PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvdGhlYWQ+XG4gICAgPGRpdlxuICAgICAgW3N0eWxlLndpZHRoLnB4XT1cIm5lc3RlZEhlYWRlci5vZmZzZXRXaWR0aCAtIDEwXCJcbiAgICAgIFtzdHlsZS5taW5XaWR0aC5weF09XCJuZXN0ZWRIZWFkZXIub2Zmc2V0V2lkdGggLSAxMFwiXG4gICAgPlxuICAgICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydFxuICAgICAgICBbaXRlbVNpemVdPVwibmVzdGVkVGFibGVyb3dIZWlnaHRcIlxuICAgICAgICBjbGFzcz1cInZpZXdwb3J0XCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJcbiAgICAgICAgICAocm93Py5kZXRhaWw/LnJlc3VsdD8ubGVuZ3RoIDwgNVxuICAgICAgICAgICAgPyBuZXN0ZWRUYWJsZXJvd0hlaWdodCAqIHJvdz8uZGV0YWlsPy5yZXN1bHQ/Lmxlbmd0aCArIDQwXG4gICAgICAgICAgICA6IDMwMCkgKyAoaGFzSG9yaXpvbnRhbFNjcm9sbCA/IC0xMiA6IDEpXG4gICAgICAgIFwiXG4gICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJuZXN0ZWRIZWFkZXIub2Zmc2V0V2lkdGggLSAxMFwiXG4gICAgICAgIFtzdHlsZS5taW5XaWR0aC5weF09XCJuZXN0ZWRIZWFkZXIub2Zmc2V0V2lkdGggLSAxMFwiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyIGJvcmRlci1iZWxvdyBkLWZsZXggdHJcIlxuICAgICAgICAgICpjZGtWaXJ0dWFsRm9yPVwibGV0IGQgb2Ygcm93Py5kZXRhaWw/LnJlc3VsdDsgdHJhY2tCeTogdHJhY2tCeUlkXCJcbiAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIm5lc3RlZFRhYmxlcm93SGVpZ2h0XCJcbiAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwibmVzdGVkSGVhZGVyPy5vZmZzZXRXaWR0aFwiXG4gICAgICAgICAgW3N0eWxlLm1pbldpZHRoLnB4XT1cIm5lc3RlZEhlYWRlcj8ub2Zmc2V0V2lkdGhcIlxuICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiYm9keUJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgKGNvbnRleHRtZW51KT1cIm9uUmlnaHRDbGljaygkZXZlbnQsIGQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwicHgtNCBweS0wIHRkXCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2wgb2YgcHJldmlld05lc3RlZENvbHM7IGxldCBqID0gaW5kZXhcIlxuICAgICAgICAgICAgW3N0eWxlLmZvbnRTaXplLnB4XT1cIm5lc3RlZFRhYmxlcm93Rm9udHNpemVcIlxuICAgICAgICAgICAgW2F0dHIuZmllbGRdPVwiY29sLmZpZWxkXCJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjb2w/LndpZHRoIHx8IDI1MFwiXG4gICAgICAgICAgICBbc3R5bGUubWluV2lkdGgucHhdPVwiY29sPy53aWR0aCB8fCAyNTBcIlxuICAgICAgICAgICAgW3N0eWxlLm1heFdpZHRoLnB4XT1cImNvbD8ud2lkdGggfHwgMjUwXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwibmVzdGVkVGFibGVyb3dIZWlnaHQgLSAxXCJcbiAgICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aC5weF09XCJjb2w/LndpZHRoXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPCEtLSB7eyBkW2NvbC5maWVsZF0gfHwgKGNvbC5pc19hbW91bnQgPyAwIDogXCItXCIpIH19IC0tPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgI2NlbGxUZXh0XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWVsbGlwc2lzIGZsZXgtZ3Jvdy0xXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiXG4gICAgICAgICAgICAgICAgICBjb2w/LnR5cGUgPT09ICdkYXRlJ1xuICAgICAgICAgICAgICAgICAgICA/IChnZXROZXN0ZWRWYWx1ZShkLCBjb2wuZmllbGQpIHwgZGF0ZSA6IGRhdGVGb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgIDogZ2V0TmVzdGVkVmFsdWUoZCwgY29sLmZpZWxkKSB8fCAnLSdcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbD8udHlwZSAhPT0gJ2ltYWdlJ1wiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5pc19hbW91bnRcIj57e1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeVN5bWJvbFxuICAgICAgICAgICAgICAgICAgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICFpc05lc3RlZFZhbHVlQXJyYXkoZCwgY29sLmZpZWxkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY29sPy50eXBlID09PSAnZGF0ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKGlzRGF0ZShnZXROZXN0ZWRWYWx1ZShkLCBjb2wuZmllbGQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKGdldE5lc3RlZFZhbHVlKGQsIGNvbC5maWVsZCkgfCBkYXRlOiBkYXRlRm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGdldE5lc3RlZFZhbHVlKGQsIGNvbC5maWVsZCk/LnZhbHVlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShkLCBjb2wuZmllbGQpPy5uYW1lIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShkLCBjb2wuZmllbGQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLScpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoZ2V0TmVzdGVkVmFsdWUoZCwgY29sLmZpZWxkKT8udmFsdWUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TmVzdGVkVmFsdWUoZCwgY29sLmZpZWxkKT8ubmFtZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShkLCBjb2wuZmllbGQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb2wuaXNfYW1vdW50ID8gMDogJy0nKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChnZXROZXN0ZWRWYWx1ZShkLCBjb2wuZmllbGQpPy5bMF0/LmRlcGFydG1lbnRfbmFtZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TmVzdGVkVmFsdWUoZCwgY29sLmZpZWxkKT8uWzBdPy5yb2xlTmFtZSB8fCBnZXROZXN0ZWRWYWx1ZShkLCBjb2wuZmllbGQpPy5bMF0/LmZ1bGxfbmFtZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0nKVxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGdldFRvdGFsQW1vdW50KGNvbCkgfX1cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy50eXBlID09ICdpbWFnZSdcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0SW1hZ2VQbGFjZWhvbGRlcjtcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3c6IGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2w6IGNvbCxcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNsZWZ0UmlnaHROZXN0ZWRQbGFjZWhvbGRlciBsZXQtcm93PlxuICA8dGFibGVcbiAgICBjbGFzcz1cIm5lc3RlZC10YWJsZSB0YWJsZSB0YWJsZS1zbSB3LTEwMCBtYi0wXCJcbiAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImJvZHlCYWNrZ3JvdW5kQ29sb3JcIlxuICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiXG4gICAgICBncmlkVHlwZSA9PSAnQXNzZXRzJ1xuICAgICAgICA/IChuZXN0ZWRUYWJsZUNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0SGVpZ2h0ID8/IDApICsgMTJcbiAgICAgICAgOiAodGFza01hbmFnZW1lbnRDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/Lm9mZnNldEhlaWdodCA/PyAwKVxuICAgIFwiXG4gID5cbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJ0aGVhZFwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInRyIGQtZmxleCBib3JkZXItYmVsb3dcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIm5lc3RlZFRhYmxlSGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJoZWFkZXJCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIiAqbmdGb3I9XCJsZXQgXyBvZiBbMSwgMiwgMywgNCwgNV1cIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PiAtLT5cbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJ0Ym9keVwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInRyIGJvcmRlci1iZWxvd1wiXG4gICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwibmVzdGVkVGFibGVyb3dIZWlnaHRcIlxuICAgICAgICAqbmdGb3I9XCJsZXQgXyBvZiByb3c/LmRldGFpbD8ucmVzdWx0XCJcbiAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJoZWFkZXJCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIiAqbmdGb3I9XCJsZXQgX18gb2YgWzEsIDIsIDMsIDQsIDVdXCIgY2xhc3M9XCJweS0wXCI+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwibmVzdGVkVGFibGVyb3dIZWlnaHRcIlxuICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aC5weF09XCJuZXN0ZWRUYWJsZXJvd0hlaWdodFwiXG4gICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gLS0+XG4gIDwvdGFibGU+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3Rhc2tNYW5hZ2VtZW50VGVtcGxhdGUgbGV0LXRhc2tEZXRhaWxzPVwidGFza0RldGFpbHNcIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwicC00XCJcbiAgICAjdGFza01hbmFnZW1lbnRDb250YWluZXJcbiAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cIm5lc3RlZFRhYmxlSGVhZGVyQmFja2dyb3VuZENvbG9yXCJcbiAgICBbc3R5bGUuZm9udEZhaW1seV09XCJmb250RmFpbWx5XCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS10aXRsZVwiPkRlc2NyaXB0aW9uPC9kaXY+XG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIml0ZW0tY29udGVudCBmaXJzdERpdlwiPlxuICAgICAgICB7eyB0YXNrRGV0YWlscy5kZXNjcmlwdGlvbiB9fVxuICAgICAgPC9kaXY+IC0tPlxuICAgICAgICA8cFxuICAgICAgICAgIFtzdHlsZS5mb250U2l6ZV09XCJib2R5VGV4dEZvbnRzU2l6ZVwiXG4gICAgICAgICAgY2xhc3M9XCJpdGVtLWNvbnRlbnQgZmlyc3REaXYgdGFza0Rlc2NyaXB0aW9uIHBlLTRcIlxuICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0U2FmZUNvbW1lbnQodGFza0RldGFpbHM/LmVkaXRvcl9kZXNjcmlwdGlvbilcIlxuICAgICAgICAgIChjbGljayk9XCJvcGVuRnVsbEltYWdlKCRldmVudClcIlxuICAgICAgICA+PC9wPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tdGl0bGVcIj5BdHRhY2htZW50czwvZGl2PlxuICAgICAgICA8aDUgKm5nSWY9XCJ0YXNrRGV0YWlscz8uYXR0YWNobWVudHM/Lmxlbmd0aCA9PSAwXCI+XG4gICAgICAgICAgTm8gQXR0YWNobWVudHMgZm91bmRcbiAgICAgICAgPC9oNT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwidGFza0RldGFpbHM/LmF0dGFjaG1lbnRzPy5sZW5ndGhcIlxuICAgICAgICAgIGNsYXNzPVwiaXRlbS1jb250ZW50IGQtZmxleCBmbGV4LXdyYXBcIlxuICAgICAgICAgIHN0eWxlPVwiZ2FwOiAxMHB4XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxhXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgYXR0YWNoZW1lbnQgb2YgdGFza0RldGFpbHM/LmF0dGFjaG1lbnRzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgIGNsYXNzPVwic3ltYm9sLWxhYmVsIGZzLTIgZnctc2VtaWJvbGQgdGV4dC1zdWNjZXNzIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICB0aXRsZT1cInt7IHRhc2tEZXRhaWxzPy5hdHRhY2htZW50c19uYW1lW2ldIHx8ICdBdHRhY2htZW50JyB9fVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZEF0dGNobWVudChhdHRhY2hlbWVudClcIlxuICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAgICAgICAgICdkYXRhLWdyaWQvZG9jdW1lbnQtaWNvbnMvJyArXG4gICAgICAgICAgICAgICAgZ2V0RXh0ZW50aW9uKGF0dGFjaGVtZW50KSArXG4gICAgICAgICAgICAgICAgJy5zdmcnXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC00XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLXRpdGxlXCI+XG4gICAgICAgICAgQ29tbWVudHMgKHt7IHRhc2tEZXRhaWxzPy5jb21tZW50cz8ubGVuZ3RoIH19KVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGg1ICpuZ0lmPVwidGFza0RldGFpbHM/LmNvbW1lbnRzPy5sZW5ndGggPT0gMFwiPk5vIENvbW1lbnRzIGZvdW5kPC9oNT5cbiAgICAgICAgPGRpdiAqbmdJZj1cInRhc2tEZXRhaWxzPy5jb21tZW50cz8ubGVuZ3RoXCIgY2xhc3M9XCJpdGVtLWNvbnRlbnRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tbWVudFwiICpuZ0Zvcj1cImxldCBjb21tZW50IG9mIHRhc2tEZXRhaWxzLmNvbW1lbnRzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwZS0zXCI+XG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICBjbGFzcz1cInBpYyBpbWFnZS1pbnB1dC13cmFwcGVyXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwicm93SGVpZ2h0IC0gMTJcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicm93SGVpZ2h0IC0gMTJcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29tbWVudD8uY29tbWVudF9ieS5sb2dvXCJcbiAgICAgICAgICAgICAgICBzcmM9XCJ7eyBjb21tZW50Py5jb21tZW50X2J5LmxvZ28gfX1cIlxuICAgICAgICAgICAgICAgIGFsdD1cInt7IGNvbW1lbnQuY29tbWVudF9ieS5mdWxsX25hbWUgfX1cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8IS0tIDxhcHAtZGVmYXVsdC1pbWFnZS1wbGFjZWhvbGRlciAqbmdJZj1cIiFjb21tZW50Py5jb21tZW50X2J5LmxvZ29cIiB0aXRsZT1cInt7IGNvbW1lbnQuY29tbWVudF9ieS5mdWxsX25hbWUgfX1cIiBbbmFtZV09XCJjb21tZW50LmNvbW1lbnRfYnkuZnVsbF9uYW1lXCI+PC9hcHAtZGVmYXVsdC1pbWFnZS1wbGFjZWhvbGRlcj4gLS0+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhY29tbWVudD8uY29tbWVudF9ieS5sb2dvXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXREeW5hbWljQ2xhc3MoY29tbWVudC5jb21tZW50X2J5LmZ1bGxfbmFtZSlcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicGljIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcm91bmRlZC1jaXJjbGVcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJyb3dIZWlnaHQgLSAxMlwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHQgLSAxMlwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmZvbnRTaXplLnB4XT1cInJvd0hlaWdodCAvIDNcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgY29tbWVudC5jb21tZW50X2J5LmZ1bGxfbmFtZSB9fVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBnZXRJbml0aWFscyhjb21tZW50LmNvbW1lbnRfYnkuZnVsbF9uYW1lKSB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21tZW50LWF1dGhvciBmcy0xNHB4XCI+XG4gICAgICAgICAgICAgICAge3sgY29tbWVudD8uY29tbWVudF9ieS5mdWxsX25hbWUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvbW1lbnQtY29udGVudCBmb3JDb21tZW50SW1nXCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImdldFNhZmVDb21tZW50KGNvbW1lbnQuY29tbWVudClcIlxuICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21tZW50LXRpbWVzdGFtcFwiPlxuICAgICAgICAgICAgICAgIHt7IGNvbW1lbnQuY29tbWVudF9kYXRlIHwgZGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbW1lbnQtdGltZXN0YW1wXCI+XG4gICAgICAgICAgICAgICAgUmVwbGllczogKHt7IGNvbW1lbnQucmVwbGllcy5sZW5ndGggfX0pXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
6053
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEtZ3JpZC9zcmMvbGliL2RhdGEtZ3JpZC9kYXRhLWdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1ncmlkL3NyYy9saWIvZGF0YS1ncmlkL2RhdGEtZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBSU4sU0FBUyxFQUVULFlBQVksRUFFWixZQUFZLEVBTVosdUJBQXVCLEVBRXZCLFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFVTCxlQUFlLEdBQ2hCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUNMLE9BQU8sRUFDUCxLQUFLLEVBQ0wsS0FBSyxFQUNMLFVBQVUsRUFDVixPQUFPLEVBQ1AsS0FBSyxFQUNMLE9BQU8sR0FDUixNQUFNLHFCQUFxQixDQUFDO0FBSTdCLE9BQU8sRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzVDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBR3JFLE9BQU8sMkNBQTJDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE0Qm5ELE1BQU0sQ0FBTixJQUFZLGdCQVFYO0FBUkQsV0FBWSxnQkFBZ0I7SUFDMUIsaUNBQWEsQ0FBQTtJQUNiLDhDQUEwQixDQUFBO0lBQzFCLDhDQUEwQixDQUFBO0lBQzFCLGlEQUE2QixDQUFBO0lBQzdCLDBDQUFzQixDQUFBO0lBQ3RCLDBDQUFzQixDQUFBO0lBQ3RCLGlEQUE2QixDQUFBO0FBQy9CLENBQUMsRUFSVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBUTNCO0FBR0QsTUFBTSxDQUFDLE1BQU0s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QUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBeVJ0QyxPQUFPO3NCQURaLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBeUoxQyxXQUFXO3NCQURWLFNBQVM7dUJBQUMsYUFBYTtnQkF3WmMsdUJBQXVCO3NCQUE1RCxTQUFTO3VCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIEVsZW1lbnRSZWYsXG4gIFZpZXdDaGlsZCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgSG9zdExpc3RlbmVyLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBOZ1pvbmUsXG4gIFJlbmRlcmVyMixcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgRW1iZWRkZWRWaWV3UmVmLFxuICBUZW1wbGF0ZVJlZixcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIFF1ZXJ5TGlzdCxcbiAgVmlld0NoaWxkcmVuLFxuICBpbmplY3QsXG4gIEluamVjdG9yXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3BsaXRDb2x1bW5zU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3NwbGl0LWNvbHVtbnMuc2VydmljZSc7XG5pbXBvcnQgeyAgUm93QWN0aW9uU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvcm93LWFjdGlvbi5zZXJ2aWNlJ1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbW1vbi5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIENka0RyYWcsXG4gIENka0RyYWdEcm9wLFxuICBDZGtEcmFnRW5kLFxuICBDZGtEcmFnRW50ZXIsXG4gIENka0RyYWdFeGl0LFxuICBDZGtEcmFnTW92ZSxcbiAgQ2RrRHJhZ1NvcnRFdmVudCxcbiAgQ2RrRHJhZ1N0YXJ0LFxuICBEcmFnRHJvcCxcbiAgbW92ZUl0ZW1JbkFycmF5LFxufSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7XG4gIHRyaWdnZXIsXG4gIHN0YXRlLFxuICBzdHlsZSxcbiAgdHJhbnNpdGlvbixcbiAgYW5pbWF0ZSxcbiAgcXVlcnksXG4gIHN0YWdnZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQ2RrRHJvcExpc3QgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IFNUQVRVU0VTX0JBREdFX01BUCB9IGZyb20gJy4vc3RhdHVzZXMnO1xuaW1wb3J0IHsgQ29weVNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29weS1zZXJ2aWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIHRha2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IEV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9leHBvcnQuc2VydmljZSc7XG5pbXBvcnQgeyBDZWxsSG9zdERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvY2VsbEhvc3QuZGlyZWN0aXZlJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1hdEN1cnJlbmN5UGlwZSB9IGZyb20gJy4uL3BpcGVzL2Zvcm1hdC1jdXJyZW5jeS5waXBlJztcbmltcG9ydCAnYm9vdHN0cmFwL2Rpc3QvanMvYm9vdHN0cmFwLmJ1bmRsZS5taW4uanMnO1xuaW1wb3J0IHsgVmFsaWRhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi8uLi9zZXJ2aWNlcy92YWxpZGF0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IEh0bWxDb250ZW50U2FuaXRpemVyU2VydmljZSB9IGZyb20gJy4vLi4vc2VydmljZXMvaHRtbC1jb250ZW50LXNhbml0aXplci5zZXJ2aWNlJztcblxuaW50ZXJmYWNlIENlbGxQb3NpdGlvbiB7XG4gIHJvd0luZGV4OiBudW1iZXI7XG4gIGNvbEluZGV4OiBudW1iZXI7XG4gIHN1YkNvbEluZGV4OiBudW1iZXI7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIGtleTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFHcmlkQ29uZmlnIHtcbiAgZm9udEZhaW1seTogc3RyaW5nO1xuICBib2R5VGV4dEZvbnRzU2l6ZTogbnVtYmVyO1xuICBoZWFkZXJUZXh0Rm9udHNTaXplOiBudW1iZXI7XG4gIG9kZFJvd3NCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgc2hvd1ZlcnRpY2FsQm9yZGVyOiBib29sZWFuO1xuICBzZWxlY3RlZFRhYmxlTGF5b3V0OiAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnO1xuICBnbG9iYWxTZWFyY2g6IHN0cmluZztcbiAgZmlsdGVyTmFtZXM6IHN0cmluZztcbiAgdG90YWxDb3VudDogbnVtYmVyO1xuICByb3dTaGFkaW5nRW5hYmxlZDogYm9vbGVhbjtcbiAgYWN0aXZlRmlsdGVyczogYm9vbGVhbjtcbiAgZ3JvdXBlZENvbHVtbnM/OiBzdHJpbmdbXTtcbn1cblxuXG5leHBvcnQgZW51bSBSb3dBbmltYXRpb25UeXBlIHtcbiAgTm9uZSA9ICdub25lJyxcbiAgU3ByZWFkID0gJ3NwcmVhZEFuaW1hdGlvbicsXG4gIEJvdW5jZSA9ICdib3VuY2VBbmltYXRpb24nLFxuICBTbGlkZVVwID0gJ3NsaWRlVXBGcm9tQm90dG9tJyxcbiAgRmxpcCA9ICdmbGlwQW5pbWF0aW9uJyxcbiAgU2tldyA9ICdza2V3QW5pbWF0aW9uJyxcbiAgU2xpZGVSaWdodCA9ICdzbGlkZUZyb21SaWdodCcsXG59XG5cblxuZXhwb3J0IGNvbnN0IHNvcnRpbmdBbmltYXRpb24gPSB0cmlnZ2VyKCdsaXN0U29ydCcsIFtcbiAgdHJhbnNpdGlvbignKiA9PiAqJywgW1xuICAgIC8vIFF1ZXJ5IGFsbCBlbGVtZW50cyBlbnRlcmluZyBvciBsZWF2aW5nXG4gICAgcXVlcnkoJzplbnRlciwgOmxlYXZlJywgc3R5bGUoeyBwb3NpdGlvbjogJ2Fic29sdXRlJywgd2lkdGg6ICcxMDAlJyB9KSwgeyBvcHRpb25hbDogdHJ1ZSB9KSxcblxuICAgIC8vIEFuaW1hdGUgbGVhdmluZyBlbGVtZW50cyB1cHdhcmQgd2l0aCBmYWRlIG91dFxuICAgIHF1ZXJ5KCc6bGVhdmUnLCBbXG4gICAgICBhbmltYXRlKCczMDBtcyBlYXNlLWluJywgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC0yMHB4KScsIG9wYWNpdHk6IDAgfSkpXG4gICAgXSwgeyBvcHRpb25hbDogdHJ1ZSB9KSxcblxuICAgIC8vIFN0YWdnZXIgdGhlIGVudGVyaW5nIGVsZW1lbnRzIGZvciBhIHNtb290aGVyIGVmZmVjdFxuICAgIHF1ZXJ5KCc6ZW50ZXInLCBbXG4gICAgICBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMjBweCknLCBvcGFjaXR5OiAwIH0pLFxuICAgICAgc3RhZ2dlcig1MCwgW1xuICAgICAgICBhbmltYXRlKCczMDBtcyBlYXNlLW91dCcsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKScsIG9wYWNpdHk6IDEgfSkpXG4gICAgICBdKVxuICAgIF0sIHsgb3B0aW9uYWw6IHRydWUgfSlcbiAgXSlcbl0pO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGF0YS1ncmlkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtZ3JpZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGEtZ3JpZC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ2FjY29yZGlvblRvZ2dsZScsIFtcbiAgICAgIHN0YXRlKFxuICAgICAgICAnY29sbGFwc2VkJyxcbiAgICAgICAgc3R5bGUoeyBoZWlnaHQ6ICcwcHgnLCBvdmVyZmxvdzogJ3Vuc2V0JyB9KVxuICAgICAgKSxcbiAgICAgIHN0YXRlKCdleHBhbmRlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnKicsIG92ZXJmbG93OiAndW5zZXQnIH0pKSxcbiAgICAgIHRyYW5zaXRpb24oJ2NvbGxhcHNlZCA8PT4gZXhwYW5kZWQnLCBhbmltYXRlKCczMDBtcyBlYXNlLWluJykpLFxuICAgIF0pLFxuICAgIHRyaWdnZXIoJ3NsaWRlVG9nZ2xlJywgW1xuICAgICAgdHJhbnNpdGlvbignOmVudGVyJywgW1xuICAgICAgICBzdHlsZSh7IGhlaWdodDogJzBweCcsIG9wYWNpdHk6IDAsIG92ZXJmbG93OiAnaGlkZGVuJyB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMzAwbXMgZWFzZS1vdXQnLCBzdHlsZSh7IGhlaWdodDogJyonLCBvcGFjaXR5OiAxIH0pKVxuICAgICAgXSksXG4gICAgICB0cmFuc2l0aW9uKCc6bGVhdmUnLCBbXG4gICAgICAgIHN0eWxlKHsgaGVpZ2h0OiAnKicsIG9wYWNpdHk6IDEsIG92ZXJmbG93OiAnaGlkZGVuJyB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMzAwbXMgZWFzZS1pbicsIHN0eWxlKHsgaGVpZ2h0OiAnMHB4Jywgb3BhY2l0eTogMCB9KSlcbiAgICAgIF0pXG4gICAgXSksXG4gICAgdHJpZ2dlcignc2xpZGVVcCcsIFtcbiAgICAgIHN0YXRlKCd2b2lkJywgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDEwMCUpJywgb3BhY2l0eTogMCB9KSksXG4gICAgICBzdGF0ZSgnKicsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKScsIG9wYWNpdHk6IDEgfSkpLFxuICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiAqJywgYW5pbWF0ZSgnMzAwbXMgZWFzZS1vdXQnKSksXG4gICAgICB0cmFuc2l0aW9uKCcqID0+IHZvaWQnLCBhbmltYXRlKCczMDBtcyBlYXNlLWluJykpLFxuICAgIF0pLFxuICAgIHRyaWdnZXIoJ3Jvd0R5bmFtaWMnLCBbXG5cbiAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tIFNQUkVBRCAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuICAgICAgdHJhbnNpdGlvbignKiA9PiBzcHJlYWRBbmltYXRpb24nLCBbXG4gICAgICAgIHF1ZXJ5KCc6ZW50ZXInLCBbXG4gICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICdzY2FsZVgoMC43KScgfSksXG4gICAgICAgICAgc3RhZ2dlcig2MCwgW1xuICAgICAgICAgICAgYW5pbWF0ZSgnMzUwbXMgZWFzZS1vdXQnLFxuICAgICAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3NjYWxlWCgxKScgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICBdLCB7IG9wdGlvbmFsOiB0cnVlIH0pLFxuXG4gICAgICAgIHF1ZXJ5KCc6bGVhdmUnLCBbXG4gICAgICAgICAgc3RhZ2dlcig0MCwgW1xuICAgICAgICAgICAgYW5pbWF0ZSgnMjIwbXMgZWFzZS1pbicsXG4gICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAnc2NhbGVYKDAuNyknIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgXSwgeyBvcHRpb25hbDogdHJ1ZSB9KVxuICAgICAgXSksXG5cbiAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tIEJPVU5DRSAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuICAgICAgdHJhbnNpdGlvbignKiA9PiBib3VuY2VBbmltYXRpb24nLCBbXG4gICAgICAgIHF1ZXJ5KCc6ZW50ZXInLCBbXG4gICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC0xMHB4KScgfSksXG4gICAgICAgICAgc3RhZ2dlcig0NSwgW1xuICAgICAgICAgICAgYW5pbWF0ZShcbiAgICAgICAgICAgICAgJzUwMG1zIGN1YmljLWJlemllciguNjgsLTAuNTUsLjI3LDEuNTUpJyxcbiAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAxLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDApJyB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0sIHsgb3B0aW9uYWw6IHRydWUgfSksXG5cbiAgICAgICAgcXVlcnkoJzpsZWF2ZScsIFtcbiAgICAgICAgICBzdGFnZ2VyKDQwLCBbXG4gICAgICAgICAgICBhbmltYXRlKCcyMDBtcyBlYXNlLWluJyxcbiAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDEwcHgpJyB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0sIHsgb3B0aW9uYWw6IHRydWUgfSlcbiAgICAgIF0pLFxuXG4gICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSBORVcgMTogRkxJUCAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuICAgICAgdHJhbnNpdGlvbignKiA9PiBmbGlwQW5pbWF0aW9uJywgW1xuICAgICAgICBxdWVyeSgnOmVudGVyJywgW1xuICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAncm90YXRlWCgtODBkZWcpJyB9KSxcbiAgICAgICAgICBzdGFnZ2VyKDcwLCBbXG4gICAgICAgICAgICBhbmltYXRlKCc0NTBtcyBlYXNlLW91dCcsXG4gICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMSwgdHJhbnNmb3JtOiAncm90YXRlWCgwKScgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICBdLCB7IG9wdGlvbmFsOiB0cnVlIH0pLFxuXG4gICAgICAgIHF1ZXJ5KCc6bGVhdmUnLCBbXG4gICAgICAgICAgc3RhZ2dlcig1MCwgW1xuICAgICAgICAgICAgYW5pbWF0ZSgnMjUwbXMgZWFzZS1pbicsXG4gICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAncm90YXRlWCg4MGRlZyknIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgXSwgeyBvcHRpb25hbDogdHJ1ZSB9KVxuICAgICAgXSksXG5cbiAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tIE5FVyAyOiBTS0VXIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4gICAgICB0cmFuc2l0aW9uKCcqID0+IHNrZXdBbmltYXRpb24nLCBbXG4gICAgICAgIHF1ZXJ5KCc6ZW50ZXInLCBbXG4gICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICdza2V3WSg2ZGVnKSB0cmFuc2xhdGVZKDhweCknIH0pLFxuICAgICAgICAgIHN0YWdnZXIoNjAsIFtcbiAgICAgICAgICAgIGFuaW1hdGUoJzMyMG1zIGVhc2Utb3V0JyxcbiAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAxLCB0cmFuc2Zvcm06ICdza2V3WSgwZGVnKSB0cmFuc2xhdGVZKDApJyB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0sIHsgb3B0aW9uYWw6IHRydWUgfSksXG5cbiAgICAgICAgcXVlcnkoJzpsZWF2ZScsIFtcbiAgICAgICAgICBzdGFnZ2VyKDQwLCBbXG4gICAgICAgICAgICBhbmltYXRlKCcyMjBtcyBlYXNlLWluJyxcbiAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICdza2V3WSgtNmRlZykgdHJhbnNsYXRlWSgtOHB4KScgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICBdLCB7IG9wdGlvbmFsOiB0cnVlIH0pXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oJyogPT4gc2xpZGVVcEZyb21Cb3R0b20nLCBbXG4gICAgICAgIHF1ZXJ5KCc6ZW50ZXInLCBbXG4gICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDEwMHZoKScgfSksXG4gICAgICAgICAgc3RhZ2dlcig2MCwgW1xuICAgICAgICAgICAgYW5pbWF0ZSgnNTAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSknLFxuICAgICAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCknIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgXSwgeyBvcHRpb25hbDogdHJ1ZSB9KSxcblxuICAgICAgICBxdWVyeSgnOmxlYXZlJywgW1xuICAgICAgICAgIHN0YWdnZXIoNDAsIFtcbiAgICAgICAgICAgIGFuaW1hdGUoJzMwMG1zIGVhc2UtaW4nLFxuICAgICAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTUwcHgpJyB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0sIHsgb3B0aW9uYWw6IHRydWUgfSlcbiAgICAgIF0pLFxuXG4gICAgICB0cmFuc2l0aW9uKCcqID0+IHNsaWRlRnJvbVJpZ2h0JywgW1xuICAgICAgICBxdWVyeSgnOmVudGVyJywgW1xuICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgxMDB2dyknIH0pLFxuICAgICAgICAgIHN0YWdnZXIoNjAsIFtcbiAgICAgICAgICAgIGFuaW1hdGUoJzUwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpJyxcbiAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAxLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDApJyB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0sIHsgb3B0aW9uYWw6IHRydWUgfSksXG5cbiAgICAgICAgcXVlcnkoJzpsZWF2ZScsIFtcbiAgICAgICAgICBzdGFnZ2VyKDQwLCBbXG4gICAgICAgICAgICBhbmltYXRlKCczMDBtcyBlYXNlLWluJyxcbiAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDUwcHgpJyB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0sIHsgb3B0aW9uYWw6IHRydWUgfSlcbiAgICAgIF0pLFxuXG5cblxuICAgIF0pXG5cblxuICBdLFxuXG59KVxuZXhwb3J0IGNsYXNzIERhdGFHcmlkQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkluaXQsIEFmdGVyVmlld0NoZWNrZWQge1xuICAvLyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovL1xuICAvLyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovL1xuICAvLyAqKioqKioqKioqICBJbnB1dCBHb2VzIEhlcmUgKioqKioqKioqKiogLy9cbiAgLy8gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy9cbiAgLy8gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy9cblxuXG4gIEBJbnB1dCgpIHJvd0FuaW1hdGlvbjogUm93QW5pbWF0aW9uVHlwZSA9IFJvd0FuaW1hdGlvblR5cGUuTm9uZTtcblxuICAvLyBQYWdpbmF0aW9uIENvbmZpZyBTdG9yZSBIZXJlXG4gIEBJbnB1dCgpIHBhZ2luYXRpb25Db25maWc6IGFueSA9IG51bGw7XG5cbiAgLy8gVGhlIGRhdGFzZXQgc3RvcmUgaGVyZTtcbiAgQElucHV0KCkgZGF0YVNldDogYW55W10gPSBbXTtcblxuICAvLyBUaGUgY29sdW1ucyBTdG9yZSBIZXJlXG4gIEBJbnB1dCgpIGNvbHVtbnM6IGFueVtdID0gW107XG5cbiAgLy8gUm93IEhlaWdodDtcbiAgQElucHV0KCkgcm93SGVpZ2h0OiBudW1iZXIgPSA0NDtcblxuICAvLyBIZWFkZXIgUm93IEhlaWdodDtcbiAgQElucHV0KCkgaGVhZGVyUm93SGVpZ2h0OiBudW1iZXIgPSA1MDtcblxuICAvLyBTaG93IFZlcnRpY2FsIEJvcmRlcnM7XG4gIEBJbnB1dCgpIHNob3dWZXJ0aWNhbEJvcmRlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIEV2ZW4gUm93cyBCYWNrZ3JvdW5kIENvbG9yO1xuICBASW5wdXQoKSBldmVuUm93c0JhY2tncm91bmRDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyc7XG5cbiAgLy8gRXZlbiBSb3dzIEJhY2tncm91bmQgQ29sb3I7XG4gIEBJbnB1dCgpIG9kZFJvd3NCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcjZjJmMmYyJztcblxuICAvLyBIZWFkZXIgUm93cyBCYWNrZ3JvdW5kIENvbG9yO1xuICBASW5wdXQoKSBoZWFkZXJCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyA9ICcjZjZmOGZmJztcblxuICAvLyBIZWFkZXIgUm93cyBCYWNrZ3JvdW5kIENvbG9yO1xuICBASW5wdXQoKSBjaGVja2JveGVzQmFja2dyb3VuZENvbG9yOiBzdHJpbmcgPSAnI2Y2ZjhmZic7XG5cbiAgLy8gU2hvdyBDb2x1bW5zIEdyb3VwaW5nO1xuICBASW5wdXQoKSBzaG93Q29sdW1uc0dyb3VwaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gUm93IEhvdmVyZWQgQmFja2dyb3VuZCBjb2xvcjtcbiAgQElucHV0KCkgcm93SG92ZXJDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJ3JnYmEoMCwgMTIzLCAyNTUsIDAuMSknO1xuXG4gIC8vIExlZnQgUGlubmVkQmFja2dyb3VuZCBjb2xvcjtcbiAgQElucHV0KCkgbGVmdFBpbm5lZEJhY2tncm91bmRDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyNmNmY4ZmYnO1xuXG4gIC8vIEJvZHkgQmFja2dyb3VuZCBjb2xvcjtcbiAgQElucHV0KCkgYm9keUJhY2tncm91bmRDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyNmNmY4ZmYnO1xuXG4gIC8vIFJpZ2h0IFBpbm5lZCBCYWNrZ3JvdW5kIGNvbG9yO1xuICBASW5wdXQoKSByaWdodFBpbm5lZEJhY2tncm91bmRDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyNmNmY4ZmYnO1xuXG4gIC8vIFNpZGUgTWVudSBCYWNrZ3JvdW5kIGNvbG9yO1xuICBASW5wdXQoKSBzaWRlbWVudUJhY2tncm91bmRDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyNmNmY4ZmYnO1xuXG4gIC8vIEJvZHkgdGV4dCBjb2xvcjtcbiAgQElucHV0KCkgYm9keVRleHRDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyMwYzExMmInO1xuXG4gIC8vIEhlYWRlciB0ZXh0IGNvbG9yO1xuICBASW5wdXQoKSBoZWFkZXJUZXh0Q29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcjMmExZjczJztcblxuICAvLyBIZWFkZXIgdGV4dCBjb2xvcjtcbiAgQElucHV0KCkgY2hlY2tib3hlc0NvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnIzJhMWY3Myc7XG5cbiAgLy8gSGVhZGVyIHRleHQgc2l6ZTtcbiAgQElucHV0KCkgaGVhZGVyVGV4dEZvbnRzU2l6ZTogbnVtYmVyIHwgdW5kZWZpbmVkID0gMTQ7XG5cbiAgLy8gQm9keSB0ZXh0IGNvbG9yO1xuICBASW5wdXQoKSBib2R5VGV4dEZvbnRzU2l6ZTogbnVtYmVyIHwgdW5kZWZpbmVkID0gMTQ7XG5cbiAgLy8gSGVhZGVyIGZvbnQgd2VpZ2h0O1xuICBASW5wdXQoKSBoZWFkZXJGb250V2VpZ2h0OiBudW1iZXIgfCB1bmRlZmluZWQgPSA1MDA7XG5cbiAgLy8gQm9keSBGb250IFdlaWdodDtcbiAgQElucHV0KCkgYm9keUZvbnRXZWlnaHQ6IG51bWJlciB8IHVuZGVmaW5lZCA9IDQwMDtcblxuICAvLyBDaGVja2VkIFJvdyBCYWNrZ3JvdW5kIENvbG9yO1xuICBASW5wdXQoKSBjaGVja2VkUm93QmFja2dyb3VuZENvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnYWxpY2VibHVlJztcblxuICAvLyBkcm9wZG93bnMgQmFja2dyb3VuZCBDb2xvcjtcbiAgQElucHV0KCkgZHJvcGRvd25zQmFja2dyb3VuZENvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnI2Y2ZjhmOCc7XG5cblxuICBASW5wdXQoKSBmb290ZXJSb3dCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcnO1xuXG4gIC8vIEZvb3RlciByb3cgSGVpZ2h0O1xuICBASW5wdXQoKSBmb290ZXJSb3dIZWlnaHQ6IG51bWJlciA9IDQ2O1xuXG4gIC8vIEZvb3RlciByb3cgSGVpZ2h0O1xuICBASW5wdXQoKSB0b3BHcm91cGVkQmFkZ2VzQmFja2dyb3VuZENvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnJztcblxuICAvLyBTaG93IFJvdyB3aXNlIGdyb3VwaW5nO1xuICBASW5wdXQoKSBzaG93Um93c0dyb3VwaW5nOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgLy8gU2hvdyBSb3cgd2lzZSBncm91cGluZztcbiAgQElucHV0KCkgc2hvd0ZpbHRlclJvdzogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuXG4gIC8vIFNob3cgUm93IHdpc2UgZ3JvdXBpbmc7XG4gIEBJbnB1dCgpIGZvbnRGYWltbHk6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICdzYW5zLXNlcmlmJztcblxuICAvLyBTaG93IFNpZGVDb2x1bW47XG4gIEBJbnB1dCgpIHNob3dTaWRlTWVudTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIEZvb3RlciBQYWRkaW5nXG4gIEBJbnB1dCgpIGZvb3RlclBhZGRpbmc6IG51bWJlciA9IDNcblxuXG4gIC8vIEZvb3RlciBQYWRkaW5nXG4gIEBJbnB1dCgpIHRvcEZpbHRlclJvd0hlaWdodDogbnVtYmVyID0gNTA7XG5cbiAgLy8gU2hvdyBSb3dzIHNoYWRpbmdcbiAgQElucHV0KCkgcm93U2hhZGluZ0VuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBTaG93IFJvd3Mgc2hhZGluZ1xuICBASW5wdXQoKSBzaG93U2VyaWFsTnVtYmVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gU2luZ2xlIFNwYSBVcmwgQXR0YWNoIHRvIGljb25zXG4gIEBJbnB1dCgpIHNpbmdsZVNwYUFzc2V0c1BhdGg6IHN0cmluZyA9ICdhc3NldHMvJztcblxuXG4gIC8vIEFwcGxpZWQgRmlsdGVyc1xuICBASW5wdXQoKSBmaWx0ZXJzQ29uZmlnOiBhbnlbXSA9IFtdO1xuXG5cbiAgLy8gQXBwbGllZCBGaWx0ZXJzXG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvL1ZlcnRpY2FsIFNjcm9sbGJhciBzdHlsZVxuICBASW5wdXQoKSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoOiAnYXV0bycgfCAndGhpbicgPSAnYXV0byc7XG5cbiAgLy9Ib3JpemludGFsIFNjcm9sbGJhciBzdHlsZVxuICBASW5wdXQoKSBob3JpemludGFsU2Nyb2xsYmFyV2lkdGg6ICdhdXRvJyB8ICd0aGluJyA9ICdhdXRvJztcblxuICAvLyBTaG93IENlbGwgZGV0YWlscyBib3hcbiAgQElucHV0KCkgc2hvd0NlbGxEZXRhaWxzQm94OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy9EYXRlIGZvcm1hdFxuXG4gIEBJbnB1dCgpIGRhdGVGb3JtYXQ6IHN0cmluZyA9ICcnXG5cbiAgLy9EYXRlIGZvcm1hdFxuICBASW5wdXQoKSB0YWJsZVNlYXJjaDogc3RyaW5nID0gJyc7XG5cblxuICAvL0RhdGUgZm9ybWF0XG4gIEBJbnB1dCgpIGFjdGlvbnM6IGFueVtdID0gWydlZGl0JywgJ2RlbGV0ZSddO1xuXG5cbiAgLy8gVGFibGUgQ29uZmlnIGZvciBwYWdpbmF0aW9ucyBpcyBoZXJlXG4gIEBJbnB1dCgpIGNvbmZpZzogYW55O1xuXG4gIEBJbnB1dCgpIHNlbGVjdGVkVGFiOiBzdHJpbmcgPSAnJztcblxuICAvLyBTZWxlY3Rpb24gdGFzayBiYXJcbiAgQElucHV0KCkgc2hvd1Rhc2tiYXIgPSBmYWxzZVxuXG4gIC8vIFRhYmxlIE5hbWUgZm9yIHN0YXRlIG1hbmFnZVxuICBASW5wdXQoKSB0YWJsZU5hbWUgPSB0cnVlXG5cblxuICAvLyBMaXN0aW5nIHR5cGVcbiAgQElucHV0KCkgbGlzdGluZ1R5cGU6IHN0cmluZyB8IGJvb2xlYW4gPSAnJztcblxuICAvLyBMaXN0aW5nIHR5cGVcblxuICBASW5wdXQoKSBjaGVja2JveFN0YXRlOiB7IHJlc2V0OiBib29sZWFuIH0gPSB7XG4gICAgcmVzZXQ6IHRydWVcbiAgfVxuXG4gIC8vIFRhc2tiYXIgYWN0aW9uc1xuICBASW5wdXQoKSB0YXNrYmFyQWN0aW9uczogYW55W10gPSBbXVxuXG5cbiAgLy8gU29ydGluZyBDb25maWcgdG8gc2hvdyBzb3J0IGljb25zXG4gIEBJbnB1dCgpIHNvcnRpbmdDb25maWc6IHsgZmllbGQ6IHN0cmluZywgb3JkZXJfYnk6IHN0cmluZyB9IHwgbnVsbCA9IG51bGw7XG5cblxuICBASW5wdXQoKSB0YWJsZUZpbHRlclZpZXdJZDogYW55ID0gJyc7XG5cblxuICBASW5wdXQoKSBzZWxlY3RlZFRhYmxlTGF5b3V0OiBhbnkgPSAnbWVkaXVtJ1xuXG4gIEBJbnB1dCgpIGNsb3NlRHJvcGRvd246IHsgcHJlc2V0OiB7IGNsb3NlZDogYm9vbGVhbiwgbG9hZGluZzogYm9vbGVhbiB9IH0gPSB7IHByZXNldDogeyBjbG9zZWQ6IGZhbHNlLCBsb2FkaW5nOiBmYWxzZSB9IH07XG5cbiAgLy8gVGFibGUgVmlld1xuXG4gIC8vIEdsb2JhbFNlYXJjaFxuICBASW5wdXQoKSBnbG9iYWxTZWFyY2hUZXh0OiBzdHJpbmcgPSAnJztcblxuICAvLyBOZXN0ZWQgVGFibGUgUm93IEZvbnRzaXplXG4gIEBJbnB1dCgpIG5lc3RlZFRhYmxlcm93Rm9udHNpemUgPSAxNDtcblxuICAvLyBOZXN0ZWQgdGFibGUgcm93IEhlYWRlciByb3cgSGVpZ2h0XG4gIEBJbnB1dCgpIG5lc3RlZFRhYmxlSGVhZGVyUm93SGVpZ2h0ID0gNDA7XG5cbiAgLy8gTmVzdGVkIFRhYmxlIHJvdyBoZWlnaHRcbiAgQElucHV0KCkgbmVzdGVkVGFibGVyb3dIZWlnaHQgPSA0NTtcblxuICBASW5wdXQoKSBwYWNrYWdlRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHNob3dVbkxpbms6IGFueTtcblxuICBASW5wdXQoKSBncmlkVHlwZTogc3RyaW5nID0gJyc7XG5cbiAgQElucHV0KCkgY3VycmVuY3lTeW1ib2w6IHN0cmluZyA9ICcnO1xuXG4gIEBJbnB1dCgpIGN1cnJlbmN5Rm9ybWF0OiBzdHJpbmcgPSAnJztcblxuICBASW5wdXQoKSBsZWZ0UGlubmVkQm94c2hhZG93OiBzdHJpbmcgPSAnJztcblxuICBASW5wdXQoKSByaWdodFBpbm5lZEJveHNoYWRvdzogc3RyaW5nID0gJyc7XG5cbiAgLy8gR2xvYmFsU2VhcmNoXG4gIEBJbnB1dCgpIHNlbGVjdGVkUm93c0JhY2tncm91bmRDb2xvcjogc3RyaW5nID0gJyM4YWM1ZmYnO1xuXG4gIC8vIEdsb2JhbFNlYXJjaFxuICBASW5wdXQoKSBuZXN0ZWRUYWJsZUhlYWRlckJhY2tncm91bmRDb2xvcjogc3RyaW5nID0gJyNmNmY4ZmYnO1xuXG5cbiAgQElucHV0KCkgbmVzdGVkVGFibGVSb3dCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyA9ICcjZWFlYWVhJztcblxuICBASW5wdXQoKSB0YWJsZVZpZXc6IGFueVtdID0gW107XG5cbiAgQElucHV0KCkgYnV0dG9uczogeyBuYW1lOiBzdHJpbmc7IGlzX3Nob3dJY29uOiBib29sZWFuOyBpY29uOiBzdHJpbmcsIGhhc19wZXJtaXNzaW9uOiBib29sZWFuIH1bXSA9IFtdO1xuXG4gIEBJbnB1dCgpIGtlZXBNdWx0aXBsZUV4cGFuZGVkRGV0YWlscyA9IGZhbHNlO1xuXG5cbiAgQElucHV0KCkgc2hvd1RvdGFsQW1vdW50Um93ID0gZmFsc2U7XG5cblxuICBASW5wdXQoKSBlbmFibGVHbG9iYWxTZWFyY2ggPSB0cnVlO1xuXG5cbiAgQElucHV0KCkgdGFibGVUeXBlID0gJyc7XG5cblxuICBASW5wdXQoKSBlbmFibGVFeHBvcnQgPSBmYWxzZTtcblxuXG4gIEBJbnB1dCgpIHNob3dGdWxsU2NyZWVuQnV0dG9uID0gZmFsc2U7XG5cblxuICBASW5wdXQoKSBlbmFibGVDdXQgPSBmYWxzZTtcblxuXG4gIEBJbnB1dCgpIHRhYnM6IHN0cmluZ1tdID0gW107XG5cbiAgQElucHV0KCkgc2hvd0NoZWNrYm94ZXMgPSB0cnVlO1xuXG4gIEBJbnB1dCgpIHNob3dUYWJsZUxheW91dCA9IHRydWU7XG5cblxuICBASW5wdXQoKSBwYWdlU2l6ZU9wdGlvbnMgPSBbMTAsIDI1LCA1MCwgNzUsIDEwMCwgMTUwLCAyMDAsIDI1MCwgMzAwLCA1MDBdO1xuXG5cbiAgQElucHV0KCkgcmVzZXRBbGxGaWx0ZXJzID0geyByZXNldEFsbDogZmFsc2UgfTtcblxuICBASW5wdXQoKSBkZWZhdWx0Q29uZmlnOiBEYXRhR3JpZENvbmZpZyB8IG51bGwgPSBudWxsO1xuXG5cbiAgQElucHV0KCkgY29sdW1uVGhyZWVkb3RzTXVudUNvbmZpZyA9IHtcbiAgICBzaG93UGlubGVmdDogdHJ1ZSxcbiAgICBzaG93UGlucmlnaHQ6IHRydWUsXG4gICAgc2hvd0FzY2VuZGluZzogdHJ1ZSxcbiAgICBzaG93RGVzY2VuZGluZzogdHJ1ZSxcbiAgICBzaG93RmlsdGVyOiB0cnVlLFxuICAgIHNob3dSb3dzR3JvdXBpbmc6IHRoaXMuc2hvd1Jvd3NHcm91cGluZyxcbiAgICBzaG93QXV0b3NpemVBbGxDb2x1bW5zOiB0cnVlLFxuICAgIHNob3dBdXRvc2l6ZVRoaXNDb2x1bW46IGZhbHNlLFxuICAgIHNob3dDaG9zZUNvbHVtbnM6IGZhbHNlLFxuICAgIHNob3dSZXNldENvbHVtbnM6IGZhbHNlLFxuICB9O1xuXG4vLyBmb3IgYWN0aW9uIHZhbGlkYXRpb247XG4gIEBJbnB1dCgpIHZhbGlkYXRlSWNvbiA6IGJvb2xlYW4gPSBmYWxzZTtcblxuXG4gIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBPdXQgUHV0IEV2ZW50c1xuICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuXG5cbiAgLy9DaGFuZ2UgVGFibGUgTGF5b3V0XG4gIEBWaWV3Q2hpbGRyZW4oQ2VsbEhvc3REaXJlY3RpdmUpIGNlbGxIb3N0cyE6IFF1ZXJ5TGlzdDxDZWxsSG9zdERpcmVjdGl2ZT47XG5cbiAgQE91dHB1dCgpIHB1YmxpYyBjaGFuZ2VMYXlvdXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgcHVibGljIGN1c3RvbUNlbGxFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8vIEZpbHRlciBBcHBseSBldmVudDtcbiAgQE91dHB1dCgpIHB1YmxpYyBmaWx0ZXJPcHRpb25zID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpIGdlbmVyaWNFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpIHRhYmxlUHJlc2V0Q29uZmlnOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KCkgc29ydGluZ09yZGVyT3B0aW9uczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuXG5cblxuXG5cbiAgc3RvcmVQcmVzZXROYW1lOiBzdHJpbmcgPSAnJztcbiAgaXNGdWxsU2NyZWVuID0gZmFsc2U7XG4gIGFjdGl2ZVRhYjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGdyb3VwZWRDb2x1bW5zOiBhbnlbXSA9IFtdO1xuICBhY3RpdmVDb2w6IGFueSA9IG51bGw7XG4gIGFjdGl2ZUZpbHRlckNlbGw6IGFueSA9IG51bGw7XG4gIHNob3dBY3Rpb25zRHJvcERvd24gPSBmYWxzZTtcbiAgc2lkZU1lbnVWaXNpYmxlID0gZmFsc2U7XG4gIHBpdm90TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICBjb2x1bW5TZWFyY2g6IHN0cmluZyA9ICcnO1xuICBleHBhbmRBbGxBY2NvcmRpYW5zID0gdHJ1ZTtcbiAgY3VycmVudE9wZW5lZFNpZGVNZW51ZTogJ2NvbHMnIHwgJ2ZpbHRycycgfCBudWxsID0gbnVsbDtcbiAgb3JpZ2luYWxDb2x1bW5zOiBhbnlbXSA9IFtdO1xuICBvcmlnaW5hbERhdGFTZXQ6IGFueVtdID0gW107XG4gIGFjdGl2ZVRvcEJ1dHRvbjogc3RyaW5nIHwgbnVsbCA9ICcnO1xuICBmaWx0ZXJDb2x1bW5zTGlzdDogYW55W10gPSBbXTtcbiAgZ3JvdXBCb3hQYWRkaW5nID0gMjAwO1xuICBwcmVzZXROYW1lOiBzdHJpbmcgPSAnJztcbiAgcHJlc2V0RmlsdGVyOiBib29sZWFuID0gZmFsc2U7XG4gIHNlYXJjaFRleHRQcmVzZXRUYWJsZSA9ICcnO1xuICBhZGRGaWx0ZXJDb2x1bW5JbnB1dCA9ICcnO1xuICBzZWFyY2hJbkRyb3Bkb3duID0gJyc7XG4gIHByaXZhdGUgc2VjcmV0S2V5ID0gJ3RiLXN1cGVyLWFkbWluJ1xuICBhZGRGaWx0ZXJEcm9wZG93blNlYXJjaCA9ICcnXG4gIHRvcFNob3dIaWRlQ29sdW1ucyA9ICcnO1xuICBjaG9zZUNvbHVtbnNTZWFyY2ggPSAnJ1xuICBzaWRlTmVzdGVkRmlsdGVyU2VhcmNoID0gJydcbiAgZWRpdGluRHJvcGRvd25TZWFyY2ggPSAnJztcbiAgaXNUaHJlZURvdHNGaWx0ZXJPcGVuID0gZmFsc2U7XG4gIGNvbmZpcm1EZWxldGUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBvcmlnaW5hbEFjdGlvbnM6IHN0cmluZ1tdID0gW107XG4gIGZvbnRGYW1pbGllczogc3RyaW5nW10gPSBbXG4gICAgLy8gQ29tbW9uIEV4Y2VsIGZvbnRzXG4gICAgJ0FyaWFsJyxcbiAgICAnQXJpYWwgQmxhY2snLFxuICAgICdCYWhuc2NocmlmdCcsXG4gICAgJ0NhbGlicmknLFxuICAgICdDYW1icmlhJyxcbiAgICAnQ2FtYnJpYSBNYXRoJyxcbiAgICAnbWF0aCcsXG4gICAgJ0NhbmRhcmEnLFxuICAgICdDb21pYyBTYW5zIE1TJyxcbiAgICAnQ29uc29sYXMnLFxuICAgICdDb25zdGFudGlhJyxcbiAgICAnQ29yYmVsJyxcbiAgICAnQ291cmllciBOZXcnLFxuICAgICdFYnJpbWEnLFxuICAgICdGcmFua2xpbiBHb3RoaWMgTWVkaXVtJyxcbiAgICAnR2FicmlvbGEnLFxuICAgICdHYWR1Z2knLFxuICAgICdHZW9yZ2lhJyxcbiAgICAnSW1wYWN0JyxcbiAgICAnSW5rIEZyZWUnLFxuICAgICdKYXZhbmVzZSBUZXh0JyxcbiAgICAnTGVlbGF3YWRlZSBVSScsXG4gICAgJ0x1Y2lkYSBDb25zb2xlJyxcbiAgICAnTHVjaWRhIFNhbnMgVW5pY29kZScsXG4gICAgJ01hbGd1biBHb3RoaWMnLFxuICAgICdNaWNyb3NvZnQgSGltYWxheWEnLFxuICAgICdNaWNyb3NvZnQgSmhlbmdIZWknLFxuICAgICdNaWNyb3NvZnQgTmV3IFRhaSBMdWUnLFxuICAgICdNaWNyb3NvZnQgUGhhZ3NQYScsXG4gICAgJ01pY3Jvc29mdCBTYW5zIFNlcmlmJyxcbiAgICAnTWljcm9zb2Z0IFRhaSBMZScsXG4gICAgJ01pY3Jvc29mdCBZYUhlaScsXG4gICAgJ01pY3Jvc29mdCBZaSBCYWl0aScsXG4gICAgJ01vbmdvbGlhbiBCYWl0aScsXG4gICAgJ01TIEdvdGhpYycsXG4gICAgJ01TIFBHb3RoaWMnLFxuICAgICdNUyBVSSBHb3RoaWMnLFxuICAgICdNViBCb2xpJyxcbiAgICAnTmlybWFsYSBVSScsXG4gICAgJ1BhbGF0aW5vIExpbm90eXBlJyxcbiAgICAnU2Vnb2UgUHJpbnQnLFxuICAgICdTZWdvZSBTY3JpcHQnLFxuICAgICdTZWdvZSBVSScsXG4gICAgJ1NlZ29lIFVJIEhpc3RvcmljJyxcbiAgICAnU2Vnb2UgVUkgRW1vamknLFxuICAgICdTZWdvZSBVSSBTeW1ib2wnLFxuICAgICdTaW1TdW4nLFxuICAgICdTaXRrYSBTbWFsbCcsXG4gICAgJ1N5bGZhZW4nLFxuICAgICdTeW1ib2wnLFxuICAgICdUYWhvbWEnLFxuICAgICdUaW1lcyBOZXcgUm9tYW4nLFxuICAgICdUcmVidWNoZXQgTVMnLFxuICAgICdWZXJkYW5hJyxcbiAgICAnV2ViZGluZ3MnLFxuICAgICdXaW5nZGluZ3MnLFxuICAgICdZdSBHb3RoaWMnLFxuICAgICdzYW5zLXNlcmlmJyxcbiAgICAnc2VyaWYnLFxuICAgICdtb25vc3BhY2UnLFxuICAgICdJbnRlcidcbiAgXTtcblxuICBmb250U2l6ZXM6IHN0cmluZ1tdID0gW1xuICAgICc4JywgJzknLCAnMTAnLCAnMTEnLCAnMTInLCAnMTQnLCAnMTYnLCAnMTgnLCAnMjAnLCAnMjQnXG4gIF07XG5cbiAgaGFzU2Nyb2xsID0gZmFsc2U7XG5cblxuXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb2x1bW5TZXJ2aWNlOiBTcGxpdENvbHVtbnNTZXJ2aWNlLFxuICAgIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHB1YmxpYyBjb21tb25TZXZpY2U6IENvbW1vblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBjb3B5U2VydmljZTogQ29weVNlcnZpY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgZXhwb3J0U2VydmljZTogRXhwb3J0U2VydmljZSxcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcbiAgICBwcml2YXRlIGZvcm1hdEN1cnJlbmN5OiBGb3JtYXRDdXJyZW5jeVBpcGUsXG4gICAgcHJpdmF0ZSBhY3Rpb25WYWxpZGF0b3IgOiBSb3dBY3Rpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgdmFsaWRhdGlvbnNTZXJ2aWNlIDogVmFsaWRhdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgaHRtbFNhbmF0aXplclNlcnZpY2UgOiBIdG1sQ29udGVudFNhbml0aXplclNlcnZpY2UsXG5cbiAgKSB7IH1cblxuICBAVmlld0NoaWxkKCdjZWxsVGV4dCcsIHsgc3RhdGljOiBmYWxzZSB9KSBjZWxsVGV4dCE6IGFueTtcbiAgQFZpZXdDaGlsZCgnbmVzdGVkSGVhZGVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIG5lc3RlZEhlYWRlciE6IEVsZW1lbnRSZWY7XG4gIFxuICBhc3luYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5TZXRDb2x1bW5zRGVmYXVsdFdpZHRoKCk7XG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2hIZWFkZXJzKCk7XG4gICAgICB0aGlzLnVwZGF0ZUZsYXR0ZW5lZERhdGEoKTtcbiAgICAgIHRoaXMuY29tcHV0ZVZpZXdwb3J0Um93cygpO1xuICAgICAgdGhpcy51cGRhdGVWaXNpYmxlUm93cygwKTtcbiAgICAgIHRoaXMuaGFzU2Nyb2xsID0gdGhpcy5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCk7XG4gXG4gICAgICBpZiAodGhpcy5jZWxsVGV4dCkge1xuICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmNlbGxUZXh0Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgfVxuIFxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMucmVuZGVyQ3VzdG9tQ2VsbHMoKTtcbiAgICB0aGlzLmJ1aWxkUGFnZVNpemVLZXlNYXAoKTtcbiAgICAgfSwgMTAwMCk7XG4gXG4gIH1cblxuICBwcml2YXRlIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblxuICBjcmVhdGVDZWxsSW5qZWN0b3Iocm93OiBhbnksIGNvbDogYW55KTogSW5qZWN0b3Ige1xuICAgIHJldHVybiBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogJ3Jvd0RhdGEnLCB1c2VWYWx1ZTogcm93IH0sXG4gICAgICAgIHsgcHJvdmlkZTogJ2NvbERhdGEnLCB1c2VWYWx1ZTogY29sIH1cbiAgICAgIF0sXG4gICAgICBwYXJlbnQ6IHRoaXMuaW5qZWN0b3JcbiAgICB9KTtcbiAgfVxuXG5cbiAgcHJpdmF0ZSByZW5kZXJDdXN0b21DZWxscygpOiB2b2lkIHtcbiAgICBjb25zdCBob3N0cyA9IHRoaXMuY2VsbEhvc3RzLnRvQXJyYXkoKTtcbiAgICBsZXQgaG9zdEluZGV4ID0gMDtcblxuICAgIGZvciAoY29uc3Qgcm93IG9mIHRoaXMudmlzaWJsZVJvd3MpIHtcbiAgICAgIGZvciAoY29uc3QgY29sIG9mIHRoaXMuY29sdW1ucykge1xuICAgICAgICBjb25zdCBob3N0ID0gaG9zdHNbaG9zdEluZGV4KytdO1xuICAgICAgICBpZiAoIWhvc3QgfHwgIWNvbC5jZWxsUmVuZGVyZXIpIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IHZpZXdDb250YWluZXIgPSBob3N0LnZpZXdDb250YWluZXJSZWY7XG4gICAgICAgIHZpZXdDb250YWluZXIuY2xlYXIoKTtcblxuICAgICAgICBjb25zdCBjb21wUmVmID0gdmlld0NvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoY29sLmNlbGxSZW5kZXJlcik7XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgIHJvdyxcbiAgICAgICAgICBjb2wsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpLFxuICAgICAgICAgIGFwaTogdGhpcyxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoKGNvbXBSZWYuaW5zdGFuY2UgYXMgYW55KS5ncmlkSW5pdCkge1xuICAgICAgICAgIChjb21wUmVmLmluc3RhbmNlIGFzIGFueSkuZ3JpZEluaXQocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiBzaG91bGRSZXN0b3JlU2Nyb2xsID0gZmFsc2U7XG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICAgIHRoaXMuYWRkU3R5bGVzVG9JbWFnZXMoKTtcbiAgICAgIHRoaXMuaGFzU2Nyb2xsID0gdGhpcy5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCk7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIGlmIChcbiAgICAgIHRoaXMuc2hvdWxkUmVzdG9yZVNjcm9sbCAmJlxuICAgICAgdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keT8ubmF0aXZlRWxlbWVudFxuICAgICkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLmNvbW1vblNldmljZS5tYWluQ29udGFpbmVyTGVmdDtcbiAgICAgICAgdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSBsZWZ0O1xuICAgICAgICB0aGlzLmNlbnRlclBpbm5lZEhlYWRlci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSBsZWZ0O1xuICAgICAgICB0aGlzLnNob3VsZFJlc3RvcmVTY3JvbGwgPSBmYWxzZTtcbiAgICAgIH0sIDEwMDApO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vICBpZiAodGhpcy50YWJzPy5sZW5ndGgpIHtcbiAgICAvLyAgIHRoaXMuYWN0aXZlVGFiID0gdGhpcy50YWJzWzBdO1xuICAgIC8vIH1cbiAgICAvLyB0aGlzLmF1dG9zaXplQWxsQ29sdW1ucygpO1xuICAgIGlmICghdGhpcy5jdXJyZXRhVGFibGVQcmVzZXRGb3JVcGRhdGUpIHtcbiAgICAgIC8vIHRoaXMuYXV0b1NpemVDb2x1bW5zQnlSYXRpbygpO1xuICAgIH1cblxuICAgIC8vIGNvbnN0IHVzZXIgPSB0aGlzLmdldERlY3J5cHQoJ3VzZXInKTtcbiAgICAvLyB0aGlzLmN1cnJlbmN5Rm9ybWF0ID0gdXNlcj8uY3VycmVuY3lfZm9ybWF0O1xuICAgIC8vIHRoaXMuY3VycmVuY3lTeW1ib2wgPSB1c2VyPy5jdXJyZW5jeV9zeW1ib2w7XG4gICAgLy8gdGhpcy5kYXRlRm9ybWF0ID0gdXNlcj8uZGF0ZV9mb3JtYXQ7XG4gICAgaWYgKCF0aGlzLmRhdGVGb3JtYXQpIHtcbiAgICAgIGNvbnN0IHN0b3JlZERhdGVGb3JtYXQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZGF0ZWZvcm1hdCcpO1xuICAgICAgaWYgKHN0b3JlZERhdGVGb3JtYXQpIHtcbiAgICAgICAgdGhpcy5kYXRlRm9ybWF0ID0gc3RvcmVkRGF0ZUZvcm1hdCA/IEpTT04ucGFyc2Uoc3RvcmVkRGF0ZUZvcm1hdCkgOiAnZGQvTU0veXl5eSc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmN1cnJlbmN5Rm9ybWF0KSB7XG4gICAgICBjb25zdCBzdG9yZWRDdXJyZW5jeUZvcm1hdCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjdXJyZW5jeUZvcm1hdCcpO1xuICAgICAgaWYgKHN0b3JlZEN1cnJlbmN5Rm9ybWF0KSB7XG4gICAgICAgIHRoaXMuY3VycmVuY3lGb3JtYXQgPSBzdG9yZWRDdXJyZW5jeUZvcm1hdCA/IEpTT04ucGFyc2Uoc3RvcmVkQ3VycmVuY3lGb3JtYXQpIDogJzEsMjM0LDU2Ny44OSc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmN1cnJlbmN5U3ltYm9sKSB7XG4gICAgICBjb25zdCBzdG9yZWRDdXJyZW5jeVN5bWJvbCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjdXJyZW5jeVN5bWJvbCcpO1xuICAgICAgaWYgKHN0b3JlZEN1cnJlbmN5U3ltYm9sKSB7XG4gICAgICAgIHRoaXMuY3VycmVuY3lTeW1ib2wgPSBzdG9yZWRDdXJyZW5jeVN5bWJvbCA/IEpTT04ucGFyc2Uoc3RvcmVkQ3VycmVuY3lTeW1ib2wpIDogJyQnO1xuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgLy8gcHJpdmF0ZSBnZXREZWNyeXB0KGtleTpzdHJpbmcpe1xuICAvLyAgICAgY29uc3QgdmFsdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpXG4gIC8vICAgICB0cnkge1xuICAvLyAgICAgICByZXR1cm4gSlNPTi5wYXJzZShDcnlwdG9KUy5BRVMuZGVjcnlwdCh2YWx1ZSBhcyBzdHJpbmcsIHRoaXMuc2VjcmV0S2V5KS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCkpXG4gIC8vICAgICB9IGNhdGNoIChlKSB7XG4gIC8vICAgICAgIHJldHVybiBudWxsO1xuICAvLyAgICAgfVxuICAvLyAgIH1cblxuICBkYXRhU2V0TG9hZGluZyA9IGZhbHNlO1xuICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKXtcbiAgICBpZiAoY2hhbmdlc1snY29sdW1ucyddKSB7XG4gICAgICBhd2FpdCB0aGlzLnNldENvbHVtbnNDb2x1bW5Ecm9wZG93blZhbHVzKCk7XG5cbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1sndGFicyddKSB7XG4gICAgICBpZiAoY2hhbmdlc1sndGFicyddKSB7XG4gICAgICAgIGNvbnN0IGFsbFRhYnMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhY3RpdmVUYWJzJykgfHwgJ3t9Jyk7XG4gICAgICAgICBsZXQgc2F2ZWRUYWIgXG4gICAgICAgICB0aGlzLnNlbGVjdGVkVGFiID8gKCBzYXZlZFRhYiA9IHRoaXMuc2VsZWN0ZWRUYWIgKSA6ICggc2F2ZWRUYWIgPSBhbGxUYWJzW3RoaXMudGFibGVUeXBlXSlcbiAgICAgICAgLy8gY29uc3Qgc2F2ZWRUYWIgPSBhbGxUYWJzW3RoaXMudGFibGVUeXBlXTtcbiAgICAgICAgaWYgKHRoaXMudGFicy5pbmNsdWRlcygnQ3VycmVudCBQb2xpY3knKSkge1xuICAgICAgICAgIHRoaXMuYWN0aXZlVGFiID0gdGhpcy50YWJzPy5bMV0gfHwgJ0N1cnJlbnQgUG9saWN5JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVRhYiA9IHNhdmVkVGFiIHx8IHRoaXMudGFicz8uWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgKHRoaXMudGFibGVUeXBlKSB7XG4gICAgICAgIC8vICAgdGhpcy5zZXRBY3RpdmVUYWIodGhpcy5hY3RpdmVUYWIpO1xuICAgICAgICAvLyB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydmaWx0ZXJzQ29uZmlnJ10pIHtcbiAgICAgIHRoaXMuY2hlY2tGaWx0ZXJDaGFuZ2VzRWZmZWN0KCk7XG4gICAgICBhd2FpdCB0aGlzLmFwcGx5RmlsdGVyb3B0aW9uTGlzdCgpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzWydjb2x1bW5zJ10/LmN1cnJlbnRWYWx1ZT8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmF1dG9TaXplQ29sdW1uc0J5UmF0aW8odHJ1ZSk7XG4gICAgICBhd2FpdCB0aGlzLmFwcGx5RmlsdGVyb3B0aW9uTGlzdCgpO1xuXG4gICAgICB0aGlzLm9yaWdpbmFsQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoY29sID0+ICh7XG4gICAgICAgIC4uLmNvbCxcbiAgICAgICAgcXVlcnk6IGNvbC5xdWVyeSA/IHsgLi4uY29sLnF1ZXJ5IH0gOiBudWxsLFxuICAgICAgICBjb2x1bW5fZHJvcGRvd25fdmFsdWU6IGNvbC5jb2x1bW5fZHJvcGRvd25fdmFsdWVcbiAgICAgICAgICA/IFsuLi5jb2wuY29sdW1uX2Ryb3Bkb3duX3ZhbHVlXVxuICAgICAgICAgIDogW10sXG4gICAgICB9KSk7XG5cblxuICAgICAgaWYgKHRoaXMuZGF0YUdyaWRDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/Lm9mZnNldFdpZHRoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuU2V0Q29sdW1uc0RlZmF1bHRXaWR0aCgpO1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoc0FuZEdyb3VwcygpO1xuICAgICAgICBhd2FpdCB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuICAgICAgICB0aGlzLnNldFNlY3Rpb25zV2lkdGgoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1snZGF0YVNldCddKSB7XG4gICAgICB0aGlzLmRhdGFTZXQgPSB0aGlzLmRhdGFTZXQ/Lm1hcCgocm93LCBpKSA9PiAoe1xuICAgICAgICAuLi5yb3csXG4gICAgICAgIF9fdmlydHVhbEluZGV4OiBpICsgMSxcbiAgICAgIH0pKTtcbiAgICAgIHRoaXMub3JpZ2luYWxEYXRhU2V0ID0gc3RydWN0dXJlZENsb25lKHRoaXMuZGF0YVNldCk7XG4gICAgICB0aGlzLmV4cGFuZGVkQ2VsbHMuY2xlYXIoKTtcbiAgICAgIHRoaXMudXBkYXRlRmxhdHRlbmVkRGF0YSgpO1xuXG4gICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY29tcHV0ZVZpZXdwb3J0Um93cygpO1xuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVSb3dzKDApO1xuICAgICAgICAgaWYodGhpcy5jb21tb25TZXZpY2U/Lm1haW5Db250YWluZXJMZWZ0ID4gMjAwKVxuICAgICAgICAgIHRoaXMuc2hvdWxkUmVzdG9yZVNjcm9sbCA9IHRydWU7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5jZW50ZXJQaW5uZWRIZWFkZXI/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgdm9pZCB0aGlzLmNlbnRlclBpbm5lZEhlYWRlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuXG4gICAgICAgIHRoaXMuZGF0YVNldExvYWRpbmcgPSB0cnVlO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keT8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPVxuICAgICAgICAgICAgICB0aGlzLmNlbnRlclBpbm5lZEhlYWRlci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZGF0YVNldExvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0sIDUwMCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYXBwbHlSb3dzU2VsZWN0aW9uU3RhdGUoKTtcblxuICAgICAgaWYgKHRoaXMuZ3JvdXBlZENvbHVtbnM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmdyb3VwZWRDb2x1bW5zLm1hcCgoaXRlbSkgPT4gaXRlbS5maWVsZCk7XG4gICAgICAgICAgdGhpcy5ncm91cGVkQ29sdW1ucy5mb3JFYWNoKGdyb3VwZWRDb2wgPT4ge1xuICAgICAgICAgIHRoaXMubWFya0NvbHVtbkFzR3JvdXBlZCh0aGlzLmNvbHVtbnMsIGdyb3VwZWRDb2wuZmllbGQpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kYXRhU2V0ID0gYXdhaXQgdGhpcy5ncm91cERhdGFBc3luYyh0aGlzLm9yaWdpbmFsRGF0YVNldCwgZmllbGRzKTtcblxuICAgICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy51cGRhdGVGbGF0dGVuZWREYXRhKCk7XG4gICAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5XaWR0aHNBbmRHcm91cHMoKTtcbiAgICAgICAgICB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuICAgICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZVJvd3MoMCk7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5ncm91cEJveFBhZGRpbmcgPSB0aGlzLmNvbHVtbnNHcm91cGVkQm94Py5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ2NoZWNrYm94U3RhdGUnXT8uY3VycmVudFZhbHVlPy5yZXNldCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFJvd3MuY2xlYXIoKTtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb25TdGF0ZSh0aGlzLnRhYmxlVHlwZSk7XG5cbiAgICAgIGNvbnN0IGlkcyA9IEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJvd3MpO1xuICAgICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBsaXN0aW5nVHlwZTogdGhpcy5saXN0aW5nVHlwZSxcbiAgICAgICAgICBvYmo6IGlkcyxcbiAgICAgICAgfSxcbiAgICAgICAgZXZlbnRUeXBlOiAnb25TZWxlY3RSb3cnLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudCk7XG5cbiAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ2Nsb3NlRHJvcGRvd24nXSAmJiB0aGlzLmNsb3NlRHJvcGRvd24ucHJlc2V0LmNsb3NlZCkge1xuICAgICAgdGhpcy5hY3RpdmVUb3BCdXR0b24gPSBudWxsO1xuICAgICAgdGhpcy5wcmVzZXRGaWx0ZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMucHJlc2V0TmFtZSA9ICcnO1xuICAgIH1cblxuICAgIC8vIGlmIChjaGFuZ2VzWydvZGRSb3dzQmFja2dyb3VuZENvbG9yJ10pIHtcbiAgICAvLyAgIHRoaXMucm93U2hhZGluZ0VuYWJsZWQgPSAhIXRoaXMub2RkUm93c0JhY2tncm91bmRDb2xvcjtcbiAgICAvLyB9XG5cbiAgICBpZiAoY2hhbmdlc1sncmVzZXRBbGxGaWx0ZXJzJ10gJiYgdGhpcy5yZXNldEFsbEZpbHRlcnMucmVzZXRBbGwpIHtcbiAgICAgIHRoaXMuY2xlYXJBbGxGaWx0ZXJzKCk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ3RhYmxlVmlldyddKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3Qgdmlld1ZhbHVlID0gdGhpcy50YWJsZVZpZXc7XG4gICAgICAgIGxldCB0ZW1wcm9yeVNlbGVjdGVkID0gQXJyYXkuaXNBcnJheSh2aWV3VmFsdWUpXG4gICAgICAgICAgPyB2aWV3VmFsdWUuZmluZChpdGVtID0+IGl0ZW0uaXNfdGVtcClcbiAgICAgICAgICA6IG51bGw7XG5cbiAgICAgICAgaWYgKCF0ZW1wcm9yeVNlbGVjdGVkKSB7XG4gICAgICAgICAgdGVtcHJvcnlTZWxlY3RlZCA9IEFycmF5LmlzQXJyYXkodmlld1ZhbHVlKVxuICAgICAgICAgICAgPyB2aWV3VmFsdWUuZmluZChpdGVtID0+IGl0ZW0uaXNfZGVmYXVsdClcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY3VycmV0YVRhYmxlUHJlc2V0Rm9yVXBkYXRlID0gdGVtcHJvcnlTZWxlY3RlZCB8fCBudWxsO1xuICAgICAgICB0aGlzLnByZXNldE5hbWUgPSB0ZW1wcm9yeVNlbGVjdGVkPy5uYW1lIHx8ICcnO1xuICAgICAgICB0aGlzLnN0b3JlUHJlc2V0TmFtZSA9IHRlbXByb3J5U2VsZWN0ZWQ/Lm5hbWUgfHwgJyc7XG4gICAgICAgIHRoaXMucHJlc2V0RmlsdGVyID0gdGVtcHJvcnlTZWxlY3RlZD8uYWN0aXZlRmlsdGVycyB8fCBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmV0YVRhYmxlUHJlc2V0Rm9yVXBkYXRlKSB7XG4gICAgICAgICAgdGhpcy5yb3dTaGFkaW5nRW5hYmxlZCA9IHRlbXByb3J5U2VsZWN0ZWQuY29uZmlnLnJvd1NoYWRpbmdFbmFibGVkO1xuICAgICAgICAgIHRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyID0gdGVtcHJvcnlTZWxlY3RlZC5jb25maWcuc2hvd1ZlcnRpY2FsQm9yZGVyO1xuICAgICAgICAgIHRoaXMuZm9udEZhaW1seSA9IHRlbXByb3J5U2VsZWN0ZWQuY29uZmlnLmZvbnRGYWltbHk7XG4gICAgICAgICAgdGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplID0gdGVtcHJvcnlTZWxlY3RlZC5jb25maWcuaGVhZGVyVGV4dEZvbnRzU2l6ZTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFibGVMYXlvdXQgPSB0ZW1wcm9yeVNlbGVjdGVkLmNvbmZpZy5zZWxlY3RlZFRhYmxlTGF5b3V0O1xuICAgICAgICAgIHRoaXMuYm9keVRleHRGb250c1NpemUgPSB0ZW1wcm9yeVNlbGVjdGVkLmNvbmZpZy5ib2R5VGV4dEZvbnRzU2l6ZTtcbiAgICAgICAgICB0aGlzLmdsb2JhbFNlYXJjaFRleHQgPSB0ZW1wcm9yeVNlbGVjdGVkLmNvbmZpZy5nbG9iYWxTZWFyY2g7XG4gICAgICAgICAgdGhpcy5zZXRUYWJsZUxheW91dCh0aGlzLnNlbGVjdGVkVGFibGVMYXlvdXQpO1xuICAgICAgICAgIHRoaXMub2RkUm93c0JhY2tncm91bmRDb2xvciA9IHRlbXByb3J5U2VsZWN0ZWQ/LmNvbmZpZz8ub2RkUm93c0JhY2tncm91bmRDb2xvciB8fCAnI2YxZjFmMSc7XG4gICAgICAgICAgY29uc3QgZ3JvdXBlZENvbHVtbnMgPSB0ZW1wcm9yeVNlbGVjdGVkPy5jb25maWc/Lmdyb3VwZWRDb2x1bW5zO1xuICAgICAgICAgIGlmKGdyb3VwZWRDb2x1bW5zPy5sZW5ndGgpe1xuICAgICAgICAgICAgdGhpcy5ncm91cGVkQ29sdW1ucyA9IHN0cnVjdHVyZWRDbG9uZShncm91cGVkQ29sdW1ucyk7XG4gICAgICAgICAgICB0aGlzLmdyb3VwRGF0YUFzeW5jKHRoaXMuZGF0YVNldCwgdGhpcy5ncm91cGVkQ29sdW1ucyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSAgZWxzZSBpZih0aGlzLmRlZmF1bHRDb25maWcpe1xuICAgICAgICAgIHRoaXMucm93U2hhZGluZ0VuYWJsZWQgPSB0aGlzLmRlZmF1bHRDb25maWcucm93U2hhZGluZ0VuYWJsZWQgfHwgZmFsc2U7XG4gICAgICAgICAgdGhpcy5zaG93VmVydGljYWxCb3JkZXIgPSB0aGlzLmRlZmF1bHRDb25maWcuc2hvd1ZlcnRpY2FsQm9yZGVyIHx8IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZm9udEZhaW1seSA9IHRoaXMuZGVmYXVsdENvbmZpZy5mb250RmFpbWx5IHx8ICdJbnRlcic7XG4gICAgICAgICAgdGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplID0gdGhpcy5kZWZhdWx0Q29uZmlnLmhlYWRlclRleHRGb250c1NpemUgfHwgMTQ7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYmxlTGF5b3V0ID0gdGhpcy5kZWZhdWx0Q29uZmlnLnNlbGVjdGVkVGFibGVMYXlvdXQ7XG4gICAgICAgICAgdGhpcy5ib2R5VGV4dEZvbnRzU2l6ZSA9IHRoaXMuZGVmYXVsdENvbmZpZy5ib2R5VGV4dEZvbnRzU2l6ZSB8fCAxNDtcbiAgICAgICAgICB0aGlzLmdsb2JhbFNlYXJjaFRleHQgPSB0aGlzLmRlZmF1bHRDb25maWcuZ2xvYmFsU2VhcmNoO1xuICAgICAgICAgIHRoaXMuc2V0VGFibGVMYXlvdXQodGhpcy5zZWxlY3RlZFRhYmxlTGF5b3V0KTtcbiAgICAgICAgICBjb25zdCBncm91cGVkQ29sdW1ucyA9IHRoaXMuZGVmYXVsdENvbmZpZz8uZ3JvdXBlZENvbHVtbnM7XG4gICAgICAgICAgaWYoZ3JvdXBlZENvbHVtbnM/Lmxlbmd0aCl7XG4gICAgICAgICAgICB0aGlzLmdyb3VwZWRDb2x1bW5zID0gc3RydWN0dXJlZENsb25lKGdyb3VwZWRDb2x1bW5zKTtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBEYXRhQXN5bmModGhpcy5kYXRhU2V0LCB0aGlzLmdyb3VwZWRDb2x1bW5zKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yb3dTaGFkaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5mb250RmFpbWx5ID0gJ0ludGVyJztcbiAgICAgICAgICB0aGlzLmhlYWRlclRleHRGb250c1NpemUgPSAxNDtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFibGVMYXlvdXQgPSB0aGlzLnNlbGVjdGVkVGFibGVMYXlvdXQgfHwgJ21lZGl1bSc7XG4gICAgICAgICAgdGhpcy5ib2R5VGV4dEZvbnRzU2l6ZSA9IDE0O1xuICAgICAgICAgIHRoaXMuZ2xvYmFsU2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgICB0aGlzLnByZXNldE5hbWUgPSAnJ1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sIDApO1xuICAgIH1cblxuICAgIGlmKGNoYW5nZXNbJ3BhZ2VTaXplT3B0aW9ucyddICYmIGNoYW5nZXNbJ3BhZ2VTaXplT3B0aW9ucyddPy5jdXJyZW50VmFsdWUpe1xuICAgICAgdGhpcy5idWlsZFBhZ2VTaXplS2V5TWFwKCk7XG4gICAgfVxuXG4gIH1cblxuXG4gIFxuXG4gIGFzeW5jIHNldENvbHVtbnNDb2x1bW5Ecm9wZG93blZhbHVzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jb2x1bW5zKSByZXR1cm47XG4gICAgLy8gSnVzdCByZW1vdmVkIHRlbXBvcmFyeSBmb3Igc3VwZXIgYWRtaW4gd2lsbCBzZXQgaXQgYWdhaW5cbiAgICAvLyBpZiAodGhpcy5jb2x1bW5zPy5sZW5ndGgpIHtcbiAgICAvLyAgIHRoaXMuY29sdW1ucyA9IHRoaXMuY29sdW1ucz8uZmlsdGVyKGMgPT4gYz8uZmllbGQ/LnRyaW0oKSAhPT0gJ2lzX2RlbGV0ZWQnKVxuICAgIC8vIH1cbiAgICB0aGlzLmNvbHVtbnMgPSBhd2FpdCB0aGlzLmNvbW1vblNldmljZS5jb3B5RHJvcGRvd25EYXRhUmVjdXJzaXZlbHkodGhpcy5jb2x1bW5zKTtcbiAgfVxuXG5cblxuXG4gIGFwcGx5Um93c1NlbGVjdGlvblN0YXRlKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkSWRzRnJvbVN0YXRlID0gdGhpcy5yZXN0b3JlU2VsZWN0aW9uKHRoaXMudGFibGVUeXBlKTtcbiAgICBpZiAoc2VsZWN0ZWRJZHNGcm9tU3RhdGUuc2l6ZSA+IDApIHtcbiAgICAgIGNvbnN0IGlkcyA9IEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJvd3MpO1xuICAgICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBsaXN0aW5nVHlwZTogdGhpcy5saXN0aW5nVHlwZSxcbiAgICAgICAgICBvYmo6IGlkc1xuICAgICAgICB9LFxuICAgICAgICBldmVudFR5cGU6IFwib25TZWxlY3RSb3dcIixcbiAgICAgIH1cbiAgICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyU2VsZWN0aW9uU3RhdGUodGFibGVUeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBzdG9yZWQgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdkYXRhdGFibGVTZWxlY3Rpb25zJykgfHwgJ3tcInNlbGVjdGVkUm93c1wiOiB7fX0nKTtcbiAgICBpZiAoc3RvcmVkLnNlbGVjdGVkUm93cyAmJiBzdG9yZWQuc2VsZWN0ZWRSb3dzW3RhYmxlVHlwZV0pIHtcbiAgICAgIGRlbGV0ZSBzdG9yZWQuc2VsZWN0ZWRSb3dzW3RhYmxlVHlwZV07XG4gICAgfVxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgJ2RhdGF0YWJsZVNlbGVjdGlvbnMnLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoc3RvcmVkKVxuICAgICk7XG4gIH1cblxuXG5cbiAgYXN5bmMgYXBwbHlGaWx0ZXJvcHRpb25MaXN0KCkge1xuICAgIGNvbnN0IHVwZGF0ZWRDb2x1bW5zID0gYXdhaXQgdGhpcy5jb21tb25TZXZpY2UuYXBwbHlGaWx0ZXJzVG9Db2x1bW5zKHRoaXMuY29sdW1ucywgdGhpcy5maWx0ZXJzQ29uZmlnKTtcbiAgICB0aGlzLmNvbHVtbnMgPSBbLi4udXBkYXRlZENvbHVtbnNdO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICBsZWZ0UGlubmVkQ29sdW1uczogYW55W10gPSBbXTtcbiAgY2VudGVyQ29sdW1uczogYW55W10gPSBbXTtcbiAgcmlnaHRQaW5uZWRDb2x1bW5zOiBhbnlbXSA9IFtdO1xuXG4gIHByZXZpZXdMZWZ0UGlubmVkQ29sdW1uczogYW55W10gPSBbXTtcbiAgcHJldmlld0NlbnRlckNvbHVtbnM6IGFueVtdID0gW107XG4gIHByZXZpZXdSaWdodFBpbm5lZENvbHVtbnM6IGFueVtdID0gW107XG5cbiAgLy8gTWFpbiBDb250YWluZXIgVGVtcGxhdGUgUmVmZXJlbmNlc1xuICBAVmlld0NoaWxkKCdkYXRhR3JpZENvbnRhaW5lcicpXG4gIGRhdGFHcmlkQ29udGFpbmVyITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ3Rhc2tNYW5hZ2VtZW50Q29udGFpbmVyJylcbiAgdGFza01hbmFnZW1lbnRDb250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnbmVzdGVkVGFibGVDb250YWluZXInKVxuICBuZXN0ZWRUYWJsZUNvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIC8vIEJvZHkgVGVtcGxhdGUgUmVmZXJlbmNlc1xuICBAVmlld0NoaWxkKCdsZWZ0UGlubmVkQm9keScpXG4gIGxlZnRQaW5uZWRCb2R5ITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ2NlbnRlclBpbm5lZEJvZHknKVxuICBjZW50ZXJQaW5uZWRCb2R5ITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ3JpZ2h0UGlubmVkQm9keScpXG4gIHJpZ2h0UGlubmVkQm9keSE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIC8vIEhlYWRlcnMgVGVtcGxhdGUgUmVmZXJlbmNlc1xuICBAVmlld0NoaWxkKCdsZWZ0UGlubmVkSGVhZGVyJylcbiAgbGVmdFBpbm5lZEhlYWRlciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdjZW50ZXJQaW5uZWRIZWFkZXInKVxuICBjZW50ZXJQaW5uZWRIZWFkZXIhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgncmlnaHRQaW5uZWRIZWFkZXInKVxuICByaWdodFBpbm5lZEhlYWRlciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdnbG9iYWxTZWFyY2hJbnB1dCcpXG4gIGdsb2JhbFNlYXJjaElucHV0ITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICBAVmlld0NoaWxkKCdjb2x1bW5zR3JvdXBlZEJveCcpXG4gIGNvbHVtbnNHcm91cGVkQm94ITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgLy8gQ2VudGVyIEZha2Ugc2Nyb2xsYmFyZFxuICBAVmlld0NoaWxkKCdjZW50ZXJGYWtlU2Nyb2xsYmFyJylcbiAgY2VudGVyRmFrZVNjcm9sbGJhciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBhc3luYyB1cGRhdGVDb2x1bW5XaWR0aHNBbmRHcm91cHMoY29sdW1uczogYW55ID0gbnVsbCkge1xuICAgIGlmICghdGhpcy5kYXRhR3JpZENvbnRhaW5lcikgcmV0dXJuO1xuICAgIGxldCBjb250YWluZXJXaWR0aCA9XG4gICAgICB0aGlzLmRhdGFHcmlkQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5vZmZzZXRXaWR0aCA/PyAwO1xuICAgIC8vIFdyYXAgaW4gYSBwcm9taXNlIHNvIHdlIGNhbiBhd2FpdFxuICAgIGNvbnN0IHsgbGVmdCwgY2VudGVyLCByaWdodCB9OiBhbnkgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGNvbnN0IHByZXBhcmVkID0gdGhpcy5jb2x1bW5TZXJ2aWNlLnByZXBhcmVDb2x1bW5zKFxuICAgICAgICBjb2x1bW5zID8gY29sdW1ucyA6IHRoaXMuY29sdW1ucyxcbiAgICAgICAgY29udGFpbmVyV2lkdGhcbiAgICAgICk7XG4gICAgICByZXNvbHZlKHByZXBhcmVkKTtcbiAgICB9KTtcblxuICAgIHRoaXMubGVmdFBpbm5lZENvbHVtbnMgPSBsZWZ0O1xuICAgIHRoaXMuY2VudGVyQ29sdW1ucyA9IGNlbnRlcjtcbiAgICB0aGlzLnJpZ2h0UGlubmVkQ29sdW1ucyA9IHJpZ2h0O1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCAwKSk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgYXN5bmMgcmVmcmVzaFByZXZpZXdDb2x1bW5zKGNvbHVtbnM6IGFueSA9IG51bGwpIHtcbiAgICBpZiAoIXRoaXMuZGF0YUdyaWRDb250YWluZXIpIHJldHVybjtcblxuICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdGhpcy5kYXRhR3JpZENvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuXG4gICAgLy8gV3JhcCBwcmVwYXJlQ29sdW1ucyBpbiBhIFByb21pc2UgdG8gbWFrZSBpdCBhd2FpdGFibGVcbiAgICBjb25zdCB7IGxlZnQsIGNlbnRlciwgcmlnaHQgfTogYW55ID0gYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBjb25zdCBwcmVwYXJlZCA9IHRoaXMuY29sdW1uU2VydmljZS5wcmVwYXJlQ29sdW1ucyhcbiAgICAgICAgY29sdW1ucyA/IGNvbHVtbnMgOiB0aGlzLmNvbHVtbnMsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoXG4gICAgICApO1xuICAgICAgcmVzb2x2ZShwcmVwYXJlZCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnByZXZpZXdMZWZ0UGlubmVkQ29sdW1ucyA9IGxlZnQ7XG4gICAgdGhpcy5wcmV2aWV3Q2VudGVyQ29sdW1ucyA9IGNlbnRlcjtcbiAgICB0aGlzLnByZXZpZXdSaWdodFBpbm5lZENvbHVtbnMgPSByaWdodDtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgMTApKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuXG4gIGFzeW5jIFNldENvbHVtbnNEZWZhdWx0V2lkdGgoKSB7XG4gICAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSB0aGlzLmdldFZpc2libGVMZWFmQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAgIGNvbnN0IHZpc2libGVDb3VudCA9IHZpc2libGVDb2x1bW5zLmxlbmd0aDtcblxuICAgIGlmICh2aXNpYmxlQ291bnQgPT09IDApIHJldHVybjtcblxuICAgIGxldCBjb250YWluZXJXaWR0aCA9XG4gICAgICB0aGlzLmRhdGFHcmlkQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5vZmZzZXRXaWR0aCA/PyAwO1xuICAgIGlmICh0aGlzLnNob3dTZXJpYWxOdW1iZXIpIGNvbnRhaW5lcldpZHRoIC09IDU1O1xuICAgIGlmICh0aGlzLnNob3dTaWRlTWVudSkgY29udGFpbmVyV2lkdGggLT0gMjk7XG4gICAgLy8gaWYgKHRoaXMuZ3JpZFR5cGUgPT0gJ0Fzc2V0cycgfHwgdGhpcy5ncmlkVHlwZSA9PSAnVGFza3MnKSBjb250YWluZXJXaWR0aCAtPSAzMDtcbiAgICAvLyBjb250YWluZXJXaWR0aCAtPSA1NTtcbiAgICAvLyBpZiAodGhpcy5zaG93U2VyaWFsTnVtYmVyKSBjb250YWluZXJXaWR0aCAtPSA1NTtcbiAgICAvLyBpZiAodGhpcy5zaG93U2lkZU1lbnUpIGNvbnRhaW5lcldpZHRoIC09IDI5O1xuICAgIC8vIGlmICh0aGlzLmdyaWRUeXBlID09ICdBc3NldHMnIHx8IHRoaXMuZ3JpZFR5cGUgPT0gJ1Rhc2tzJykgY29udGFpbmVyV2lkdGggLT0gMzA7XG4gICAgLy8gY29udGFpbmVyV2lkdGggLT0gNTtcbiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtblNlcnZpY2UuYXNzaWduRGVmYXVsdFdpZHRocyhcbiAgICAgIHRoaXMuY29sdW1ucyxcbiAgICAgIGNvbnRhaW5lcldpZHRoXG4gICAgKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMCkpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG5cbiAgc2V0U2VjdGlvbnNXaWR0aCgpIHtcbiAgICBjb25zdCBsZWZ0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmxlZnQtcGlubmVkLWJvZHknKSBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCBjZW50ZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJy5jZW50ZXItc2Nyb2xsYWJsZS1ib2R5J1xuICAgICkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgcmlnaHQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucmlnaHQtcGlubmVkLWJvZHknKSBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAobGVmdCkge1xuICAgICAgbGVmdC5zdHlsZS5taW5XaWR0aCA9IGAke3RoaXMubGVmdFBpbm5lZEhlYWRlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofWA7XG4gICAgfVxuICAgIGlmIChjZW50ZXIpIHtcbiAgICAgIGxlZnQuc3R5bGUubWluV2lkdGggPSBgJHt0aGlzLmNlbnRlclBpbm5lZEhlYWRlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofWA7XG4gICAgfVxuICAgIGlmIChyaWdodCkge1xuICAgICAgbGVmdC5zdHlsZS5taW5XaWR0aCA9IGAke3RoaXMucmlnaHRQaW5uZWRIZWFkZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aH1gO1xuICAgIH1cbiAgfVxuXG4gIC8vIG9uQ2VudGVyQm9keVNjcm9sbCgpOiB2b2lkIHtcbiAgLy8gICBjb25zdCBzY3JvbGxUb3AgPSB0aGlzLmNlbnRlclBpbm5lZEJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A7XG4gIC8vICAgY29uc3Qgc2Nyb2xsTGVmdCA9IHRoaXMuY2VudGVyUGlubmVkQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG5cbiAgLy8gICAvLyBTeW5jIHZlcnRpY2FsIHNjcm9sbCB3aXRoIGxlZnQgJiByaWdodCBwaW5uZWQgYm9kaWVzXG4gIC8vICAgdGhpcy5sZWZ0UGlubmVkQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcbiAgLy8gICB0aGlzLnJpZ2h0UGlubmVkQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcblxuICAvLyAgIC8vIFN5bmMgaG9yaXpvbnRhbCBzY3JvbGwgd2l0aCBjZW50ZXIgaGVhZGVyXG4gIC8vICAgdGhpcy5jZW50ZXJQaW5uZWRIZWFkZXIubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcbiAgLy8gICB0aGlzLmNlbnRlckZha2VTY3JvbGxiYXIubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcbiAgLy8gfVxuXG4gIC8vIG9uTGVmdEJvZHlTY3JvbGwoKTogdm9pZCB7XG4gIC8vICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy5sZWZ0UGlubmVkQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcDtcbiAgLy8gICB0aGlzLmNlbnRlclBpbm5lZEJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gIC8vICAgdGhpcy5yaWdodFBpbm5lZEJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gIC8vIH1cbiAgLy8gb25SaWdodEJvZHlTY3JvbGwoKTogdm9pZCB7XG4gIC8vICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy5yaWdodFBpbm5lZEJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A7XG4gIC8vICAgdGhpcy5jZW50ZXJQaW5uZWRCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuICAvLyAgIHRoaXMubGVmdFBpbm5lZEJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gIC8vIH1cblxuICBmYWtlU2Nyb2xsYmFyU2Nyb2xsTGVmdCA9IDA7XG4gIC8vIG9uRmFrZVNjcm9sbChldmVudDogRXZlbnQpIHtcbiAgLy8gICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gIC8vICAgdGhpcy5mYWtlU2Nyb2xsYmFyU2Nyb2xsTGVmdCA9IHRhcmdldC5zY3JvbGxMZWZ0O1xuICAvLyAgIHRoaXMuY2VudGVyUGlubmVkQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0YXJnZXQuc2Nyb2xsTGVmdDtcbiAgLy8gICB0aGlzLmNlbnRlclBpbm5lZEhlYWRlci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0YXJnZXQuc2Nyb2xsTGVmdDtcbiAgLy8gfVxuXG5cblxuXG4gIC8vIGdldE5lc3RlZFZhbHVlKG9iajogYW55LCBmaWVsZDogc3RyaW5nKTogYW55IHtcbiAgLy8gICByZXR1cm4gZmllbGQ/LnNwbGl0KCcuJykucmVkdWNlKChhY2MsIHBhcnQpID0+IGFjYyAmJiBhY2NbcGFydF0sIG9iaik7XG4gIC8vIH1cbmdldE5lc3RlZFZhbHVlKG9iajogYW55LCBmaWVsZDogc3RyaW5nKTogYW55IHtcbiAgaWYgKCFvYmogfHwgIWZpZWxkKSByZXR1cm4gbnVsbDtcbiAgXG4gIC8vIEdldCB0aGUgcmF3IHZhbHVlXG4gIGNvbnN0IHZhbHVlID0gZmllbGQuc3BsaXQoJy4nKS5yZWR1Y2UoKGFjYywgcGFydCkgPT4gYWNjICYmIGFjY1twYXJ0XSwgb2JqKTtcbiAgXG4gIC8vIOKchSBJZiBpdCdzIGEgc3RhdHVzIGZpZWxkLCBjYXBpdGFsaXplIHRoZSB2YWx1ZVxuICBpZiAodGhpcy5pc1N0YXR1c0ZpZWxkKGZpZWxkKSAmJiB2YWx1ZSkge1xuICAgIC8vIEhhbmRsZSBvYmplY3Qgd2l0aCB2YWx1ZS9uYW1lIHByb3BlcnRpZXNcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnZhbHVlLFxuICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUgPyB0aGlzLmNhcGl0YWxpemVTdGF0dXModmFsdWUudmFsdWUpIDogdmFsdWUudmFsdWUsXG4gICAgICAgIG5hbWU6IHZhbHVlLm5hbWUgPyB0aGlzLmNhcGl0YWxpemVTdGF0dXModmFsdWUubmFtZSkgOiB2YWx1ZS5uYW1lXG4gICAgICB9O1xuICAgIH1cbiAgICBcbiAgICAvLyBIYW5kbGUgcGxhaW4gc3RyaW5nL251bWJlciB2YWx1ZXNcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gdGhpcy5jYXBpdGFsaXplU3RhdHVzKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgXG4gIHJldHVybiB2YWx1ZTtcbn1cbiAgaXNOZXN0ZWRWYWx1ZUFycmF5KG9iajogYW55LCBmaWVsZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCFvYmogfHwgIWZpZWxkKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgdmFsdWUgPSBmaWVsZFxuICAgICAgLnNwbGl0KCcuJylcbiAgICAgIC5yZWR1Y2UoKGFjYywgcGFydCkgPT4gKGFjYyAmJiBhY2NbcGFydF0gIT09IHVuZGVmaW5lZCA/IGFjY1twYXJ0XSA6IHVuZGVmaW5lZCksIG9iaik7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpO1xuICB9XG5cbiAgb25SZXNpemVHcm91cChldmVudDogTW91c2VFdmVudCwgY29sOiBhbnksIGlzUmlnaHRQaW5uZWQ/OiBib29sZWFuKTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IHN0YXJ0WCA9IGV2ZW50LmNsaWVudFg7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBjb2wuY2hpbGRyZW4gfHwgW107XG4gICAgaWYgKCFjaGlsZHJlbi5sZW5ndGgpIHJldHVybjtcblxuICAgIGNvbnN0IGNoaWxkV2lkdGhzOiB7IGZpZWxkOiBzdHJpbmc7IHdpZHRoOiBudW1iZXIgfVtdID0gY2hpbGRyZW4ubWFwKFxuICAgICAgKGNoaWxkOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgIGBbZmllbGQ9XCIke2NoaWxkLmZpZWxkfVwiXWBcbiAgICAgICAgKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBmaWVsZDogY2hpbGQuZmllbGQsXG4gICAgICAgICAgd2lkdGg6IGVsPy5vZmZzZXRXaWR0aCB8fCAwLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCB0b3RhbEluaXRpYWxXaWR0aCA9IGNoaWxkV2lkdGhzLnJlZHVjZShcbiAgICAgIChzdW0sIGNvbCkgPT4gc3VtICsgY29sLndpZHRoLFxuICAgICAgMFxuICAgICk7XG5cbiAgICBjb25zdCBvbk1vdXNlTW92ZSA9IChtb3ZlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGxldCBkZWx0YVggPSBtb3ZlRXZlbnQuY2xpZW50WCAtIHN0YXJ0WDtcblxuICAgICAgaWYgKGlzUmlnaHRQaW5uZWQpIHtcbiAgICAgICAgZGVsdGFYID0gLWRlbHRhWDtcbiAgICAgIH1cblxuICAgICAgLy8gUHJldmVudCBzaHJpbmtpbmcgdG9vIHNtYWxsXG4gICAgICBpZiAodG90YWxJbml0aWFsV2lkdGggKyBkZWx0YVggPCBjaGlsZHJlbi5sZW5ndGggKiA4MCkgcmV0dXJuO1xuXG4gICAgICBsZXQgdG90YWxOZXdXaWR0aCA9IDA7XG5cbiAgICAgIGNoaWxkV2lkdGhzLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IHJhdGlvID0gY2hpbGQud2lkdGggLyB0b3RhbEluaXRpYWxXaWR0aDtcbiAgICAgICAgY29uc3QgbmV3V2lkdGggPSBNYXRoLm1heChjaGlsZC53aWR0aCArIGRlbHRhWCAqIHJhdGlvLCA4MCk7XG4gICAgICAgIHRvdGFsTmV3V2lkdGggKz0gbmV3V2lkdGg7XG5cbiAgICAgICAgY29uc3QgY2hpbGRFbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZmllbGQ9XCIke2NoaWxkLmZpZWxkfVwiXWApO1xuICAgICAgICBjaGlsZEVscy5mb3JFYWNoKChlbDogRWxlbWVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVsSHRtbCA9IGVsIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgIGVsSHRtbC5zdHlsZS5taW5XaWR0aCA9IGAke25ld1dpZHRofXB4YDtcbiAgICAgICAgICBlbEh0bWwuc3R5bGUud2lkdGggPSBgJHtuZXdXaWR0aH1weGA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudXBkYXRlQ29sdW1uV2lkdGhJblNvdXJjZUJ5RmllbGQoY2hpbGQuZmllbGQsIG5ld1dpZHRoKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyDinIUgVXBkYXRlIGdyb3VwIGhlYWRlciB3aWR0aCBpbiBET01cbiAgICAgIGNvbnN0IGdyb3VwSGVhZGVyRWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBgW2dyb3VwPVwiJHtjb2wuaGVhZGVyfVwiXWBcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBpZiAoZ3JvdXBIZWFkZXJFbCkge1xuICAgICAgICBncm91cEhlYWRlckVsLnN0eWxlLndpZHRoID0gYCR7dG90YWxOZXdXaWR0aH1weGA7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uTW91c2VVcCA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnRhYmxlRmlsdGVyVmlld0lkKSB7XG4gICAgICAgIHRoaXMuc2F2ZVByZXNldCgnbW91c2VVcCcpO1xuICAgICAgfVxuICAgICAgdGhpcy5yZWZyZXNoSGVhZGVycygpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcbiAgICAgIGNvbnN0IHNlbmREYXRhID0ge1xuICAgICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgICAgbm9fb2ZfcmVjb3JkczogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2VTaXplLFxuICAgICAgICB0YWJsZV9jb25maWc6IHtcbiAgICAgICAgICAgcm93U2hhZGluZ0VuYWJsZWQ6IHRoaXMucm93U2hhZGluZ0VuYWJsZWQgfHwgZmFsc2UsXG4gICAgICAgICAgIHNob3dWZXJ0aWNhbEJvcmRlcjogdGhpcy5zaG93VmVydGljYWxCb3JkZXIgfHwgZmFsc2UsXG4gICAgICAgICAgIGZvbnRGYWltbHk6IHRoaXMuZm9udEZhaW1seSB8fCAnSW50ZXInLFxuICAgICAgICAgICBoZWFkZXJUZXh0Rm9udHNTaXplOiB0aGlzLmhlYWRlclRleHRDb2xvciB8fCAxNCxcbiAgICAgICAgICAgc2VsZWN0ZWRUYWJsZUxheW91dDogdGhpcy5zZWxlY3RlZFRhYmxlTGF5b3V0IHx8ICdtZWRpdW1kJyxcbiAgICAgICAgICAgYm9keVRleHRGb250c1NpemU6IHRoaXMuYm9keVRleHRGb250c1NpemUgfHwgMTQsXG4gICAgICAgICAgIGdsb2JhbFNlYXJjaDogdGhpcy5nbG9iYWxTZWFyY2hUZXh0LFxuICAgICAgICAgICBmaWx0ZXJOYW1lczogJycsXG4gICAgICAgICAgIHRvdGFsQ291bnQ6IDAsXG4gICAgICAgICAgIGFjdGl2ZUZpbHRlcnM6IHRydWUsXG4gICAgICAgICAgIG9kZFJvd3NCYWNrZ3JvdW5kQ29sb3I6ICcjZjFmMWYxJ1xuICAgICAgICB9LFxuICAgICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICAgIH07XG4gICAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gICAgfTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDb2x1bW5XaWR0aEluU291cmNlQnlGaWVsZChmaWVsZDogc3RyaW5nLCB3aWR0aDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgdXBkYXRlID0gKGNvbHVtbnM6IGFueVtdKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zKSB7XG4gICAgICAgIGlmIChjb2wuY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgIHVwZGF0ZShjb2wuY2hpbGRyZW4pO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC5maWVsZCA9PT0gZmllbGQpIHtcbiAgICAgICAgICBjb2wud2lkdGggPSB3aWR0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICB1cGRhdGUodGhpcy5jb2x1bW5zKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBnZXQgY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKCl7XG4gICAgcmV0dXJuIHtcbiAgICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgICAgbm9fb2ZfcmVjb3JkczogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2VTaXplLFxuICAgICAgICB0YWJsZV9jb25maWc6IHtcbiAgICAgICAgICAgICAgICAgIHJvd1NoYWRpbmdFbmFibGVkOiB0aGlzLnJvd1NoYWRpbmdFbmFibGVkIHx8IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgc2hvd1ZlcnRpY2FsQm9yZGVyOiB0aGlzLnNob3dWZXJ0aWNhbEJvcmRlciB8fCBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIGZvbnRGYWltbHk6IHRoaXMuZm9udEZhaW1seSAgfHwgJ0ludGVyJyxcbiAgICAgICAgICAgICAgICAgIGhlYWRlclRleHRGb250c1NpemU6IE51bWJlcih0aGlzLmhlYWRlclRleHRGb250c1NpemUpIHx8IDE0LFxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRUYWJsZUxheW91dDogdGhpcy5zZWxlY3RlZFRhYmxlTGF5b3V0IHx8ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgICAgYm9keVRleHRGb250c1NpemU6IE51bWJlcih0aGlzLmJvZHlUZXh0Rm9udHNTaXplKSB8fCAxNCxcbiAgICAgICAgICAgICAgICAgIGdsb2JhbFNlYXJjaDogdGhpcy5nbG9iYWxTZWFyY2hUZXh0LFxuICAgICAgICAgICAgICAgICAgZmlsdGVyTmFtZXM6ICcnLFxuICAgICAgICAgICAgICAgICAgdG90YWxDb3VudDogMCxcbiAgICAgICAgICAgICAgICAgIGFjdGl2ZUZpbHRlcnM6IHRydWUsXG4gICAgICAgICAgICAgICAgICBvZGRSb3dzQmFja2dyb3VuZENvbG9yOiAnI2YxZjFmMSdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICB9XG4gIH1cblxuICBjbGVhbkNvbHVtbnMoY29sdW1uczogYW55W10pOiBhbnlbXSB7XG4gICAgcmV0dXJuIGNvbHVtbnMubWFwKChjb2wpID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgX190eXBlbmFtZSxcbiAgICAgICAgX2lkLFxuICAgICAgICBjb2x1bW5fZHJvcGRvd25fdmFsdWUsXG4gICAgICAgIGZpbHRlclZhbHVlLFxuICAgICAgICBleHBhbmRlZEZpbHRlcixcbiAgICAgICAgY2VsbFJlbmRlcmVyLFxuICAgICAgICBmaWx0ZXJSZW5kZXJlcixcbiAgICAgICAgY2VsbENvbXBvbmVudFJlZixcbiAgICAgICAgcXVlcnksXG4gICAgICAgIGlzUm93R3JvdXBlZCxcbiAgICAgICAgLi4ucmVzdFxuICAgICAgfSA9IGNvbDtcblxuICAgICAgLy8gQ2xlYW4gZHJvcGRvd24gdmFsdWVzIChfX3R5cGVuYW1lIHJlbW92ZWQpXG4gICAgICBjb25zdCBjbGVhbmVkRHJvcGRvd24gPSBBcnJheS5pc0FycmF5KGNvbHVtbl9kcm9wZG93bl92YWx1ZSlcbiAgICAgICAgPyBjb2x1bW5fZHJvcGRvd25fdmFsdWUubWFwKCh7IF9fdHlwZW5hbWUsIC4uLmRSZXN0IH0pID0+IGRSZXN0KVxuICAgICAgICA6IGNvbHVtbl9kcm9wZG93bl92YWx1ZVxuICAgICAgICAgID8gKCh7IF9fdHlwZW5hbWUsIC4uLmRSZXN0IH0pID0+IGRSZXN0KShjb2x1bW5fZHJvcGRvd25fdmFsdWUpXG4gICAgICAgICAgOiBudWxsO1xuXG4gICAgICAvLyBDbGVhbiBxdWVyeSAoX190eXBlbmFtZSByZW1vdmVkKVxuICAgICAgY29uc3QgY2xlYW5lZFF1ZXJ5ID0gQXJyYXkuaXNBcnJheShxdWVyeSlcbiAgICAgICAgPyBxdWVyeS5tYXAoKHsgX190eXBlbmFtZSwgLi4ucVJlc3QgfSkgPT4gcVJlc3QpXG4gICAgICAgIDogcXVlcnlcbiAgICAgICAgICA/ICgoeyBfX3R5cGVuYW1lLCBfaWRzLCAuLi5xUmVzdCB9KSA9PiBxUmVzdCkocXVlcnkpXG4gICAgICAgICAgOiBudWxsO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5yZXN0LFxuICAgICAgICBjb2x1bW5fZHJvcGRvd25fdmFsdWU6IGNsZWFuZWREcm9wZG93bixcbiAgICAgICAgcXVlcnk6IGNsZWFuZWRRdWVyeSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBvblJlc2l6ZUNvbHVtbihldmVudDogTW91c2VFdmVudCwgY29sOiBhbnkpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgY29uc3Qgc3RhcnRYID0gZXZlbnQuY2xpZW50WDtcblxuICAgIGNvbnN0IHRhcmdldEVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgIGBbZmllbGQ9XCIke2NvbC5maWVsZH1cIl1gXG4gICAgKSBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCBpbml0aWFsV2lkdGggPSB0YXJnZXRFbD8ub2Zmc2V0V2lkdGggfHwgMTUwO1xuXG4gICAgY29uc3QgbWF0Y2hpbmdFbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZmllbGQ9XCIke2NvbC5maWVsZH1cIl1gKTtcblxuICAgIC8vIPCfkYkgQWRkIGhpZ2hsaWdodCB3aGlsZSByZXNpemluZ1xuICAgIGlmIChjb2w/LnBpbm5lZCA9PSAncmlnaHQnKSB7XG4gICAgICBtYXRjaGluZ0Vscy5mb3JFYWNoKChlbDogRWxlbWVudCkgPT4ge1xuICAgICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5hZGQoJ3Jlc2l6aW5nLWhpZ2hsaWdodC1yaWdodCcpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hdGNoaW5nRWxzLmZvckVhY2goKGVsOiBFbGVtZW50KSA9PiB7XG4gICAgICAgIChlbCBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0LmFkZCgncmVzaXppbmctaGlnaGxpZ2h0Jyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBvbk1vdXNlTW92ZSA9IChtb3ZlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGxldCBkZWx0YVggPSBtb3ZlRXZlbnQuY2xpZW50WCAtIHN0YXJ0WDtcblxuICAgICAgLy8g8J+RiSBSZXZlcnNlIGlmIHRoZSBjb2x1bW4gaXMgcGlubmVkIHRvIHRoZSByaWdodFxuICAgICAgaWYgKGNvbC5waW5uZWQgPT09ICdyaWdodCcpIHtcbiAgICAgICAgZGVsdGFYID0gLWRlbHRhWDtcbiAgICAgIH1cblxuICAgICAgbGV0IG5ld1dpZHRoID0gaW5pdGlhbFdpZHRoICsgZGVsdGFYO1xuICAgICAgaWYgKG5ld1dpZHRoIDwgODApIHJldHVybjtcblxuICAgICAgbWF0Y2hpbmdFbHMuZm9yRWFjaCgoZWw6IEVsZW1lbnQpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGVsIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBlbGVtZW50LnN0eWxlLm1pbldpZHRoID0gYCR7bmV3V2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7bmV3V2lkdGh9cHhgO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMudXBkYXRlQ29sdW1uV2lkdGhJblNvdXJjZUJ5RmllbGQoY29sLmZpZWxkLCBuZXdXaWR0aCk7XG4gICAgICBjb2wud2lkdGggPSBuZXdXaWR0aDtcbiAgICAgIHRoaXMuaGFzU2Nyb2xsID0gdGhpcy5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uTW91c2VVcCA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnRhYmxlRmlsdGVyVmlld0lkKSB7XG4gICAgICAgIHRoaXMuc2F2ZVByZXNldCgnbW91c2VVcCcpO1xuICAgICAgfVxuICAgICAgdGhpcy5yZWZyZXNoSGVhZGVycygpO1xuICAgICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICAgIGZpbHRlcnM6IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpLFxuICAgICAgICBub19vZl9yZWNvcmRzOiB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZVNpemUsXG4gICAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgICAgfTtcbiAgICAgIHRoaXMuY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZy5lbWl0KHRoaXMuY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKTtcblxuICAgICAgbWF0Y2hpbmdFbHMuZm9yRWFjaCgoZWw6IEVsZW1lbnQpID0+IHtcbiAgICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3QucmVtb3ZlKCdyZXNpemluZy1oaWdobGlnaHQnKTtcbiAgICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3QucmVtb3ZlKCdyZXNpemluZy1oaWdobGlnaHQtcmlnaHQnKTtcbiAgICAgIH0pO1xuXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xuICAgIH07XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcbiAgfVxuXG5cblxuICBvblJlc2l6ZUdyb3VwQm94KGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IHN0YXJ0WCA9IGV2ZW50LmNsaWVudFg7XG5cbiAgICBjb25zdCB0YXJnZXRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdncm91cEJveEhlYWRlckRpdicpO1xuICAgIGNvbnN0IGluaXRpYWxXaWR0aCA9IHRhcmdldEVsPy5vZmZzZXRXaWR0aCB8fCAxNTA7XG5cbiAgICBjb25zdCBvbk1vdXNlTW92ZSA9IChtb3ZlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGRlbHRhWCA9IG1vdmVFdmVudC5jbGllbnRYIC0gc3RhcnRYO1xuXG4gICAgICBsZXQgbmV3V2lkdGggPSBpbml0aWFsV2lkdGggKyBkZWx0YVg7XG4gICAgICBpZiAobmV3V2lkdGggPCAxMDApIG5ld1dpZHRoID0gMTAwO1xuXG4gICAgICBpZiAodGFyZ2V0RWwpIHtcbiAgICAgICAgdGFyZ2V0RWwuc3R5bGUud2lkdGggPSBgJHtuZXdXaWR0aH1weGA7XG4gICAgICAgIHRhcmdldEVsLnN0eWxlLm1pbldpZHRoID0gYCR7bmV3V2lkdGh9cHhgO1xuICAgICAgICB0aGlzLmdyb3VwQm94UGFkZGluZyA9IG5ld1dpZHRoO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvbk1vdXNlVXAgPSAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xuICAgIH07XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcbiAgfVxuXG4gIG9uUGFzdGVJbkZpbHRlclJvd1NlYXJjaChldmVudDogQ2xpcGJvYXJkRXZlbnQsIGNvbDogYW55KSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm9uRmlsdGVyQ2hhbmdlKGNvbCk7XG4gICAgICB0aGlzLmFwcGx5RHJvcGRvd25GaWx0ZXIoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uRmlsdGVyQ2hhbmdlKGNvbDogYW55KTogdm9pZCB7XG4gICAgY29uc3QgZmlsdGVyVmFsdWUgPSBjb2wuZmlsdGVyVmFsdWU/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbkZvckZpbHRlciA9IGNvbDtcbiAgICBpZiAoIWNvbD8ucXVlcnkpIHtcbiAgICAgIGNvbC5xdWVyeSA9IHtcbiAgICAgICAgZmlyc3RfY29uZGl0aW9uOiBjb2wudHlwZSA9PSAnZGF0ZScgPyAnZXF1YWwnIDogJ2NvbnRhaW4nLFxuICAgICAgICBmaXJzdF92YWx1ZTogbnVsbCxcbiAgICAgICAgc2Vjb25kX2NvbmRpdGlvbjogbnVsbCxcbiAgICAgICAgc2Vjb25kX3ZhbHVlOiBudWxsLFxuICAgICAgICBjb25kaXRpb246IG51bGxcbiAgICAgIH1cbiAgICB9XG4gICAgY29sLnF1ZXJ5LmZpcnN0X3ZhbHVlID0gZmlsdGVyVmFsdWU7XG4gICAgdGhpcy5maXJzdFZhbHVlID0gZmlsdGVyVmFsdWU7XG4gIH1cblxuICAvLyBHZXQgQm9keSBIZWlnaHRcbiAgZ2V0IGJvZHlXcmFwcGVySGVpZ2h0KCk6IHN0cmluZyB7XG4gICAgY29uc3Qgcm93cyA9IHRoaXMuc2hvd0NvbHVtbnNHcm91cGluZyAmJiB0aGlzLnNob3dGaWx0ZXJSb3cgPyAzIDogKHRoaXMuc2hvd0NvbHVtbnNHcm91cGluZyB8fCB0aGlzLnNob3dGaWx0ZXJSb3cgPyAyIDogMSk7XG4gICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5oZWFkZXJSb3dIZWlnaHQgKiByb3dzICsgKHRoaXMuaGFzU2Nyb2xsID8gMTcgOiAwKTtcbiAgICByZXR1cm4gYGNhbGMoMTAwJSAtICR7b2Zmc2V0fXB4KWA7XG4gIH1cblxuICAvLyBSb3cgSG92ZXIgTG9naWMgSGVyZVxuICBob3ZlcmVkUm93SWQ6IHN0cmluZyB8IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBvblJvd0hvdmVyKHJvdzogYW55KTogdm9pZCB7XG4gICAgdGhpcy5ob3ZlcmVkUm93SWQgPSByb3cuX2lkIHx8IHJvdy5pZDtcbiAgfVxuXG4gIG9uUm93TGVhdmUoKTogdm9pZCB7XG4gICAgdGhpcy5ob3ZlcmVkUm93SWQgPSBudWxsO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuICBvbkRvY3VtZW50Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgdGhpcy5pc1Zpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLm9wZW5JbmRleCA9IG51bGw7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuaGFzUGFyZW50V2l0aENsYXNzKHRhcmdldCwgW1xuICAgICAgICAndGhyZWUtZG90cycsXG4gICAgICAgICdmaWx0ZXItaWNvbi13cmFwcGVyJyxcbiAgICAgICAgJ2NvbHVtbi1tZW51JyxcbiAgICAgICAgJ2ZpbHRlci1tZW51JyxcbiAgICAgIF0pXG4gICAgKSB7XG4gICAgICB0aGlzLmFjdGl2ZUNvbCA9IG51bGw7XG4gICAgICB0aGlzLmFjdGl2ZUZpbHRlckNlbGwgPSBudWxsO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIHRoaXMuc2hvd0FjdGlvbnNEcm9wRG93biA9IGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBpbnNpZGVUb3BGaWx0ZXJSb3cgPSB0YXJnZXQuY2xvc2VzdCgnLmZpbHRlci10YWdzJykgfHwgdGFyZ2V0LmNsb3Nlc3QoJy5hZGQtZmlsdGVyLWJ1dHRvbi1tZW51JykgfHxcbiAgICAgIHRhcmdldC5jbG9zZXN0KCcudGFibGUtcmlnaHQtdG9wLWFjdGlvbnMnKSB8fCB0YXJnZXQuY2xvc2VzdCgnLnRhYmxlLWxheW91dCcpIHx8IHRhcmdldC5jbG9zZXN0KCcuZmlsdGVyLXJvdy1maWx0ZXItd3JhcHBlcicpO1xuICAgIGNvbnN0IGlzQ2xpY2tlZEluc2lkZVRocmVlRG90c0ZpbHRlciA9IHRhcmdldC5jbG9zZXN0KCcudGhyZWUtZG90cy1maWx0ZXInKSB8fCB0YXJnZXQuY2xvc2VzdCgnLmZpbHRlci1tZW51LWNvbnRhaW5lcicpO1xuICAgIGlmICghaXNDbGlja2VkSW5zaWRlVGhyZWVEb3RzRmlsdGVyKSB7XG4gICAgICB0aGlzLmNsb3NlVGhyZWVEb3RzTWVudUZpbHRlcigpO1xuICAgIH1cbiAgICBpZiAoIWluc2lkZVRvcEZpbHRlclJvdykge1xuICAgICAgdGhpcy5jbG9zZUZpbHRlckRyb3Bkb3ducyhldmVudCk7XG4gICAgfVxuICAgIGlmICghdGFyZ2V0LmNsb3Nlc3QoJy5zZXQtZGVmYXVsdC1wcmVzZXQnKSkge1xuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNldC1kZWZhdWx0LXByZXNldCcpPy5jbGFzc0xpc3Q/LnJlbW92ZSgnc2hvdycpO1xuICAgIH1cblxuICAgIGlmICghdGFyZ2V0LmNsb3Nlc3QoJy5mdWxsLXRleHQtYm94JykgJiYgIXRhcmdldC5jbG9zZXN0KCcuZGF0YS1ncmlkLWhlYWRlci13cmFwcGVyJykpIHtcbiAgICAgIHRoaXMuY29sbGFwc2VBbGxFeHBhbmRlZENlbGxzKCk7XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXQuY2xvc2VzdCgnLmRhdGEtZ3JpZC10YWJsZS13cmFwcGVyJykpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRLZXlzLmNsZWFyKCk7XG4gICAgICB0aGlzLmFjdGl2ZUNlbGwgPSAnJztcbiAgICB9XG5cbiAgICAgaWYgKCF0YXJnZXQuY2xvc2VzdCgnLmRhdGEtZ3JpZC1ib2R5JykpIHtcbiAgICAgIHRoaXMuZWRpdGluZ0tleSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cblxuICBjbG9zZVRocmVlRG90c01lbnVGaWx0ZXIoKSB7XG4gICAgdGhpcy5pc1RocmVlRG90c0ZpbHRlck9wZW4gPSBmYWxzZTtcbiAgfVxuXG5cbiAgY2xvc2VGaWx0ZXJEcm9wZG93bnMoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLmlzRmlsdGVyT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuaXNBY3RpdmVGaWx0ZXJPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5hY3RpdmVUb3BCdXR0b24gPSAnJztcbiAgICB0aGlzLmFjdGl2ZUZpbHRlckNlbGwgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNQYXJlbnRXaXRoQ2xhc3MoXG4gICAgZWxlbWVudDogSFRNTEVsZW1lbnQsXG4gICAgY2xhc3NMaXN0OiBzdHJpbmdbXVxuICApOiBib29sZWFuIHtcbiAgICBsZXQgZWw6IEhUTUxFbGVtZW50IHwgbnVsbCA9IGVsZW1lbnQ7XG5cbiAgICB3aGlsZSAoZWwgIT09IG51bGwpIHtcbiAgICAgIGlmIChcbiAgICAgICAgZWwuY2xhc3NMaXN0ICYmXG4gICAgICAgIGNsYXNzTGlzdC5zb21lKChjbGFzc05hbWUpID0+IGVsIS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGVsID0gZWwucGFyZW50RWxlbWVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpc01lbnVlSGlkZGVuID0gZmFsc2U7XG4gIG9wZW5UaHJlZURvdHNNZW51KGV2ZW50OiBNb3VzZUV2ZW50LCBjaGlsZDogYW55LCBrZWVwT3JpZ2luYWxQb3NpdGlvbiA9IGZhbHNlKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmlzTWVudWVIaWRkZW4gPSB0cnVlO1xuICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdGhpcy5kYXRhR3JpZENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0V2lkdGg7XG4gICAgdGhpcy5hY3RpdmVDb2wgPSBjaGlsZDtcbiAgICB0aGlzLmFjdGl2ZUZpbHRlckNlbGwgPSBudWxsO1xuICAgIGNvbnN0IHggPSBldmVudC5jbGllbnRYO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jb2x1bW4tbWVudScpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKHggPiAoY29udGFpbmVyV2lkdGggLyAyKSkge1xuICAgICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke3ggLSAyNDB9cHhgO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVsZW1lbnQhLnN0eWxlLmxlZnQgPSBgJHt4fXB4YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5pc01lbnVlSGlkZGVuID0gZmFsc2U7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMCk7XG4gIH1cbiAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIENvbHVtbiBUaHJlZSBEb3RzIEFjdGlvbnNcbiAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgc29ydEFzYyhjb2w6IGFueSkge1xuICAgIGlmICghY29sLmlzX3NvcnRhYmxlKSByZXR1cm47XG4gICAgY29sIS5vcmRlcl9ieSA9ICdhc2MnO1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgb3JkZXI6ICdhc2MnLFxuICAgICAgY29sdW1uOiBjb2xcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuc29ydGluZ09yZGVyT3B0aW9ucy5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHNvcnREZXNjKGNvbDogYW55KSB7XG4gICAgaWYgKCFjb2wuaXNfc29ydGFibGUpIHJldHVybjtcbiAgICBjb2whLm9yZGVyX2J5ID0gJ2Rlc2MnO1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgb3JkZXI6ICdkZXNjJyxcbiAgICAgIGNvbHVtbjogY29sXG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLnNvcnRpbmdPcmRlck9wdGlvbnMuZW1pdChldmVudCk7XG4gIH1cblxuICByZXNldFNvcnQoY29sOiBhbnkpIHtcbiAgICB0aGlzLnNvcnRpbmdDb25maWcgPSB7IGZpZWxkOiAnJywgb3JkZXJfYnk6ICcnIH07XG4gICAgY29uc3QgZXZlbnQgPSB7IGZpZWxkOiBudWxsLCBvcmRlcl9ieTogbnVsbCB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuc29ydGluZ09yZGVyT3B0aW9ucy5lbWl0KGV2ZW50KTtcbiAgfVxuXG5cbiAgYXN5bmMgdXBkYXRlQ29sdW1uUGluSW5Tb3VyY2VCeUZpZWxkKFxuICAgIGNvbHVtbjogYW55LFxuICAgIHBpbm5lZDogJ2xlZnQnIHwgJ3JpZ2h0JyB8IG51bGwsXG4gICAgaXNOZXN0ZWRUYWJsZTogYW55ID0gZmFsc2UsXG4gICAgY29sdW1ucz86IGFueVxuICApIHtcbiAgICBkZWJ1Z2dlclxuICAgIGlmIChpc05lc3RlZFRhYmxlKSB7XG4gICAgICB0aGlzLnBpblVucGluQ29sdW0oY29sdW1uLCBwaW5uZWQsIGNvbHVtbnMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB1cGRhdGUgPSAoY29sdW1uczogYW55W10pID0+IHtcbiAgICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHVtbnMpIHtcbiAgICAgICAgaWYgKGNvbC5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgdXBkYXRlKGNvbC5jaGlsZHJlbik7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sLmZpZWxkID09PSBjb2x1bW4uZmllbGQpIHtcbiAgICAgICAgICBjb2wucGlubmVkID0gcGlubmVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmFjdGl2ZUNvbCA9IG51bGw7XG4gICAgdXBkYXRlKHRoaXMuY29sdW1ucyk7XG4gICAgdGhpcy51cGRhdGVDb2x1bW5XaWR0aHNBbmRHcm91cHMoKTtcbiAgICB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgIG5vX29mX3JlY29yZHM6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWaXNpYmxlTGVhZkNvbHVtbnMgPSAoY29sdW1uczogYW55W10pOiBhbnlbXSA9PiB7XG4gICAgY29uc3QgcmVzdWx0OiBhbnlbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcbiAgICAgIGlmIChjb2x1bW4uY2hpbGRyZW4gJiYgQXJyYXkuaXNBcnJheShjb2x1bW4uY2hpbGRyZW4pKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKC4uLnRoaXMuZ2V0VmlzaWJsZUxlYWZDb2x1bW5zKGNvbHVtbi5jaGlsZHJlbikpO1xuICAgICAgfSBlbHNlIGlmIChjb2x1bW4uaXNfdmlzaWJsZSkge1xuICAgICAgICByZXN1bHQucHVzaChjb2x1bW4pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIGF1dG9zaXplQ29sdW1uKGNvbHM6IGFueSB8IGFueVtdKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVDb2wgPSBudWxsO1xuXG4gICAgLy8gTm9ybWFsaXplIGlucHV0IHRvIGFuIGFycmF5XG4gICAgY29uc3QgY29sdW1uc1RvUmVzaXplID0gQXJyYXkuaXNBcnJheShjb2xzKSA/IGNvbHMgOiBbY29sc107XG5cbiAgICAvLyBIZWxwZXI6IEZsYXR0ZW4gYWxsIHZpc2libGUgbGVhZiBjb2x1bW5zXG4gICAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSB0aGlzLmdldFZpc2libGVMZWFmQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAgIGNvbnN0IHZpc2libGVDb3VudCA9IHZpc2libGVDb2x1bW5zLmxlbmd0aDtcblxuICAgIGlmICh2aXNpYmxlQ291bnQgPT09IDApIHJldHVybjtcblxuICAgIGxldCBjb250YWluZXJXaWR0aCA9XG4gICAgICB0aGlzLmRhdGFHcmlkQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5vZmZzZXRXaWR0aCA/PyAwO1xuICAgIGlmICh0aGlzLnNob3dTZXJpYWxOdW1iZXIpIGNvbnRhaW5lcldpZHRoIC09IDU1O1xuICAgIGlmICh0aGlzLnNob3dTaWRlTWVudSkgY29udGFpbmVyV2lkdGggLT0gMjk7XG4gICAgaWYgKHRoaXMuZ3JpZFR5cGUgPT0gJ0Fzc2V0cycgfHwgdGhpcy5ncmlkVHlwZSA9PSAnVGFza3MnKSBjb250YWluZXJXaWR0aCAtPSAzMDtcbiAgICBpZih0aGlzLnNob3dDaGVja2JveGVzKSBjb250YWluZXJXaWR0aCAtPSA1NTtcbiAgICBjb250YWluZXJXaWR0aCAtPSA1O1xuICAgIGNvbnN0IGVxdWFsV2lkdGggPSBNYXRoLmZsb29yKGNvbnRhaW5lcldpZHRoIC8gdmlzaWJsZUNvdW50KTtcblxuICAgIC8vIFJlc2l6ZSBlYWNoIHBhc3NlZCBjb2x1bW5cbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zVG9SZXNpemUpIHtcbiAgICAgIGlmIChjb2wgJiYgY29sLmZpZWxkKSB7XG4gICAgICAgIGNvbC53aWR0aCA9IGVxdWFsV2lkdGg7XG4gICAgICAgIHRoaXMudXBkYXRlQ29sdW1uV2lkdGhJblNvdXJjZUJ5RmllbGQoY29sLmZpZWxkLCBlcXVhbFdpZHRoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoc0FuZEdyb3VwcygpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgICAgZmlsdGVyczogdGhpcy5jbGVhbkZpbHRlcmRDb2x1bW5zKCksXG4gICAgICAgIG5vX29mX3JlY29yZHM6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgICB9O1xuICAgICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICAgIH0sIDEwMDApO1xuICAgIHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gIH1cblxuICBnZXRHcm91cFdpZHRoKGdyb3VwOiBhbnkpOiBudW1iZXIge1xuICAgIHJldHVybiAoXG4gICAgICBncm91cD8uY2hpbGRyZW5cbiAgICAgICAgPy5maWx0ZXIoKGNvbDogYW55KSA9PiBjb2w/LmlzX3Zpc2libGUpXG4gICAgICAgID8ucmVkdWNlKChhY2M6IG51bWJlciwgY29sOiBhbnkpID0+IGFjYyArIChjb2w/LndpZHRoIHx8IDApLCAwKSB8fCAwXG4gICAgKTtcbiAgfVxuXG4gIGF1dG9zaXplQWxsQ29sdW1ucygpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZUNvbCA9IG51bGw7XG5cbiAgICBjb25zdCBnZXRWaXNpYmxlTGVhZkNvbHVtbnMgPSAoY29sdW1uczogYW55W10pOiBhbnlbXSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQ6IGFueVtdID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcbiAgICAgICAgaWYgKGNvbHVtbi5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KGNvbHVtbi5jaGlsZHJlbikpIHtcbiAgICAgICAgICByZXN1bHQucHVzaCguLi5nZXRWaXNpYmxlTGVhZkNvbHVtbnMoY29sdW1uLmNoaWxkcmVuKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmlzX3Zpc2libGUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goY29sdW1uKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IGdldFZpc2libGVMZWFmQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAgIGNvbnN0IHZpc2libGVDb3VudCA9IHZpc2libGVDb2x1bW5zLmxlbmd0aDtcblxuICAgIGlmICh2aXNpYmxlQ291bnQgPT09IDApIHJldHVybjtcblxuICAgIGxldCBjb250YWluZXJXaWR0aCA9XG4gICAgICB0aGlzLmRhdGFHcmlkQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5vZmZzZXRXaWR0aCA/PyAwO1xuICAgIGlmICh0aGlzLnNob3dTZXJpYWxOdW1iZXIpIGNvbnRhaW5lcldpZHRoIC09IDU1O1xuICAgIGlmICh0aGlzLnNob3dTaWRlTWVudSkgY29udGFpbmVyV2lkdGggLT0gMjk7XG4gICAgaWYgKHRoaXMuZ3JpZFR5cGUgPT0gJ0Fzc2V0cycgfHwgdGhpcy5ncmlkVHlwZSA9PSAnVGFza3MnKSBjb250YWluZXJXaWR0aCAtPSAzMDtcbiAgICAgaWYodGhpcy5zaG93Q2hlY2tib3hlcykgY29udGFpbmVyV2lkdGggLT0gNTU7XG4gICAgIGNvbnRhaW5lcldpZHRoIC09IDU7XG4gICAgY29uc3QgZXF1YWxXaWR0aCA9IE1hdGgubWF4KE1hdGguZmxvb3IoY29udGFpbmVyV2lkdGggLyB2aXNpYmxlQ291bnQpLCAxNTApO1xuXG4gICAgLy8gVXBkYXRlIHdpZHRocyBmb3IgYWxsIHZpc2libGUgY29sdW1uc1xuICAgIHZpc2libGVDb2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgY29sLndpZHRoID0gZXF1YWxXaWR0aDtcbiAgICAgIHRoaXMudXBkYXRlQ29sdW1uV2lkdGhJblNvdXJjZUJ5RmllbGQoY29sLmZpZWxkLCBlcXVhbFdpZHRoKTtcbiAgICB9KTtcblxuICAgIHRoaXMucmVmcmVzaEhlYWRlcnMoKTtcbiAgICB0aGlzLmhhc1Njcm9sbCA9IHRoaXMuaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHNlbmREYXRhID0ge1xuICAgICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgICAgbm9fb2ZfcmVjb3JkczogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2VTaXplLFxuICAgICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICAgIH07XG4gICAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gICAgfSwgMTAwMCk7XG4gIH1cblxuICBwcml2YXRlIG1hcmtDb2x1bW5Bc0dyb3VwZWQoY29sdW1uczogYW55W10sIGZpZWxkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zKSB7XG4gICAgICBpZiAoY29sLmZpZWxkID09PSBmaWVsZCkge1xuICAgICAgICBjb2wuaXNSb3dHcm91cGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGNvbC5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMubWFya0NvbHVtbkFzR3JvdXBlZChjb2wuY2hpbGRyZW4sIGZpZWxkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBncm91cEJ5KGNvbDogYW55KSB7XG4gICAgdGhpcy5tYWluU2Nyb2xsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICB0aGlzLnRyYW5zbGF0ZVkgPSAwO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLmFjdGl2ZUNvbCA9IG51bGw7XG4gICAgaWYgKCFjb2wpIHJldHVybjtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICBpZiAoY29sPy5pc19ncm91cGFibGUpIHtcbiAgICAgIHRoaXMuZ3JvdXBlZENvbHVtbnMucHVzaChjb2wpO1xuICAgICAgdGhpcy5tYXJrQ29sdW1uQXNHcm91cGVkKHRoaXMuY29sdW1ucywgY29sLmZpZWxkKTtcbiAgICB9XG4gICAgY29uc3QgZmllbGRzID0gdGhpcy5ncm91cGVkQ29sdW1ucy5tYXAoKGl0ZW0pID0+IGl0ZW0uZmllbGQpO1xuICAgIHRoaXMuZGF0YVNldCA9IGF3YWl0IHRoaXMuZ3JvdXBEYXRhQXN5bmModGhpcy5vcmlnaW5hbERhdGFTZXQsIGZpZWxkcyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZUZsYXR0ZW5lZERhdGEoKTtcbiAgICAgIHRoaXMudXBkYXRlQ29sdW1uV2lkdGhzQW5kR3JvdXBzKCk7XG4gICAgICB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuICAgICAgdGhpcy51cGRhdGVWaXNpYmxlUm93cygwKTtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDEwMCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZ3JvdXBCb3hQYWRkaW5nID0gdGhpcy5jb2x1bW5zR3JvdXBlZEJveD8ubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKVxuICAgIH0sIDEwKTtcblxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGFzeW5jIGdyb3VwRGF0YUFzeW5jKGRhdGE6IGFueVtdLCBncm91cEZpZWxkczogc3RyaW5nW10pOiBQcm9taXNlPGFueVtdPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZ3JvdXBEYXRhKGRhdGEsIGdyb3VwRmllbGRzKTtcbiAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgfSwgMCk7XG4gICAgfSk7XG4gIH1cblxuXG5cblxuICBjaG9vc2VDb2x1bW5zKCkge1xuICAgIHRoaXMuYWN0aXZlQ29sID0gbnVsbDtcbiAgICB0aGlzLnNob3dDb2x1bW5QYW5lbCA9IHRydWU7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcmVzZXRDb2x1bW5zKCkge1xuICAgIHRoaXMuYWN0aXZlQ29sID0gbnVsbDtcblxuICAgIC8vIHRoaXMuY29sdW1ucyA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLm9yaWdpbmFsQ29sdW1ucyk7XG4gICAgLy8gRGVlcCBjb3B5IG5lc3RlZCBvYmplY3RzIGJ1dCBrZWVwIGNsYXNzIHJlZnMgc2FmZVxuICAgIHRoaXMub3JpZ2luYWxDb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChjb2wgPT4gKHtcbiAgICAgIC4uLmNvbCxcbiAgICAgIC8vIERlZXAgY29weSBuZXN0ZWQgb2JqZWN0cyBidXQga2VlcCBjbGFzcyByZWZzIHNhZmVcbiAgICAgIHF1ZXJ5OiBjb2wucXVlcnkgPyB7IC4uLmNvbC5xdWVyeSB9IDogbnVsbCxcbiAgICAgIGNvbHVtbl9kcm9wZG93bl92YWx1ZTogY29sLmNvbHVtbl9kcm9wZG93bl92YWx1ZVxuICAgICAgICA/IFsuLi5jb2wuY29sdW1uX2Ryb3Bkb3duX3ZhbHVlXVxuICAgICAgICA6IFtdLFxuICAgIH0pKTtcblxuICAgIHRoaXMuU2V0Q29sdW1uc0RlZmF1bHRXaWR0aCgpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVDb2x1bW5XaWR0aHNBbmRHcm91cHMoKTtcbiAgICAgIHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIGNsZWFyRmlsdGVyKGNvbDogYW55KSB7XG4gICAgY29sLmZpcnN0VmFsdWUgPSAnJztcbiAgICBjb2wuc2Vjb25kVmFsdWUgPSAnJztcbiAgICBjb2wuZmlyc3RDb25kaXRpb24gPSAnY29udGFpbic7XG4gICAgY29sLnNlY29uZENvbmRpdGlvbiA9IG51bGw7XG4gICAgY29sLmxvZ2ljID0gJ0FORCc7XG4gICAgY29sLnNlbGVjdEFsbCA9IGZhbHNlO1xuICAgIGNvbC5zZWxlY3RlZE9wdGlvbnMgPSB7fTtcbiAgICBjb2wuc2VhcmNoVmFsdWUgPSAnJztcblxuICB9XG5cblxuICBhcHBseUZpbHRlcihjb2w6IGFueSkge1xuICAgIHRoaXMuZmlsdGVyQ29sdW1uc0xpc3QucHVzaChjb2wpO1xuICB9XG5cbiAgLy8gUm93cyBTZWxlY3Rpb24gTG9naWMgR29lcyBIZXJlXG5cbiAgc2VsZWN0ZWRSb3dzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcblxuICAvKipcbiAgICogR2V0IG5vcm1hbGl6ZWQgSUQgZnJvbSByb3cuXG4gICAqL1xuICBwcml2YXRlIGdldFJvd0lkKHJvdzogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gcm93LmlkID8/IHJvdy5faWQ7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlIGEgc2luZ2xlIHJvdyBzZWxlY3Rpb24uXG4gICAqL1xuICB0b2dnbGVSb3dTZWxlY3Rpb24ocm93OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuZ2V0Um93SWQocm93KTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93cy5oYXMoaWQpKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy5kZWxldGUoaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy5hZGQoaWQpO1xuICAgIH1cblxuICAgIGNvbnN0IGlkcyA9IEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJvd3MpO1xuXG4gICAgdGhpcy5zYXZlU2VsZWN0aW9uKGlkcywgdGhpcy50YWJsZVR5cGUpO1xuXG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIGxpc3RpbmdUeXBlOiB0aGlzLmxpc3RpbmdUeXBlLFxuICAgICAgICBvYmo6IGlkc1xuICAgICAgfSxcbiAgICAgIGV2ZW50VHlwZTogXCJvblNlbGVjdFJvd1wiLFxuICAgIH07XG4gICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudCk7XG4gIH1cblxuXG5cbiAgdG9nZ2xlU2VsZWN0QWxsKGRhdGE6IGFueVtdKTogdm9pZCB7XG4gICAgY29uc3QgbGVhZlJvd3MgPSB0aGlzLmdldEFsbExlYWZSb3dzKGRhdGEpO1xuICAgIGNvbnN0IGFsbElkcyA9IGxlYWZSb3dzLm1hcChyID0+IHRoaXMuZ2V0Um93SWQocikpO1xuXG4gICAgY29uc3QgYWxsU2VsZWN0ZWQgPSBhbGxJZHMuZXZlcnkoaWQgPT4gdGhpcy5zZWxlY3RlZFJvd3MuaGFzKGlkKSk7XG5cbiAgICBpZiAoYWxsU2VsZWN0ZWQpIHtcbiAgICAgIGFsbElkcy5mb3JFYWNoKGlkID0+IHRoaXMuc2VsZWN0ZWRSb3dzLmRlbGV0ZShpZCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbGxJZHMuZm9yRWFjaChpZCA9PiB0aGlzLnNlbGVjdGVkUm93cy5hZGQoaWQpKTtcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGNvbnN0IGlkcyA9IEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJvd3MpO1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZGF0YToge1xuICAgICAgICBsaXN0aW5nVHlwZTogdGhpcy5saXN0aW5nVHlwZSxcbiAgICAgICAgb2JqOiBpZHNcbiAgICAgIH0sXG4gICAgICBldmVudFR5cGU6IFwib25TZWxlY3RSb3dcIixcbiAgICB9XG4gICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudCk7XG4gICAgdGhpcy5zYXZlU2VsZWN0aW9uKGlkcywgdGhpcy50YWJsZVR5cGUpO1xuICB9XG5cbiAgaXNSb3dTZWxlY3RlZChyb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUm93cy5oYXModGhpcy5nZXRSb3dJZChyb3cpKTtcbiAgfVxuXG4gIGlzQWxsU2VsZWN0ZWQoZGF0YTogYW55W10pOiBib29sZWFuIHtcbiAgICBjb25zdCBsZWFmUm93cyA9IHRoaXMuZ2V0QWxsTGVhZlJvd3MoZGF0YSk7XG4gICAgcmV0dXJuIGxlYWZSb3dzLmxlbmd0aCA+IDAgJiYgbGVhZlJvd3MuZXZlcnkociA9PiB0aGlzLnNlbGVjdGVkUm93cy5oYXModGhpcy5nZXRSb3dJZChyKSkpO1xuICB9XG5cblxuICBpc0luZGV0ZXJtaW5hdGVTdGF0ZShkYXRhOiBhbnlbXSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGxlYWZSb3dzID0gdGhpcy5nZXRBbGxMZWFmUm93cyhkYXRhKTtcbiAgICBjb25zdCBzZWxlY3RlZENvdW50ID0gbGVhZlJvd3MuZmlsdGVyKHIgPT4gdGhpcy5zZWxlY3RlZFJvd3MuaGFzKHRoaXMuZ2V0Um93SWQocikpKS5sZW5ndGg7XG5cbiAgICByZXR1cm4gc2VsZWN0ZWRDb3VudCA+IDAgJiYgc2VsZWN0ZWRDb3VudCA8IGxlYWZSb3dzLmxlbmd0aDtcbiAgfVxuXG5cbiAgZ2V0QWxsTGVhZlJvd3MoZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgY29uc3QgbGVhZjogYW55W10gPSBbXTtcblxuICAgIGNvbnN0IHRyYXZlcnNlID0gKG5vZGU6IGFueSkgPT4ge1xuICAgICAgaWYgKCFub2RlKSByZXR1cm47XG5cbiAgICAgIGlmIChub2RlLmlzR3JvdXApIHtcbiAgICAgICAgbm9kZS5jaGlsZHJlbj8uZm9yRWFjaCh0cmF2ZXJzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZWFmLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGRhdGEuZm9yRWFjaCh0cmF2ZXJzZSk7XG4gICAgcmV0dXJuIGxlYWY7XG4gIH1cblxuXG5cblxuICAvLyBTaWRlIE1lbnUgV29ya2luZyBHb2VzIEhlcmVcbiAgdG9nZ2xlU2lkZU1lbnUoY2xpY2tlZE9uOiAnY29scycgfCAnZmlsdHJzJykge1xuICAgIGlmICh0aGlzLmN1cnJlbnRPcGVuZWRTaWRlTWVudWUgPT0gY2xpY2tlZE9uKSB7XG4gICAgICB0aGlzLmN1cnJlbnRPcGVuZWRTaWRlTWVudWUgPSBjbGlja2VkT247XG4gICAgICB0aGlzLnNpZGVNZW51VmlzaWJsZSA9ICF0aGlzLnNpZGVNZW51VmlzaWJsZTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5zaWRlTWVudVZpc2libGUgJiZcbiAgICAgIGNsaWNrZWRPbiAhPSB0aGlzLmN1cnJlbnRPcGVuZWRTaWRlTWVudWVcbiAgICApIHtcbiAgICAgIHRoaXMuY3VycmVudE9wZW5lZFNpZGVNZW51ZSA9IGNsaWNrZWRPbjtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50T3BlbmVkU2lkZU1lbnVlID0gY2xpY2tlZE9uO1xuICAgICAgdGhpcy5zaWRlTWVudVZpc2libGUgPSAhdGhpcy5zaWRlTWVudVZpc2libGU7XG4gICAgfVxuICAgIHRoaXMuaGFzU2Nyb2xsID0gdGhpcy5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgdG9nZ2xlR3JvdXBWaXNpYmlsaXR5KGNvbDogYW55KSB7XG4gICAgY29uc3QgYWxsVmlzaWJsZSA9IGNvbC5jaGlsZHJlbi5ldmVyeSgoY2hpbGQ6IGFueSkgPT4gY2hpbGQuaXNfdmlzaWJsZSk7XG4gICAgY29sLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBhbnkpID0+IChjaGlsZC5pc192aXNpYmxlID0gIWFsbFZpc2libGUpKTtcbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgIG5vX29mX3JlY29yZHM6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVDb2x1bW5XaWR0aHNBbmRHcm91cHMoKTtcbiAgICAgIHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gICAgICB0aGlzLlNldENvbHVtbnNEZWZhdWx0V2lkdGgoKTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAxMCk7XG4gIH1cblxuICBpc0NvbHVtblZpc2libGUoY29sdW1uczogYW55KSB7XG4gICAgaWYgKGNvbHVtbnM/LmNoaWxkcmVuKSB7XG4gICAgICByZXR1cm4gY29sdW1ucy5jaGlsZHJlbi5ldmVyeSgoZWxlbWVudDogYW55KSA9PiBlbGVtZW50LmlzX3Zpc2libGUpO1xuICAgIH1cblxuICAgIHJldHVybiBjb2x1bW5zPy5pc192aXNpYmxlO1xuICB9XG5cbiAgLy8gYWxsQ29sdW1uc1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAvLyAgIGNvbnN0IGZsYXR0ZW4gPSB0aGlzLmZsYXR0ZW5Db2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gIC8vICAgcmV0dXJuIGZsYXR0ZW4uZXZlcnkoKGNvbCkgPT4gY29sLmlzX3Zpc2libGUpO1xuICAvLyB9XG5hbGxDb2x1bW5zU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gIGNvbnN0IGZsYXR0ZW4gPSB0aGlzLmZsYXR0ZW5Db2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gIGNvbnN0IG5vbkFsd2F5c1Zpc2libGUgPSBmbGF0dGVuLmZpbHRlcihjb2wgPT4gIWNvbC5pc19hbHdheXNfdmlzaWJsZSk7XG4gIFxuICAvLyBSZXR1cm4gdHJ1ZSBpZiBhbGwgbm9uLWFsd2F5cy12aXNpYmxlIGNvbHVtbnMgYXJlIHZpc2libGVcbiAgcmV0dXJuIG5vbkFsd2F5c1Zpc2libGUubGVuZ3RoID4gMCAmJiBub25BbHdheXNWaXNpYmxlLmV2ZXJ5KGNvbCA9PiBjb2wuaXNfdmlzaWJsZSk7XG59XG5cbiAgcHJpdmF0ZSBmaW5kQ29sdW1uQnlGaWVsZChmaWVsZDogc3RyaW5nLCBjb2xzOiBhbnlbXSk6IGFueSB8IG51bGwge1xuICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHMpIHtcbiAgICAgIGlmIChjb2wuZmllbGQgPT09IGZpZWxkKSB7XG4gICAgICAgIHJldHVybiBjb2w7XG4gICAgICB9XG4gICAgICBpZiAoY29sLmNoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkoY29sLmNoaWxkcmVuKSkge1xuICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMuZmluZENvbHVtbkJ5RmllbGQoZmllbGQsIGNvbC5jaGlsZHJlbik7XG4gICAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG5cblxuICBhc3luYyB0b2dnbGVDb2x1bW5WaXNpYmlsaXR5KGNvbHVtbjogYW55LCBpc1Zpc2libGU6IGJvb2xlYW4pIHtcbiAgICBpZiAoaXNWaXNpYmxlKSB7XG4gICAgICBpZiAodGhpcy52aXNpYmxlQ29sdW1ucygpPy5sZW5ndGggPD0gMiAmJiBjb2x1bW4uaXNfdmlzaWJsZSB8fCAoY29sdW1uPy5pc19hbHdheXNfdmlzaWJsZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjb2wgPSB0aGlzLmZpbmRDb2x1bW5CeUZpZWxkKGNvbHVtbi5maWVsZCwgdGhpcy5jb2x1bW5zKTtcbiAgICBpZiAoY29sKSB7XG4gICAgICBjb2wuaXNfdmlzaWJsZSA9IGlzVmlzaWJsZTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5yZWZyZXNoSGVhZGVycygpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgIG5vX29mX3JlY29yZHM6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICAgIGlmICh0aGlzLnRhYmxlRmlsdGVyVmlld0lkKSB7XG4gICAgICB0aGlzLnNhdmVQcmVzZXQoJ21vdXNlVXAnKTtcbiAgICB9XG4gIH1cblxuYXN5bmMgdG9nZ2xlQWxsQ29sdW1uc1Zpc2liaWxpdHkoKTogUHJvbWlzZTx2b2lkPiB7XG4gIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmbGF0dGVuID0gdGhpcy5mbGF0dGVuQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAgIGNvbnN0IHZpc2libGVDb2x1bW5zID0gZmxhdHRlbi5maWx0ZXIoY29sID0+IGNvbC5pc192aXNpYmxlKTtcbiAgICBcbiAgICAvLyBHZXQgY29sdW1ucyB0aGF0IGFyZSBub3QgYWx3YXlzIHZpc2libGVcbiAgICBjb25zdCBub25BbHdheXNWaXNpYmxlID0gZmxhdHRlbi5maWx0ZXIoY29sID0+ICFjb2wuaXNfYWx3YXlzX3Zpc2libGUpO1xuICAgIFxuICAgIC8vIENoZWNrIGlmIGFsbCBub24tYWx3YXlzLXZpc2libGUgY29sdW1ucyBhcmUgY3VycmVudGx5IHZpc2libGVcbiAgICBjb25zdCBhbGxOb25BbHdheXNWaXNpYmxlQXJlVmlzaWJsZSA9IG5vbkFsd2F5c1Zpc2libGUuZXZlcnkoY29sID0+IGNvbC5pc192aXNpYmxlKTtcblxuICAgIGlmIChhbGxOb25BbHdheXNWaXNpYmxlQXJlVmlzaWJsZSkge1xuICAgICAgLy8gSElERSBBTEwgKGJ1dCBrZWVwIG1pbmltdW0gMiB2aXNpYmxlKVxuICAgICAgLy8gRmlyc3QsIGhpZGUgYWxsIG5vbi1hbHdheXMtdmlzaWJsZSBjb2x1bW5zXG4gICAgICBub25BbHdheXNWaXNpYmxlLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgY29sLmlzX3Zpc2libGUgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBUaGVuLCBtYWtlIHN1cmUgYXQgbGVhc3QgMiBjb2x1bW5zIGFyZSB2aXNpYmxlIChpbmNsdWRpbmcgYWx3YXlzLXZpc2libGUgb25lcylcbiAgICAgIGNvbnN0IGFsd2F5c1Zpc2libGVDb3VudCA9IGZsYXR0ZW4uZmlsdGVyKGNvbCA9PiBjb2wuaXNfYWx3YXlzX3Zpc2libGUpLmxlbmd0aDtcbiAgICAgIGNvbnN0IGNvbHVtbnNOZWVkZWQgPSBNYXRoLm1heCgwLCAyIC0gYWx3YXlzVmlzaWJsZUNvdW50KTtcbiAgICAgIFxuICAgICAgaWYgKGNvbHVtbnNOZWVkZWQgPiAwKSB7XG4gICAgICAgIC8vIFNob3cgdGhlIGZpcnN0ICdjb2x1bW5zTmVlZGVkJyBub24tYWx3YXlzLXZpc2libGUgY29sdW1uc1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGgubWluKGNvbHVtbnNOZWVkZWQsIG5vbkFsd2F5c1Zpc2libGUubGVuZ3RoKTsgaSsrKSB7XG4gICAgICAgICAgbm9uQWx3YXlzVmlzaWJsZVtpXS5pc192aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTSE9XIEFMTCAtIG1ha2UgYWxsIGNvbHVtbnMgdmlzaWJsZVxuICAgICAgZmxhdHRlbi5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgIGNvbC5pc192aXNpYmxlID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMudXBkYXRlQ29sdW1uV2lkdGhzQW5kR3JvdXBzKCk7XG4gICAgYXdhaXQgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcbiAgICBcbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgIG5vX29mX3JlY29yZHM6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICAgIFxuICB9IGZpbmFsbHkge1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxufVxuXG4gIHByaXZhdGUgd2FpdChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xuICB9XG5cblxuXG4gIHZpc2libGVDb2x1bW5zKCkge1xuICAgIGNvbnN0IGZsYXR0ZW4gPSB0aGlzLmZsYXR0ZW5Db2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gICAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSBmbGF0dGVuLmZpbHRlcigoYzogYW55KSA9PiBjLmlzX3Zpc2libGUpO1xuICAgIHJldHVybiB2aXNpYmxlQ29sdW1ucztcbiAgfVxuXG4gIGZsYXR0ZW5Db2x1bW5zKGNvbHM6IGFueVtdKTogYW55W10ge1xuICAgIHJldHVybiBjb2xzLnJlZHVjZSgoYWNjOiBhbnlbXSwgY29sOiBhbnkpID0+IHtcbiAgICAgIGlmIChjb2w/LmNoaWxkcmVuICYmIGNvbC5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgLy8gcmVjdXJzaXZlbHkgZmxhdHRlbiBjaGlsZHJlblxuICAgICAgICByZXR1cm4gYWNjLmNvbmNhdCh0aGlzLmZsYXR0ZW5Db2x1bW5zKGNvbC5jaGlsZHJlbikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbGVhZiBjb2x1bW5cbiAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQoY29sKTtcbiAgICAgIH1cbiAgICB9LCBbXSk7XG4gIH1cblxuXG4gIGZpbHRlcmVkQ29sdW1ucyhjb2xzOiBhbnlbXSk6IGFueVtdIHtcbiAgICBjb25zdCBzZWFyY2ggPSB0aGlzLmNvbHVtblNlYXJjaC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBjb2xzXG4gICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgaWYgKGNvbC5jaGlsZHJlbikge1xuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkQ2hpbGRyZW4gPSB0aGlzLmZpbHRlcmVkQ29sdW1ucyhjb2wuY2hpbGRyZW4pO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbC5oZWFkZXIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gpIHx8XG4gICAgICAgICAgICBmaWx0ZXJlZENoaWxkcmVuLmxlbmd0aFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uY29sLCBjaGlsZHJlbjogZmlsdGVyZWRDaGlsZHJlbiB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gY29sLmhlYWRlci50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaCkgPyBjb2wgOiBudWxsO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihCb29sZWFuKTtcbiAgfVxuXG4gIGdldCBhY2NvcmRpb25TdGF0ZSgpOiAnYWxsJyB8ICdub25lJyB8ICdzb21lJyB7XG4gICAgY29uc3QgZ3JvdXBzID0gdGhpcy5nZXRBbGxHcm91cENvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgICBjb25zdCBleHBhbmRlZENvdW50ID0gZ3JvdXBzLmZpbHRlcigoY29sKSA9PiBjb2wuZXhwYW5kZWQpLmxlbmd0aDtcblxuICAgIGlmIChleHBhbmRlZENvdW50ID09PSAwKSByZXR1cm4gJ25vbmUnO1xuICAgIGlmIChleHBhbmRlZENvdW50ID09PSBncm91cHMubGVuZ3RoKSByZXR1cm4gJ2FsbCc7XG4gICAgcmV0dXJuICdzb21lJztcbiAgfVxuXG4gIGdldCBmaWx0ZXJBY2NvcmRpb25TdGF0ZSgpOiAnYWxsJyB8ICdub25lJyB8ICdzb21lJyB7XG4gICAgY29uc3QgZ3JvdXBzID0gdGhpcy5nZXRBbGxHcm91cENvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgICBjb25zdCBleHBhbmRlZENvdW50ID0gZ3JvdXBzLmZpbHRlcigoY29sKSA9PiBjb2wuZXhwYW5kZWRGaWx0ZXIpLmxlbmd0aDtcblxuICAgIGlmIChleHBhbmRlZENvdW50ID09PSAwKSByZXR1cm4gJ25vbmUnO1xuICAgIGlmIChleHBhbmRlZENvdW50ID09PSBncm91cHMubGVuZ3RoKSByZXR1cm4gJ2FsbCc7XG4gICAgcmV0dXJuICdzb21lJztcbiAgfVxuXG4gIC8vIFJlY3Vyc2l2ZWx5IGNvbGxlY3QgYWxsIGdyb3VwIGNvbHVtbnNcbiAgcHJpdmF0ZSBnZXRBbGxHcm91cENvbHVtbnMoY29sczogYW55W10pOiBhbnlbXSB7XG4gICAgbGV0IGdyb3VwczogYW55W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2xzKSB7XG4gICAgICBpZiAoY29sLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgZ3JvdXBzLnB1c2goY29sKTtcbiAgICAgICAgZ3JvdXBzID0gZ3JvdXBzLmNvbmNhdCh0aGlzLmdldEFsbEdyb3VwQ29sdW1ucyhjb2wuY2hpbGRyZW4pKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGdyb3VwcztcbiAgfVxuXG4gIC8vIFRvZ2dsZSBiYXNlZCBvbiBjdXJyZW50IHN0YXRlXG4gIHRvZ2dsZUFsbEFjY29yZGlvbnMoKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dFN0YXRlID0gdGhpcy5hY2NvcmRpb25TdGF0ZSA9PT0gJ2FsbCcgPyBmYWxzZSA6IHRydWU7XG4gICAgdGhpcy5zZXRBY2NvcmRpb25TdGF0ZSh0aGlzLmNvbHVtbnMsIG5leHRTdGF0ZSk7XG4gIH1cblxuICB0b2dnbGVBbGxGaWx0ZXJBY2NvcmRpb25zKCk6IHZvaWQge1xuICAgIGNvbnN0IG5leHRTdGF0ZSA9IHRoaXMuZmlsdGVyQWNjb3JkaW9uU3RhdGUgPT09ICdhbGwnID8gZmFsc2UgOiB0cnVlO1xuICAgIHRoaXMuc2V0RmlsdGVyQWNjb3JkaW9uU3RhdGUodGhpcy5jb2x1bW5zLCBuZXh0U3RhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRBY2NvcmRpb25TdGF0ZShjb2xzOiBhbnlbXSwgc3RhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBmb3IgKGxldCBjb2wgb2YgY29scykge1xuICAgICAgaWYgKGNvbC5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbC5leHBhbmRlZCA9IHN0YXRlO1xuICAgICAgICB0aGlzLnNldEFjY29yZGlvblN0YXRlKGNvbC5jaGlsZHJlbiwgc3RhdGUpOyAvLyBSZWN1cnNpdmVseSBoYW5kbGUgbmVzdGVkXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICBwcml2YXRlIHNldEZpbHRlckFjY29yZGlvblN0YXRlKGNvbHM6IGFueVtdLCBzdGF0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGZvciAobGV0IGNvbCBvZiBjb2xzKSB7XG4gICAgICBpZiAoY29sLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgY29sLmV4cGFuZGVkRmlsdGVyID0gc3RhdGU7XG4gICAgICAgIHRoaXMuc2V0RmlsdGVyQWNjb3JkaW9uU3RhdGUoY29sLmNoaWxkcmVuLCBzdGF0ZSk7IC8vIFJlY3Vyc2l2ZWx5IGhhbmRsZSBuZXN0ZWRcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzaG93Q29sdW1uUGFuZWwgPSBmYWxzZTtcblxuICBjbG9zZU1vZGFsQ29sdW1uUGFuZWwoKSB7XG4gICAgdGhpcy5zaG93Q29sdW1uUGFuZWwgPSBmYWxzZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScsIFsnJGV2ZW50J10pXG4gIG9uRXNjYXBlKGV2ZW50OiBFdmVudCkge1xuICAgIHRoaXMuY2xvc2VNb2RhbENvbHVtblBhbmVsKCk7XG4gIH1cblxuICAvLyBDaGVjayBJZiAgQW55IGNvbHVtbiBoYXZlIHJpZ2h0IHBpbm5lZFxuICBnZXQgaGFzUmlnaHRQaW5uZWRDb2x1bW5zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbW1vblNldmljZS5nZXRoYXNSaWdodFBpbm5lZENvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgfVxuXG4gIGdldCBoYXNMZWZ0UGlubmVkQ29sdW1ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb21tb25TZXZpY2UuZ2V0aGFzTGVmdFBpbm5lZENvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgfVxuXG4gIGdldCBkYXRhU2V0TGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLmNvbW1vblNldmljZS5nZXRFeHBhbmRlZFJvd0NvdW50KHRoaXMuZGF0YVNldCk7XG4gIH1cblxuXG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXG4gIG9uUmVzaXplKGV2ZW50OiBVSUV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmN1cnJldGFUYWJsZVByZXNldEZvclVwZGF0ZSkgdGhpcy5hdXRvU2l6ZUNvbHVtbnNCeVJhdGlvKCk7XG4gICAgY29uc3QgaCA9IHRoaXMubWFpblNjcm9sbD8ubmF0aXZlRWxlbWVudD8uY2xpZW50SGVpZ2h0ID8/IDA7XG4gICAgdGhpcy52aWV3cG9ydFJvd3MgPSBNYXRoLm1heCgxLCBNYXRoLmNlaWwoaCAvIHRoaXMucm93SGVpZ2h0KSk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlUm93cyh0aGlzLm1haW5TY3JvbGw/Lm5hdGl2ZUVsZW1lbnQ/LnNjcm9sbFRvcCk7XG4gICAgdGhpcy5oYXNTY3JvbGwgPSB0aGlzLmhhc0hvcml6b250YWxTY3JvbGxiYXIoKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7IH0sIDEwMCk7XG4gIH1cblxuICBhdXRvU2l6ZUNvbHVtbnNCeVJhdGlvKHNob3VsZENoZWNrQ29udGFpbmVyV2lkdGggPSBmYWxzZSk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlQ29sID0gbnVsbDtcblxuICAgIGNvbnN0IGdldFZpc2libGVMZWFmQ29sdW1ucyA9IChjb2x1bW5zOiBhbnlbXSk6IGFueVtdID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdDogYW55W10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcbiAgICAgICAgaWYgKGNvbHVtbi5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goLi4uZ2V0VmlzaWJsZUxlYWZDb2x1bW5zKGNvbHVtbi5jaGlsZHJlbikpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5pc192aXNpYmxlICE9PSBmYWxzZSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIGNvbnN0IHZpc2libGVDb2x1bW5zID0gZ2V0VmlzaWJsZUxlYWZDb2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gICAgaWYgKCF2aXNpYmxlQ29sdW1ucy5sZW5ndGgpIHJldHVybjtcblxuICAgIGxldCBjb250YWluZXJXaWR0aCA9XG4gICAgICB0aGlzLmRhdGFHcmlkQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5vZmZzZXRXaWR0aCA/PyAwO1xuXG4gICAgaWYgKHRoaXMuc2hvd1NlcmlhbE51bWJlcikgY29udGFpbmVyV2lkdGggLT0gNTU7XG4gICAgaWYgKHRoaXMuc2hvd1NpZGVNZW51KSBjb250YWluZXJXaWR0aCAtPSAyOTtcbiAgICBpZiAodGhpcy5ncmlkVHlwZSA9PT0gJ0Fzc2V0cycgfHwgdGhpcy5ncmlkVHlwZSA9PT0gJ1Rhc2tzJykgY29udGFpbmVyV2lkdGggLT0gMzA7XG4gICAgaWYgKHRoaXMuc2hvd0NoZWNrYm94ZXMpIGNvbnRhaW5lcldpZHRoIC09IDU1O1xuICAgIGNvbnRhaW5lcldpZHRoIC09IDU7XG5cbiAgICBjb25zdCB0b3RhbE9sZFdpZHRoID0gdmlzaWJsZUNvbHVtbnMucmVkdWNlKFxuICAgICAgKHN1bSwgY29sKSA9PiBzdW0gKyAoY29sLndpZHRoIHx8IDApLFxuICAgICAgMFxuICAgICk7XG5cbiAgICBpZiAodG90YWxPbGRXaWR0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgaWYgKHNob3VsZENoZWNrQ29udGFpbmVyV2lkdGggJiYgKGNvbnRhaW5lcldpZHRoIDw9IHRvdGFsT2xkV2lkdGgpKSByZXR1cm47XG5cbiAgICB2aXNpYmxlQ29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgIGNvbnN0IHJhdGlvID0gY29sLndpZHRoIC8gdG90YWxPbGRXaWR0aDtcbiAgICAgIGNvbnN0IG5ld1dpZHRoID0gTWF0aC5tYXgoTWF0aC5mbG9vcihjb250YWluZXJXaWR0aCAqIHJhdGlvKSwgMTAwKTtcblxuICAgICAgY29sLndpZHRoID0gbmV3V2lkdGg7XG4gICAgICB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoSW5Tb3VyY2VCeUZpZWxkKGNvbC5maWVsZCwgbmV3V2lkdGgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZWZyZXNoSGVhZGVycygpO1xuICAgIHRoaXMuaGFzU2Nyb2xsID0gdGhpcy5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cblxuXG4gIGFzeW5jIHJlZnJlc2hIZWFkZXJzKCkge1xuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCAwKSk7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoc0FuZEdyb3VwcygpO1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcblxuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgaGFzQW55VmlzaWJsZUNvbHVtbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb21tb25TZXZpY2UuZ2V0aGFzVmlzaWJsZUNvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgfVxuXG4gIGdldCBoYXNBbnlJblZpc2libGVDb2x1bW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuY29tbW9uU2V2aWNlLmdldGhhc0luVmlzaWJsZUNvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgfVxuXG4gIGdldCBjb2x1bW5zQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29tbW9uU2V2aWNlLmdldFRvdGFsQ29sdW1uc0xlbmd0aCh0aGlzLmNvbHVtbnMpO1xuICB9XG5cbiAgdGFibGVIZWFkZXJBbmRCb2R5SGVpZ2h0KCkge1xuICAgIHJldHVybiBgY2FsYygxMDAlIC0gJHt0aGlzLmZvb3RlclJvd0hlaWdodH0pYDtcbiAgfVxuXG4gIGRyYWdnaW5nSW5Hcm91cEFyZWEgPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKCdjZW50ZXJTY3JvbGwnKSBjZW50ZXJTY3JvbGwhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgdmlzaWJsZVJvd0NvdW50ID0gMjU7XG4gIHN0YXJ0SW5kZXggPSAwO1xuICB2aXNpYmxlUm93czogYW55W10gPSBbXTtcblxuICBwcml2YXRlIGZsYXR0ZW5Hcm91cGVkUm93cyhcbiAgICByb3dzOiBhbnlbXSA9IFtdLFxuICAgIGxldmVsID0gMCxcbiAgICByZXN1bHQ6IGFueVtdID0gW11cbiAgKTogYW55W10ge1xuICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHsgLi4ucm93LCBfX2RlcHRoOiBsZXZlbCB9KTtcbiAgICAgIGlmIChyb3cuaXNHcm91cCAmJiByb3cuaXNFeHBhbmQgJiYgcm93LmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5mbGF0dGVuR3JvdXBlZFJvd3Mocm93LmNoaWxkcmVuLCBsZXZlbCArIDEsIFtdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hc3NpZ25WaXJ0dWFsSW5kZXhlcyh0aGlzLnZpc2libGVSb3dzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgYXNzaWduVmlydHVhbEluZGV4ZXMoZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgbGV0IGN1cnJlbnRJbmRleCA9IDE7XG4gICAgY29uc3Qgd2FsayA9IChpdGVtczogYW55W10pOiB2b2lkID0+IHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICBpdGVtLl9fdmlydHVhbEluZGV4ID0gY3VycmVudEluZGV4Kys7XG4gICAgICAgIGlmIChpdGVtPy5pc0dyb3VwKSB7XG4gICAgICAgICAgY29uc3QgZ3JvdXAgPSBpdGVtO1xuICAgICAgICAgIGlmIChncm91cC5pc0V4cGFuZCAmJiBBcnJheS5pc0FycmF5KGdyb3VwLmNoaWxkcmVuKSkge1xuICAgICAgICAgICAgd2Fsayhncm91cC5jaGlsZHJlbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICB3YWxrKGRhdGEpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdUaGlzIGRhdGFzZXQ6ICcsIHRoaXMudmlzaWJsZVJvd3MpXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuXG4gIHVwZGF0ZVZpc2libGVSb3dzKHNjcm9sbFRvcDogbnVtYmVyKSB7XG5cbiAgICBpZiAodGhpcy5ncm91cGVkQ29sdW1ucz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnZpc2libGVSb3dzID0gdGhpcy5kYXRhU2V0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmbGF0RGF0YSA9IHRoaXMuZmxhdHRlbkdyb3VwZWRSb3dzKHRoaXMuZGF0YVNldCk7XG5cbiAgICBpZiAodGhpcy5kYXRhU2V0Py5sZW5ndGggPD0gMTUpIHtcbiAgICAgIHRoaXMudmlzaWJsZVJvd3MgPSBmbGF0RGF0YTtcbiAgICAgIHRoaXMuZmlyc3RJbmRleCA9IDA7XG4gICAgICB0aGlzLnN0YXJ0SW5kZXggPSAwO1xuICAgICAgdGhpcy5yZW5kZXJTdGFydCA9IDA7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRvdGFsID0gZmxhdERhdGEubGVuZ3RoO1xuICAgIGNvbnN0IG1heEZpcnN0ID0gTWF0aC5tYXgoMCwgdG90YWwgLSB0aGlzLnZpZXdwb3J0Um93cyk7XG4gICAgY29uc3QgZmlyc3QgPSBNYXRoLm1pbihNYXRoLmZsb29yKHNjcm9sbFRvcCAvIHRoaXMucm93SGVpZ2h0KSwgbWF4Rmlyc3QpO1xuICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoMCwgZmlyc3QpO1xuICAgIGNvbnN0IGVuZCA9IE1hdGgubWluKHRvdGFsLCBmaXJzdCArIHRoaXMudmlld3BvcnRSb3dzKTtcblxuICAgIHRoaXMuZmlyc3RJbmRleCA9IGZpcnN0O1xuICAgIHRoaXMuc3RhcnRJbmRleCA9IGZpcnN0O1xuICAgIHRoaXMucmVuZGVyU3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLnZpc2libGVSb3dzID0gZmxhdERhdGEuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgdGhpcy5hc3NpZ25WaXJ0dWFsSW5kZXhlcyh0aGlzLnZpc2libGVSb3dzKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuXG4gIHRyYWNrQnlSZW5kZXJlZEluZGV4ID0gKGk6IG51bWJlciwgX3JvdzogYW55KSA9PiB0aGlzLnJlbmRlclN0YXJ0ICsgaTtcblxuICBwcml2YXRlIGlzU3luY2luZ0Zyb21NYWluID0gZmFsc2U7XG4gIHByaXZhdGUgaXNTeW5jaW5nRnJvbUZha2UgPSBmYWxzZTtcbiAgcHJpdmF0ZSBtYWluU2Nyb2xsUmFmOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICB0cmFja0J5SWQoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIGl0ZW0uaWQgfHwgaXRlbS5faWQ7XG4gIH1cblxuICBmbGF0dGVuZWREYXRhOiBhbnlbXSA9IFtdO1xuXG4gIHVwZGF0ZUZsYXR0ZW5lZERhdGEoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmZsYXR0ZW5lZERhdGEgPSB0aGlzLmZsYXR0ZW5Hcm91cGVkUm93cyh0aGlzLmRhdGFTZXQpO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDEwKTtcbiAgfVxuXG4gIC8vIHJlcXVlc3RBbmltYXRpb25GcmFtZSBJRHNcbiAgcHJpdmF0ZSBmYWtlU2Nyb2xsUmFmOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuXG4gIC8vIG9uTWFpblNjcm9sbChldmVudDogRXZlbnQpIHtcbiAgLy8gICB0aGlzLmV4cGFuZGVkQ2VsbHMuY2xlYXIoKTtcbiAgLy8gICBjb25zdCBzY3JvbGxUb3AgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5zY3JvbGxUb3A7XG4gIC8vICAgICBpZiAodGhpcy5ncm91cGVkQ29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAvLyAgICAgICB0aGlzLnN0YXJ0SW5kZXggPSAwO1xuICAvLyAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIC8vICAgICAgIHJldHVybjtcbiAgLy8gICAgIH1cbiAgLy8gICAgIGNvbnN0IG92ZXJzY2FuID0gdGhpcy5vdmVyc2NhbiAqIDI7XG4gIC8vICAgICB0aGlzLnN0YXJ0SW5kZXggPSBNYXRoLmZsb29yKHNjcm9sbFRvcCAvIHRoaXMucm93SGVpZ2h0KTtcbiAgLy8gICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoMCwgdGhpcy5zdGFydEluZGV4IC0gb3ZlcnNjYW4pO1xuICAvLyAgICAgY29uc3QgZW5kID0gTWF0aC5taW4odGhpcy5mbGF0dGVuZWREYXRhLmxlbmd0aCwgdGhpcy5zdGFydEluZGV4ICsgdGhpcy52aWV3cG9ydFJvd3MgKyBvdmVyc2Nhbik7XG4gIC8vICAgICB0aGlzLnZpc2libGVSb3dzID0gdGhpcy5mbGF0dGVuZWREYXRhLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAvLyAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAvLyB9XG4gIHRyYW5zbGF0ZVkgPSAwO1xuXG4gIGxhc3RTY3JvbGxUb3AgPSAwO1xuICBwZW5kaW5nQW5pbWF0aW9uRnJhbWU6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIG9uTWFpblNjcm9sbChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBzY3JvbGxUb3AgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5zY3JvbGxUb3A7XG4gICAgaWYgKE1hdGguYWJzKHNjcm9sbFRvcCAtIHRoaXMubGFzdFNjcm9sbFRvcCkgPCAoMTApKSByZXR1cm47XG4gICAgaWYgKHRoaXMucGVuZGluZ0FuaW1hdGlvbkZyYW1lKSBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnBlbmRpbmdBbmltYXRpb25GcmFtZSk7XG4gICAgaWYgKHRoaXMuZ3JvdXBlZENvbHVtbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc3RhcnRJbmRleCA9IDA7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucGVuZGluZ0FuaW1hdGlvbkZyYW1lID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGNvbnN0IHNjcm9sbGluZ0Rvd24gPSBzY3JvbGxUb3AgPiB0aGlzLmxhc3RTY3JvbGxUb3A7XG4gICAgICB0aGlzLmxhc3RTY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG5cbiAgICAgIGNvbnN0IG92ZXJzY2FuID0gNTtcbiAgICAgIGNvbnN0IG5ld1N0YXJ0SW5kZXggPSBNYXRoLmZsb29yKHNjcm9sbFRvcCAvIHRoaXMucm93SGVpZ2h0KTtcbiAgICAgIGNvbnN0IGR5bmFtaWNPdmVyc2NhbiA9IHNjcm9sbGluZ0Rvd24gPyBvdmVyc2NhbiA6IG92ZXJzY2FuO1xuXG4gICAgICBjb25zdCBzdGFydCA9IE1hdGgubWF4KDAsIG5ld1N0YXJ0SW5kZXggLSBkeW5hbWljT3ZlcnNjYW4pO1xuICAgICAgY29uc3QgZW5kID0gTWF0aC5taW4oXG4gICAgICAgIHRoaXMuZmxhdHRlbmVkRGF0YS5sZW5ndGgsXG4gICAgICAgIG5ld1N0YXJ0SW5kZXggKyB0aGlzLnZpZXdwb3J0Um93cyArIGR5bmFtaWNPdmVyc2NhblxuICAgICAgKTtcbiAgICAgIHRoaXMudHJhbnNsYXRlWSA9IHN0YXJ0ICogdGhpcy5yb3dIZWlnaHQ7XG4gICAgICBpZiAodGhpcy5zdGFydEluZGV4ICE9PSBzdGFydCB8fCB0aGlzLnZpc2libGVSb3dzLmxlbmd0aCAhPT0gZW5kIC0gc3RhcnQpIHtcbiAgICAgICAgdGhpcy5zdGFydEluZGV4ID0gc3RhcnQ7XG4gICAgICAgIHRoaXMudmlzaWJsZVJvd3MgPSB0aGlzLmRhdGFTZXQuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBlbmRpbmdBbmltYXRpb25GcmFtZSA9IG51bGw7XG4gICAgfSk7XG4gIH1cblxuXG4gIC8vIG9uTWFpblNjcm9sbChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgLy8gICB0aGlzLmV4cGFuZGVkQ2VsbHMuY2xlYXIoKTtcbiAgLy8gICBpZiAodGhpcy5pc1N5bmNpbmdGcm9tRmFrZSkge1xuICAvLyAgICAgdGhpcy5pc1N5bmNpbmdGcm9tRmFrZSA9IGZhbHNlO1xuICAvLyAgICAgcmV0dXJuO1xuICAvLyAgIH1cbiAgLy8gICBjb25zdCBzY3JvbGxUb3AgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5zY3JvbGxUb3A7XG4gIC8vICAgaWYgKE1hdGguYWJzKHNjcm9sbFRvcCAtIHRoaXMubGFzdFNjcm9sbFRvcCkgPCB0aGlzLnJvd0hlaWdodCAvIDIpIHJldHVybjtcbiAgLy8gICB0aGlzLmxhc3RTY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG5cbiAgLy8gICBpZiAodGhpcy5mYWtlU2Nyb2xsUmFmKSBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLmZha2VTY3JvbGxSYWYpO1xuXG4gIC8vICAgdGhpcy5mYWtlU2Nyb2xsUmFmID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgLy8gICAgIGlmICh0aGlzLmdyb3VwZWRDb2x1bW5zPy5sZW5ndGggPiAwKSB7XG4gIC8vICAgICAgIHRoaXMuc3RhcnRJbmRleCA9IDA7XG4gIC8vICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgLy8gICAgICAgcmV0dXJuO1xuICAvLyAgICAgfVxuICAvLyAgICAgY29uc3QgZmxhdERhdGEgPSB0aGlzLmZsYXR0ZW5Hcm91cGVkUm93cyh0aGlzLmRhdGFTZXQpO1xuICAvLyAgICAgY29uc3QgdG90YWxSb3dzID0gZmxhdERhdGEubGVuZ3RoO1xuICAvLyAgICAgY29uc3QgbmV3U3RhcnRJbmRleCA9IE1hdGguZmxvb3Ioc2Nyb2xsVG9wIC8gdGhpcy5yb3dIZWlnaHQpO1xuICAvLyAgICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCBuZXdTdGFydEluZGV4IC0gKHRoaXMub3ZlcnNjYW4gKiAyKSk7XG4gIC8vICAgICBjb25zdCBlbmQgPSBNYXRoLm1pbih0b3RhbFJvd3MsIG5ld1N0YXJ0SW5kZXggKyB0aGlzLnZpZXdwb3J0Um93cyArICh0aGlzLm92ZXJzY2FuICogMikpO1xuXG4gIC8vICAgICB0aGlzLnRyYW5zbGF0ZVkgPSBzdGFydCAqIHRoaXMucm93SGVpZ2h0O1xuICAvLyAgICAgdGhpcy5zdGFydEluZGV4ID0gc3RhcnQ7XG4gIC8vICAgICB0aGlzLnZpc2libGVSb3dzID0gZmxhdERhdGEuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIC8vICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIC8vICAgfSk7XG4gIC8vIH1cblxuXG4gIGdldCBpc1Njcm9sbGJhclZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLm1haW5TY3JvbGwpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBlbCA9IHRoaXMubWFpblNjcm9sbC5uYXRpdmVFbGVtZW50O1xuICAgIHJldHVybiBlbC5zY3JvbGxIZWlnaHQgPiBlbC5jbGllbnRIZWlnaHQ7XG4gIH1cblxuICB0b2dnbGVFeHBhbmQocm93OiBhbnkpIHtcbiAgICBpZiAocm93LmRldGFpbHMpIHtcbiAgICAgIHJvdy5pc0RldGFpbHNFeHBhbmQgPSAhcm93LmlzRGV0YWlsc0V4cGFuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcm93LmlzRXhwYW5kID0gIXJvdy5pc0V4cGFuZDtcbiAgICB9XG4gICAgdGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMuY2xlYXIoKTtcbiAgICB0aGlzLnVwZGF0ZUZsYXR0ZW5lZERhdGEoKTtcbiAgICAvLyB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgLy8gfSwgMTAwKTtcbiAgfVxuXG4gIC8vIG9uTWFpbkZha2VTY3JvbGwoZXZlbnQ6IEV2ZW50KSB7XG4gIC8vICAgaWYgKHRoaXMuaXNTeW5jaW5nRnJvbU1haW4pIHtcbiAgLy8gICAgIHRoaXMuaXNTeW5jaW5nRnJvbU1haW4gPSBmYWxzZTtcbiAgLy8gICAgIHJldHVybjtcbiAgLy8gICB9XG4gIC8vICAgaWYgKHRoaXMuZ3JvdXBlZENvbHVtbnM/Lmxlbmd0aCA+IDApIHtcbiAgLy8gICAgIHRoaXMuc3RhcnRJbmRleCA9IDA7XG4gIC8vICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIC8vICAgICByZXR1cm47XG4gIC8vICAgfVxuICAvLyAgIGNvbnN0IHNjcm9sbFRvcCA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLnNjcm9sbFRvcDtcbiAgLy8gICBpZiAodGhpcy5tYWluU2Nyb2xsUmFmKSBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLm1haW5TY3JvbGxSYWYpO1xuICAvLyAgIHRoaXMubWFpblNjcm9sbFJhZiA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gIC8vICAgICB0aGlzLmlzU3luY2luZ0Zyb21GYWtlID0gdHJ1ZTtcbiAgLy8gICAgIHRoaXMubWFpblNjcm9sbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcbiAgLy8gICAgIGNvbnN0IG92ZXJzY2FuID0gdGhpcy5vdmVyc2NhbiA/PyAwO1xuICAvLyAgICAgdGhpcy5zdGFydEluZGV4ID0gTWF0aC5mbG9vcihzY3JvbGxUb3AgLyB0aGlzLnJvd0hlaWdodCk7XG4gIC8vICAgICBjb25zdCBzdGFydCA9IE1hdGgubWF4KDAsIHRoaXMuc3RhcnRJbmRleCAtIG92ZXJzY2FuKTtcbiAgLy8gICAgIGNvbnN0IGVuZCA9IE1hdGgubWluKFxuICAvLyAgICAgICB0aGlzLmZsYXR0ZW5lZERhdGEubGVuZ3RoLFxuICAvLyAgICAgICB0aGlzLnN0YXJ0SW5kZXggKyB0aGlzLnZpZXdwb3J0Um93cyArIG92ZXJzY2FuXG4gIC8vICAgICApO1xuICAvLyAgICAgdGhpcy52aXNpYmxlUm93cyA9IHRoaXMuZmxhdHRlbmVkRGF0YS5zbGljZShzdGFydCwgZW5kKTtcbiAgLy8gICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgLy8gICB9KTtcbiAgLy8gfVxuXG5cblxuXG5cbiAgdmlld3BvcnRSb3dzID0gMDsgLy8gaG93IG1hbnkgcm93cyBmaXQgaW4gdmlld3BvcnQgKGNvbXB1dGVkKVxuICBmaXJzdEluZGV4ID0gMDsgLy8gaW5kZXggb2YgdGhlIGZpcnN0IHZpc2libGUgcm93IChjbGFtcGVkKVxuICByZW5kZXJTdGFydCA9IDA7IC8vIHdoZXJlIHRoZSBzbGljZSBhY3R1YWxseSBzdGFydHMgKGZpcnN0SW5kZXggLSBvdmVyc2NhbiwgY2xhbXBlZClcblxuICBwcml2YXRlIHNjcm9sbFJhZjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcGVuZGluZ1Njcm9sbFRvcCA9IDA7XG5cbiAgQFZpZXdDaGlsZCgnbWFpblNjcm9sbCcpIG1haW5TY3JvbGwhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnZmFrZVNjcm9sbCcpIGZha2VTY3JvbGwhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnaG9yaXppbnRhbEZha2VTY3JvbGwnKVxuICBob3JpemludGFsRmFrZVNjcm9sbCE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdjZW50ZXJTY3JvbGxhYmxlQm9keScpXG4gIGNlbnRlclNjcm9sbGFibGVCb2R5ITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIHByaXZhdGUgb3ZlcnNjYW4gPSAxMDsgLy8gYnVmZmVyIHJvd3MgYWJvdmUgYW5kIGJlbG93XG5cbiAgY29tcHV0ZVZpZXdwb3J0Um93cygpIHtcbiAgICBpZiAodGhpcy5mYWtlU2Nyb2xsPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLmZha2VTY3JvbGwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1haW5TY3JvbGw/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMubWFpblNjcm9sbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgICBjb25zdCBoID0gdGhpcy5tYWluU2Nyb2xsLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0ID8/IDA7XG5cbiAgICAgIC8vIHJvd3MgdmlzaWJsZSBpbiB2aWV3cG9ydFxuICAgICAgY29uc3Qgcm93c0luVmlld3BvcnQgPSBNYXRoLm1heCgxLCBNYXRoLmNlaWwoaCAvIHRoaXMucm93SGVpZ2h0KSk7XG5cbiAgICAgIC8vIGFkZCBidWZmZXIgcm93cyAob3ZlcnNjYW4pXG4gICAgICB0aGlzLnZpZXdwb3J0Um93cyA9IHJvd3NJblZpZXdwb3J0ICsgdGhpcy5vdmVyc2NhbjtcblxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG5cbiAgb25Ib3Jpem9udGFsRmFrZVNjcm9sbChldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCBzY3JvbGxMZWZ0ID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuc2Nyb2xsTGVmdDtcbiAgICB0aGlzLmNlbnRlclBpbm5lZEhlYWRlci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAgIGlmICh0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Py5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7XG4gICAgfVxuICB9XG5cbiAgb25DZW50ZXJCb2R5U2Nyb2xsKGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAodGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keT8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0YXJnZXQuc2Nyb2xsTGVmdDtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2VudGVyUGlubmVkSGVhZGVyKSB7XG4gICAgICB0aGlzLmNlbnRlclBpbm5lZEhlYWRlci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0YXJnZXQuc2Nyb2xsTGVmdDtcbiAgICB9XG4gICAgaWYgKHRoaXMuaG9yaXppbnRhbEZha2VTY3JvbGw/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuaG9yaXppbnRhbEZha2VTY3JvbGwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gdGFyZ2V0LnNjcm9sbExlZnQ7XG4gICAgfVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBvbkNlbnRlckhlYWRlclNjcm9sbChldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKHRoaXMuaG9yaXppbnRhbEZha2VTY3JvbGw/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuaG9yaXppbnRhbEZha2VTY3JvbGwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gdGFyZ2V0LnNjcm9sbExlZnQ7XG4gICAgfVxuICAgIGlmICh0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Py5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRhcmdldC5zY3JvbGxMZWZ0O1xuICAgIH1cbiAgfVxuXG4gIC8vIERyYWdnaW5nIExvZ2ljIGlzIGltcGxlbWVudGVkIGhlcmVcbiAgLy8gcHJpdmF0ZSBpbml0aWFsSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIGRyYWdnaW5nQ29sdW1uOiBhbnk7XG4gIGRyYWdTdGFydEluZGV4OiBhbnkgPSAwO1xuICAvLyBvbkRyYWdTdGFydChkYXRhOiBhbnksIGluZGV4OiBudW1iZXIpIHtcbiAgLy8gICB0aGlzLmRyYWdnaW5nQ29sdW1uID0gZGF0YS5jb2x1bW47XG4gIC8vICAgdGhpcy5kcmFnU3RhcnRJbmRleCA9IGluZGV4O1xuICAvLyB9XG4gIC8vIG9uRHJhZ01vdmUoZGF0YTogYW55KSB7XG4gIC8vICAgY29uc3QgeyBjbGllbnRYLCBjbGllbnRZIH0gPSBkYXRhLmV2ZW50O1xuICAvLyAgIGNvbnN0IGhlYWRlcnMgPSBBcnJheS5mcm9tKFxuICAvLyAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm9uZS1yb3ctaGVhZGVyLWNlbGxzJylcbiAgLy8gICApIGFzIEhUTUxFbGVtZW50W107XG5cbiAgLy8gICBoZWFkZXJzLmZvckVhY2goKGhlYWRlckVsLCBpZHgpID0+IHtcbiAgLy8gICAgIGNvbnN0IHJlY3QgPSBoZWFkZXJFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgLy8gICAgIGlmIChcbiAgLy8gICAgICAgaWR4ICE9PSB0aGlzLmRyYWdTdGFydEluZGV4ICYmXG4gIC8vICAgICAgIGNsaWVudFggPiByZWN0LmxlZnQgJiZcbiAgLy8gICAgICAgY2xpZW50WCA8IHJlY3QucmlnaHQgJiZcbiAgLy8gICAgICAgY2xpZW50WSA+IHJlY3QudG9wICYmXG4gIC8vICAgICAgIGNsaWVudFkgPCByZWN0LmJvdHRvbVxuICAvLyAgICAgKSB7XG4gIC8vICAgICAgIGNvbnN0IG90aGVySW5kZXggPSBpZHg7XG4gIC8vICAgICAgIGNvbnNvbGUubG9nKGAke3RoaXMuZHJhZ1N0YXJ0SW5kZXh9IC0tPiAke290aGVySW5kZXh9YCk7XG4gIC8vICAgICAgIHRoaXMuc3dhcENvbHVtbih0aGlzLmRyYWdTdGFydEluZGV4LCBvdGhlckluZGV4KTtcbiAgLy8gICAgICAgY29uc29sZS5sb2coJ1VwZGF0ZWQgQ29sdW1uczogJywgdGhpcy5jb2x1bW5zKTtcbiAgLy8gICAgICAgdGhpcy5kcmFnU3RhcnRJbmRleCA9IG90aGVySW5kZXg7IC8vIHVwZGF0ZSBpbmRleFxuICAvLyAgICAgfVxuICAvLyAgIH0pO1xuICAvLyB9XG5cbiAgLy8gc3dhcENvbHVtbihwcmV2aXVzSW5kZXg6IG51bWJlciwgY3VycmVudEluZGV4OiBudW1iZXIpIHtcbiAgLy8gICBjb25zdCBjb2x1bW5zID0gc3RydWN0dXJlZENsb25lKHRoaXMuY29sdW1ucyk7XG4gIC8vICAgY29uc3QgZmxhdHRlbkNvbHVtbnMgPSB0aGlzLmZsYXR0ZW5Db2x1bW5zKGNvbHVtbnMpO1xuXG4gIC8vICAgY29uc3QgdmlzaWJsZUZsYXR0ZW5Db2x1bW5zID0gZmxhdHRlbkNvbHVtbnMuZmlsdGVyKFxuICAvLyAgICAgKGNvbCkgPT4gY29sLmlzX3Zpc2libGVcbiAgLy8gICApO1xuICAvLyAgIGNvbnN0IHByZXZpdXNDb2x1bW4gPSB2aXNpYmxlRmxhdHRlbkNvbHVtbnNbcHJldml1c0luZGV4XTtcbiAgLy8gICBjb25zdCBjdXJyZW50Q29sdW1uID0gdmlzaWJsZUZsYXR0ZW5Db2x1bW5zW2N1cnJlbnRJbmRleF07XG5cbiAgLy8gICBjb25zb2xlLmxvZygnUHJldml1cyBDb2x1bW46ICcsIHByZXZpdXNDb2x1bW4pO1xuICAvLyAgIGNvbnNvbGUubG9nKCdjdXJyZW50IGNsdW1uOiAnLCBjdXJyZW50Q29sdW1uKTtcbiAgLy8gfVxuXG4gIC8vIG9uRHJhZ0VuZChkYXRhOiBhbnkpIHtcbiAgLy8gICB0aGlzLmRyYWdnaW5nQ29sdW1uID0gbnVsbDtcbiAgLy8gICB0aGlzLmRyYWdTdGFydEluZGV4ID0gbnVsbDtcbiAgLy8gfVxuXG4gIC8vIENESyBEUkFHIERST1AgTE9HSUMgR09FUyBIRVJFXG5cblxuICBjYW5FbnRlclRvUm93c0dyb3VwaW5nID0gKGRyYWc6IENka0RyYWc8YW55PiwgZHJvcDogQ2RrRHJvcExpc3Q8YW55PikgPT4ge1xuICAgIC8vIEV4YW1wbGU6IEJsb2NrIGlmIGFscmVhZHkgcGlubmVkIGxlZnRcbiAgICBjb25zdCBkYXRhID0gZHJhZy5kYXRhO1xuICAgIGlmIChkYXRhPy5jaGlsZHJlbiAmJiBkYXRhPy5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBkYXRhLmNoaWxkcmVuLnNvbWUoXG4gICAgICAgIChjb2w6IGFueSkgPT4gY29sLmlzX3Zpc2libGUgJiYgY29sLmlzX2dyb3VwYWJsZVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEuaXNfdmlzaWJsZSAmJiBkYXRhLmlzX2dyb3VwYWJsZTtcbiAgfTtcblxuICAvLyBvbkRyYWdNb3ZlZChldmVudDogQ2RrRHJhZ01vdmU8YW55Pikge1xuICAvLyAgIGNvbnN0IHBvaW50ZXJYID0gZXZlbnQucG9pbnRlclBvc2l0aW9uLng7XG4gIC8vICAgY29uc3QgcG9pbnRlclkgPSBldmVudC5wb2ludGVyUG9zaXRpb24ueTtcblxuICAvLyAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcbiAgLy8gICAgICdyb3dzLWdyb3VwaW5nLXRvcC1jb250YWluZXInXG4gIC8vICAgKTtcblxuICAvLyAgIGlmICh0YXJnZXRFbGVtZW50KSB7XG4gIC8vICAgICBjb25zdCByZWN0ID0gdGFyZ2V0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAvLyAgICAgY29uc3QgaXNPdmVyVGFyZ2V0ID1cbiAgLy8gICAgICAgcG9pbnRlclggPj0gcmVjdC5sZWZ0ICYmXG4gIC8vICAgICAgIHBvaW50ZXJYIDw9IHJlY3QucmlnaHQgJiZcbiAgLy8gICAgICAgcG9pbnRlclkgPj0gcmVjdC50b3AgJiZcbiAgLy8gICAgICAgcG9pbnRlclkgPD0gcmVjdC5ib3R0b207XG5cbiAgLy8gICAgIGlmIChpc092ZXJUYXJnZXQpIHtcbiAgLy8gICAgICAgdGhpcy5kcmFnZ2luZ0luR3JvdXBBcmVhID0gdHJ1ZTtcbiAgLy8gICAgIH0gZWxzZSB7XG4gIC8vICAgICAgIHRoaXMuZHJhZ2dpbmdJbkdyb3VwQXJlYSA9IGZhbHNlO1xuICAvLyAgICAgfVxuICAvLyAgIH1cbiAgLy8gfVxuXG4gIGVudGVyVG9Ub3BSb3dHcm91cGluZyhkcm9wTGlzdDogQ2RrRHJhZ0VudGVyPGFueT4pIHtcbiAgICBjb25zdCBkcmFnZ2luZ0RhdGEgPSBkcm9wTGlzdC5pdGVtLmRhdGE7XG4gICAgdGhpcy5kcmFnZ2luZ0luR3JvdXBBcmVhID0gdHJ1ZTtcbiAgICAvLyBjb25zb2xlLmxvZyhcIkRyYWdnaW5nIGluIGdyb3VwIGFyZWFcIilcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShkcmFnZ2luZ0RhdGE/LmNoaWxkcmVuKSkge1xuICAgICAgY29uc3QgdGFyZ2V0R3JvdXAgPSB0aGlzLmNvbHVtbnMuZmluZChcbiAgICAgICAgKGNvbCkgPT4gY29sLmhlYWRlciA9PT0gZHJhZ2dpbmdEYXRhLmhlYWRlclxuICAgICAgKTtcbiAgICAgIGlmICh0YXJnZXRHcm91cCkge1xuICAgICAgICBkcmFnZ2luZ0RhdGEuY2hpbGRyZW4uZm9yRWFjaCgoZHJhZ2dlZENoaWxkOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBtYXRjaGluZ0NoaWxkID0gdGFyZ2V0R3JvdXAuY2hpbGRyZW4uZmluZChcbiAgICAgICAgICAgIChjaGlsZDogYW55KSA9PiBjaGlsZC5maWVsZCA9PT0gZHJhZ2dlZENoaWxkLmZpZWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobWF0Y2hpbmdDaGlsZCkge1xuICAgICAgICAgICAgbWF0Y2hpbmdDaGlsZC5pc1Jvd0dyb3VwZWQgPSAhIW1hdGNoaW5nQ2hpbGQuaXNfZ3JvdXBhYmxlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgLy8gVHJ5IGZpbmRpbmcgaXQgaW4gdG9wLWxldmVsIGNvbHVtbnMgZmlyc3RcbiAgICAgIGxldCB0YXJnZXRDb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZChcbiAgICAgICAgKGNvbDogYW55KSA9PiBjb2wuZmllbGQgPT09IGRyYWdnaW5nRGF0YS5maWVsZFxuICAgICAgKTtcblxuICAgICAgaWYgKHRhcmdldENvbHVtbikge1xuICAgICAgICB0YXJnZXRDb2x1bW4uaXNSb3dHcm91cGVkID0gISF0YXJnZXRDb2x1bW4uaXNfZ3JvdXBhYmxlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQgZ3JvdXAgb2YgdGhpcy5jb2x1bW5zKSB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZ3JvdXAuY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGluZ0NoaWxkID0gZ3JvdXAuY2hpbGRyZW4uZmluZChcbiAgICAgICAgICAgICAgKGNoaWxkOiBhbnkpID0+IGNoaWxkLmZpZWxkID09PSBkcmFnZ2luZ0RhdGEuZmllbGRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAobWF0Y2hpbmdDaGlsZCkge1xuICAgICAgICAgICAgICBtYXRjaGluZ0NoaWxkLmlzUm93R3JvdXBlZCA9ICEhbWF0Y2hpbmdDaGlsZC5pc19ncm91cGFibGU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIOKchSBSZWZyZXNoIFVJXG4gICAgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBvbkRyb3BMaXN0RW50ZXIoXG4gICAgZHJvcExpc3Q6IENka0RyYWdFbnRlcjxhbnk+LFxuICAgIHNlY3Rpb246ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0J1xuICApIHtcbiAgICBjb25zdCBkcmFnZ2luZ0RhdGEgPSBkcm9wTGlzdC5pdGVtLmRhdGE7XG5cbiAgICBjb25zdCB0YXJnZXRDb2x1bW46IGFueSA9IHRoaXMuY29sdW1ucy5maW5kKFxuICAgICAgKGNvbCkgPT4gY29sLmhlYWRlciA9PSBkcmFnZ2luZ0RhdGEuaGVhZGVyXG4gICAgKTtcblxuICAgIGlmICghdGFyZ2V0Q29sdW1uKSByZXR1cm47XG5cbiAgICBpZiAoXG4gICAgICBBcnJheS5pc0FycmF5KGRyYWdnaW5nRGF0YT8uY2hpbGRyZW4pICYmXG4gICAgICBBcnJheS5pc0FycmF5KHRhcmdldENvbHVtbj8uY2hpbGRyZW4pXG4gICAgKSB7XG4gICAgICBkcmFnZ2luZ0RhdGEuY2hpbGRyZW4uZm9yRWFjaCgoZHJhZ2dlZENoaWxkOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgbWF0Y2hpbmdDaGlsZCA9IHRhcmdldENvbHVtbi5jaGlsZHJlbi5maW5kKFxuICAgICAgICAgIChjaGlsZDogYW55KSA9PiBjaGlsZC5maWVsZCA9PT0gZHJhZ2dlZENoaWxkLmZpZWxkXG4gICAgICAgICk7XG4gICAgICAgIGlmIChtYXRjaGluZ0NoaWxkKSB7XG4gICAgICAgICAgbWF0Y2hpbmdDaGlsZC5waW5uZWQgPSBzZWN0aW9uID09PSAnY2VudGVyJyA/IG51bGwgOiBzZWN0aW9uO1xuICAgICAgICAgIG1hdGNoaW5nQ2hpbGRbJ2lzUm93R3JvdXBlZCddID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXRDb2x1bW4ucGlubmVkID0gc2VjdGlvbiA9PT0gJ2NlbnRlcicgPyBudWxsIDogc2VjdGlvbjtcbiAgICAgIHRhcmdldENvbHVtblsnaXNSb3dHcm91cGVkJ10gPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8vIGVudGVyVG9Ub3BHcm91cGluZ1Jvdyhkcm9wTGlzdDogQ2RrRHJhZ0VudGVyPGFueT4pIHtcbiAgLy8gICB0aGlzLnNob3VsZERpc2FibGVEcm9wbGlzdFNvcnRpbmcgPSB0aGlzLmlzRGlzYWJsZUNvbHVtbkdyb3VwaW5nO1xuICAvLyAgIHRoaXMuZHJhZ2dpbmdJbkdyb3VwQXJlYSA9IHRydWU7XG4gIC8vICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAvLyBjb25zdCBpbmRleCA9IHRoaXMuZ3JvdXBlZENvbHVtbnMuZmluZEluZGV4KFxuICAvLyAgIChjb2wpID0+IGNvbC5maWVsZCA9PT0gY29sdW1uLmZpZWxkXG4gIC8vICk7XG4gIC8vIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgLy8gICB0aGlzLmdyb3VwZWRDb2x1bW5zLnNwbGljZShpbmRleCwgMSk7XG4gIC8vIH1cblxuICAvLyAvLyAyLiBUcmF2ZXJzZSB0aGlzLmNvbHVtbnMgdG8gZmluZCBhbmQgdXBkYXRlIHRoZSBtYXRjaGluZyBjb2x1bW5cbiAgLy8gdGhpcy5jb2x1bW5zLmZvckVhY2goKGdyb3VwKSA9PiB7XG4gIC8vICAgaWYgKGdyb3VwPy5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KGdyb3VwLmNoaWxkcmVuKSkge1xuICAvLyAgICAgZ3JvdXAuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgLy8gICAgICAgaWYgKGNoaWxkLmZpZWxkID09PSBjb2x1bW4uZmllbGQpIHtcbiAgLy8gICAgICAgICBjaGlsZC5pc1Jvd0dyb3VwZWQgPSBmYWxzZTtcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfSk7XG4gIC8vICAgfSBlbHNlIGlmIChncm91cC5maWVsZCA9PT0gY29sdW1uLmZpZWxkKSB7XG4gIC8vICAgICBncm91cC5pc1Jvd0dyb3VwZWQgPSBmYWxzZTtcbiAgLy8gICB9XG4gIC8vIH0pO1xuICAvLyAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgLy8gfVxuXG4gIGV4aXRlZEZyb21UaGVUb3BSb3coZHJvcExpc3Q6IENka0RyYWdFeGl0PGFueT4pIHtcbiAgICB0aGlzLmRyYWdnaW5nSW5Hcm91cEFyZWEgPSBmYWxzZTtcbiAgICB0aGlzLmlzRGlzYWJsZUNvbHVtbkdyb3VwaW5nID0gZmFsc2U7XG4gICAgdGhpcy5zaG91bGREaXNhYmxlRHJvcGxpc3RTb3J0aW5nID0gZmFsc2U7XG4gICAgY29uc3QgZHJhZ2dpbmdEYXRhID0gZHJvcExpc3QuaXRlbS5kYXRhO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRyYWdnaW5nRGF0YT8uY2hpbGRyZW4pKSB7XG4gICAgICBjb25zdCB0YXJnZXRHcm91cCA9IHRoaXMuY29sdW1ucy5maW5kKFxuICAgICAgICAoY29sKSA9PiBjb2wuaGVhZGVyID09PSBkcmFnZ2luZ0RhdGEuaGVhZGVyXG4gICAgICApO1xuICAgICAgaWYgKHRhcmdldEdyb3VwKSB7XG4gICAgICAgIGRyYWdnaW5nRGF0YS5jaGlsZHJlbi5mb3JFYWNoKChkcmFnZ2VkQ2hpbGQ6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG1hdGNoaW5nQ2hpbGQgPSB0YXJnZXRHcm91cC5jaGlsZHJlbi5maW5kKFxuICAgICAgICAgICAgKGNoaWxkOiBhbnkpID0+IGNoaWxkLmZpZWxkID09PSBkcmFnZ2VkQ2hpbGQuZmllbGRcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChtYXRjaGluZ0NoaWxkKSB7XG4gICAgICAgICAgICBtYXRjaGluZ0NoaWxkLmlzUm93R3JvdXBlZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB0YXJnZXRDb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZChcbiAgICAgICAgKGNvbDogYW55KSA9PiBjb2wuZmllbGQgPT09IGRyYWdnaW5nRGF0YS5maWVsZFxuICAgICAgKTtcblxuICAgICAgaWYgKHRhcmdldENvbHVtbikge1xuICAgICAgICB0YXJnZXRDb2x1bW4uaXNSb3dHcm91cGVkID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGxldCBncm91cCBvZiB0aGlzLmNvbHVtbnMpIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShncm91cC5jaGlsZHJlbikpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nQ2hpbGQgPSBncm91cC5jaGlsZHJlbi5maW5kKFxuICAgICAgICAgICAgICAoY2hpbGQ6IGFueSkgPT4gY2hpbGQuZmllbGQgPT09IGRyYWdnaW5nRGF0YS5maWVsZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChtYXRjaGluZ0NoaWxkKSB7XG4gICAgICAgICAgICAgIG1hdGNoaW5nQ2hpbGQuaXNSb3dHcm91cGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHNob3VsZERpc2FibGVEcm9wbGlzdFNvcnRpbmcgPSBmYWxzZTtcbiAgaXNEaXNhYmxlQ29sdW1uR3JvdXBpbmcgPSBmYWxzZTtcbiAgY2hlY2tDb2x1bW5Hcm91cGluZ1N0YXR1cyhjb2w6IGFueSkge1xuICAgIGlmIChjb2w/LmNoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkoY29sLmNoaWxkcmVuKSkge1xuICAgICAgY29uc3QgYWxsQ2hpbGRyZW5EaXNhYmxlZCA9IGNvbC5jaGlsZHJlbi5ldmVyeShcbiAgICAgICAgKGNoaWxkOiBhbnkpID0+IGNoaWxkLmlzX2dyb3VwYWJsZSA9PT0gZmFsc2VcbiAgICAgICk7XG4gICAgICB0aGlzLmlzRGlzYWJsZUNvbHVtbkdyb3VwaW5nID0gYWxsQ2hpbGRyZW5EaXNhYmxlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc0Rpc2FibGVDb2x1bW5Hcm91cGluZyA9IGNvbC5pc19ncm91cGFibGUgPT09IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBjdXJyZW50RHJhZ2dpbmdDb2x1bW46IGFueSA9IG51bGw7XG4gIGRyYWdTdGFydE9uR3JvdXAoY29sOiBhbnkpIHtcbiAgICB0aGlzLmN1cnJlbnREcmFnZ2luZ0NvbHVtbiA9IGNvbDtcbiAgfVxuXG4gIG9uU29ydEdyb3VwID0gYXN5bmMgKGV2ZW50OiBDZGtEcmFnU29ydEV2ZW50PGFueT4sIHNlY3Rpb246IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGNvbHVtbnMgPSAodGhpcyBhcyBhbnkpW3NlY3Rpb25dO1xuICAgIGlmIChldmVudC5wcmV2aW91c0luZGV4ID09PSBldmVudC5jdXJyZW50SW5kZXgpIHJldHVybjtcbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKChjb2w6IGFueSkgPT4ge1xuICAgICAgaWYgKGNvbD8uY2hpbGRyZW4gJiYgQXJyYXkuaXNBcnJheShjb2wuY2hpbGRyZW4pKSB7XG4gICAgICAgIHJldHVybiBjb2wuY2hpbGRyZW4uc29tZSgoY2hpbGQ6IGFueSkgPT4gY2hpbGQuaXNfdmlzaWJsZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29sLmlzX3Zpc2libGU7XG4gICAgfSk7XG4gICAgY29uc3QgcHJldmlvdXNIZWFkZXIgPSB2aXNpYmxlQ29sdW1uc1tldmVudC5wcmV2aW91c0luZGV4XS5oZWFkZXI7XG4gICAgY29uc3QgY3VycmVudEhlYWRlciA9IHZpc2libGVDb2x1bW5zW2V2ZW50LmN1cnJlbnRJbmRleF0uaGVhZGVyO1xuICAgIGNvbnN0IHZpc2libGVQcmV2SW5kZXggPSB2aXNpYmxlQ29sdW1ucy5maW5kSW5kZXgoXG4gICAgICAoY29sOiBhbnkpID0+IGNvbC5oZWFkZXIgPT09IHByZXZpb3VzSGVhZGVyXG4gICAgKTtcbiAgICBjb25zdCB2aXNpYmxlQ3VyckluZGV4ID0gdmlzaWJsZUNvbHVtbnMuZmluZEluZGV4KFxuICAgICAgKGNvbDogYW55KSA9PiBjb2wuaGVhZGVyID09PSBjdXJyZW50SGVhZGVyXG4gICAgKTtcbiAgICBjb25zdCBnZXRGaWVsZHMgPSAoaXRlbTogYW55KTogc3RyaW5nW10gPT4ge1xuICAgICAgaWYgKGl0ZW0/LmNoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkoaXRlbS5jaGlsZHJlbikpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uY2hpbGRyZW4ubWFwKChjaGlsZDogYW55KSA9PiBjaGlsZC5maWVsZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW2l0ZW0uZmllbGRdO1xuICAgIH07XG4gICAgY29uc3QgcHJldkZpZWxkcyA9IGdldEZpZWxkcyh2aXNpYmxlQ29sdW1uc1t2aXNpYmxlUHJldkluZGV4XSk7XG4gICAgY29uc3QgY3VyckZpZWxkcyA9IGdldEZpZWxkcyh2aXNpYmxlQ29sdW1uc1t2aXNpYmxlQ3VyckluZGV4XSk7XG4gICAgY29uc3QgYWxsRmllbGRzID0gWy4uLnByZXZGaWVsZHMsIC4uLmN1cnJGaWVsZHNdO1xuICAgIGNvbnN0IGNlbGxzID0gYWxsRmllbGRzLmxlbmd0aFxuICAgICAgPyAoW10gYXMgSFRNTEVsZW1lbnRbXSkuY29uY2F0KFxuICAgICAgICAuLi5hbGxGaWVsZHMubWFwKChmaWVsZCkgPT5cbiAgICAgICAgICBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtmaWVsZD1cIiR7ZmllbGR9XCJdYCkpIGFzIEhUTUxFbGVtZW50W11cbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgOiBbXTtcbiAgICBjb25zdCBmaXJzdFBvc2l0aW9ucyA9IG5ldyBNYXA8SFRNTEVsZW1lbnQsIG51bWJlcj4oKTtcbiAgICBjZWxscy5mb3JFYWNoKChlbCkgPT4gZmlyc3RQb3NpdGlvbnMuc2V0KGVsLCBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0KSk7XG4gICAgbW92ZUl0ZW1JbkFycmF5KCh0aGlzIGFzIGFueSlbc2VjdGlvbl0sIHZpc2libGVQcmV2SW5kZXgsIHZpc2libGVDdXJySW5kZXgpO1xuICAgIGNvbnN0IHByZXZDb2xJbmRleEluQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmhlYWRlciA9PT0gcHJldmlvdXNIZWFkZXIpO1xuICAgIGNvbnN0IGN1cnJDb2xJbmRleEluQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmhlYWRlciA9PT0gY3VycmVudEhlYWRlcik7XG4gICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMuY29sdW1ucywgcHJldkNvbEluZGV4SW5Db2x1bW5zLCBjdXJyQ29sSW5kZXhJbkNvbHVtbnMpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgYWxsRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRDZWxscyA9IEFycmF5LmZyb20oXG4gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2ZpZWxkPVwiJHtmaWVsZH1cIl1gKVxuICAgICAgICApIGFzIEhUTUxFbGVtZW50W107XG5cbiAgICAgICAgdXBkYXRlZENlbGxzLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgY29uc3Qgb2xkTGVmdCA9IGZpcnN0UG9zaXRpb25zLmdldChlbCk7XG4gICAgICAgICAgaWYgKG9sZExlZnQgPT0gbnVsbCkgcmV0dXJuOyBcblxuICAgICAgICAgIGNvbnN0IG5ld0xlZnQgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuICAgICAgICAgIGNvbnN0IGRlbHRhWCA9IG9sZExlZnQgLSBuZXdMZWZ0O1xuXG4gICAgICAgICAgaWYgKGRlbHRhWCAhPT0gMCkge1xuICAgICAgICAgICAgZWwuc3R5bGUud2lsbENoYW5nZSA9ICd0cmFuc2Zvcm0nO1xuICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNpdGlvbiA9ICdub25lJztcbiAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVYKCR7ZGVsdGFYfXB4KWA7XG5cbiAgICAgICAgICAgIC8vIEZvcmNlIHJlZmxvd1xuICAgICAgICAgICAgdm9pZCBlbC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNpdGlvbiA9ICd0cmFuc2Zvcm0gMjUwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSc7XG4gICAgICAgICAgICBlbC5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlWCgwKSc7XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNpdGlvbiA9ICcnO1xuICAgICAgICAgICAgICBlbC5zdHlsZS50cmFuc2Zvcm0gPSAnJztcbiAgICAgICAgICAgICAgZWwuc3R5bGUud2lsbENoYW5nZSA9ICcnO1xuICAgICAgICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgaGFuZGxlKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgaGFuZGxlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgLy8gfSk7XG4gIH1cblxuXG4gIG9uRHJvcEdyb3VwKCkge1xuICAgIHRoaXMubGVmdFBpbm5lZENvbHVtbnMgPSB0aGlzLmRlZXBDbG9uZUNvbHVtbnModGhpcy5wcmV2aWV3TGVmdFBpbm5lZENvbHVtbnMpO1xuICAgIHRoaXMuY2VudGVyQ29sdW1ucyA9IHRoaXMuZGVlcENsb25lQ29sdW1ucyh0aGlzLnByZXZpZXdDZW50ZXJDb2x1bW5zKTtcbiAgICB0aGlzLnJpZ2h0UGlubmVkQ29sdW1ucyA9IHRoaXMuZGVlcENsb25lQ29sdW1ucyh0aGlzLnByZXZpZXdSaWdodFBpbm5lZENvbHVtbnMpO1xuICAgIGNvbnN0IHNlbmREYXRhID0ge1xuICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgIGZpbHRlcnM6IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpLFxuICAgICAgbm9fb2ZfcmVjb3JkczogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2VTaXplLFxuICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG5cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIGRlZXBDbG9uZUNvbHVtbnMoY29sdW1uczogYW55W10pOiBhbnlbXSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbHVtbnMpKSByZXR1cm4gW107XG5cbiAgICByZXR1cm4gY29sdW1ucy5tYXAoY29sID0+ICh7XG4gICAgICAuLi5jb2wsXG4gICAgICBxdWVyeTogY29sLnF1ZXJ5ID8geyAuLi5jb2wucXVlcnkgfSA6IG51bGwsXG4gICAgICBjb2x1bW5fZHJvcGRvd25fdmFsdWU6IEFycmF5LmlzQXJyYXkoY29sLmNvbHVtbl9kcm9wZG93bl92YWx1ZSlcbiAgICAgICAgPyBbLi4uY29sLmNvbHVtbl9kcm9wZG93bl92YWx1ZV1cbiAgICAgICAgOiBbXSxcbiAgICAgIC8vIFJlY3Vyc2l2ZWx5IGRlZXAgY2xvbmUgY2hpbGRyZW4gaWYgcHJlc2VudFxuICAgICAgY2hpbGRyZW46IEFycmF5LmlzQXJyYXkoY29sLmNoaWxkcmVuKVxuICAgICAgICA/IHRoaXMuZGVlcENsb25lQ29sdW1ucyhjb2wuY2hpbGRyZW4pXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0pKTtcbiAgfVxuXG5cbiAgYXN5bmMgb25Ecm9wVG9wR3JvdXAoZXZlbnQ6IENka0RyYWdEcm9wPGFueT4pIHtcbiAgICBpZiAodGhpcy5pc091dHNpZGVDb250YWluZXIpIHJldHVybjtcbiAgICB0aGlzLm1haW5TY3JvbGwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy50cmFuc2xhdGVZID0gMDtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgY29uc3QgZHJhZ2dlZERhdGEgPSBldmVudC5pdGVtLmRhdGE7XG4gICAgaWYgKGRyYWdnZWREYXRhPy5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KGRyYWdnZWREYXRhLmNoaWxkcmVuKSkge1xuICAgICAgZHJhZ2dlZERhdGEuY2hpbGRyZW4uZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGNvbC5pc192aXNpYmxlICYmIGNvbC5pc19ncm91cGFibGUpIHtcbiAgICAgICAgICB0aGlzLmdyb3VwZWRDb2x1bW5zLnB1c2goY29sKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChkcmFnZ2VkRGF0YS5pc192aXNpYmxlICYmIGRyYWdnZWREYXRhLmlzX2dyb3VwYWJsZSkge1xuICAgICAgICB0aGlzLmdyb3VwZWRDb2x1bW5zLnB1c2goZHJhZ2dlZERhdGEpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmRyYWdnaW5nSW5Hcm91cEFyZWEgPSBmYWxzZTtcbiAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmdyb3VwZWRDb2x1bW5zLm1hcCgoaXRlbSkgPT4gaXRlbS5maWVsZCk7XG4gICAgdGhpcy5kYXRhU2V0ID0gYXdhaXQgdGhpcy5ncm91cERhdGFBc3luYyh0aGlzLm9yaWdpbmFsRGF0YVNldCwgZmllbGRzKTtcbiAgICB0aGlzLnVwZGF0ZUZsYXR0ZW5lZERhdGEoKTtcbiAgICB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoc0FuZEdyb3VwcygpO1xuICAgIHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlUm93cygwKTtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5zZWxlY3RlZENlbGxzID0gW107XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcy5jbGVhcigpO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDEwMDApO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGFzeW5jIG9uR3JvdXBSZW9yZGVyKGV2ZW50OiBDZGtEcmFnRHJvcDxhbnlbXT4pIHtcbiAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5ncm91cGVkQ29sdW1ucywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmdyb3VwZWRDb2x1bW5zLm1hcCgoaXRlbSkgPT4gaXRlbS5maWVsZCk7XG4gICAgdGhpcy5kYXRhU2V0ID0gYXdhaXQgdGhpcy5ncm91cERhdGFBc3luYyh0aGlzLm9yaWdpbmFsRGF0YVNldCwgZmllbGRzKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlRmxhdHRlbmVkRGF0YSgpO1xuICAgICAgdGhpcy51cGRhdGVDb2x1bW5XaWR0aHNBbmRHcm91cHMoKTtcbiAgICAgIHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gICAgICB0aGlzLnVwZGF0ZVZpc2libGVSb3dzKDApO1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMTAwKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5ncm91cEJveFBhZGRpbmcgPSB0aGlzLmNvbHVtbnNHcm91cGVkQm94Py5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpXG4gICAgfSwgMTApO1xuICB9XG5cbiAgYXN5bmMgdW5ncm91cENvbHVtbihjb2x1bW46IGFueSkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdyb3VwZWRDb2x1bW5zLmZpbmRJbmRleChcbiAgICAgICAgKGNvbCkgPT4gY29sLmZpZWxkID09PSBjb2x1bW4uZmllbGRcbiAgICAgICk7XG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBlZENvbHVtbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuZ3JvdXBlZENvbHVtbnMubWFwKChpdGVtKSA9PiBpdGVtLmZpZWxkKTtcbiAgICAgIHRoaXMuZGF0YVNldCA9IGF3YWl0IHRoaXMuZ3JvdXBEYXRhQXN5bmModGhpcy5vcmlnaW5hbERhdGFTZXQsIGZpZWxkcyk7XG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoZ3JvdXApID0+IHtcbiAgICAgICAgaWYgKGdyb3VwPy5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KGdyb3VwLmNoaWxkcmVuKSkge1xuICAgICAgICAgIGdyb3VwLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChjaGlsZC5maWVsZCA9PT0gY29sdW1uLmZpZWxkKSB7XG4gICAgICAgICAgICAgIGNoaWxkLmlzUm93R3JvdXBlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGdyb3VwLmZpZWxkID09PSBjb2x1bW4uZmllbGQpIHtcbiAgICAgICAgICBncm91cC5pc1Jvd0dyb3VwZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVGbGF0dGVuZWREYXRhKCk7XG4gICAgICAgIHRoaXMudXBkYXRlQ29sdW1uV2lkdGhzQW5kR3JvdXBzKCk7XG4gICAgICAgIHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZVJvd3MoMCk7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9LCAxMDAwKTtcblxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGluIHVuZ3JvdXBDb2x1bW46XCIsIGVycik7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cblxuICBzaG91bGRUaGVHcm91cEhlYWRlclNob3coZ3JvdXA6IGFueSkge1xuICAgIGlmIChncm91cD8uY2hpbGRyZW4gJiYgZ3JvdXAuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZ3JvdXAuY2hpbGRyZW4uc29tZShcbiAgICAgICAgKGNvbDogYW55KSA9PiBjb2wuaXNfdmlzaWJsZSAmJiAhY29sPy5pc1Jvd0dyb3VwZWRcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBncm91cD8uaXNfdmlzaWJsZSAmJiAhZ3JvdXA/LmlzUm93R3JvdXBlZDtcbiAgfVxuXG5cbiAgLy8gb25DaGlsZERyYWdTdGFydCgpIHtcbiAgLy8gICBkZWJ1Z2dlcjtcbiAgLy8gfVxuXG4gIC8vIGRyb3BMaXN0SWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8vIGdlbmVyYXRlRHJvcExpc3RJZHMoKSB7XG4gIC8vICAgdGhpcy5kcm9wTGlzdElkcyA9IFtdO1xuXG4gIC8vICAgY29uc3Qgc2VjdGlvbktleXMgPSBbXG4gIC8vICAgICAnbGVmdFBpbm5lZENvbHVtbnMnLFxuICAvLyAgICAgJ2NlbnRlckNvbHVtbnMnLFxuICAvLyAgICAgJ3JpZ2h0UGlubmVkQ29sdW1ucycsXG4gIC8vICAgXTtcblxuICAvLyAgIHNlY3Rpb25LZXlzLmZvckVhY2goKHNlY3Rpb25LZXkpID0+IHtcbiAgLy8gICAgIGNvbnN0IHNlY3Rpb25Db2xzID0gKHRoaXMgYXMgYW55KVtzZWN0aW9uS2V5XTtcblxuICAvLyAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbDogYW55LCBpOiBudW1iZXIpID0+IHtcbiAgLy8gICAgICAgaWYgKGNvbD8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHtcbiAgLy8gICAgICAgICBjb2wuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQ6IGFueSwgY2hpbGRJbmRleDogbnVtYmVyKSA9PiB7XG4gIC8vICAgICAgICAgICBpZiAoY2hpbGQ/LmlzX3Zpc2libGUgJiYgIWNoaWxkLmlzUm93R3JvdXBlZCkge1xuICAvLyAgICAgICAgICAgICBjb25zdCBpZCA9IGAke3NlY3Rpb25LZXl9JHtpfWA7XG4gIC8vICAgICAgICAgICAgIHRoaXMuZHJvcExpc3RJZHMucHVzaChpZCk7XG4gIC8vICAgICAgICAgICB9XG4gIC8vICAgICAgICAgfSk7XG4gIC8vICAgICAgIH0gZWxzZSBpZiAoY29sPy5pc192aXNpYmxlICYmICFjb2wuaXNSb3dHcm91cGVkKSB7XG4gIC8vICAgICAgICAgY29uc3QgaWQgPSBgJHtzZWN0aW9uS2V5fSR7aX1gO1xuICAvLyAgICAgICAgIHRoaXMuZHJvcExpc3RJZHMucHVzaChpZCk7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH0pO1xuICAvLyAgIH0pO1xuICAvLyB9XG5cbiAgb25DaGlsZERyb3BsaXN0U29ydGVkID0gYXN5bmMgKGV2ZW50OiBDZGtEcmFnU29ydEV2ZW50PGFueT4sIHNlY3Rpb246IHN0cmluZykgPT4ge1xuICAgIGlmIChldmVudC5wcmV2aW91c0luZGV4ID09PSBldmVudC5jdXJyZW50SW5kZXgpIHJldHVybjtcblxuICAgIGNvbnN0IHBpbm5lZCA9XG4gICAgICBzZWN0aW9uID09ICdwcmV2aWV3TGVmdFBpbm5lZENvbHVtbnMnXG4gICAgICAgID8gJ2xlZnQnXG4gICAgICAgIDogc2VjdGlvbiA9PSAncHJldmlld1JpZ2h0UGlubmVkQ29sdW1ucydcbiAgICAgICAgICA/ICdyaWdodCdcbiAgICAgICAgICA6IFwiXCI7XG5cbiAgICBjb25zdCBjb2x1bW4gPSBldmVudC5pdGVtLmRhdGE7XG4gICAgbGV0IGdyb3VwID0gdGhpcy5jb2x1bW5zLmZpbmQoXG4gICAgICAoY29sOiBhbnkpID0+XG4gICAgICAgIEFycmF5LmlzQXJyYXkoY29sLmNoaWxkcmVuKSAmJlxuICAgICAgICBjb2wuY2hpbGRyZW4uc29tZSgoY2hpbGQ6IGFueSkgPT4gY2hpbGQ/LmZpZWxkID09PSBjb2x1bW4/LmZpZWxkKVxuICAgICk7XG4gICAgY29uc3QgZ3JvdXBJbmRleCA9IHRoaXMuY29sdW1ucy5maW5kSW5kZXgoXG4gICAgICAoY29sKSA9PiBjb2wuaGVhZGVyID09PSBncm91cC5oZWFkZXJcbiAgICApO1xuICAgIGNvbnN0IGZpbHRlcmVkR3JvdXAgPSBncm91cD8uY2hpbGRyZW4uZmlsdGVyKChjb2w6IGFueSkgPT4ge1xuICAgICAgY29uc3QgaXNQaW5uZWRNYXRjaCA9XG4gICAgICAgIChwaW5uZWQgPT09IFwiXCIgJiYgKCFjb2w/LnBpbm5lZCB8fCBjb2w/LnBpbm5lZCA9PT0gXCJcIikpIHx8IGNvbD8ucGlubmVkID09PSBwaW5uZWQ7XG4gICAgICByZXR1cm4gaXNQaW5uZWRNYXRjaCAmJiBjb2w/LmlzX3Zpc2libGU7XG4gICAgfSk7XG5cbiAgICBjb25zdCBwcmV2aW91c0ZpZWxkID0gZmlsdGVyZWRHcm91cFtldmVudC5wcmV2aW91c0luZGV4XS5maWVsZDtcbiAgICBjb25zdCBjdXJyZW50RmllbGQgPSBmaWx0ZXJlZEdyb3VwW2V2ZW50LmN1cnJlbnRJbmRleF0uZmllbGQ7XG4gICAgY29uc3QgdmlzaWJsZVByZXZJbmRleCA9IGdyb3VwLmNoaWxkcmVuLmZpbmRJbmRleChcbiAgICAgIChjb2w6IGFueSkgPT4gY29sLmZpZWxkID09IHByZXZpb3VzRmllbGRcbiAgICApO1xuICAgIGNvbnN0IHZpc2libGVDdXJySW5kZXggPSBncm91cC5jaGlsZHJlbi5maW5kSW5kZXgoXG4gICAgICAoY29sOiBhbnkpID0+IGNvbC5maWVsZCA9PSBjdXJyZW50RmllbGRcbiAgICApO1xuICAgIGNvbnN0IGFsbEZpZWxkcyA9IFtwcmV2aW91c0ZpZWxkLCBjdXJyZW50RmllbGRdO1xuICAgIGNvbnN0IGNlbGxzID0gYWxsRmllbGRzLmxlbmd0aFxuICAgICAgPyAoW10gYXMgSFRNTEVsZW1lbnRbXSkuY29uY2F0KFxuICAgICAgICAuLi5hbGxGaWVsZHMubWFwKChmaWVsZCkgPT5cbiAgICAgICAgICBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtmaWVsZD1cIiR7ZmllbGR9XCJdYCkpIGFzIEhUTUxFbGVtZW50W11cbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgOiBbXTtcblxuICAgIGNvbnN0IGdyb3VwSW5TZWN0aW9uID0gKHRoaXMgYXMgYW55KVtzZWN0aW9uXS5maW5kKFxuICAgICAgKGNvbDogYW55KSA9PlxuICAgICAgICBBcnJheS5pc0FycmF5KGNvbC5jaGlsZHJlbikgJiZcbiAgICAgICAgY29sLmNoaWxkcmVuLnNvbWUoKGNoaWxkOiBhbnkpID0+IGNoaWxkPy5maWVsZCA9PT0gY29sdW1uPy5maWVsZClcbiAgICApO1xuXG4gICAgY29uc3QgZmlsdGVyR3JvdXBJblNlY3Rpb24gPSAodGhpcyBhcyBhbnkpW3NlY3Rpb25dLmZpbmQoXG4gICAgICAoY29sOiBhbnkpID0+XG4gICAgICAgIEFycmF5LmlzQXJyYXkoY29sLmNoaWxkcmVuKSAmJlxuICAgICAgICBjb2wuY2hpbGRyZW4uc29tZSgoY2hpbGQ6IGFueSkgPT4gY2hpbGQ/LmZpZWxkID09PSBjb2x1bW4/LmZpZWxkKVxuICAgICk7XG5cbiAgICBjb25zdCBncm91cEluU2VjdGlvbkluZGV4ID0gKHRoaXMgYXMgYW55KVtzZWN0aW9uXS5maW5kSW5kZXgoXG4gICAgICAoY29sOiBhbnkpID0+IGNvbC5oZWFkZXIgPT09IGdyb3VwSW5TZWN0aW9uLmhlYWRlclxuICAgICk7XG5cbiAgICBjb25zdCBmaXJzdFBvc2l0aW9ucyA9IG5ldyBNYXA8SFRNTEVsZW1lbnQsIG51bWJlcj4oKTtcbiAgICBjZWxscy5mb3JFYWNoKChlbCkgPT4gZmlyc3RQb3NpdGlvbnMuc2V0KGVsLCBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0KSk7XG4gICAgbW92ZUl0ZW1JbkFycmF5KFxuICAgICAgdGhpcy5jb2x1bW5zW2dyb3VwSW5kZXhdPy5jaGlsZHJlbixcbiAgICAgIHZpc2libGVQcmV2SW5kZXgsXG4gICAgICB2aXNpYmxlQ3VyckluZGV4XG4gICAgKTtcblxuICAgIG1vdmVJdGVtSW5BcnJheShcbiAgICAgICh0aGlzIGFzIGFueSlbc2VjdGlvbl0/Lltncm91cEluU2VjdGlvbkluZGV4XS5jaGlsZHJlbixcbiAgICAgIGV2ZW50LnByZXZpb3VzSW5kZXgsXG4gICAgICBldmVudC5jdXJyZW50SW5kZXhcbiAgICApO1xuXG4gICAgLy8gYXdhaXQgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLm5nWm9uZS5vblN0YWJsZSk7XG4gICAgYWxsRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICBjb25zdCB1cGRhdGVkQ2VsbHMgPSBBcnJheS5mcm9tKFxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZmllbGQ9XCIke2ZpZWxkfVwiXWApXG4gICAgICApIGFzIEhUTUxFbGVtZW50W107XG4gICAgICB1cGRhdGVkQ2VsbHMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgY29uc3QgbmV3TGVmdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgICAgIGNvbnN0IG9sZExlZnQgPSBmaXJzdFBvc2l0aW9ucy5nZXQoZWwpITtcbiAgICAgICAgY29uc3QgZGVsdGFYID0gb2xkTGVmdCAtIG5ld0xlZnQ7XG4gICAgICAgIGlmIChkZWx0YVggIT09IDApIHtcbiAgICAgICAgICBlbC5zdHlsZS53aWxsQ2hhbmdlID0gJ3RyYW5zZm9ybSc7XG4gICAgICAgICAgZWwuc3R5bGUudHJhbnNpdGlvbiA9ICdub25lJztcbiAgICAgICAgICBlbC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWCgke2RlbHRhWH1weClgO1xuICAgICAgICAgIHZvaWQgZWwub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIGVsLnN0eWxlLnRyYW5zaXRpb24gPSAndHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSknO1xuICAgICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGVYKDApJztcblxuICAgICAgICAgIGNvbnN0IGhhbmRsZSA9ICgpID0+IHtcbiAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zaXRpb24gPSAnJztcbiAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9ICcnO1xuICAgICAgICAgICAgZWwuc3R5bGUud2lsbENoYW5nZSA9ICcnO1xuICAgICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIGhhbmRsZSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgaGFuZGxlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBhbGxGaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZENlbGxzID0gQXJyYXkuZnJvbShcbiAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZmllbGQ9XCIke2ZpZWxkfVwiXWApXG4gICAgICAgICkgYXMgSFRNTEVsZW1lbnRbXTtcblxuICAgICAgICB1cGRhdGVkQ2VsbHMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICBjb25zdCBvbGRMZWZ0ID0gZmlyc3RQb3NpdGlvbnMuZ2V0KGVsKTtcbiAgICAgICAgICBpZiAob2xkTGVmdCA9PSBudWxsKSByZXR1cm47IC8vIHNhZmV0eSBjaGVja1xuXG4gICAgICAgICAgY29uc3QgbmV3TGVmdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgICAgICAgY29uc3QgZGVsdGFYID0gb2xkTGVmdCAtIG5ld0xlZnQ7XG5cbiAgICAgICAgICBpZiAoZGVsdGFYICE9PSAwKSB7XG4gICAgICAgICAgICBlbC5zdHlsZS53aWxsQ2hhbmdlID0gJ3RyYW5zZm9ybSc7XG4gICAgICAgICAgICBlbC5zdHlsZS50cmFuc2l0aW9uID0gJ25vbmUnO1xuICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVgoJHtkZWx0YVh9cHgpYDtcblxuICAgICAgICAgICAgLy8gRm9yY2UgcmVmbG93XG4gICAgICAgICAgICB2b2lkIGVsLm9mZnNldFdpZHRoO1xuXG4gICAgICAgICAgICBlbC5zdHlsZS50cmFuc2l0aW9uID0gJ3RyYW5zZm9ybSAyNTBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpJztcbiAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGVYKDApJztcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gKCkgPT4ge1xuICAgICAgICAgICAgICBlbC5zdHlsZS50cmFuc2l0aW9uID0gJyc7XG4gICAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9ICcnO1xuICAgICAgICAgICAgICBlbC5zdHlsZS53aWxsQ2hhbmdlID0gJyc7XG4gICAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBoYW5kbGUpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBoYW5kbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIGNvbnNvbGUuZ3JvdXAoJ0dyb3VwOiAnLCBncm91cCk7XG4gIH1cblxuXG4gIG9uQ2hpbGREcm9wbGlzdERyb3BlZChjZGtEcmFnRHJvcGV2ZW50OiBDZGtEcmFnRHJvcDxhbnk+KSB7XG4gICAgdGhpcy51cGRhdGVDb2x1bW5XaWR0aHNBbmRHcm91cHMoKTtcbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgIG5vX29mX3JlY29yZHM6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMik7XG4gIH1cblxuICAvLyBSb3dzIEdyb3VwaW5nIExvZ2ljIEdvZXMgSGVyZVxuXG4gIGdyb3VwRGF0YShkYXRhOiBhbnlbXSwgZ3JvdXBGaWVsZHM6IHN0cmluZ1tdKTogYW55W10ge1xuICAgIGxldCBkYXRhU2V0ID0gc3RydWN0dXJlZENsb25lKGRhdGEpO1xuICAgIGlmICghZ3JvdXBGaWVsZHMubGVuZ3RoKSByZXR1cm4gZGF0YTtcbiAgICBjb25zdCBbY3VycmVudEZpZWxkLCAuLi5yZXN0RmllbGRzXSA9IGdyb3VwRmllbGRzO1xuICAgIGNvbnN0IGdyb3VwZWRNYXAgPSBuZXcgTWFwPHN0cmluZywgYW55W10+KCk7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGFTZXQpIHtcbiAgICAgIGxldCBrZXlWYWx1ZSA9IGN1cnJlbnRGaWVsZC5zcGxpdCgnLicpLnJlZHVjZSgob2JqLCBrKSA9PiBvYmo/LltrXSwgaXRlbSk7XG4gICAgICBsZXQgZ3JvdXBLZXk6IHN0cmluZztcbiAgICAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIGZvciBpc19kZWxldGVkIGZpZWxkXG4gICAgICBpZiAoY3VycmVudEZpZWxkID09PSAnaXNfZGVsZXRlZCcgfHwgY3VycmVudEZpZWxkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2lzX2RlbGV0ZWQnKSkge1xuICAgICAgaWYgKGtleVZhbHVlID09PSB0cnVlIHx8IGtleVZhbHVlID09PSAndHJ1ZScpIHtcbiAgICAgICAgZ3JvdXBLZXkgPSAnQXJjaGl2ZWQnO1xuICAgICAgfSBlbHNlIGlmIChrZXlWYWx1ZSA9PT0gZmFsc2UgfHwga2V5VmFsdWUgPT09ICdmYWxzZScpIHtcbiAgICAgICAgZ3JvdXBLZXkgPSAnVW5hcmNoaXZlZCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBncm91cEtleSA9IFwiX0JsYW5rXCI7XG4gICAgICB9XG4gICAgICAgfVxuICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGtleVZhbHVlKSkge1xuICAgICAgICBpZiAoa2V5VmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgZ3JvdXBLZXkgPSBcIl9CbGFua1wiO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBrZXlWYWx1ZVswXSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgIGdyb3VwS2V5ID0ga2V5VmFsdWVcbiAgICAgICAgICAgIC5tYXAob2JqID0+IChvYmo/LmRlcGFydG1lbnRfbmFtZSB8fCBvYmoucm9sZU5hbWUgfHwgb2JqPy5mdWxsX25hbWUgfHwgIG9iaj8udmFsdWUgfHwgb2JqPy5uYW1lKSA/PyBcIl9CbGFua1wiKVxuICAgICAgICAgICAgLmpvaW4oXCIsXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGdyb3VwS2V5ID0ga2V5VmFsdWVcbiAgICAgICAgICAgIC5tYXAodmFsID0+IHZhbCA/PyBcIl9CbGFua1wiKVxuICAgICAgICAgICAgLmpvaW4oXCIsXCIpO1xuICAgICAgICB9XG4gICAgICB9IFxuICAgICAgIC8vIENoZWNrIGZvciBEYXRlIG9iamVjdCBPUiBkYXRlIHN0cmluZ1xuICAgIGVsc2UgaWYgKGtleVZhbHVlIGluc3RhbmNlb2YgRGF0ZSB8fCAodHlwZW9mIGtleVZhbHVlID09PSAnc3RyaW5nJyAmJiAhaXNOYU4oRGF0ZS5wYXJzZShrZXlWYWx1ZSkpKSkge1xuICAgICAgY29uc3QgZGF0ZU9iaiA9IGtleVZhbHVlIGluc3RhbmNlb2YgRGF0ZSA/IGtleVZhbHVlIDogbmV3IERhdGUoa2V5VmFsdWUpO1xuICAgICAgZ3JvdXBLZXkgPSB0aGlzLmNvbW1vblNldmljZS5mb3JtYXREYXRlVmFsdWUoZGF0ZU9iaiwgdGhpcy5kYXRlRm9ybWF0IHx8ICdkZC9NTS95eXl5Jyk7XG4gICAgfSBcbiAgICAgLy8gIEhhbmRsZSBvYmplY3RzIChsaWtlIHtpZCwgbmFtZSwgdmFsdWV9KVxuICAgIGVsc2UgaWYgKHR5cGVvZiBrZXlWYWx1ZSA9PT0gJ29iamVjdCcgJiYga2V5VmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkoa2V5VmFsdWUpKSB7XG4gICAgICAvLyBUcnkgY29tbW9uIHByb3BlcnR5IG5hbWVzIGZvciBvYmplY3RzXG4gICAgICBncm91cEtleSA9IGtleVZhbHVlLnZhbHVlID8/IFxuICAgICAgICAgICAgICAgICBrZXlWYWx1ZS5uYW1lID8/IFxuICAgICAgICAgICAgICAgICBrZXlWYWx1ZS5pZCA/PyBcbiAgICAgICAgICAgICAgICAga2V5VmFsdWUubGFiZWwgPz8gXG4gICAgICAgICAgICAgICAgIGtleVZhbHVlW09iamVjdC5rZXlzKGtleVZhbHVlKVswXV0gPz8gXG4gICAgICAgICAgICAgICAgIFwiX0JsYW5rXCI7XG4gICAgICBcbiAgICAgIC8vIElmIGl0J3Mgc3RpbGwgYW4gb2JqZWN0IGFmdGVyIGV4dHJhY3Rpb24sIGNvbnZlcnQgdG8gc3RyaW5nXG4gICAgICBpZiAodHlwZW9mIGdyb3VwS2V5ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBncm91cEtleSA9IFwiX0JsYW5rXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBncm91cEtleSA9IHRoaXMudG9UaXRsZUNhc2UoU3RyaW5nKGdyb3VwS2V5KS50cmltKCkpO1xuICAgICAgfVxuICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBncm91cEtleSA9IGtleVZhbHVlID8gdGhpcy50b1RpdGxlQ2FzZShTdHJpbmcoa2V5VmFsdWUpLnRyaW0oKSkgOiBcIl9CbGFua1wiO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBpZiAodHlwZW9mIGtleVZhbHVlID09PSAnc3RyaW5nJyAmJiAhaXNOYU4oRGF0ZS5wYXJzZShrZXlWYWx1ZSkpKSB7XG4gICAgICAvLyAgIGNvbnN0IGRhdGVPYmogPSBuZXcgRGF0ZShrZXlWYWx1ZSk7XG4gICAgICAvLyAgIGdyb3VwS2V5ID0gdGhpcy5jb21tb25TZXZpY2UuZm9ybWF0RGF0ZVZhbHVlKGRhdGVPYmosIHRoaXMuZGF0ZUZvcm1hdCB8fCAnZGQvTU0veXl5eScpO1xuICAgICAgLy8gfVxuXG4gICAgICBpZiAoIWdyb3VwZWRNYXAuaGFzKGdyb3VwS2V5KSkgZ3JvdXBlZE1hcC5zZXQoZ3JvdXBLZXksIFtdKTtcbiAgICAgIGdyb3VwZWRNYXAuZ2V0KGdyb3VwS2V5KSEucHVzaChpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIEFycmF5LmZyb20oZ3JvdXBlZE1hcC5lbnRyaWVzKCkpLm1hcCgoW2dyb3VwVmFsdWUsIGdyb3VwSXRlbXNdKSA9PiAoe1xuICAgICAgaXNHcm91cDogdHJ1ZSxcbiAgICAgIGdyb3VwRmllbGQ6IGN1cnJlbnRGaWVsZCxcbiAgICAgIGdyb3VwVmFsdWUsXG4gICAgICBjaGlsZHJlbjogdGhpcy5ncm91cERhdGEoZ3JvdXBJdGVtcywgcmVzdEZpZWxkcyksXG4gICAgICBpc0V4cGFuZDogZmFsc2UsXG4gICAgfSkpO1xuICB9XG5cbiAgdG9UaXRsZUNhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdHJcbiAgICAgID8udG9Mb3dlckNhc2UoKVxuICAgICAgPy5zcGxpdCgnICcpXG4gICAgICA/Lm1hcCh3b3JkID0+IHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpKVxuICAgICAgPy5qb2luKCcgJyk7XG4gIH1cblxuXG4gIGNvdW50TGVhZlJvd3MoZ3JvdXA6IGFueSk6IG51bWJlciB7XG4gICAgaWYgKCFncm91cC5jaGlsZHJlbiB8fCAhZ3JvdXAuY2hpbGRyZW4ubGVuZ3RoKSByZXR1cm4gMDtcblxuICAgIHJldHVybiBncm91cC5jaGlsZHJlbi5yZWR1Y2UoKGNvdW50OiBudW1iZXIsIGNoaWxkOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBjb3VudCArIChjaGlsZC5pc0dyb3VwID8gdGhpcy5jb3VudExlYWZSb3dzKGNoaWxkKSA6IDEpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgaXNBY3RpdmVGaWx0ZXJPcGVuID0gZmFsc2U7XG4gIHRvZ2dsZUFjdGl2ZUZpbHRlcigpIHtcbiAgICB0aGlzLmlzQWN0aXZlRmlsdGVyT3BlbiA9ICF0aGlzLmlzQWN0aXZlRmlsdGVyT3BlbjtcbiAgfVxuXG4gIHRvZ2dsZUFjdGlvbnModHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGUgPT09IHRoaXMuYWN0aXZlVG9wQnV0dG9uKSB0aGlzLmFjdGl2ZVRvcEJ1dHRvbiA9IHR5cGU7XG4gICAgZWxzZSB0aGlzLmFjdGl2ZVRvcEJ1dHRvbiA9IHR5cGU7XG4gICAgdGhpcy5hY3RpdmVTdWJCdXR0b24gPSAnJztcbiAgICB0aGlzLmlzRmlsdGVyT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGFjdGl2ZVN1YkJ1dHRvbiA9ICcnO1xuICB0b2dnbGVTdWJBY3Rpb25zKHR5cGU6IHN0cmluZykge1xuICAgIHRoaXMuaXNUYWJsZVByZXNldE5vdENoYW5nZWQgPyAgKHRoaXMucHJlc2V0TmFtZSA9ICcnKSA6ICggdGhpcy5wcmVzZXROYW1lID0gIHRoaXMuc3RvcmVQcmVzZXROYW1lKVxuICAgIGlmICh0eXBlID09PSB0aGlzLmFjdGl2ZVN1YkJ1dHRvbikgdGhpcy5hY3RpdmVTdWJCdXR0b24gPSAnJztcbiAgICBlbHNlIHRoaXMuYWN0aXZlU3ViQnV0dG9uID0gdHlwZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICB0b2dnbGVBY3Rpb25zRHJvcGRvd24oKSB7XG4gICAgdGhpcy5zaG93QWN0aW9uc0Ryb3BEb3duID0gIXRoaXMuc2hvd0FjdGlvbnNEcm9wRG93bjtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuXG5cbiAgYXN5bmMgY2hhbmdlVGFibGVMYXlvdXQoZXZlbnQ6IEV2ZW50LCBsYXlvdXRUeXBlOiBzdHJpbmcpIHtcbiAgICBsZXQgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG5cbiAgICBpZiAodGFyZ2V0LmNoZWNrZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZUxheW91dCA9IGxheW91dFR5cGU7XG4gICAgICB0aGlzLnNldFRhYmxlTGF5b3V0KGxheW91dFR5cGUpXG4gICAgICB0aGlzLnVwZGF0ZVZpc2libGVSb3dzKHRoaXMubWFpblNjcm9sbD8ubmF0aXZlRWxlbWVudD8uc2Nyb2xsVG9wKTtcbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaEhlYWRlcnMoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGFibGVGaWx0ZXJWaWV3SWQpIHtcbiAgICAgIHRoaXMuc2F2ZVByZXNldCgnbW91c2VVcCcpO1xuICAgIH1cbiAgICB0aGlzLm9uRm9udENoYW5nZSgpXG4gIH1cblxuICBzZXRUYWJsZUxheW91dChsYXlvdXRUeXBlOiBzdHJpbmcpIHtcbiAgICBpZiAoIWxheW91dFR5cGUpIHJldHVybjtcbiAgICBpZiAobGF5b3V0VHlwZSA9PT0gJ3NtYWxsJykge1xuICAgICAgdGhpcy5yb3dIZWlnaHQgPSAzNjtcbiAgICAgIHRoaXMuaGVhZGVyUm93SGVpZ2h0ID0gNDA7XG4gICAgICB0aGlzLmJvZHlUZXh0Rm9udHNTaXplID0gdGhpcy5ib2R5VGV4dEZvbnRzU2l6ZSB8fCAxMDtcbiAgICAgIHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSA9IHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSB8fCAxMDtcblxuICAgIH0gZWxzZSBpZiAobGF5b3V0VHlwZSA9PT0gJ21lZGl1bScpIHtcbiAgICAgIHRoaXMucm93SGVpZ2h0ID0gNDQ7XG4gICAgICB0aGlzLmhlYWRlclJvd0hlaWdodCA9IDQ0O1xuICAgICAgdGhpcy5ib2R5VGV4dEZvbnRzU2l6ZSA9IHRoaXMuYm9keVRleHRGb250c1NpemUgfHwgMTQ7XG4gICAgICB0aGlzLmhlYWRlclRleHRGb250c1NpemUgPSB0aGlzLmhlYWRlclRleHRGb250c1NpemUgfHwgMTQ7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yb3dIZWlnaHQgPSA2MDtcbiAgICAgIHRoaXMuaGVhZGVyUm93SGVpZ2h0ID0gNTI7XG4gICAgICB0aGlzLmJvZHlUZXh0Rm9udHNTaXplID0gdGhpcy5ib2R5VGV4dEZvbnRzU2l6ZSB8fCAxNjtcbiAgICAgIHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSA9IHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSB8fCAxNjtcbiAgICB9XG4gICAgLy8gdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICB9XG5cbiAgZ2V0IHN0YXJ0SW5kZXhEYXRhKCkge1xuICAgIHJldHVybiAodGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2UgLSAxKSAqIHRoaXMucGFnaW5hdGlvbkNvbmZpZy5saW1pdDtcbiAgfVxuXG4gIGdldCBlbmRJbmRleCgpIHtcbiAgICByZXR1cm4gTWF0aC5taW4odGhpcy5zdGFydEluZGV4ICsgdGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0LCB0aGlzLnBhZ2luYXRpb25Db25maWcudG90YWxSZXN1bHRzKTtcbiAgfVxuXG4gIGdldCB2aXNpYmxlUGFnZXMoKTogKG51bWJlciB8IHN0cmluZylbXSB7XG4gICAgY29uc3QgcGFnZXM6IChudW1iZXIgfCBzdHJpbmcpW10gPSBbXTtcblxuICAgIGlmICh0aGlzLnBhZ2luYXRpb25Db25maWcudG90YWxQYWdlcyA8PSA3KSB7XG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSB0aGlzLnBhZ2luYXRpb25Db25maWcudG90YWxQYWdlczsgaSsrKSB7XG4gICAgICAgIHBhZ2VzLnB1c2goaSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhZ2VzLnB1c2goMSk7XG4gICAgICBpZiAodGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2UgPiAzKSB7XG4gICAgICAgIHBhZ2VzLnB1c2goJy4uLicpO1xuICAgICAgfVxuICAgICAgbGV0IHN0YXJ0ID0gTWF0aC5tYXgoMiwgdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2UgLSAxKTtcbiAgICAgIGxldCBlbmQgPSBNYXRoLm1pbih0aGlzLnBhZ2luYXRpb25Db25maWcudG90YWxQYWdlcyAtIDEsIHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlICsgMSk7XG5cbiAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkrKykge1xuICAgICAgICBwYWdlcy5wdXNoKGkpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2UgPCB0aGlzLnBhZ2luYXRpb25Db25maWcudG90YWxQYWdlcyAtIDIpIHtcbiAgICAgICAgcGFnZXMucHVzaCgnLi4uJyk7XG4gICAgICB9XG4gICAgICBwYWdlcy5wdXNoKHRoaXMucGFnaW5hdGlvbkNvbmZpZy50b3RhbFBhZ2VzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFnZXM7XG4gIH1cblxuXG4gIHNlYXJjaFRleHRGb3JGaWx0ZXJEcm9wRG93biA9ICcnO1xuICB0b2dnbGVDb2x1bW5JbkZpbHRlckRyb3Bkb3duKGNvbDogYW55KSB7XG5cbiAgfVxuXG4gIHJlbW92ZUNvbHVtbkZyb21GaWx0ZXIob3B0aW9uOiBhbnkpIHtcblxuICB9XG5cbiAgaGFuZGxlQmFja3NwYWNlKGV2ZW50OiBFdmVudCkge1xuICAgIC8vIElmIHNlYXJjaCBpcyBlbXB0eSwgcmVtb3ZlIGxhc3QgdGFnXG4gICAgaWYgKCF0aGlzLnNlYXJjaFRleHRGb3JGaWx0ZXJEcm9wRG93biAmJiB0aGlzLnNlbGVjdGVkRmlsdGVyT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGxhc3QgPSB0aGlzLnNlbGVjdGVkRmlsdGVyT3B0aW9uc1t0aGlzLnNlbGVjdGVkRmlsdGVyT3B0aW9ucy5sZW5ndGggLSAxXTtcbiAgICAgIHRoaXMudG9nZ2xlU2VsZWN0aW9uSW5GaWx0ZXIobGFzdCk7XG4gICAgfVxuICB9XG5cbiAgQFZpZXdDaGlsZCgnZmlsdGVyTWVudWVTZWFyY2hJbnB1dCcpIGZpbHRlck1lbnVlU2VhcmNoSW5wdXQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+XG4gIEBWaWV3Q2hpbGQoJ2ZpbHRlck1lbnVlVGV4dGNoSW5wdXQnKSBmaWx0ZXJNZW51ZVRleHRjaElucHV0ITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PlxuXG4gIG9wZW5GaWx0ZXJvblRocmVlRG90c0NsaWNrKGNvbDogYW55KSB7XG4gICAgaWYgKGNvbC50eXBlID09ICdpbWFnZScgfHwgIWNvbD8udHlwZSB8fCAhY29sLmlzX3NlYXJjaF9hYmxlKSByZXR1cm47XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbkZvckZpbHRlciA9IGNvbDtcbiAgICB0aGlzLmlzVGhyZWVEb3RzRmlsdGVyT3BlbiA9IHRydWU7XG4gICAgdGhpcy5hZGRGaWx0ZXJDb2x1bW5JbnB1dCA9ICcnO1xuICAgIGlmIChjb2wudHlwZSA9PT0gJ2Ryb3Bkb3duJyB8fCBjb2wudHlwZSA9PT0gJ2FycmF5Jykge1xuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuY2xlYXIoKTtcbiAgICAgIGNvbnN0IHNhdmVkSWRzID0gY29sPy5xdWVyeT8uX2lkcyB8fCBbXTtcbiAgICAgIHNhdmVkSWRzLmZvckVhY2goKGlkOiBzdHJpbmcpID0+IHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmFkZChpZCkpO1xuXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsdGVyT3B0aW9ucyA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LmNvbHVtbl9kcm9wZG93bl92YWx1ZT8uZmlsdGVyKFxuICAgICAgICAob3B0aW9uOiBhbnkpID0+IHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmhhcyhvcHRpb24/LmlkIHx8IG9wdGlvbj8uX2lkIHx8IG9wdGlvbilcbiAgICAgICk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyTWVudWVTZWFyY2hJbnB1dCkge1xuICAgICAgICAgIHRoaXMuZmlsdGVyTWVudWVTZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDEwMCk7XG4gICAgfSBlbHNlIGlmIChbJ3N0cmluZycsICdudW1iZXInLCAnZGF0ZScsICd0aW1lJ10uaW5jbHVkZXMoY29sLnR5cGUpKSB7XG4gICAgICB0aGlzLmZpcnN0Q29uZGl0aW9uID0gY29sLnF1ZXJ5LmZpcnN0X2NvbmRpdGlvbiA/IGNvbC5xdWVyeS5maXJzdF9jb25kaXRpb24gOiAoKGNvbC50eXBlID09ICdkYXRlJyB8fCBjb2wudHlwZSA9PSAndGltZScgfHwgY29sLnR5cGUgPT0gJ251bWJlcicpID8gJ2VxdWFsJyA6ICdjb250YWluJyk7XG4gICAgICB0aGlzLmZpcnN0VmFsdWUgPSBjb2w/LnF1ZXJ5Py5maXJzdF92YWx1ZSB8fCAnJztcbiAgICAgIHRoaXMuY29uZGl0aW9uID0gY29sPy5xdWVyeT8uY29uZGl0aW9uIHx8ICdub25lJztcbiAgICAgIHRoaXMuc2Vjb25kQ29uZGl0aW9uID0gY29sPy5xdWVyeT8uc2Vjb25kX2NvbmRpdGlvbiA/IGNvbD8ucXVlcnk/LnNlY29uZF9jb25kaXRpb24gOiAoKGNvbC50eXBlID09ICdkYXRlJyB8fCBjb2wudHlwZSA9PSAndGltZScgfHwgY29sLnR5cGUgPT0gJ251bWJlcicpID8gJ2VxdWFsJyA6ICdjb250YWluJyk7XG4gICAgICB0aGlzLnNlY29uZFZhbHVlID0gY29sPy5xdWVyeT8uc2Vjb25kX3ZhbHVlIHx8ICcnO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmKCB0aGlzLmZpbHRlck1lbnVlVGV4dGNoSW5wdXQpe1xuICAgICAgICAgIHRoaXMuZmlsdGVyTWVudWVUZXh0Y2hJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDEwMCk7XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGlzRmlsdGVyT3BlbiA9IGZhbHNlXG4gIHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyOiBhbnk7XG4gIHNob3dGaWx0ZXJzID0gdGhpcy5zaG93U2lkZU1lbnUgPyBmYWxzZSA6IGZhbHNlO1xuXG5cbiAgb3BlbkZpbHRlckZyb21EaXNhYmxlZFNlYXJjaGVkSW5wdXQoY29sOiBhbnkpIHtcbiAgICBpZiAoY29sLnR5cGUgIT09ICdkcm9wZG93bicgJiYgY29sLnR5cGUgIT09ICdhcnJheScgfHwgIWNvbC5pc19zZWFyY2hfYWJsZSkgcmV0dXJuO1xuICAgIHRoaXMub3BlbkZpbHRlcihjb2wpO1xuICB9XG5cbiAgb3BlbkZpbHRlcihjb2w6IGFueSkge1xuICAgIGlmKCFjb2wuaXNfc2VhcmNoX2FibGUpIHJldHVybjtcbiAgICB0aGlzLmFjdGl2ZUZpbHRlckNlbGwgPSBjb2w7XG4gICAgdGhpcy5hY3RpdmVDb2wgPSBudWxsXG4gICAgdGhpcy5pc0ZpbHRlck9wZW4gPSB0cnVlO1xuICAgIHRoaXMuc2VhcmNoVGV4dEZvckZpbHRlckRyb3BEb3duID0gJyc7XG4gICAgdGhpcy5hZGRGaWx0ZXJDb2x1bW5JbnB1dCA9ICcnO1xuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXIgPSBjb2w7XG5cbiAgICBpZiAoY29sLnR5cGUgPT09ICdkcm9wZG93bicgfHwgY29sLnR5cGUgPT0gJ2FycmF5Jykge1xuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuY2xlYXIoKTtcbiAgICAgIGNvbnN0IHNhdmVkSWRzID0gY29sPy5xdWVyeT8uX2lkcyB8fCBbXTtcbiAgICAgIHNhdmVkSWRzLmZvckVhY2goKGlkOiBzdHJpbmcpID0+IHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmFkZChpZCkpO1xuXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsdGVyT3B0aW9ucyA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LmNvbHVtbl9kcm9wZG93bl92YWx1ZT8uZmlsdGVyKFxuICAgICAgICAob3B0aW9uOiBhbnkpID0+IHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmhhcyhvcHRpb24/LmlkIHx8IG9wdGlvbj8uX2lkIHx8IG9wdGlvbilcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChbJ3N0cmluZycsICdudW1iZXInLCAnZGF0ZScsICd0aW1lJ10uaW5jbHVkZXMoY29sLnR5cGUpKSB7XG4gICAgICB0aGlzLmZpcnN0Q29uZGl0aW9uID1cbiAgICAgICAgY29sPy5xdWVyeT8uZmlyc3RfY29uZGl0aW9uID8/XG4gICAgICAgICgoY29sLnR5cGUgPT09ICdudW1iZXInIHx8IGNvbC50eXBlID09PSAndGltZScgfHwgY29sLnR5cGUgPT09ICdkYXRlJylcbiAgICAgICAgICA/ICdlcXVhbCdcbiAgICAgICAgICA6ICdjb250YWluJyk7XG5cbiAgICAgIHRoaXMuZmlyc3RWYWx1ZSA9IGNvbD8ucXVlcnk/LmZpcnN0X3ZhbHVlIHx8ICcnO1xuICAgICAgdGhpcy5jb25kaXRpb24gPSBjb2w/LnF1ZXJ5Py5jb25kaXRpb24gfHwgJ25vbmUnO1xuICAgICAgdGhpcy5zZWNvbmRDb25kaXRpb24gPVxuICAgICAgICAgIGNvbD8ucXVlcnk/LnNlY29uZF9jb25kaXRpb24gPz9cbiAgICAgICAgICAoKGNvbC50eXBlID09PSAnbnVtYmVyJyB8fCBjb2wudHlwZSA9PT0gJ3RpbWUnIHx8IGNvbC50eXBlID09PSAnZGF0ZScpXG4gICAgICAgICAgICA/ICdlcXVhbCdcbiAgICAgICAgICAgIDogJ2NvbnRhaW4nKTtcbiAgICAgIHRoaXMuc2Vjb25kVmFsdWUgPSBjb2w/LnF1ZXJ5Py5zZWNvbmRfdmFsdWUgfHwgJyc7XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG5cbiAgZmlyc3RWYWx1ZTogYW55ID0gJyc7XG4gIGZpcnN0Q29uZGl0aW9uID0gJyc7XG4gIHNlY29uZFZhbHVlOiBhbnkgPSAnJztcbiAgc2Vjb25kQ29uZGl0aW9uOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgY29uZGl0aW9uOiBzdHJpbmcgfCBudWxsID0gJyc7XG5cbiAgcmVzZXRUZXh0RmlsdGVyQ2hhbmdlcygpIHtcbiAgICB0aGlzLmZpcnN0Q29uZGl0aW9uID0gJ2NvbnRhaW4nO1xuICAgIHRoaXMuZmlyc3RWYWx1ZSA9ICcnO1xuICAgIHRoaXMuY29uZGl0aW9uID0gJ25vbmUnO1xuICAgIHRoaXMuc2Vjb25kQ29uZGl0aW9uID0gbnVsbDtcbiAgICB0aGlzLnNlY29uZFZhbHVlID0gJyc7XG4gICAgdGhpcy5pc0ZpbHRlck9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmlzQWN0aXZlRmlsdGVyT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuYWN0aXZlVG9wQnV0dG9uID0gJyc7XG4gIH1cblxuICB0b2dnbGVBbGxWYWx1c1NlbGVjdGlvbkluRHJvcGRvd25GaWx0ZXIoY29sdW1uOiBhbnkpIHtcblxuICB9XG5cblxuICBzZWxlY3RlZEZpbHRlck9wdGlvbnM6IGFueVtdID0gW11cblxuICBjdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICB0b2dnbGVTZWxlY3Rpb25JbkZpbHRlcihvcHRpb246IGFueSkge1xuICAgIGRlYnVnZ2VyXG4gICAgY29uc3QgaWQgPSBvcHRpb24uaWQgfHwgb3B0aW9uLl9pZCB8fCBvcHRpb247XG4gICAgaWYgKHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmhhcyhpZCkpIHtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmRlbGV0ZShpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmFkZChpZCk7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJPcHRpb25zID0gdGhpcy5zZWxlY3RlZENvbHVtbkZvckZpbHRlcj8uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlLmZpbHRlcigob3B0aW9uOiBhbnkpID0+IHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmhhcyhvcHRpb24uaWQgfHwgb3B0aW9uLl9pZCB8fCBvcHRpb24pKVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHJlc2V0RmlsdGVyQ2hhbmdlcygpIHtcbiAgICB0aGlzLmlzRmlsdGVyT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmNsZWFyKCk7XG4gICAgdGhpcy5zZWxlY3RlZEZpbHRlck9wdGlvbnMhLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5pc0FjdGl2ZUZpbHRlck9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmFjdGl2ZVRvcEJ1dHRvbiA9ICcnO1xuICAgIC8vIGNvbnN0IGZpbHRlcmVkQ29sdW1ucyA9IHRoaXMuY29tbW9uU2V2aWNlLmdldEZpbHRlcnNGcm9tQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAgIC8vIGNvbnNvbGUubG9nKFwiRmlsdGVyZWQgQ29sdW1ucyBBcmU6IFwiLCBmaWx0ZXJlZENvbHVtbnMpO1xuICB9XG5cbiAgYXBwbHlEcm9wZG93bkZpbHRlcigpIHtcbiAgICAgICAgIC8vIC0tLSBWQUxJREFUSU9OIEJFRk9SRSBBTllUSElORyAtLS1cbiAgY29uc3QgY29sdW1uc3MgPSB0aGlzLmZpbmRDb2x1bW4odGhpcy5jb2x1bW5zLCB0aGlzLnNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyLmZpZWxkKTtcbiAgaWYgKCFjb2x1bW5zcykgcmV0dXJuO1xuXG4gIGlmIChjb2x1bW5zcy50eXBlID09PSAnZHJvcGRvd24nIHx8IGNvbHVtbnNzLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICBpZiAoIXRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzIHx8IHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLnNpemUgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoWydzdHJpbmcnLCAnbnVtYmVyJywgJ2RhdGUnLCAndGltZSddLmluY2x1ZGVzKGNvbHVtbnNzLnR5cGUpKSB7XG4gICAgY29uc3QgaXNFbXB0eSA9XG4gICAgICB0aGlzLmZpcnN0VmFsdWUgPT09IG51bGwgfHxcbiAgICAgIHRoaXMuZmlyc3RWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLmZpcnN0VmFsdWUgPT09ICcnO1xuXG4gICAgaWYgKGlzRW1wdHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgICB0aGlzLmNsb3NlQWxsRmlsdGVyTWVudXMoKTtcbiAgICB0aGlzLmNsb3NlQWxsRXhwYW5kZWRSb3dzKCk7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5maW5kQ29sdW1uKHRoaXMuY29sdW1ucywgdGhpcy5zZWxlY3RlZENvbHVtbkZvckZpbHRlci5maWVsZCk7XG4gICAgaWYgKGNvbHVtbikge1xuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnZHJvcGRvd24nIHx8IGNvbHVtbi50eXBlID09ICdhcnJheScpIHtcbiAgICAgICAgY29sdW1uLnF1ZXJ5ID0gY29sdW1uLnF1ZXJ5IHx8IHt9O1xuICAgICAgICBjb2x1bW4ucXVlcnkuX2lkcyA9IGNvbHVtbi5xdWVyeS5faWRzIHx8IFtdO1xuXG4gICAgICAgIC8vIFJlbW92ZSBzdGFsZSBJRHMgKG5vdCBwcmVzZW50IGluIFNldClcbiAgICAgICAgY29sdW1uLnF1ZXJ5Ll9pZHMgPSBjb2x1bW4ucXVlcnkuX2lkcy5maWx0ZXIoXG4gICAgICAgICAgKGlkOiBhbnkpID0+IHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmhhcyhpZCkgICAvLyA8LS0gdXNlIC5oYXMoKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIEFkZCBuZXcgb25lcyBpZiBtaXNzaW5nXG4gICAgICAgIHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmZvckVhY2goaWQgPT4ge1xuICAgICAgICAgIGlmICghY29sdW1uLnF1ZXJ5Ll9pZHMuaW5jbHVkZXMoaWQpKSB7XG4gICAgICAgICAgICBjb2x1bW4ucXVlcnkuX2lkcy5wdXNoKGlkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICB9IGVsc2UgaWYgKFsnc3RyaW5nJywgJ251bWJlcicsICdkYXRlJywgJ3RpbWUnXS5pbmNsdWRlcyhjb2x1bW4udHlwZSkpIHtcbiAgICAgICAgY29sdW1uLnF1ZXJ5ID0ge1xuICAgICAgICAgIGZpcnN0X2NvbmRpdGlvbjogdGhpcy5maXJzdENvbmRpdGlvbiB8fCAnY29udGFpbicsXG4gICAgICAgICAgZmlyc3RfdmFsdWU6IHRoaXMuZmlyc3RWYWx1ZSB8fCBudWxsLFxuICAgICAgICAgIGNvbmRpdGlvbjogdGhpcy5zZWNvbmRWYWx1ZSA/IHRoaXMuY29uZGl0aW9uIDogJ25vbmUnLFxuICAgICAgICAgIHNlY29uZF9jb25kaXRpb246IHRoaXMuc2Vjb25kVmFsdWUgPyB0aGlzLnNlY29uZENvbmRpdGlvbiA6IG51bGwsXG4gICAgICAgICAgc2Vjb25kX3ZhbHVlOiB0aGlzLnNlY29uZFZhbHVlIHx8IG51bGwsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyID0ge1xuICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCxcbiAgICAgIHNlYXJjaDogY29sdW1uLnNlYXJjaCxcbiAgICAgIHF1ZXJ5OiBjb2x1bW4ucXVlcnksXG4gICAgICB0eXBlOiBjb2x1bW4udHlwZSxcbiAgICAgIF9pZHM6IGNvbHVtbi5faWRzXG4gICAgfTtcblxuICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSB0aGlzLmZpbHRlcnNDb25maWcuZmluZEluZGV4KGYgPT4gZi5maWVsZCA9PT0gY29sdW1uLmZpZWxkKTtcblxuICAgIGlmIChleGlzdGluZ0luZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5maWx0ZXJzQ29uZmlnW2V4aXN0aW5nSW5kZXhdID0gZmlsdGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlcnNDb25maWcucHVzaChmaWx0ZXIpO1xuICAgIH1cblxuICAgIHRoaXMuaXNGaWx0ZXJPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5hY3RpdmVDb2wgPSBudWxsO1xuICAgIHRoaXMuaXNBY3RpdmVGaWx0ZXJPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5hY3RpdmVUb3BCdXR0b24gPSAnJztcbiAgICB0aGlzLmFjdGl2ZUZpbHRlckNlbGwgPSBudWxsO1xuICAgIHRoaXMuaXNUaHJlZURvdHNGaWx0ZXJPcGVuID0gZmFsc2U7XG4gICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgZmlsdGVyczogdGhpcy5jbGVhbkZpbHRlcmRDb2x1bW5zKCksXG4gICAgICBub19vZl9yZWNvcmRzOiBOdW1iZXIodGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0KSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuXG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbW1vblNldmljZS5tYWluQ29udGFpbmVyTGVmdCA9IHRoaXMuY2VudGVyU2Nyb2xsYWJsZUJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgdGhpcy5maWx0ZXJPcHRpb25zLmVtaXQoZmlsdGVycyk7XG4gICAgfSwgMjAwKTtcbiAgfVxucHJpdmF0ZSBmaW5kQ29sdW1uKGNvbHVtbnM6IGFueVtdLCBmaWVsZDogc3RyaW5nKTogYW55IHtcbiAgZm9yIChjb25zdCBjb2wgb2YgY29sdW1ucykge1xuICAgIGlmIChjb2wuZmllbGQgPT09IGZpZWxkKSByZXR1cm4gY29sO1xuICAgIGlmIChjb2wuY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgY29uc3QgZm91bmQgPSB0aGlzLmZpbmRDb2x1bW4oY29sLmNoaWxkcmVuLCBmaWVsZCk7XG4gICAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG4gIC8vIGFwcGx5RmlsdGVyRnJvbUZpbHRlclJvdyhjb2x1bW46IGFueSkge1xuICAvLyAgIGNvbnN0IGZpbHRlciA9IHtcbiAgLy8gICAgIGZpZWxkOiBjb2x1bW4uZmllbGQsXG4gIC8vICAgICBzZWFyY2g6IGNvbHVtbi5zZWFyY2gsXG4gIC8vICAgICBxdWVyeTogY29sdW1uLnF1ZXJ5LFxuICAvLyAgICAgdHlwZTogY29sdW1uLnR5cGUsXG4gIC8vICAgICBfaWRzOiBjb2x1bW4uX2lkc1xuICAvLyAgIH07XG4gIC8vICAgdGhpcy5maWx0ZXJzQ29uZmlnLnB1c2goZmlsdGVyKTtcbiAgLy8gICB0aGlzLmlzRmlsdGVyT3BlbiA9IGZhbHNlO1xuICAvLyAgIHRoaXMuaXNBY3RpdmVGaWx0ZXJPcGVuID0gZmFsc2U7XG4gIC8vICAgdGhpcy5hY3RpdmVUb3BCdXR0b24gPSAnJztcbiAgLy8gICB0aGlzLmFjdGl2ZUZpbHRlckNlbGwgPSBudWxsO1xuICAvLyAgIHRoaXMuaXNUaHJlZURvdHNGaWx0ZXJPcGVuID0gZmFsc2U7XG4gIC8vICAgY29uc3QgZmlsdGVyZWRDb2x1bW5zID0gdGhpcy5jb21tb25TZXZpY2UuZ2V0RmlsdGVyc0Zyb21Db2x1bW5zKHRoaXMuY29sdW1ucywgdGhpcy5maWx0ZXJzQ29uZmlnKTtcbiAgLy8gICB0aGlzLmZpbHRlck9wdGlvbnMuZW1pdChmaWx0ZXJlZENvbHVtbnMpO1xuICAvLyB9XG5cbiAgaXNGaWx0ZXJBcHBsaWVkT25Db2x1bW4oY29sdW1uOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJzQ29uZmlnPy5zb21lKGNvbCA9PiBjb2wuZmllbGQgPT09IGNvbHVtbi5maWVsZCk7XG4gIH1cblxuICAvLyBTaWRlIEZpbHRlcnMgTG9naWMgaXMgaGVyZVxuXG4gIHRvZ2dsZVNlbGVjdEFsbFNpZGVGaWx0ZXJzKGNvbDogYW55LCBldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCBjaGVja2VkID0gKGV2ZW50Py50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCk/LmNoZWNrZWQ7XG5cbiAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgY29sLnF1ZXJ5Ll9pZHMgPSBjb2w/LmNvbHVtbl9kcm9wZG93bl92YWx1ZT8ubWFwKFxuICAgICAgICAob3B0OiBhbnkpID0+IG9wdC5pZCB8fCBvcHQuX2lkIHx8IG9wdFxuICAgICAgKTtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzID0gbmV3IFNldDxzdHJpbmc+KGNvbC5xdWVyeS5faWRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29sLnF1ZXJ5Ll9pZHMgPSBbXTtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmNsZWFyKCk7XG4gICAgfVxuICB9XG5cblxuICBpc0FsbFNpZGVGaWx0ZXJPcHRpb25zU2VsZWN0ZWQoY29sOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIWNvbD8ucXVlcnk/Ll9pZHMgfHwgIUFycmF5LmlzQXJyYXkoY29sLmNvbHVtbl9kcm9wZG93bl92YWx1ZSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gY29sLnF1ZXJ5Ll9pZHMubGVuZ3RoID09PSBjb2wuY29sdW1uX2Ryb3Bkb3duX3ZhbHVlLmxlbmd0aDtcbiAgfVxuXG4gIG9uT3B0aW9uVG9nZ2xlKGNvbDogYW55LCBvcHRpb246IGFueSkge1xuICAgIGNvbnN0IG9wdGlvbklkID0gb3B0aW9uLmlkIHx8IG9wdGlvbi5faWQgfHwgb3B0aW9uO1xuICAgIGlmICghY29sLnF1ZXJ5Ll9pZHMpIHtcbiAgICAgIGNvbC5xdWVyeS5faWRzID0gW107XG4gICAgfVxuICAgIGNvbnN0IGlkeCA9IGNvbC5xdWVyeS5faWRzLmluZGV4T2Yob3B0aW9uSWQpO1xuICAgIGlmIChpZHggPiAtMSkge1xuICAgICAgY29sLnF1ZXJ5Ll9pZHMuc3BsaWNlKGlkeCwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbC5xdWVyeS5faWRzLnB1c2gob3B0aW9uSWQpO1xuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuXG5cblxuICByZXNldFNpZGVGaWx0ZXIoY29sOiBhbnkpIHtcbiAgICBjb25zdCByZXNldENvbHVtblJlY3Vyc2l2ZWx5ID0gKGNvbHVtbnM6IGFueVtdKTogYm9vbGVhbiA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG4gICAgICAgIGlmIChjb2x1bW4uZmllbGQgPT09IGNvbC5maWVsZCkge1xuICAgICAgICAgIGNvbHVtbi5xdWVyeSA9IHtcbiAgICAgICAgICAgIF9pZHM6IFtdLFxuICAgICAgICAgICAgZmlyc3RfY29uZGl0aW9uOiAnY29udGFpbicsXG4gICAgICAgICAgICBmaXJzdF92YWx1ZTogbnVsbCxcbiAgICAgICAgICAgIGNvbmRpdGlvbjogJ25vbmUnLFxuICAgICAgICAgICAgc2Vjb25kX2NvbmRpdGlvbjogJ2NvbnRhaW4nLFxuICAgICAgICAgICAgc2Vjb25kX3ZhbHVlOiBudWxsXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjb2x1bW4/LmNoaWxkcmVuKSAmJiBjb2x1bW4/LmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICBpZiAocmVzZXRDb2x1bW5SZWN1cnNpdmVseShjb2x1bW4uY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIHJlc2V0Q29sdW1uUmVjdXJzaXZlbHkodGhpcy5jb2x1bW5zKTtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZmlsdGVyc0NvbmZpZy5maW5kSW5kZXgoKGY6IGFueSkgPT4gZi5maWVsZCA9PT0gY29sLmZpZWxkKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmZpbHRlcnNDb25maWcuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmVGaWx0ZXJDZWxsID0gbnVsbDtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgZmlsdGVyczogdGhpcy5jbGVhbkZpbHRlcmRDb2x1bW5zKCksXG4gICAgICBub19vZl9yZWNvcmRzOiBOdW1iZXIodGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0KSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuXG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbW1vblNldmljZS5tYWluQ29udGFpbmVyTGVmdCA9IHRoaXMuY2VudGVyU2Nyb2xsYWJsZUJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgdGhpcy5maWx0ZXJPcHRpb25zLmVtaXQoZmlsdGVycyk7XG4gICAgfSwgMjAwKTtcbiAgfVxuXG5cbiAgY2xlYXJBbGxGaWx0ZXJzKHNob3VsZFVwZGF0ZUNvbmZpZ0xpc3RpbmcgPSBmYWxzZSkge1xuICAgIHRoaXMuZ3JvdXBlZENvbHVtbnMgPSBbXTtcbiAgICB0aGlzLnRhYmxlVmlldz8uZm9yRWFjaCgoZWxlKSA9PiB7IGVsZS5pc190ZW1wID0gZmFsc2UgfSk7XG4gICAgY29uc3QgcmVzZXRBbGxSZWN1cnNpdmVseSA9IChjb2x1bW5zOiBhbnlbXSkgPT4ge1xuICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuICAgICAgICBpZiAoY29sdW1uLnF1ZXJ5KSB7XG4gICAgICAgICAgY29sdW1uLnF1ZXJ5ID0ge1xuICAgICAgICAgICAgX2lkczogW10sXG4gICAgICAgICAgICBmaXJzdF9jb25kaXRpb246ICdjb250YWluJyxcbiAgICAgICAgICAgIGZpcnN0X3ZhbHVlOiBudWxsLFxuICAgICAgICAgICAgY29uZGl0aW9uOiAnbm9uZScsXG4gICAgICAgICAgICBzZWNvbmRfY29uZGl0aW9uOiAnY29udGFpbicsXG4gICAgICAgICAgICBzZWNvbmRfdmFsdWU6IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbHVtbj8uY2hpbGRyZW4pICYmIGNvbHVtbi5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICByZXNldEFsbFJlY3Vyc2l2ZWx5KGNvbHVtbi5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHJlc2V0QWxsUmVjdXJzaXZlbHkodGhpcy5jb2x1bW5zKTtcbiAgICB0aGlzLmFjdGl2ZUZpbHRlckNlbGwgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyc0NvbmZpZyA9IFtdO1xuICAgIHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIC8vIHRoaXMucm93U2hhZGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAvLyB0aGlzLnNob3dWZXJ0aWNhbEJvcmRlciA9IGZhbHNlO1xuICAgIC8vIHRoaXMuZm9udEZhaW1seSA9ICdJbnRlcic7XG4gICAgLy8gdGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplID0gMTQ7XG4gICAgLy8gdGhpcy5zZWxlY3RlZFRhYmxlTGF5b3V0ID0gJ21lZGl1bWQnO1xuICAgIC8vIHRoaXMuYm9keVRleHRGb250c1NpemUgPSAxNDtcbiAgICAvLyB0aGlzLmdsb2JhbFNlYXJjaFRleHQgPSAnJztcbiAgICBjb25zdCBldmVudCA9IHsgZXZlbnRUeXBlOiAncmVzZXQnLCBkYXRhOiB7IHRhYmxlVHlwZTogdGhpcy50YWJsZVR5cGUgfSB9O1xuICAgIGNvbnN0IHNlbmREYXRhID0ge1xuICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgIGZpbHRlcnM6IFtdLFxuICAgICAgbm9fb2ZfcmVjb3JkczogTnVtYmVyKHRoaXMucGFnaW5hdGlvbkNvbmZpZy5saW1pdCksXG4gICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICB9O1xuICAgIGlmKCFzaG91bGRVcGRhdGVDb25maWdMaXN0aW5nKXtcbiAgICAgIHRoaXMuY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZy5lbWl0KHRoaXMuY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbW1vblNldmljZS5tYWluQ29udGFpbmVyTGVmdCA9IHRoaXMuY2VudGVyU2Nyb2xsYWJsZUJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHRoaXMuY29tbW9uU2V2aWNlLm1haW5Db250YWluZXJMZWZ0ID0gdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKTtcbiAgICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZXZlbnQpO1xuICAgICAgIGlmKCFzaG91bGRVcGRhdGVDb25maWdMaXN0aW5nKXtcbiAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucy5lbWl0KGZpbHRlcmVkQ29sdW1ucyk7XG4gICAgICB9XG4gICAgfSwgMzAwKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuXG4gIGFwcGx5U2lkZUZpbHRlcihjb2x1bW46IGFueSkge1xuICAgIGlmICghY29sdW1uLnF1ZXJ5LmZpcnN0X3ZhbHVlICYmICFjb2x1bW4/LnF1ZXJ5Py5faWRzLmxlbmd0aCkgcmV0dXJuO1xuICAgIC8vIENsb3NlIGV4cGFuZGVkIHJvd3MgYmVmb3JlIGFwcGx5aW5nIHNpZGUgZmlsdGVyXG4gIHRoaXMuY2xvc2VBbGxFeHBhbmRlZFJvd3MoKTtcblxuICAgIGNvbnN0IGZpbHRlciA9IHtcbiAgICAgIGZpZWxkOiBjb2x1bW4uZmllbGQsXG4gICAgICBzZWFyY2g6IGNvbHVtbi5zZWFyY2gsXG4gICAgICBxdWVyeTogY29sdW1uLnF1ZXJ5LFxuICAgICAgdHlwZTogY29sdW1uLnR5cGUsXG4gICAgICBfaWRzOiBjb2x1bW4uX2lkcyB8fCBbXVxuICAgIH07XG5cbiAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gdGhpcy5maWx0ZXJzQ29uZmlnLmZpbmRJbmRleChmID0+IGYuZmllbGQgPT09IGNvbHVtbi5maWVsZCk7XG5cbiAgICBpZiAoZXhpc3RpbmdJbmRleCAhPT0gLTEpIHtcbiAgICAgIC8vIFJlcGxhY2UgdGhlIGV4aXN0aW5nIGZpbHRlclxuICAgICAgdGhpcy5maWx0ZXJzQ29uZmlnW2V4aXN0aW5nSW5kZXhdID0gZmlsdGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBZGQgbmV3IGZpbHRlclxuICAgICAgdGhpcy5maWx0ZXJzQ29uZmlnLnB1c2goZmlsdGVyKTtcbiAgICB9XG4gICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgZmlsdGVyczogdGhpcy5jb21tb25TZXZpY2UuZ2V0RmlsdGVyc0Zyb21Db2x1bW5zKHRoaXMuY29sdW1ucywgdGhpcy5maWx0ZXJzQ29uZmlnKS5tYXAoKHsgcXVlcnksIC4uLnJlc3QgfSkgPT4ge1xuICAgICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgICBkZWxldGUgcXVlcnkuX190eXBlbmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgIC4uLnJlc3QsXG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgbm9fb2ZfcmVjb3JkczogTnVtYmVyKHRoaXMucGFnaW5hdGlvbkNvbmZpZy5saW1pdCksXG4gICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICB9O1xuICAgIHRoaXMuY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZy5lbWl0KHRoaXMuY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKTtcblxuICAgIHRoaXMuY29tbW9uU2V2aWNlLm1haW5Db250YWluZXJMZWZ0ID0gdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKTtcbiAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucy5lbWl0KGZpbHRlcmVkQ29sdW1ucyk7XG4gICAgfSwgMjAwKTtcbiAgfVxuXG5cbiAgcmVtb3ZlU2lkZUZpbHRlcihjb2x1bW46IGFueSkge1xuICAgIGlmICghY29sdW1uLnF1ZXJ5LmZpcnN0X3ZhbHVlICYmICFjb2x1bW4/LnF1ZXJ5Py5faWRzLmxlbmd0aCkgcmV0dXJuO1xuICAgIC8vIENsb3NlIGV4cGFuZGVkIHJvd3MgYmVmb3JlIHJlbW92aW5nIGZpbHRlclxuICAgIHRoaXMuY2xvc2VBbGxFeHBhbmRlZFJvd3MoKTtcblxuICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSB0aGlzLmZpbHRlcnNDb25maWcuZmluZEluZGV4KGYgPT4gZi5maWVsZCA9PT0gY29sdW1uLmZpZWxkKTtcbiAgICBpZiAoZXhpc3RpbmdJbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuZmlsdGVyc0NvbmZpZy5zcGxpY2UoZXhpc3RpbmdJbmRleCwgMSk7XG4gICAgfVxuICAgIGNvbnN0IHNlbmREYXRhID0ge1xuICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgIGZpbHRlcnM6IHRoaXMuY29tbW9uU2V2aWNlLmdldEZpbHRlcnNGcm9tQ29sdW1ucyh0aGlzLmNvbHVtbnMsIHRoaXMuZmlsdGVyc0NvbmZpZykubWFwKCh7IHF1ZXJ5LCAuLi5yZXN0IH0pID0+IHtcbiAgICAgICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgICAgZGVsZXRlIHF1ZXJ5Ll9fdHlwZW5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAuLi5yZXN0LFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgICBub19vZl9yZWNvcmRzOiBOdW1iZXIodGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0KSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICAgIHRoaXMuY29tbW9uU2V2aWNlLm1haW5Db250YWluZXJMZWZ0ID0gdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKTtcbiAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucy5lbWl0KGZpbHRlcmVkQ29sdW1ucyk7XG4gICAgfSwgMjAwKTtcbiAgfVxuXG4gIGNvbGxhcHNlQWxsRXhwYW5kZWRDZWxscygpIHtcbiAgICBpZiAodGhpcy5leHBhbmRlZENlbGxzPy5zaXplID4gMCkge1xuICAgICAgdGhpcy5leHBhbmRlZENlbGxzLmNsZWFyKCk7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cblxuXG4gIHRyYWNrQnlGaWVsZChpbmRleDogbnVtYmVyLCBjb2w6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNvbD8uZmllbGQ7XG4gIH1cblxuICBnZXQgYWN0aXZlRmlsdGVyZWRDb2x1bW5zKCk6IGFueVtdIHtcbiAgICBjb25zdCBjb2xsZWN0RmlsdGVyZWQgPSAoY29sdW1uczogYW55W10pOiBhbnlbXSA9PiB7XG4gICAgICBsZXQgcmVzdWx0OiBhbnlbXSA9IFtdO1xuXG4gICAgICBjb2x1bW5zPy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgIGlmIChjb2wuY2hpbGRyZW4gJiYgY29sLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoY29sbGVjdEZpbHRlcmVkKGNvbC5jaGlsZHJlbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNJbkZpbHRlcnNDb25maWcgPSB0aGlzLmZpbHRlcnNDb25maWcuc29tZShmID0+IGYuZmllbGQgPT09IGNvbC5maWVsZCk7XG4gICAgICAgIGlmIChpc0luRmlsdGVyc0NvbmZpZykge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGNvbCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICByZXR1cm4gY29sbGVjdEZpbHRlcmVkKHRoaXMuY29sdW1ucyk7XG4gIH1cblxuXG5cblxuICB0b2dnbGVPcGVuRmlsdGVyKCkge1xuICAgIHRoaXMuc2hvd0ZpbHRlcnMgPSAhdGhpcy5zaG93RmlsdGVycztcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuXG5cblxuICAvLyBDZWxsIEVkaXRpbmcgV29yayBzdGFydCBoZXJlXG5cbiAgZWRpdGluZ0tleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGFjdGl2ZUNlbGw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIHNldEFjdGl2ZUNlbGwocm93OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgdGhpcy5hY3RpdmVDZWxsID0gKChyb3cuaWQgfHwgcm93Ll9pZCkgKyAnLScgKyBjb2x1bW4uZmllbGQpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGlzQWN0aXZlQ2VsbChyb3c6IGFueSwgY29sOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVDZWxsID09PSAoKHJvdy5pZCB8fCByb3cuX2lkKSArICctJyArIGNvbC5maWVsZCk7XG4gIH1cblxuICBAVmlld0NoaWxkKCd0ZXh0QXJlYWRJbnB1dCcpIHRleHRBcmVhZElucHV0ITogRWxlbWVudFJlZjxIVE1MVGV4dEFyZWFFbGVtZW50PjtcbiAgbWVudVJlYWR5ID0gZmFsc2U7XG4gIGVuYWJsZUVkaXQocm93OiBhbnksIGNvbHVtbjogYW55LCBjbGlja2VkRnJvbURldGFpbHNCb3ggPSBmYWxzZSwgY2VsbENvbnRhaW5lcj86IEhUTUxFbGVtZW50KSB7XG4gICAgdGhpcy5lZGl0aW5Ecm9wZG93blNlYXJjaCA9ICcnO1xuICAgIGlmIChyb3c/Ll9fdmlydHVhbEluZGV4ID09IDApIHJldHVybjtcbiAgICBpZiAoIWNvbHVtbj8uaXNfZWRpdGFibGUpIHJldHVybjtcbiAgICB0aGlzLm1lbnVSZWFkeSA9IGZhbHNlO1xuICAgIHRoaXMuZWRpdGluZ0tleSA9ICgocm93LmlkIHx8IHJvdy5faWQpICsgJy0nICsgY29sdW1uLmZpZWxkKTtcblxuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Ryb3Bkb3duJ3x8IGNvbHVtbi50eXBlID09ICdhcnJheScpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBkcm9wZG93bk1lbnUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY2VsbC1lZGl0aW5nLWRyb3Bkb3duLW1lbnUnKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKGRyb3Bkb3duTWVudSkge1xuICAgICAgICAgIGNvbnN0IHJlY3QgPSBkcm9wZG93bk1lbnUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgY29uc3Qgd2luZG93SGVpZ2h0ID0gdGhpcy5kYXRhR3JpZENvbnRhaW5lci5uYXRpdmVFbGVtZW50Py5vZmZzZXRIZWlnaHQ7XG5cbiAgICAgICAgICBpZiAocmVjdC5ib3R0b20gPiB3aW5kb3dIZWlnaHQpIHtcbiAgICAgICAgICAgIGRyb3Bkb3duTWVudS5zdHlsZS50b3AgPSBgLSR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkcm9wZG93bk1lbnUuc3R5bGUudG9wID0gJzEwMCUnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1lbnVSZWFkeSA9IHRydWU7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICghY2xpY2tlZEZyb21EZXRhaWxzQm94ICYmIHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjb2x1bW4uZmllbGQpPy5sZW5ndGggPiA1MCkge1xuICAgICAgdGhpcy50b2dnbGVFeHBhbmRPZkxvbmdDZWxsVGV4dChyb3csIGNvbHVtbiwgdGhpcy5jb2x1bW5zLCBmYWxzZSlcbiAgICB9XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICghY2VsbENvbnRhaW5lcikgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGZpbGVJbnB1dCA9IGNlbGxDb250YWluZXIucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAnaW5wdXRbdHlwZT1cImZpbGVcIl0nXG4gICAgICAgICkgYXMgSFRNTElucHV0RWxlbWVudCB8IG51bGw7XG5cbiAgICAgICAgLy8g4pyFIElmIGZpbGUgaW5wdXQgZXhpc3RzIOKGkiBvcGVuIGZpbGUgZGlhbG9nIGltbWVkaWF0ZWx5XG4gICAgICAgIGlmIChmaWxlSW5wdXQpIHtcbiAgICAgICAgICBmaWxlSW5wdXQuY2xpY2soKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgT3RoZXJ3aXNlLCBub3JtYWwgZm9jdXMgYmVoYXZpb3JcbiAgICAgICAgY29uc3QgZm9jdXNhYmxlID0gY2VsbENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICdpbnB1dDpub3QoW3R5cGU9XCJmaWxlXCJdKSwgdGV4dGFyZWEsIHNlbGVjdCwgW2NvbnRlbnRlZGl0YWJsZT1cInRydWVcIl0nXG4gICAgICAgICkgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gICAgICAgIGlmIChmb2N1c2FibGUpIHtcbiAgICAgICAgICBmb2N1c2FibGUuc3R5bGUuZm9udFNpemUgPSAnMTZweCc7XG4gICAgICAgICAgZm9jdXNhYmxlLmZvY3VzKCk7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmb2N1c2FibGUgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50IHx8XG4gICAgICAgICAgICBmb2N1c2FibGUgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmb2N1c2FibGUuc2VsZWN0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuIGlzVmFsdWVWYWxpZChyb3c6IGFueSwgY29sdW1uOiBhbnksIGNvbnRyb2w6IGFueSl7XG4gICAgcmV0dXJuIHRoaXMudmFsaWRhdGlvbnNTZXJ2aWNlLmlzVmFsdWVWYWxpZChyb3csIGNvbHVtbiwgY29udHJvbD8uY29udHJvbD8udmFsdWUpXG4gIH1cblxuICBkaXNhYmxlRWRpdChyb3c6IGFueSwgY29sdW1uOiBhbnksIGNvbnRyb2w/OiBhbnkpIHtcbiAgICB0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcy5jbGVhcigpO1xuICAgIGlmICghdGhpcy5lZGl0aW5nS2V5KSByZXR1cm5cbiAgICBpZiAoY29udHJvbCAmJiBjb250cm9sLnByaXN0aW5lKSB7XG4gICAgICB0aGlzLmVkaXRpbmdLZXkgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2w/LmNvbnRyb2w/LnZhbHVlO1xuICAgIGNvbnN0IHZpc2libGVSb3cgPSB0aGlzLnZpc2libGVSb3dzLmZpbmQociA9PiAoci5pZCAmJiByLmlkID09PSByb3cuaWQpIHx8IChyLl9pZCAmJiByLl9pZCA9PT0gcm93Ll9pZCkpO1xuICAgIGlmICh2aXNpYmxlUm93KSB7XG4gICAgICB0aGlzLnNldE5lc3RlZEZsYXRWYWx1ZSh2aXNpYmxlUm93LCBjb2x1bW4/LmZpZWxkLCB2YWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IGlzVmFsaWQgPSB0aGlzLnZhbGlkYXRpb25zU2VydmljZS5pc1ZhbHVlVmFsaWQocm93LCBjb2x1bW4sIHZhbHVlKTtcbiAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgIHRoaXMucm9sbEJhY2tDZWxsVmFsdWUocm93LCBjb2x1bW4pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNoZWNrUm93RWRpdEFuZEVtaXRWYWx1ZShyb3csIGNvbHVtbiwgcm93W2NvbHVtbi5maWVsZF0pXG4gICAgdGhpcy5lZGl0aW5nS2V5ID0gbnVsbDtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjb2x1bW4/LmZpZWxkKTtcbiAgICBpZiAoIWN1cnJlbnQgfHwgKGNvbHVtbi50eXBlID09ICdlbWFpbCcgJiYgIXRoaXMudmFsaWRhdGVFbWFpbChjdXJyZW50KSkpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsUm93ID0gdGhpcy5vcmlnaW5hbERhdGFTZXQuZmluZChpdGVtID0+ICgoaXRlbS5pZCAmJiBpdGVtLmlkID09IHJvdy5pZCkgfHwgKGl0ZW0uaWQgJiYgaXRlbS5pZCA9PSByb3cuX2lkKSkpO1xuICAgICAgY29uc3Qgb3JpZ2luYWwgPSB0aGlzLmdldE5lc3RlZFZhbHVlKG9yaWdpbmFsUm93LCBjb2x1bW4/LmZpZWxkKTtcbiAgICAgIHRoaXMuc2V0TmVzdGVkVmFsdWUocm93LCBjb2x1bW4sIG9yaWdpbmFsKTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBvbkltYWdlQ2hhbmdlKGV2ZW50OiBFdmVudCwgcm93OiBhbnksIGNvbDogYW55KTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBpZiAoIWlucHV0LmZpbGVzIHx8ICFpbnB1dC5maWxlcy5sZW5ndGgpIHJldHVybjtcblxuICAgIGNvbnN0IGZpbGUgPSBpbnB1dC5maWxlc1swXTtcblxuICAgIC8vIE9wdGlvbmFsIHZhbGlkYXRpb25cbiAgICBpZiAoIWZpbGUudHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkge1xuICAgICAgaW5wdXQudmFsdWUgPSAnJztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBQcmV2aWV3IChiYXNlNjQpXG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xuICAgICAgdGhpcy5zZXROZXN0ZWRGbGF0VmFsdWUocm93LCBjb2wuZmllbGQsIHJlYWRlci5yZXN1bHQpO1xuICAgICAgdGhpcy5jaGVja1Jvd0VkaXRBbmRFbWl0VmFsdWUocm93LCBjb2wsIHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpKTtcbiAgICB9O1xuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICB9XG5cbiAgc2V0TmVzdGVkRmxhdFZhbHVlKG9iajogYW55LCBwYXRoOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIW9iaiB8fCAhcGF0aCkgcmV0dXJuO1xuXG4gICAgY29uc3Qga2V5cyA9IHBhdGguc3BsaXQoJy4nKTtcbiAgICBjb25zdCBsYXN0S2V5ID0ga2V5cy5wb3AoKSE7XG4gICAgY29uc3QgcGFyZW50ID0ga2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICBpZiAoIWFjY1trZXldKSBhY2Nba2V5XSA9IHt9O1xuICAgICAgcmV0dXJuIGFjY1trZXldO1xuICAgIH0sIG9iaik7XG5cbiAgICBwYXJlbnRbbGFzdEtleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIGVtYWlsUmVnZXggPSAvXlthLXpBLVowLTkuXyUrLV0rQFthLXpBLVowLTkuLV0rXFwuW2EtekEtWl17Mix9JC87XG4gIHZhbGlkYXRlRW1haWwodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVtYWlsUmVnZXgudGVzdCh2YWx1ZSk7XG4gIH1cbiAgYWxsb3dPbmx5TnVtYmVycyhldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGNvbnN0IGNoYXJDb2RlID0gZXZlbnQud2hpY2ggPyBldmVudC53aGljaCA6IGV2ZW50LmtleUNvZGU7XG4gICAgaWYgKGNoYXJDb2RlIDwgNDggfHwgY2hhckNvZGUgPiA1Nykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICBjaGVja1Jvd0VkaXRBbmRFbWl0VmFsdWUocm93OiBhbnksIGNvbHVtbjogYW55LCB2YWx1ZT86IGFueSkge1xuICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsUm93ID0gdGhpcy5vcmlnaW5hbERhdGFTZXQ/LmZpbmQoXG4gICAgICAocjogYW55KSA9PiAoci5pZCAmJiByLmlkID09PSByb3cuaWQpIHx8IChyLl9pZCAmJiByLl9pZCA9PT0gcm93Ll9pZClcbiAgICApO1xuICAgIGlmICghb3JpZ2luYWxSb3cpIHJldHVybjtcbiAgICAvLyBjb25zdCBjbGVhbiA9IChvYmo6IGFueSkgPT4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmopKTtcbiAgICAvLyBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLmdldE5lc3RlZFZhbHVlKHJvdywgY29sdW1uLmZpZWxkKTtcbiAgICAvLyBjb25zdCBvcmlnaW5hbFZhbHVlID0gdGhpcy5nZXROZXN0ZWRWYWx1ZShvcmlnaW5hbFJvdywgY29sdW1uLmZpZWxkKTtcbiAgICBjb25zdCBvcmlnaW5WYWx1ZSA9IHRoaXMuZGF0YVNldD8uZmluZCgocjogYW55KSA9PiAoci5pZCAmJiByLmlkID09PSByb3cuaWQpIHx8IChyLl9pZCAmJiByLl9pZCA9PT0gcm93Ll9pZCkpO1xuICAgIGNvbnN0IGNoYW5nZWRWYWx1ZSA9IG9yaWdpblZhbHVlLnZlcmlmaWVkID09IHZhbHVlO1xuICAgIC8vIGlmIChjaGFuZ2VkVmFsdWUpIHJldHVybjtcbiAgICAvLyBjb25zdCBoYXNDaGFuZ2VkID0gdGhpcy5jb21tb25TZXZpY2UuaGFzRmllbGRDaGFuZ2VkKGN1cnJlbnRWYWx1ZSwgb3JpZ2luYWxWYWx1ZSwgY29sdW1uLnR5cGUpO1xuICAgIC8vIGlmICghaGFzQ2hhbmdlZCkgcmV0dXJuO1xuICAgIC8vIHRoaXMuc2V0TmVzdGVkVmFsdWUob3JpZ2luYWxSb3csIGNvbHVtbiwgdmFsdWUpO1xuXG4gICAgY29uc3Qgc2VuZE9iaiA9IHtcbiAgICAgIGRhdGE6IHsgLi4ub3JpZ2luVmFsdWUgfSxcbiAgICAgIGV2ZW50VHlwZTogJ29uQ2VsbEVkaXQnLFxuICAgICAgdmFsdWU6IGNvbHVtbi50eXBlICE9PSAnYXJyYXknID8gdmFsdWUgOiB1bmRlZmluZWQsXG4gICAgICBjb2x1bW46IGNvbHVtbixcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgICAgdmFsdWVzOiBjb2x1bW4udHlwZSA9PSAnYXJyYXknID8gdmFsdWUgOiB1bmRlZmluZWRcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KHNlbmRPYmopXG4gICAgLy8gfSwgMTAwKTtcbiAgfVxuXG5cbiAgaXNFZGl0aW5nKHJvdzogYW55LCBjb2w6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVkaXRpbmdLZXkgPT09ICgocm93LmlkIHx8IHJvdy5faWQpICsgJy0nICsgY29sLmZpZWxkKTtcbiAgfVxuXG4gIHNldE5lc3RlZFZhbHVlKG9iajogYW55LCBjb2x1bW46IGFueSwgb3B0aW9uOiBhbnksIGNhbGxlZEZyb21JbnB1dCA9IGZhbHNlKTogdm9pZCB7XG4gICAgIGNvbnN0IGlzVmFsaWQgPSB0aGlzLnZhbGlkYXRpb25zU2VydmljZS5pc1ZhbHVlVmFsaWQob2JqLCBjb2x1bW4sIG9wdGlvbik7XG4gICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBWYWxpZGF0aW9uIEVycm9yIG9uIGZpZWxkICR7Y29sdW1ufWApXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHBhdGggPSBjb2x1bW4uZmllbGQ7XG4gICAgY29uc3Qga2V5cyA9IHBhdGguc3BsaXQoJy4nKTtcbiAgICBjb25zdCBsYXN0S2V5ID0ga2V5cy5wb3AoKTtcbiAgICBjb25zdCBwYXJlbnQgPSBrZXlzLnJlZHVjZSgoYWNjOiBhbnksIGtleTogc3RyaW5nIHwgbnVtYmVyKSA9PiBhY2Nba2V5XSA/Pz0ge30sIG9iaik7XG5cbiAgICBpZiAocGFyZW50ICYmIGxhc3RLZXkpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbikpIHtcbiAgICAgICAgY29uc3QgbG9va3VwID0gY29sdW1uLmNvbHVtbl9kcm9wZG93bl92YWx1ZSB8fCBbXTtcbiAgICAgICAgcGFyZW50W2xhc3RLZXldID0gb3B0aW9uLm1hcChzZWxlY3RlZEl0ZW0gPT4ge1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSWQgPSB0eXBlb2Ygc2VsZWN0ZWRJdGVtID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgPyBzZWxlY3RlZEl0ZW0uaWQgPz8gc2VsZWN0ZWRJdGVtLl9pZCA/PyBzZWxlY3RlZEl0ZW0udmFsdWUgPz8gc2VsZWN0ZWRJdGVtLm5hbWUgPz8gc2VsZWN0ZWRJdGVtXG4gICAgICAgICAgICA6IHNlbGVjdGVkSXRlbTtcblxuICAgICAgICAgIGNvbnN0IG1hdGNoID0gbG9va3VwLmZpbmQoKG9wdDogYW55KSA9PlxuICAgICAgICAgICAgKG9wdC5faWQgJiYgb3B0Ll9pZCA9PT0gc2VsZWN0ZWRJZCkgfHwgKG9wdC5pZCAmJiBvcHQuaWQgPT09IHNlbGVjdGVkSWQpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiBtYXRjaCA/IHsgLi4ubWF0Y2ggfSA6IHsgaWQ6IHNlbGVjdGVkSWQsIHZhbHVlOiBzZWxlY3RlZElkIH07XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnb2JqZWN0JyAmJiBvcHRpb24gIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgbG9va3VwID0gY29sdW1uLmNvbHVtbl9kcm9wZG93bl92YWx1ZSB8fCBbXTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJZCA9IG9wdGlvbi5pZCA/PyBvcHRpb24uX2lkID8/IG9wdGlvbi52YWx1ZSA/PyBvcHRpb24ubmFtZSA/PyBvcHRpb247XG4gICAgICAgIGNvbnN0IG1hdGNoID0gbG9va3VwLmZpbmQoKG9wdDogYW55KSA9PiAob3B0Ll9pZCAmJiBvcHQuX2lkID09PSBzZWxlY3RlZElkKSB8fCAob3B0LmlkICYmIG9wdC5pZCA9PT0gc2VsZWN0ZWRJZCkpO1xuXG4gICAgICAgIHBhcmVudFtsYXN0S2V5XSA9IG1hdGNoID8geyAuLi5tYXRjaCB9IDogeyBpZDogc2VsZWN0ZWRJZCwgdmFsdWU6IHNlbGVjdGVkSWQgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmVudFtsYXN0S2V5XSA9IHsgaWQ6IG9wdGlvbiwgdmFsdWU6IG9wdGlvbiB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9yaWdpbmFsRGF0YVNldCAmJiBBcnJheS5pc0FycmF5KHRoaXMub3JpZ2luYWxEYXRhU2V0KSkge1xuICAgICAgY29uc3Qgb3JpZ2luYWxSb3dJbmRleCA9IHRoaXMub3JpZ2luYWxEYXRhU2V0LmZpbmRJbmRleChyID0+XG4gICAgICAgIHIuaWQgPT09IG9iai5pZCB8fCByLl9pZCA9PT0gb2JqLl9pZFxuICAgICAgKTtcbiAgICAgIGlmIChvcmlnaW5hbFJvd0luZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBvcmlnaW5hbFBhcmVudCA9IGtleXMucmVkdWNlKChhY2M6IGFueSwga2V5OiBzdHJpbmcgfCBudW1iZXIpID0+IGFjY1trZXldID8/PSB7fSwgdGhpcy5vcmlnaW5hbERhdGFTZXRbb3JpZ2luYWxSb3dJbmRleF0pO1xuICAgICAgICBpZiAob3JpZ2luYWxQYXJlbnQgJiYgbGFzdEtleSkge1xuICAgICAgICAgIG9yaWdpbmFsUGFyZW50W2xhc3RLZXldID0gcGFyZW50W2xhc3RLZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIDPvuI/ig6MgVXBkYXRlIGN1cnJlbnQgZGF0YXNldFxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBpZiAodGhpcy5kYXRhU2V0ICYmIEFycmF5LmlzQXJyYXkodGhpcy5kYXRhU2V0KSkge1xuICAgICAgY29uc3QgZGF0YXNldFJvd0luZGV4ID0gdGhpcy5kYXRhU2V0LmZpbmRJbmRleChyID0+XG4gICAgICAgIHIuaWQgPT09IG9iai5pZCB8fCByLl9pZCA9PT0gb2JqLl9pZFxuICAgICAgKTtcbiAgICAgIGlmIChkYXRhc2V0Um93SW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IGRhdGFzZXRQYXJlbnQgPSBrZXlzLnJlZHVjZSgoYWNjOiBhbnksIGtleTogc3RyaW5nIHwgbnVtYmVyKSA9PiBhY2Nba2V5XSA/Pz0ge30sIHRoaXMuZGF0YVNldFtkYXRhc2V0Um93SW5kZXhdKTtcbiAgICAgICAgaWYgKGRhdGFzZXRQYXJlbnQgJiYgbGFzdEtleSkge1xuICAgICAgICAgIGRhdGFzZXRQYXJlbnRbbGFzdEtleV0gPSBwYXJlbnRbbGFzdEtleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2FsbGVkRnJvbUlucHV0KSB7XG4gICAgICB0aGlzLmNoZWNrUm93RWRpdEFuZEVtaXRWYWx1ZShvYmosIGNvbHVtbiwgb3B0aW9uKTtcbiAgICB9XG5cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICByb2xsQmFja0NlbGxWYWx1ZShyb3c6IGFueSwgY29sdW1uOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXJvdyB8fCAhY29sdW1uKSByZXR1cm47XG4gICAgY29uc3Qgb3JpZ2luYWxSb3cgPSB0aGlzLnZhbGlkYXRpb25zU2VydmljZS5maW5kT3JpZ2luYWxSb3codGhpcy5vcmlnaW5hbERhdGFTZXQsIHJvdy5pZCA/PyByb3cuX2lkKTtcbiAgICBpZiAoIW9yaWdpbmFsUm93KSByZXR1cm47XG5cbiAgICBjb25zdCBvcmlnaW5hbFZhbHVlID0gdGhpcy5nZXROZXN0ZWRWYWx1ZShvcmlnaW5hbFJvdywgY29sdW1uLmZpZWxkKTtcblxuICAgIGNvbnN0IHZpc2libGVSb3cgPSB0aGlzLnZhbGlkYXRpb25zU2VydmljZS5maW5kT3JpZ2luYWxSb3codGhpcy52aXNpYmxlUm93cywgcm93LmlkID8/IHJvdy5faWQpO1xuICAgIGlmICh2aXNpYmxlUm93KSB2aXNpYmxlUm93W2NvbHVtbi5maWVsZF0gPSBvcmlnaW5hbFZhbHVlO1xuXG4gICAgY29uc3QgZGF0YVJvdyA9IHRoaXMudmFsaWRhdGlvbnNTZXJ2aWNlLmZpbmRPcmlnaW5hbFJvdyh0aGlzLmRhdGFTZXQsIHJvdy5pZCA/PyByb3cuX2lkKTtcbiAgICBpZiAoZGF0YVJvdykgZGF0YVJvd1tjb2x1bW4uZmllbGRdID0gb3JpZ2luYWxWYWx1ZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuXG4gIGFycmF5VGVtcE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBhbnlbXT4oKTtcblxuICBwcml2YXRlIGFycmF5S2V5KHJvdzogYW55LCBjb2w6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3Jvdy5pZCB8fCByb3cuX2lkfV8ke2NvbC5maWVsZH1gO1xuICB9XG5cbiAgZ2V0QXJyYXlPcHRpb25JZChvcHRpb246IGFueSk6IGFueSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdvYmplY3QnICYmIG9wdGlvbiAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG9wdGlvbi5pZCA/PyBvcHRpb24uX2lkO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uO1xuICB9XG5cbiAgZ2V0QXJyYXlPcHRpb25MYWJlbChvcHRpb246IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdvYmplY3QnICYmIG9wdGlvbiAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG9wdGlvbi52YWx1ZSA/PyBvcHRpb24ubmFtZSA/PyAnJztcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyhvcHRpb24pO1xuICB9XG5cbiAgZ2V0QXJyYXlUZW1wKHJvdzogYW55LCBjb2w6IGFueSk6IGFueVtdIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmFycmF5S2V5KHJvdywgY29sKTtcblxuICAgIGlmICghdGhpcy5hcnJheVRlbXBNYXAuaGFzKGtleSkpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKTtcblxuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IEFycmF5LmlzQXJyYXkoY3VycmVudClcbiAgICAgICAgPyBjdXJyZW50Lm1hcCh2ID0+IHRoaXMuZ2V0QXJyYXlPcHRpb25JZCh2KSlcbiAgICAgICAgOiBbXTtcblxuICAgICAgdGhpcy5hcnJheVRlbXBNYXAuc2V0KGtleSwgbm9ybWFsaXplZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXJyYXlUZW1wTWFwLmdldChrZXkpITtcbiAgfVxuXG5cbiAgaXNBcnJheVNlbGVjdGVkKHJvdzogYW55LCBjb2w6IGFueSwgb3B0aW9uOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuZ2V0QXJyYXlPcHRpb25JZChvcHRpb24pO1xuICAgIHJldHVybiB0aGlzLmdldEFycmF5VGVtcChyb3csIGNvbCkuaW5jbHVkZXMoaWQpO1xuICB9XG5cbiAgdG9nZ2xlQXJyYXlUZW1wKHJvdzogYW55LCBjb2w6IGFueSwgb3B0aW9uOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuZ2V0QXJyYXlPcHRpb25JZChvcHRpb24pO1xuICAgIGNvbnN0IGxpc3QgPSB0aGlzLmdldEFycmF5VGVtcChyb3csIGNvbCk7XG5cbiAgICB0aGlzLmFycmF5VGVtcE1hcC5zZXQoXG4gICAgICB0aGlzLmFycmF5S2V5KHJvdywgY29sKSxcbiAgICAgIGxpc3QuaW5jbHVkZXMoaWQpID8gbGlzdC5maWx0ZXIodiA9PiB2ICE9PSBpZCkgOiBbLi4ubGlzdCwgaWRdXG4gICAgKTtcbiAgfVxuXG4gIGNvbW1pdEFycmF5KHJvdzogYW55LCBjb2w6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGlkcyA9IHRoaXMuZ2V0QXJyYXlUZW1wKHJvdywgY29sKTtcbiAgICB0aGlzLnNldE5lc3RlZFZhbHVlKHJvdywgY29sLCBpZHMsIHRydWUpO1xuICB9XG5cblxuICBvbkFycmF5Qmx1cihyb3c6IGFueSwgY29sOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmNvbW1pdEFycmF5KHJvdywgY29sKTtcbiAgfVxuXG5cbiAgY2xlYW51cEFycmF5KHJvdzogYW55LCBjb2w6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuYXJyYXlUZW1wTWFwLmRlbGV0ZSh0aGlzLmFycmF5S2V5KHJvdywgY29sKSk7XG4gICAgdGhpcy5lZGl0aW5nS2V5ID0gbnVsbDtcbiAgfVxuXG5cbiAgZGlzcGxheUFycmF5VmFsdWVzKGlkczogYW55W10sIGNvbD86IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKCFjb2wpIHJldHVybiBpZHMuam9pbignLCAnKTtcblxuICAgIGNvbnN0IG1hcCA9IG5ldyBNYXA8YW55LCBhbnk+KCk7XG4gICAgKGNvbC5jb2x1bW5fZHJvcGRvd25fdmFsdWUgfHwgW10pLmZvckVhY2goKG9wdDogYW55KSA9PiB7XG4gICAgICBtYXAuc2V0KHRoaXMuZ2V0QXJyYXlPcHRpb25JZChvcHQpLCBvcHQpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlkc1xuICAgICAgLm1hcChpZCA9PiBtYXAuZ2V0KGlkKT8udmFsdWUgPz8gbWFwLmdldChpZCk/Lm5hbWUgPz8gaWQpXG4gICAgICAuam9pbignLCAnKTtcbiAgfVxuXG4gIGRpc3BsYXlBcnJheUxhYmVscyhyb3c6IGFueSwgY29sOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGlkcyA9IHRoaXMuZ2V0QXJyYXlUZW1wKHJvdywgY29sKTtcblxuICAgIGlmICghaWRzLmxlbmd0aCkgcmV0dXJuICcnO1xuXG4gICAgY29uc3QgbWFwID0gbmV3IE1hcDxhbnksIGFueT4oKTtcbiAgICAoY29sLmNvbHVtbl9kcm9wZG93bl92YWx1ZSB8fCBbXSkuZm9yRWFjaCgob3B0OiBhbnkpID0+IHtcbiAgICAgIG1hcC5zZXQodGhpcy5nZXRBcnJheU9wdGlvbklkKG9wdCksIG9wdCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaWRzXG4gICAgICAubWFwKGlkID0+IG1hcC5nZXQoaWQpPy52YWx1ZSA/PyBtYXAuZ2V0KGlkKT8ubmFtZSA/PyBpZClcbiAgICAgIC5qb2luKCcsICcpO1xuICB9XG5cblxuXG5cblxuICBnb1RvUGFnZShwYWdlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5wYWdpbmF0aW9uQ29uZmlnPy5wYWdlID09IHBhZ2UpIHJldHVybjtcbiAgICBpZiAocGFnZSA8IDEgfHwgcGFnZSA+IHRoaXMucGFnaW5hdGlvbkNvbmZpZy50b3RhbFBhZ2VzKSByZXR1cm47XG4gICAgdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2UgPSBwYWdlO1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgb2JqOiB7XG4gICAgICAgIGxpbWl0OiB0aGlzLnBhZ2luYXRpb25Db25maWcubGltaXQsXG4gICAgICAgIHBhZ2U6IHBhZ2UsXG4gICAgICB9LFxuICAgICAgZXZlbnRUeXBlOiAncGFnZUNoYW5nZScsXG4gICAgfTtcbiAgICB0aGlzLmNvbW1vblNldmljZS5tYWluQ29udGFpbmVyTGVmdCA9IHRoaXMuY2VudGVyU2Nyb2xsYWJsZUJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZXZlbnQpXG4gIH1cblxuICBvblBhZ2VTaXplQ2hhbmdlKCkge1xuICAgIHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlID0gMTtcbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNvbW1vblNldmljZS5nZXRGaWx0ZXJzRnJvbUNvbHVtbnModGhpcy5jb2x1bW5zLCB0aGlzLmZpbHRlcnNDb25maWcpLm1hcCgoeyBxdWVyeSwgLi4ucmVzdCB9KSA9PiB7XG4gICAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICAgIGRlbGV0ZSBxdWVyeS5fX3R5cGVuYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcXVlcnksXG4gICAgICAgICAgLi4ucmVzdCxcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBub19vZl9yZWNvcmRzOiBOdW1iZXIodGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0KSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICAgIG9iajoge1xuICAgICAgICAgIGxpbWl0OiB0aGlzLnBhZ2luYXRpb25Db25maWcubGltaXQsXG4gICAgICAgICAgcGFnZTogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2UsXG4gICAgICAgIH0sXG4gICAgICAgIGV2ZW50VHlwZTogJ3BhZ2VDaGFuZ2UnLFxuICAgICAgfTtcbiAgICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZXZlbnQpXG4gICAgfSwgNzAwKTtcbiAgfVxuXG4gIGFjdGlvblByZXNldChkYXRhOiBhbnksIHR5cGU6IGFueSkge1xuICAgIGRhdGEuY29sdW1ucyA9IGRhdGE/LmNvbHVtbnM/Lm1hcCgoeyBfaWQsIGZpbHRlclZhbHVlLCBzZWFyY2gsIGNvbHVtbl9kcm9wZG93bl92YWx1ZSwgcXVlcnksIF9fdHlwZW5hbWUsIC4uLnJlc3QgfTogYW55KSA9PiByZXN0KTtcbiAgICB0aGlzLnRhYmxlVmlldz8uZm9yRWFjaCgoZWxlKSA9PiB7IGVsZS5pc190ZW1wID0gZmFsc2UgfSk7XG5cbiAgICB7XG4gICAgICB0aGlzLmJvZHlUZXh0Rm9udHNTaXplID0gZGF0YS5jb25maWcuYm9keVRleHRGb250c1NpemUsXG4gICAgICAgIHRoaXMuZm9udEZhaW1seSA9IGRhdGEuY29uZmlnLmZvbnRGYWltbHksXG4gICAgICAgIGRhdGE/LmZpbHRlcnM/LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGRlbGV0ZSBlbGVtZW50Ll9fdHlwZW5hbWU7XG4gICAgICAgICAgaWYgKGVsZW1lbnQucXVlcnkpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBlbGVtZW50LnF1ZXJ5Ll9fdHlwZW5hbWU7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHR5cGVvZiBlbGVtZW50LnF1ZXJ5ID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgICBlbGVtZW50LnF1ZXJ5ICE9PSBudWxsICYmXG4gICAgICAgICAgICAgIE9iamVjdC5rZXlzKGVsZW1lbnQucXVlcnkpLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGVsZW1lbnQucXVlcnkgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB0aGlzLmhlYWRlclRleHRGb250c1NpemUgPSBkYXRhLmNvbmZpZy5oZWFkZXJUZXh0Rm9udHNTaXplLFxuICAgICAgICB0aGlzLnNlbGVjdGVkVGFibGVMYXlvdXQgPSBkYXRhLmNvbmZpZy5zZWxlY3RlZFRhYmxlTGF5b3V0LFxuICAgICAgICB0aGlzLnNob3dWZXJ0aWNhbEJvcmRlciA9IGRhdGEuY29uZmlnLnNob3dWZXJ0aWNhbEJvcmRlcixcbiAgICAgICAgdGhpcy5jdXJyZW50SWRGb3JVcGRhdGVQcmVzZXQgPSBkYXRhLmlkO1xuICAgICAgdGhpcy5maWx0ZXJzQ29uZmlnID0gZGF0YS5maWx0ZXJzO1xuICAgIH1cbiAgICBkZWxldGUgZGF0YT8uX190eXBlbmFtZTtcbiAgICBkZWxldGUgZGF0YT8uaXNfdGVtcDtcbiAgICBkZWxldGUgZGF0YT8uY29uZmlnLl9fdHlwZW5hbWU7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBvYmo6IHtcbiAgICAgICAgZGF0YTogZGF0YVxuICAgICAgfSxcbiAgICAgIGV2ZW50VHlwZTogdHlwZVxuICAgIH1cbiAgICB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KGV2ZW50KVxuICB9XG5cbiAgY3VycmVudElkRm9yVXBkYXRlUHJlc2V0ID0gJyc7XG4gIGN1cnJldGFUYWJsZVByZXNldEZvclVwZGF0ZTogYW55O1xuICB0ZW1wX3N0YXRlID0ge1xuICAgIGlkOiAnJyxcbiAgICBpc190ZW1wOiBmYWxzZVxuICB9XG4gIGFzeW5jIHNlbGVjdEZpbHRlcihkYXRhOiBhbnkpIHtcbiAgICB0aGlzLnRlbXBfc3RhdGUgPSB7XG4gICAgICBpZDogZGF0YS5pZCxcbiAgICAgIGlzX3RlbXA6IHRydWVcbiAgICB9XG4gICAgdGhpcy50YWJsZVZpZXc/LmZvckVhY2goKGVsZSkgPT4geyBlbGUuaXNfdGVtcCA9IGZhbHNlIH0pO1xuICAgIHRoaXMudGFibGVWaWV3ID0gdGhpcy50YWJsZVZpZXcubWFwKGl0ZW0gPT4gKHtcbiAgICAgIC4uLml0ZW0sXG4gICAgICBpc190ZW1wOiBpdGVtLmlkID09IGRhdGE/LmlkXG4gICAgfSkpO1xuICAgIHRoaXMuY29sdW1ucyA9IGRhdGEuY29sdW1ucztcbiAgICB7XG4gICAgICB0aGlzLmJvZHlUZXh0Rm9udHNTaXplID0gZGF0YS5jb25maWcuYm9keVRleHRGb250c1NpemUsXG4gICAgICAgIHRoaXMuZm9udEZhaW1seSA9IGRhdGEuY29uZmlnLmZvbnRGYWltbHksXG4gICAgICAgIGRhdGEuZmlsdGVycy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBkZWxldGUgZWxlbWVudC5fX3R5cGVuYW1lO1xuXG4gICAgICAgICAgaWYgKGVsZW1lbnQucXVlcnkpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBlbGVtZW50LnF1ZXJ5Ll9fdHlwZW5hbWU7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHR5cGVvZiBlbGVtZW50LnF1ZXJ5ID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgICBlbGVtZW50LnF1ZXJ5ICE9PSBudWxsICYmXG4gICAgICAgICAgICAgIE9iamVjdC5rZXlzKGVsZW1lbnQucXVlcnkpLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGVsZW1lbnQucXVlcnkgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgIC8vIHRoaXMuZ2xvYmFsU2VhcmNoID0gZGF0YS5jb25maWcuYm9keVRleHRGb250c1NpemUsXG4gICAgICB0aGlzLmhlYWRlclRleHRGb250c1NpemUgPSBkYXRhLmNvbmZpZy5oZWFkZXJUZXh0Rm9udHNTaXplLFxuICAgICAgICB0aGlzLnNlbGVjdGVkVGFibGVMYXlvdXQgPSBkYXRhLmNvbmZpZy5zZWxlY3RlZFRhYmxlTGF5b3V0LFxuICAgICAgICB0aGlzLnNob3dWZXJ0aWNhbEJvcmRlciA9IGRhdGEuY29uZmlnLnNob3dWZXJ0aWNhbEJvcmRlcixcbiAgICAgICAgdGhpcy5jdXJyZW50SWRGb3JVcGRhdGVQcmVzZXQgPSBkYXRhLmlkO1xuICAgICAgdGhpcy5jdXJyZXRhVGFibGVQcmVzZXRGb3JVcGRhdGUgPSBzdHJ1Y3R1cmVkQ2xvbmUoZGF0YSk7XG4gICAgICB0aGlzLnByZXNldE5hbWUgPSBkYXRhPy5uYW1lO1xuICAgICAgdGhpcy5wcmVzZXRGaWx0ZXIgPSBkYXRhPy5hY3RpdmVGaWx0ZXJzIHx8IGZhbHNlO1xuICAgICAgdGhpcy5maWx0ZXJzQ29uZmlnID0gZGF0YS5maWx0ZXJzO1xuICAgICAgYXdhaXQgdGhpcy5hcHBseUZpbHRlcm9wdGlvbkxpc3QoKTtcbiAgICAgIHRoaXMucmVmcmVzaEhlYWRlcnMoKTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIGRhdGEuY29sdW1ucyA9IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gICAgICBkZWxldGUgZGF0YT8uX190eXBlbmFtZTtcbiAgICAgIGRlbGV0ZSBkYXRhPy5pc190ZW1wO1xuICAgICAgZGVsZXRlIGRhdGE/LmNvbmZpZy5fX3R5cGVuYW1lO1xuICAgIH1cbiAgICBpZiAoZGF0YT8uaXNfZGVhZnVsdCkge1xuICAgICAgcmV0dXJuIHRoaXMuYWN0aW9uUHJlc2V0KGRhdGEsICdzZXRQcmVzZXQnKVxuICAgIH1cbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIG9iajoge1xuICAgICAgICBkYXRhOiBkYXRhXG4gICAgICB9LFxuICAgICAgZXZlbnRUeXBlOiAnc2VsZWN0J1xuICAgIH1cbiAgICB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KGV2ZW50KVxuICB9XG5cbiAgc2F2ZVByZXNldChjb250cm9sPzogYW55KSB7XG4gICAgaWYgKGNvbnRyb2w/LmludmFsaWQpIHtcbiAgICAgIGNvbnRyb2w/LmNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgbmFtZXMgPSB0aGlzLmdldEZpbHRlckhlYWRlcnModGhpcy5maWx0ZXJzQ29uZmlnLCB0aGlzLmNvbHVtbnMpO1xuICAgIHRoaXMucHJlc2V0RmlsdGVyID0gdGhpcy50YWJsZUZpbHRlclZpZXdJZCA/IHRydWUgOiB0aGlzLnByZXNldEZpbHRlcjtcbiAgICBsZXQgc2VsZWN0ZWREYXRhOiBhbnkgPSB0aGlzLnRhYmxlVmlldy5maW5kKChlbGUpID0+IGVsZS5pZCA9PSB0aGlzLnRhYmxlRmlsdGVyVmlld0lkKTtcbiAgICBsZXQgY29uZmlnID0ge1xuICAgICAgZm9udEZhaW1seTogdGhpcy5mb250RmFpbWx5LFxuICAgICAgYm9keVRleHRGb250c1NpemU6ICsodGhpcy5ib2R5VGV4dEZvbnRzU2l6ZSB8fCAxNCksXG4gICAgICBoZWFkZXJUZXh0Rm9udHNTaXplOiArKHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSB8fCAxNCksXG4gICAgICBvZGRSb3dzQmFja2dyb3VuZENvbG9yOiB0aGlzLnJvd1NoYWRpbmdFbmFibGVkID8gdGhpcy5vZGRSb3dzQmFja2dyb3VuZENvbG9yIDogdW5kZWZpbmVkLFxuICAgICAgc2hvd1ZlcnRpY2FsQm9yZGVyOiB0aGlzLnNob3dWZXJ0aWNhbEJvcmRlcixcbiAgICAgIHNlbGVjdGVkVGFibGVMYXlvdXQ6IHRoaXMuc2VsZWN0ZWRUYWJsZUxheW91dCxcbiAgICAgIGdsb2JhbFNlYXJjaDogdGhpcy50YWJsZVNlYXJjaCxcbiAgICAgIGZpbHRlck5hbWVzOiBuYW1lcyxcbiAgICAgIHRvdGFsQ291bnQ6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy50b3RhbFJlc3VsdHMsXG4gICAgICByb3dTaGFkaW5nRW5hYmxlZDogdGhpcy5yb3dTaGFkaW5nRW5hYmxlZFxuXG4gICAgfVxuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgb2JqOiB7XG4gICAgICAgIG5hbWU6IHRoaXMudGFibGVGaWx0ZXJWaWV3SWQgPyBzZWxlY3RlZERhdGE/Lm5hbWUgOiB0aGlzLnByZXNldE5hbWUsXG4gICAgICAgIGFjdGl2ZUZpbHRlcnM6IHRoaXMucHJlc2V0RmlsdGVyLFxuICAgICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgICBmaWx0ZXJzOiB0aGlzLnByZXNldEZpbHRlclxuICAgICAgICAgID8gdGhpcy5maWx0ZXJzQ29uZmlnPy5tYXAoKHsgX190eXBlbmFtZSwgcXVlcnksIC4uLnJlc3QgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBfX3R5cGVuYW1lOiBfX2lubmVyLCAuLi5jbGVhblF1ZXJ5IH0gPSBxdWVyeSB8fCB7fTtcbiAgICAgICAgICAgIHJldHVybiB7IC4uLnJlc3QsIHF1ZXJ5OiBjbGVhblF1ZXJ5IH07XG4gICAgICAgICAgfSlcbiAgICAgICAgICA6IFtdLFxuICAgICAgICBjb25maWc6IGNvbmZpZyxcbiAgICAgICAgaWQ6IHRoaXMudGFibGVGaWx0ZXJWaWV3SWQgfHwgdGhpcy5jdXJyZXRhVGFibGVQcmVzZXRGb3JVcGRhdGU/LmlkLFxuICAgICAgICBsb2FkaW5nQ2FsbDogY29udHJvbCA9PSAnbW91c2VVcCcgPyBmYWxzZSA6IHRydWUsXG4gICAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlXG4gICAgICB9LFxuICAgICAgZXZlbnRUeXBlOiB0aGlzLnRhYmxlRmlsdGVyVmlld0lkIHx8ICF0aGlzLmlzVGFibGVQcmVzZXROb3RDaGFuZ2VkID8gJ3VwZGF0ZVByZXNldCcgOiAnY3JlYXRlUHJlc2V0J1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlcmVkQ29sdW1ucyA9IHRoaXMuY29tbW9uU2V2aWNlLmdldEZpbHRlcnNGcm9tQ29sdW1ucyh0aGlzLmNvbHVtbnMsIHRoaXMuZmlsdGVyc0NvbmZpZyk7XG4gICAgY29uc3QgY2xlYW5lZEZpbHRlcmVkQ29sdW1ucyA9IGZpbHRlcmVkQ29sdW1ucy5tYXAoKHsgcXVlcnksIC4uLnJlc3QgfSkgPT4ge1xuICAgICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgIGRlbGV0ZSBxdWVyeS5fX3R5cGVuYW1lO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcXVlcnksXG4gICAgICAgIC4uLnJlc3QsXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgZmlsdGVyczogY2xlYW5lZEZpbHRlcmVkQ29sdW1ucyxcbiAgICAgIG5vX29mX3JlY29yZHM6IE51bWJlcih0aGlzLnBhZ2luYXRpb25Db25maWcubGltaXQpLFxuICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KGV2ZW50KVxuICAgIH0sIDUwMCk7XG4gIH1cblxuXG4gIGdldEZpbHRlckhlYWRlcnMoZmlsdGVyczogYW55W10sIGNvbHVtbnM6IGFueVtdKTogc3RyaW5nIHtcbiAgICBjb25zdCBtYXRjaGVkSGVhZGVycyA9IGZpbHRlcnNcbiAgICAgIC5tYXAoZiA9PiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnMuZmluZChjID0+IGMuZmllbGQgPT09IGYuZmllbGQpO1xuICAgICAgICByZXR1cm4gY29sdW1uID8gY29sdW1uLmhlYWRlciA6IG51bGw7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihoZWFkZXIgPT4gISFoZWFkZXIpO1xuXG4gICAgcmV0dXJuIG1hdGNoZWRIZWFkZXJzLmpvaW4oJywgJyk7XG4gIH1cblxuXG4gIHRvZ2dsZVJvd1NoYWRpbmcoKSB7XG4gICAgdGhpcy5vZGRSb3dzQmFja2dyb3VuZENvbG9yID0gdGhpcy5yb3dTaGFkaW5nRW5hYmxlZCA/ICcjZjFmMWYxJyA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLm9uRm9udENoYW5nZSgpO1xuICB9XG5cbiAgdHJhY2tCeVRhYmxlKGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxuICBhY3RpdmVSb3c6IGFueVxuICBhY3RpdmVSb3dDb2w6IGFueTtcblxuICAvLyBUcmFjayBleHBhbmRlZCBjZWxscyBhcyBhIFNldCBvZiB1bmlxdWUgcm93K2NvbCBpZGVudGlmaWVyc1xuXG4gIGdldENlbGxLZXkocm93OiBhbnksIGNvbDogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5nZXRSb3dJZChyb3cpfV8ke2NvbD8uZmllbGR9YDtcbiAgfVxuXG4gIGV4cGFuZGVkQ2VsbHMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICBwcml2YXRlIHpDb3VudGVyID0gMjE7XG5cbiAgc2hvd0RldGFpbHNCb3ggPSBmYWxzZTtcblxuICB0b2dnbGVFeHBhbmRPZkxvbmdDZWxsVGV4dChcbiAgICByb3c6IGFueSxcbiAgICBjb2w6IGFueSxcbiAgICBjb2x1bW5zOiBhbnlbXSxcbiAgICBleHBhbmRXaG9sZVJvdyA9IGZhbHNlXG4gICkge1xuICAgIGNvbnN0IGV4cGFuZENlbGxzID0gKHRhcmdldFJvdzogYW55KSA9PiB7XG4gICAgICBjb2x1bW5zLmZvckVhY2goYyA9PiB7XG4gICAgICAgIGlmIChjLnR5cGUgPT09ICdpbWFnZScpIHJldHVybjtcbiAgICAgICAgY29uc3QgdGV4dCA9IHRhcmdldFJvd1tjLmZpZWxkXTtcblxuICAgICAgICBpZiAoKHR5cGVvZiB0ZXh0ID09PSAnc3RyaW5nJyAmJiB0ZXh0Lmxlbmd0aCA+IDUwKSB8fCAoQXJyYXkuaXNBcnJheSh0ZXh0KSAmJiB0ZXh0Py5sZW5ndGggPiAxKSkge1xuICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Um93SWQodGFyZ2V0Um93KSArICctJyArIGMuZmllbGQ7XG4gICAgICAgICAgdGhpcy56Q291bnRlcisrO1xuICAgICAgICAgIHRoaXMuZXhwYW5kZWRDZWxscy5zZXQoa2V5LCB0aGlzLnpDb3VudGVyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuXG4gICAgY29uc3QgY29sbGVjdEtleXNGb3JSb3cgPSAodGFyZ2V0Um93OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gW107XG4gICAgICBjb2x1bW5zLmZvckVhY2goYyA9PiB7XG4gICAgICAgIGlmIChjLnR5cGUgPT09ICdpbWFnZScpIHJldHVybjtcblxuICAgICAgICBjb25zdCB0ZXh0ID0gdGFyZ2V0Um93W2MuZmllbGRdO1xuICAgICAgICBpZiAodHlwZW9mIHRleHQgPT09ICdzdHJpbmcnICYmIHRleHQubGVuZ3RoID4gNTAgfHwgKEFycmF5LmlzQXJyYXkodGV4dCkgJiYgdGV4dD8ubGVuZ3RoID4gMSkpIHtcbiAgICAgICAgICBrZXlzLnB1c2godGhpcy5nZXRSb3dJZCh0YXJnZXRSb3cpICsgJy0nICsgYy5maWVsZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIGlmIChleHBhbmRXaG9sZVJvdykge1xuICAgICAgbGV0IHJvd0tleXM6IHN0cmluZ1tdID0gW107XG4gICAgICBjb25zdCB0ZXh0ID0gdGhpcy5nZXROZXN0ZWRWYWx1ZShyb3csIGNvbD8uZmllbGQpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGV4dCkgJiYgdGV4dC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJvd0tleXMgPSBjb2xsZWN0S2V5c0ZvclJvdyhyb3cpO1xuICAgICAgICByb3c/LmNoaWxkcmVuPy5mb3JFYWNoKChjaGlsZDogYW55KSA9PiB7XG4gICAgICAgICAgcm93S2V5cy5wdXNoKC4uLmNvbGxlY3RLZXlzRm9yUm93KGNoaWxkKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm93S2V5cyA9IGNvbGxlY3RLZXlzRm9yUm93KHJvdyk7XG4gICAgICB9XG4gICAgICBjb25zdCBhbGxFeHBhbmRlZCA9IHJvd0tleXMuZXZlcnkoayA9PiB0aGlzLmV4cGFuZGVkQ2VsbHMuaGFzKGspKTtcbiAgICAgIHRoaXMuZXhwYW5kZWRDZWxscy5jbGVhcigpO1xuICAgICAgaWYgKCFhbGxFeHBhbmRlZCkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyb3cuY2hpbGRyZW4pICYmIHJvdy5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZXhwYW5kQ2VsbHMocm93KTtcbiAgICAgICAgICByb3c/LmNoaWxkcmVuPy5mb3JFYWNoKChjaGlsZDogYW55KSA9PiBleHBhbmRDZWxscyhjaGlsZCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGV4cGFuZENlbGxzKHJvdyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRSb3dJZChyb3cpICsgJy0nICsgY29sLmZpZWxkO1xuICAgICAgaWYgKGNvbC50eXBlID09PSAnaW1hZ2UnKSByZXR1cm47XG5cbiAgICAgIGlmICghdGhpcy5leHBhbmRlZENlbGxzLmhhcyhrZXkpKSB7XG4gICAgICAgIHRoaXMuZXhwYW5kZWRDZWxscy5jbGVhcigpO1xuICAgICAgICB0aGlzLnpDb3VudGVyKys7XG4gICAgICAgIHRoaXMuZXhwYW5kZWRDZWxscy5zZXQoa2V5LCB0aGlzLnpDb3VudGVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZXhwYW5kZWRDZWxscy5kZWxldGUoa2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNob3dEZXRhaWxzQm94ID0gZmFsc2U7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmlzT3BlblRvVG9wKHJvdylcbiAgICB9LCAwKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBpc09wZW5Ub1RvcChyb3c6IGFueSkge1xuICAgIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZGF0YS1ncmlkLWJvZHknKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgaWYgKCF3cmFwcGVyKSByZXR1cm4gZmFsc2U7XG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbDogYW55KSA9PiB7XG4gICAgICBjb25zdCBpZCA9IChyb3cuaWQgfHwgcm93Ll9pZCkgKyAnLScgKyAoY29sLmlkIHx8IGNvbC5faWQpO1xuICAgICAgY29uc3QgYm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgICAgaWYgKCFib3gpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IGJveFJlY3QgPSBib3guZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCB3cmFwcGVyUmVjdCA9IHdyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBpc092ZXJmbG93aW5nQm90dG9tID0gYm94UmVjdC5ib3R0b20gPiB3cmFwcGVyUmVjdC5ib3R0b207XG4gICAgICBjb25zdCBpc092ZXJmbG93aW5nVG9wID0gYm94UmVjdC50b3AgPCB3cmFwcGVyUmVjdC50b3A7XG4gICAgICBpZiAoaXNPdmVyZmxvd2luZ0JvdHRvbSAmJiAhaXNPdmVyZmxvd2luZ1RvcCkge1xuICAgICAgICBjb25zdCBib3hIZWlnaHQgPSBib3gub2Zmc2V0SGVpZ2h0IHx8IDA7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGJveEhlaWdodCArIDQ7XG4gICAgICAgIGJveC5zdHlsZS50b3AgPSBgJHstb2Zmc2V0fXB4YDtcblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYm94LnN0eWxlLmJvdHRvbSA9IGBhdXRvYDtcbiAgICAgICAgYm94LnN0eWxlLnRvcCA9IGAxMDAlYDtcbiAgICAgICAgYm94LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKDApYDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KVxuICAgIHRoaXMuc2hvd0RldGFpbHNCb3ggPSB0cnVlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG5cblxuXG5cblxuICBpc0V4cGFuZGVkKHJvdzogYW55LCBjb2w6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGVkQ2VsbHMuaGFzKHRoaXMuZ2V0Um93SWQocm93KSArICctJyArIGNvbC5maWVsZCk7XG4gIH1cblxuICBnZXRaSW5kZXgocm93OiBhbnksIGNvbDogYW55KTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5leHBhbmRlZENlbGxzLmdldCh0aGlzLmdldFJvd0lkKHJvdykgKyAnLScgKyBjb2wuZmllbGQpID8/IDIxO1xuICB9XG5cbiAgaXNPdmVyZmxvd2luZyhlbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwpOiBib29sZWFuIHtcbiAgICBpZiAoIWVsZW1lbnQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gZWxlbWVudC5zY3JvbGxXaWR0aCA+IGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIH1cblxuXG4gIC8vIFBpY3R1cmUgY2VsbCBMb2dpY1xuICBjb2xvckNvbWJpbmF0aW9uID0gWydwaWMtY29tYjEnLCAncGljLWNvbWIyJywgJ3BpYy1jb21iNCddO1xuICBnZXREeW5hbWljQ2xhc3MobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hbWUpIHJldHVybiB0aGlzLmNvbG9yQ29tYmluYXRpb25bMF07XG4gICAgY29uc3QgaGFzaCA9IEFycmF5LmZyb20obmFtZSkucmVkdWNlKChhY2MsIGNoYXIpID0+IGFjYyArIGNoYXIuY2hhckNvZGVBdCgwKSwgMCk7XG4gICAgY29uc3QgaW5kZXggPSBoYXNoICUgdGhpcy5jb2xvckNvbWJpbmF0aW9uPy5sZW5ndGg7XG4gICAgcmV0dXJuIHRoaXMuY29sb3JDb21iaW5hdGlvbltpbmRleF07XG4gIH1cblxuICBnZXRJbml0aWFscyhuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghbmFtZSkgcmV0dXJuICdOQSc7XG4gICAgY29uc3QgcGFydHMgPSBuYW1lLnRyaW0oKS5zcGxpdCgnICcpO1xuICAgIHJldHVybiAocGFydHNbMF1bMF0gKyAocGFydHNbMV0/LlswXSB8fCAnJykpLnRvVXBwZXJDYXNlKCk7XG4gIH1cblxuXG4gIGFjdGlvbkhpZGU6IGJvb2xlYW4gPSB0cnVlO1xuICB4UG9zID0gMDtcbiAgeVBvcyA9IDA7XG4gIGlzVmlzaWJsZSA9IGZhbHNlO1xuICBkZWF0aWxzTGlzdDogYW55O1xuICBvcGVuRXhwZW5kSW5kZXg6IGFueTtcbiAgcG9zaXRpb25lZFlldCA9IGZhbHNlO1xuXG4gb25SaWdodENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCB8IGFueSwgZGVhdGlsc0xpc3Q6IGFueSk6IGJvb2xlYW4ge1xuICAgICAvLyBTdG9yZSBvcmlnaW5hbCBhY3Rpb25zIG9uIGZpcnN0IGluaXRpYWxpemF0aW9uIGlmIG5vdCBhbHJlYWR5IHN0b3JlZFxuICBpZiAodGhpcy5vcmlnaW5hbEFjdGlvbnM/Lmxlbmd0aCA9PT0gMCAmJiB0aGlzLnZhbGlkYXRlSWNvbikge1xuICAgIHRoaXMub3JpZ2luYWxBY3Rpb25zID0gWy4uLnRoaXMuYWN0aW9uc107IC8vIERlZXAgY29weSB0byBwcmVzZXJ2ZSBvcmlnaW5hbFxuICB9XG4gICAgdGhpcy5hY3Rpb25zID0gdGhpcy52YWxpZGF0ZUljb24gXG4gICAgICA/IHRoaXMuZ2V0VmFsaWRBY3Rpb25zKGRlYXRpbHNMaXN0KSBcbiAgICAgIDogKGRlYXRpbHNMaXN0Py5hY3Rpb25zPy5sZW5ndGggPyBkZWF0aWxzTGlzdC5hY3Rpb25zIDogdGhpcy5hY3Rpb25zKTtcblxuICAgIGlmICghKGV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudCkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmIChkZWF0aWxzTGlzdC5fX3ZpcnR1YWxJbmRleCA9PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBcbiAgICAvLyBHZXQgdGhlIGluaXRpYWwgY2xpY2sgcG9zaXRpb25cbiAgICBjb25zdCBjbGlja1ggPSAoZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50KSA/IGV2ZW50LmNsaWVudFggOiBldmVudC50b3VjaGVzWzBdLmNsaWVudFg7XG4gICAgY29uc3QgY2xpY2tZID0gKGV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudCkgPyBldmVudC5jbGllbnRZIDogZXZlbnQudG91Y2hlc1swXS5jbGllbnRZO1xuICAgIFxuICAgIHRoaXMueFBvcyA9IGNsaWNrWDtcbiAgICB0aGlzLnlQb3MgPSBjbGlja1k7XG4gICAgdGhpcy5pc1Zpc2libGUgPSB0cnVlO1xuICAgIHRoaXMucG9zaXRpb25lZFlldCA9IGZhbHNlO1xuICAgIHRoaXMuZGVhdGlsc0xpc3QgPSBkZWF0aWxzTGlzdDtcbiAgICBcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IG1lbnVFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNvbnRleHQtbWVudScpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgaWYgKCFtZW51RWxlbWVudCkgcmV0dXJuO1xuICAgICAgY29uc3QgbWVudVdpZHRoID0gbWVudUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICBjb25zdCBtZW51SGVpZ2h0ID0gbWVudUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgICAgY29uc3Qgdmlld3BvcnRXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgICAgXG4gICAgICAvLyBHZXQgdGFibGUgY29udGFpbmVyIGJvdW5kc1xuICAgICAgY29uc3QgdGFibGVSZWN0ID0gdGhpcy5kYXRhR3JpZENvbnRhaW5lci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgdGFibGVUb3AgPSB0YWJsZVJlY3QudG9wO1xuICAgICAgY29uc3QgdGFibGVCb3R0b20gPSB0YWJsZVJlY3QuYm90dG9tO1xuICAgICAgY29uc3QgdGFibGVIZWlnaHQgPSB0YWJsZVJlY3QuaGVpZ2h0O1xuICAgICAgXG4gICAgICBsZXQgeCA9IGNsaWNrWDtcbiAgICAgIGxldCB5ID0gY2xpY2tZO1xuICAgICAgXG4gICAgICAvLyBBZGp1c3QgWCBwb3NpdGlvbiBpZiBtZW51IG92ZXJmbG93cyBob3Jpem9udGFsbHlcbiAgICAgIGlmICh4ICsgbWVudVdpZHRoID4gdmlld3BvcnRXaWR0aCkge1xuICAgICAgICB4ID0gdmlld3BvcnRXaWR0aCAtIG1lbnVXaWR0aCAtIDEwO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBBZGp1c3QgWSBwb3NpdGlvbiBpZiBtZW51IG92ZXJmbG93cyB0YWJsZSB2ZXJ0aWNhbGx5XG4gICAgICAvLyBDaGVjayBpZiBtZW51IHdvdWxkIGdvIGJlbG93IHRhYmxlIGJvdHRvbVxuICAgICAgaWYgKHkgKyBtZW51SGVpZ2h0ID4gdGFibGVCb3R0b20pIHtcbiAgICAgICAgLy8gVHJ5IHRvIHBvc2l0aW9uIGFib3ZlIGNsaWNrIHBvaW50XG4gICAgICAgIHkgPSBjbGlja1kgLSBtZW51SGVpZ2h0O1xuICAgICAgICBcbiAgICAgICAgLy8gSWYgdGhhdCBnb2VzIGFib3ZlIHRhYmxlIHRvcCwgcG9zaXRpb24gYXQgdGFibGUgYm90dG9tXG4gICAgICAgIGlmICh5IDwgdGFibGVUb3ApIHtcbiAgICAgICAgICB5ID0gdGFibGVCb3R0b20gLSBtZW51SGVpZ2h0IC0gMTA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRW5zdXJlIG1lbnUgZG9lc24ndCBnbyBhYm92ZSB0YWJsZSB0b3BcbiAgICAgIGlmICh5IDwgdGFibGVUb3ApIHtcbiAgICAgICAgeSA9IHRhYmxlVG9wICsgMTA7XG4gICAgICB9XG4gICAgICB0aGlzLnhQb3MgPSB4O1xuICAgICAgdGhpcy55UG9zID0geTtcbiAgICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTtcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucG9zaXRpb25lZFlldCA9IHRydWU7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG4gICAgXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHJldHVybiBmYWxzZTtcbn1cblxuICBvbkFjdGlvbkNsaWNrKGFjdGlvbjogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2VuZE9iaiA9IHtcbiAgICAgIG9iajogdGhpcy5kZWF0aWxzTGlzdCxcbiAgICAgIGV2ZW50VHlwZTogYWN0aW9uLFxuICAgIH07XG4gICAgdGhpcy5wb3NpdGlvbmVkWWV0ID0gZmFsc2U7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoc2VuZE9iaik7XG4gIH1cblxuXG4gIG9uVmVyaWZ5Q2xpY2sodHlwZTogc3RyaW5nKSB7XG4gICAgY29uc3QgdGV4dCA9IHR5cGU/LnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHRleHQgPT0gJ2FyY2hpdmUnIHx8IHRleHQgPT0gJ3VuYXJjaGl2ZSdcbiAgICAgIC8vIHx8IHRleHQgPT0gJ2RlbGV0ZScgfHwgdGV4dCA9PSAncmVzdG9yZScgfHwgdGV4dCA9PSAncmVtb3ZlJyB8fCB0ZXh0ID09ICdkZWFjdGl2YXRlJyB8fCB0ZXh0ID09ICdhY3RpdmF0ZScgfHwgdGV4dCA9PSAnYmxvY2snIHx8IHRleHQgPT0gJ3VuYmxvY2snXG4gICAgICAvLyB8fCB0ZXh0ID09ICdlbmFibGUnIHx8IHRleHQgPT0gJ2Rpc2FibGUnIHx8IHRleHQgPT0gJ2FwcHJvdmUnIHx8IHRleHQgPT0gJ3JlamVjdCcgfHwgdGV4dCA9PSAncHVibGlzaCcgfHwgdGV4dCA9PSAndW5wdWJsaXNoJyB8fCB0ZXh0ID09ICdsb2NrJyB8fCB0ZXh0ID09ICd1bmxvY2snIHx8IHRleHQgPT0gJ2NvbXBsZXRlJyB8fCB0ZXh0ID09ICdpbmNvbXBsZXRlJ1xuICAgICAgLy8gfHwgdGV4dCA9PSAnc2VuZCB0byByZXZpZXcnIHx8IHRleHQgPT0gJ21hcmsgYXMgcGFpZCcgfHwgdGV4dCA9PSAnbWFyayBhcyB1bnBhaWQnIHx8IHRleHQgPT0gJ2Z1bGZpbGwnIHx8IHRleHQgPT0gJ3VuZnVsZmlsbCcgfHwgdGV4dCA9PSAncmVmdW5kJyB8fCB0ZXh0ID09ICdjYW5jZWwnIHx8IHRleHQgPT0gJ3Jlc2VuZCcgfHwgdGV4dCA9PSAnY2hhcmdlYmFjaydcbiAgICAgIC8vIHx8IHRleHQgPT0gJ2Rpc3B1dGUnIHx8IHRleHQgPT0gJ2VzY2FsYXRlJyB8fCB0ZXh0ID09ICdkZWVzY2FsYXRlJyB8fCB0ZXh0ID09ICdmbGFnJyB8fCB0ZXh0ID09ICd1bmZsYWcnIHx8IHRleHQgPT0gJ3ZlcmlmeScgfHwgdGV4dCA9PSAndW52ZXJpZnknIHx8IHRleHQgPT0gJ3N1YnNjcmliZScgfHwgdGV4dCA9PSAndW5zdWJzY3JpYmUnIHx8IHRleHQgPT0gJ2ZvbGxvdycgfHwgdGV4dCA9PSAndW5mb2xsb3cnXG4gICAgICAvLyB8fCB0ZXh0ID09ICdsaWtlJyB8fCB0ZXh0ID09ICd1bmxpa2UnIHx8IHRleHQgPT0gJ3NoYXJlJyB8fCB0ZXh0ID09ICd1bnNoYXJlJyB8fCB0ZXh0ID09ICdjb21tZW50JyB8fCB0ZXh0ID09ICd1bmNvbW1lbnQnIHx8IHRleHQgPT0gJ3RhZycgfHwgdGV4dCA9PSAndW50YWcnIHx8IHRleHQgPT0gJ2Fzc2lnbicgfHwgdGV4dCA9PSAndW5hc3NpZ24nIHx8IHRleHQgPT0gJ2xpbmsnIHx8IHRleHQgPT0gJ3VubGluaydcbiAgICAgIC8vIHx8IHRleHQgPT0gJ3N5bmMnIHx8IHRleHQgPT0gJ3Vuc3luYycgfHwgdGV4dCA9PSAnYmFja3VwJyB8fCB0ZXh0ID09ICdyZXN0b3JlIGJhY2t1cCcgfHwgdGV4dCA9PSAnbWlncmF0ZScgfHwgdGV4dCA9PSAnaW1wb3J0JyB8fCB0ZXh0ID09ICdleHBvcnQnIHx8IHRleHQgPT0gJ2dlbmVyYXRlIHJlcG9ydCcgfHwgdGV4dCA9PSAnZG93bmxvYWQgcmVwb3J0JyB8fCB0ZXh0ID09ICd2aWV3IGRldGFpbHMnXG4gICAgICAvLyB8fCB0ZXh0ID09ICdlZGl0IGRldGFpbHMnIHx8IHRleHQgPT0gJ3VwZGF0ZSBkZXRhaWxzJyB8fCB0ZXh0ID09ICdjaGFuZ2Ugc3RhdHVzJyB8fCB0ZXh0ID09ICdyZXNldCBwYXNzd29yZCcgfHwgdGV4dCA9PSAnc2VuZCBub3RpZmljYXRpb24nIHx8IHRleHQgPT0gJ3NjaGVkdWxlJyB8fCB0ZXh0ID09ICdyZXNjaGVkdWxlJyB8fCB0ZXh0ID09ICdjYW5jZWwgc2NoZWR1bGUnIHx8IHRleHQgPT0gJ3N0YXJ0JyB8fCB0ZXh0ID09ICdzdG9wJyB8fCB0ZXh0ID09ICdwYXVzZScgfHwgdGV4dCA9PSAncmVzdW1lJ1xuICAgICkge1xuICAgICAgLy8gdGhpcy5jbGVhclNlbGVjdGlvblN0YXRlKHRoaXMudGFibGVUeXBlKTtcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRSb3dzLmNsZWFyKCk7XG4gICAgfVxuICAgIGNvbnN0IGlkc0FycmF5ID0gQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkUm93cyk7XG4gICAgY29uc3QgYXJyYXlPZk9iamVjdHNXaXRoVGFibGVUeXBlOiBhbnlbXSA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRSb3dzLmZvckVhY2goaWQgPT4ge1xuICAgICAgYXJyYXlPZk9iamVjdHNXaXRoVGFibGVUeXBlLnB1c2goe1xuICAgICAgICBpZDogaWQsXG4gICAgICAgIGxpc3RpbmdUeXBlOiB0aGlzLmxpc3RpbmdUeXBlLFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgY29uc3Qgc2VuZE9iaiA9IHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgb2JqOiBpZHNBcnJheSxcbiAgICAgICAgdGFibGVOYW1lOiB0aGlzLnRhYmxlTmFtZSxcbiAgICAgICAgbGlzdGluZ1R5cGU6IHRoaXMubGlzdGluZ1R5cGUsXG4gICAgICB9LFxuICAgICAgZXZlbnRUeXBlOiB0eXBlLFxuICAgIH07XG4gICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChzZW5kT2JqKVxuICB9XG5cblxuICBnZXRDZWxsQ2xhc3Nlcyhjb2x1bW46IGFueSwgdmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29tbW9uU2V2aWNlLmdldENlbGxDbGFzc2VzKGNvbHVtbiwgdmFsdWUpO1xuICB9XG5cblxuICByZW1vdmVDb2x1bW5GaWx0ZXJGcm9tQ29sdW1uKGNvbHVtbjogYW55KSB7XG4gICAgaWYgKCFjb2x1bW4pIHJldHVyblxuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Ryb3Bkb3duJ3x8IGNvbHVtbi50eXBlID09ICdhcnJheScpIHtcbiAgICAgIGNvbHVtbi5xdWVyeS5faWRzID0gW107XG4gICAgfSBlbHNlIGlmIChbJ3N0cmluZycsICdudW1iZXInLCAnZGF0ZSddLmluY2x1ZGVzKGNvbHVtbi50eXBlKSkge1xuICAgICAgY29sdW1uLnF1ZXJ5ID0ge1xuICAgICAgICBmaXJzdF9jb25kaXRpb246ICdjb250YWluJyxcbiAgICAgICAgZmlyc3RfdmFsdWU6IG51bGwsXG4gICAgICAgIGNvbmRpdGlvbjogJ25vbmUnLFxuICAgICAgICBzZWNvbmRfY29uZGl0aW9uOiBudWxsLFxuICAgICAgICBzZWNvbmRfdmFsdWU6IG51bGwsXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZpbHRlcnNDb25maWcuZmluZEluZGV4KChmOiBhbnkpID0+IGYuZmllbGQgPT09IGNvbHVtbi5maWVsZCk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5maWx0ZXJzQ29uZmlnLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyZWRDb2x1bW5zID0gdGhpcy5jb21tb25TZXZpY2UuZ2V0RmlsdGVyc0Zyb21Db2x1bW5zKHRoaXMuY29sdW1ucywgdGhpcy5maWx0ZXJzQ29uZmlnKTtcbiAgICBjb25zdCBjbGVhbmVkRmlsdGVyZWRDb2x1bW5zID0gZmlsdGVyZWRDb2x1bW5zLm1hcCgoeyBxdWVyeSwgLi4ucmVzdCB9KSA9PiB7XG4gICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgZGVsZXRlIHF1ZXJ5Ll9fdHlwZW5hbWU7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBxdWVyeSxcbiAgICAgICAgLi4ucmVzdCxcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHNlbmREYXRhID0ge1xuICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgIGZpbHRlcnM6IGNsZWFuZWRGaWx0ZXJlZENvbHVtbnMsXG4gICAgICBub19vZl9yZWNvcmRzOiBOdW1iZXIodGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0KSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgZmlsdGVyZWRDb2x1bW5zID0gY2xlYW5lZEZpbHRlcmVkQ29sdW1ucztcbiAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucy5lbWl0KGZpbHRlcmVkQ29sdW1ucyk7XG4gICAgfSwgMjAwKTtcbiAgfVxuXG4gIG9uU2lkZU1lbnVDb2x1bW5zVmlzaWJpbGl0eUNoYW5nZSgpIHtcbiAgICB0aGlzLnJlZnJlc2hIZWFkZXJzKCk7XG4gICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgZmlsdGVyczogdGhpcy5jb21tb25TZXZpY2UuZ2V0RmlsdGVyc0Zyb21Db2x1bW5zKHRoaXMuY29sdW1ucywgdGhpcy5maWx0ZXJzQ29uZmlnKS5tYXAoKHsgcXVlcnksIC4uLnJlc3QgfSkgPT4ge1xuICAgICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgICBkZWxldGUgcXVlcnkuX190eXBlbmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgIC4uLnJlc3QsXG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgbm9fb2ZfcmVjb3JkczogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2VTaXplLFxuICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gIH1cblxuICBjbGVhbkZpbHRlcmRDb2x1bW5zKCkge1xuICAgIGNvbnN0IGZpbHRlcmVkQ29sdW1ucyA9IHRoaXMuY29tbW9uU2V2aWNlLmdldEZpbHRlcnNGcm9tQ29sdW1ucyh0aGlzLmNvbHVtbnMsIHRoaXMuZmlsdGVyc0NvbmZpZyk7XG4gICAgY29uc3QgY2xlYW5lZEZpbHRlcmVkQ29sdW1ucyA9IGZpbHRlcmVkQ29sdW1ucy5tYXAoKHsgcXVlcnksIC4uLnJlc3QgfSkgPT4ge1xuICAgICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgIGRlbGV0ZSBxdWVyeS5fX3R5cGVuYW1lO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcXVlcnksXG4gICAgICAgIC4uLnJlc3QsXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNsZWFuZWRGaWx0ZXJlZENvbHVtbnM7XG4gIH1cblxuICBkb3dubG9hZENzdih0eXBlOiAnY3N2JyB8ICd4bHN4Jykge1xuICAgIGNvbnN0IGNvbmZpZzogYW55ID0ge1xuICAgICAgaGVhZGVyQmdDb2xvcjogdGhpcy5oZWFkZXJCYWNrZ3JvdW5kQ29sb3IsXG4gICAgICBoZWFkZXJUZXh0Q29sb3I6IHRoaXMuaGVhZGVyVGV4dENvbG9yLFxuICAgICAgYm9keVRleHRDb2xvcjogJyMwMDAwMDAnLFxuICAgICAgZm9udEZhbWlseTogdGhpcy5mb250RmFpbWx5LFxuICAgICAgZm9udFdlaWdodDogJ25vcm1hbCcsXG4gICAgICB6b29tU2NhbGU6IDEyNSxcbiAgICAgIGhlYWRlclJvd0hlaWdodDogMzBcbiAgICB9XG4gICAgaWYgKHRoaXMuZW5hYmxlRXhwb3J0KSB7XG4gICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgY29uc3QgZGQgPSBTdHJpbmcobm93LmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgIGNvbnN0IG1tID0gU3RyaW5nKG5vdy5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgIGNvbnN0IHl5eXkgPSBub3cuZ2V0RnVsbFllYXIoKTtcbiAgICAgIGNvbnN0IEhIID0gU3RyaW5nKG5vdy5nZXRIb3VycygpKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgY29uc3QgTU0gPSBTdHJpbmcobm93LmdldE1pbnV0ZXMoKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZCA9XG4gICAgICAgIGAke3RoaXMudGFibGVUeXBlfV8ke2RkfS0ke21tfS0ke3l5eXl9XyR7SEh9LSR7TU19YDtcblxuICAgICAgY29uc29sZS5sb2coZm9ybWF0dGVkKTtcblxuICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydERhdGEodGhpcy5jb2x1bW5zLCB0aGlzLmRhdGFTZXQsIGZvcm1hdHRlZCwgdHlwZSwgdGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMsIGNvbmZpZyk7XG4gICAgfVxuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgb2JqOiB7XG4gICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucyxcbiAgICAgICAgZmlsdGVyczogW11cbiAgICAgIH0sXG4gICAgICBldmVudFR5cGU6ICdkb3dubG9hZENzdidcbiAgICB9XG4gICAgaWYgKHR5cGUgPT0gJ3hsc3gnKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudClcblxuICB9XG5cbiAgb25Gb250Q2hhbmdlKCkge1xuICAgIHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSA9IHRoaXMuYm9keVRleHRGb250c1NpemU7XG4gICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgZm9udEZhaW1seTogdGhpcy5mb250RmFpbWx5LFxuICAgICAgYm9keVRleHRGb250c1NpemU6IHRoaXMuYm9keVRleHRGb250c1NpemUsXG4gICAgICBoZWFkZXJUZXh0Rm9udHNTaXplOiB0aGlzLmhlYWRlclRleHRGb250c1NpemUsXG4gICAgICBvZGRSb3dzQmFja2dyb3VuZENvbG9yOiB0aGlzLnJvd1NoYWRpbmdFbmFibGVkID8gdGhpcy5vZGRSb3dzQmFja2dyb3VuZENvbG9yIDogdW5kZWZpbmVkLFxuICAgICAgc2hvd1ZlcnRpY2FsQm9yZGVyOiB0aGlzLnNob3dWZXJ0aWNhbEJvcmRlcixcbiAgICAgIHNlbGVjdGVkVGFibGVMYXlvdXQ6IHRoaXMuc2VsZWN0ZWRUYWJsZUxheW91dCxcbiAgICAgIGdsb2JhbFNlYXJjaDogdGhpcy50YWJsZVNlYXJjaFxuICAgIH1cbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIG9iajoge1xuICAgICAgICBkYXRhOiBjb25maWdcbiAgICAgIH0sXG4gICAgICBldmVudFR5cGU6ICdjb25maWcnXG4gICAgfVxuICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZXZlbnQpXG5cbiAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gIH1cblxuICBvbkdsb2JhbFNlYXJjaCgpIHtcbiAgICAvLyBDbG9zZSBleHBhbmRlZCByb3dzIGJlZm9yZSBzZWFyY2hpbmdcbiAgdGhpcy5jbG9zZUFsbEV4cGFuZGVkUm93cygpO1xuXG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBvYmo6IHtcbiAgICAgICAgdGFibGVTZWFyY2g6IHRoaXMudGFibGVTZWFyY2hcbiAgICAgIH0sXG4gICAgICBldmVudFR5cGU6ICdzZWFyY2gnXG4gICAgfVxuICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZXZlbnQpXG4gICAgaWYgKHRoaXMudGFibGVGaWx0ZXJWaWV3SWQpIHtcbiAgICAgIHRoaXMuc2F2ZVByZXNldCgnbW91c2VVcCcpO1xuICAgIH1cbiAgICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICB9XG5cbiAgb25TZWFyY2hJbnB1dChldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCB2YWx1ZSA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgLy8gY29uc29sZS5sb2coJ1NlYXJjaCB2YWx1ZTonLCB2YWx1ZSk7XG5cbiAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICB0aGlzLnRhYmxlU2VhcmNoID0gJyc7XG4gICAgICB0aGlzLm9uR2xvYmFsU2VhcmNoKCk7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tGaWx0ZXJDaGFuZ2VzRWZmZWN0KCk6IGFueSB7XG4gICAgaWYgKCF0aGlzLnRhYmxlRmlsdGVyVmlld0lkKSByZXR1cm4gdHJ1ZVxuICAgIGNvbnN0IGZpbmREZWZhdWx0RmlsdGVyID0gdGhpcy50YWJsZVZpZXc/LmZpbmQoKGVsZTogYW55KSA9PiBlbGU/LmlkID09IHRoaXMudGFibGVGaWx0ZXJWaWV3SWQpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZUZpbHRlcnMgPSAoZmlsdGVyczogYW55W10gfCB1bmRlZmluZWQpOiBhbnlbXSA9PiB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZmlsdGVycykpIHJldHVybiBbXTtcbiAgICAgIGNvbnN0IGNsb25lZCA9IGZpbHRlcnMubWFwKGYgPT4ge1xuICAgICAgICBjb25zdCBpdGVtID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmID8/IHt9KSk7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpdGVtLl9pZHMpKSBpdGVtLl9pZHMgPSBbXTtcbiAgICAgICAgaXRlbS5faWRzID0gaXRlbS5faWRzLnNsaWNlKCkuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIGEgPT09ICdudW1iZXInICYmIHR5cGVvZiBiID09PSAnbnVtYmVyJykgcmV0dXJuIGEgLSBiO1xuICAgICAgICAgIHJldHVybiAoJycgKyBhKS5sb2NhbGVDb21wYXJlKCcnICsgYik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChpdGVtLnF1ZXJ5ID09PSBudWxsKSB7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGl0ZW0ucXVlcnkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGl0ZW0ucXVlcnkuX2lkcykpIGl0ZW0ucXVlcnkuX2lkcyA9IFtdO1xuICAgICAgICAgIGl0ZW0ucXVlcnkuX2lkcyA9IGl0ZW0ucXVlcnkuX2lkcy5zbGljZSgpLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGEgPT09ICdudW1iZXInICYmIHR5cGVvZiBiID09PSAnbnVtYmVyJykgcmV0dXJuIGEgLSBiO1xuICAgICAgICAgICAgcmV0dXJuICgnJyArIGEpLmxvY2FsZUNvbXBhcmUoJycgKyBiKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfSk7XG4gICAgICBjbG9uZWQuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgZmEgPSAoYS5maWVsZCB8fCAnJykgKyAnfCcgKyAoYS50eXBlIHx8ICcnKTtcbiAgICAgICAgY29uc3QgZmIgPSAoYi5maWVsZCB8fCAnJykgKyAnfCcgKyAoYi50eXBlIHx8ICcnKTtcbiAgICAgICAgcmV0dXJuIGZhLmxvY2FsZUNvbXBhcmUoZmIpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBjbG9uZWQ7XG4gICAgfTtcblxuICAgIGNvbnN0IGRlZXBFcXVhbCA9IChhOiBhbnksIGI6IGFueSk6IGJvb2xlYW4gPT4ge1xuICAgICAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlO1xuXG4gICAgICBpZiAodHlwZW9mIGEgIT09ICdvYmplY3QnIHx8IGEgPT09IG51bGwgfHwgdHlwZW9mIGIgIT09ICdvYmplY3QnIHx8IGIgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGEgPT09IGI7XG4gICAgICB9XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGEpICE9PSBBcnJheS5pc0FycmF5KGIpKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XG4gICAgICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKCFkZWVwRXF1YWwoYVtpXSwgYltpXSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qga2V5c0EgPSBPYmplY3Qua2V5cyhhKTtcbiAgICAgIGNvbnN0IGtleXNCID0gT2JqZWN0LmtleXMoYik7XG4gICAgICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5c0EpIHtcbiAgICAgICAgaWYgKCFrZXlzQi5pbmNsdWRlcyhrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICghZGVlcEVxdWFsKGFba2V5XSwgYltrZXldKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBjb25zdCBub3JtYWxpemVkQSA9IG5vcm1hbGl6ZUZpbHRlcnMoZmluZERlZmF1bHRGaWx0ZXI/LmZpbHRlcnMpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRCID0gbm9ybWFsaXplRmlsdGVycyh0aGlzLmZpbHRlcnNDb25maWcpO1xuICAgIGNvbnN0IGlzU2FtZSA9IGRlZXBFcXVhbChub3JtYWxpemVkQSwgbm9ybWFsaXplZEIpO1xuICAgIHJldHVybiBpc1NhbWU7XG4gIH1cblxuXG5cbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyBDZWxsIFNlbGVjdGlvbiBJbXBsZW1lbnRlZCBIZXJlIEltcGxlbWVudGVkIEhlcmVcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4gIHNlbGVjdGVkQ2VsbHM6IGFueVtdID0gW107XG4gIHNlbGVjdGVkS2V5czogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG4gIHNlbGVjdGlvblN0YXJ0OiBhbnkgPSBudWxsO1xuICBpc1NlbGVjdGluZyA9IGZhbHNlO1xuICBzdGFydFNlbGVjdGlvbihcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGNvbEluZGV4OiBudW1iZXIsXG4gICAgc3ViQ29sSW5kZXg6IG51bWJlciB8IG51bGwsXG4gICAgZmllbGQ6IHN0cmluZyxcbiAgICBldmVudDogTW91c2VFdmVudCxcbiAgICBzZWN0aW9uOiBzdHJpbmdcbiAgKSB7XG4gICAgLy8gZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcy5jbGVhcigpO1xuICAgIGNvbnN0IHNhZmVTdWIgPSBzdWJDb2xJbmRleCA/PyAwO1xuICAgIGNvbnN0IGtleSA9IGAke3Jvd0luZGV4fS0ke2NvbEluZGV4fS0ke3NhZmVTdWJ9LSR7ZmllbGR9YDtcblxuICAgIHRoaXMuc2VsZWN0aW9uU3RhcnQgPSB7IHJvd0luZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXg6IHNhZmVTdWIsIGZpZWxkLCBrZXkgfTtcbiAgICB0aGlzLmlzU2VsZWN0aW5nID0gdHJ1ZTtcbiAgICB0aGlzLnNlbGVjdGVkS2V5cy5jbGVhcigpO1xuICAgIHRoaXMuc2VsZWN0ZWRLZXlzLmFkZChrZXkpO1xuICAgIHRoaXMuc2VsZWN0ZWRDZWxscyA9IFt0aGlzLnNlbGVjdGlvblN0YXJ0XTtcbiAgICBjb25zdCBtb3VzZVVwSGFuZGxlciA9ICgpID0+IHtcbiAgICAgIHRoaXMuZW5kU2VsZWN0aW9uKCk7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgbW91c2VVcEhhbmRsZXIpO1xuICAgIH07XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG1vdXNlVXBIYW5kbGVyKTtcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbkJvdW5kYXJpZXMoKVxuICB9XG5cblxuICBleHRlbmRTZWxlY3Rpb24oXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBjb2xJbmRleDogbnVtYmVyLFxuICAgIHN1YkNvbEluZGV4OiBudW1iZXIgfCBudWxsLFxuICAgIGZpZWxkOiBzdHJpbmcsXG4gICAgZXZlbnQ6IE1vdXNlRXZlbnQsXG4gICAgc2VjdGlvbjogc3RyaW5nXG4gICkge1xuICAgIGlmICghdGhpcy5pc1NlbGVjdGluZyB8fCAhdGhpcy5zZWxlY3Rpb25TdGFydCkgcmV0dXJuO1xuXG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLnNlbGVjdGlvblN0YXJ0O1xuICAgIGNvbnN0IHRhcmdldFN1YkNvbEluZGV4ID0gc3ViQ29sSW5kZXggPz8gMDtcbiAgICBjb25zdCBuZXdLZXlzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcbiAgICBjb25zdCBuZXdDZWxsczogYW55W10gPSBbXTtcbiAgICBjb25zdCBtaW5Sb3cgPSBNYXRoLm1pbihzdGFydC5yb3dJbmRleCwgcm93SW5kZXgpO1xuICAgIGNvbnN0IG1heFJvdyA9IE1hdGgubWF4KHN0YXJ0LnJvd0luZGV4LCByb3dJbmRleCk7XG4gICAgY29uc3QgY29sdW1uc1RvU2VsZWN0ID0gdGhpcy5nZXRDb2x1bW5TZWxlY3Rpb25SYW5nZShzdGFydC5jb2xJbmRleCwgY29sSW5kZXgsIHN0YXJ0LnN1YkNvbEluZGV4LCB0YXJnZXRTdWJDb2xJbmRleCk7XG5cbiAgICBmb3IgKGxldCByID0gbWluUm93OyByIDw9IG1heFJvdzsgcisrKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbEluZm8gb2YgY29sdW1uc1RvU2VsZWN0KSB7XG4gICAgICAgIGNvbnN0IGsgPSBgJHtyfS0ke2NvbEluZm8uY29sSW5kZXh9LSR7Y29sSW5mby5zdWJDb2xJbmRleH0tJHtzZWN0aW9ufWA7XG4gICAgICAgIG5ld0tleXMuYWRkKGspO1xuICAgICAgICBuZXdDZWxscy5wdXNoKHtcbiAgICAgICAgICByb3dJbmRleDogcixcbiAgICAgICAgICBjb2xJbmRleDogY29sSW5mby5jb2xJbmRleCxcbiAgICAgICAgICBzdWJDb2xJbmRleDogY29sSW5mby5zdWJDb2xJbmRleCxcbiAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICBrZXk6IGtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZEtleXMgPSBuZXdLZXlzO1xuICAgIHRoaXMuc2VsZWN0ZWRDZWxscyA9IG5ld0NlbGxzO1xuICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uQm91bmRhcmllcygpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcblxuICAgIC8vIEFkZCBhdXRvLXNjcm9sbGluZyBsb2dpY1xuICAgIHRoaXMuaGFuZGxlQ2VsbEF1dG9TY3JvbGwoZXZlbnQpO1xuICB9XG5cblxuXG5cbiAgZ2V0Q29sdW1uU2VsZWN0aW9uUmFuZ2UoXG4gICAgc3RhcnRDb2w6IG51bWJlcixcbiAgICBlbmRDb2w6IG51bWJlcixcbiAgICBzdGFydFN1YjogbnVtYmVyLFxuICAgIGVuZFN1YjogbnVtYmVyXG4gICk6IHsgY29sSW5kZXg6IG51bWJlcjsgc3ViQ29sSW5kZXg6IG51bWJlciB9W10ge1xuICAgIGNvbnN0IHJlc3VsdDogeyBjb2xJbmRleDogbnVtYmVyOyBzdWJDb2xJbmRleDogbnVtYmVyIH1bXSA9IFtdO1xuICAgIGNvbnN0IG1pbkNvbCA9IE1hdGgubWluKHN0YXJ0Q29sLCBlbmRDb2wpO1xuICAgIGNvbnN0IG1heENvbCA9IE1hdGgubWF4KHN0YXJ0Q29sLCBlbmRDb2wpO1xuXG4gICAgY29uc3QgaXNMZWZ0VG9SaWdodCA9IHN0YXJ0Q29sIDw9IGVuZENvbDtcbiAgICBmb3IgKGxldCBjID0gbWluQ29sOyBjIDw9IG1heENvbDsgYysrKSB7XG4gICAgICBjb25zdCBzdWJDb2xDb3VudCA9IHRoaXMuZ2V0U3ViQ29sdW1uQ291bnQoYyk7XG5cbiAgICAgIGlmIChjID09PSBzdGFydENvbCAmJiBjID09PSBlbmRDb2wpIHtcbiAgICAgICAgY29uc3QgbWluU3ViID0gTWF0aC5taW4oc3RhcnRTdWIsIGVuZFN1Yik7XG4gICAgICAgIGNvbnN0IG1heFN1YiA9IE1hdGgubWF4KHN0YXJ0U3ViLCBlbmRTdWIpO1xuICAgICAgICBmb3IgKGxldCBzID0gbWluU3ViOyBzIDw9IG1heFN1YiAmJiBzIDwgc3ViQ29sQ291bnQ7IHMrKykge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHsgY29sSW5kZXg6IGMsIHN1YkNvbEluZGV4OiBzIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChjID09PSBzdGFydENvbCkge1xuICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodCkge1xuICAgICAgICAgIGZvciAobGV0IHMgPSBzdGFydFN1YjsgcyA8IHN1YkNvbENvdW50OyBzKyspIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHsgY29sSW5kZXg6IGMsIHN1YkNvbEluZGV4OiBzIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8PSBzdGFydFN1YiAmJiBzIDwgc3ViQ29sQ291bnQ7IHMrKykge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goeyBjb2xJbmRleDogYywgc3ViQ29sSW5kZXg6IHMgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChjID09PSBlbmRDb2wpIHtcbiAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHQpIHtcbiAgICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8PSBlbmRTdWIgJiYgcyA8IHN1YkNvbENvdW50OyBzKyspIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHsgY29sSW5kZXg6IGMsIHN1YkNvbEluZGV4OiBzIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKGxldCBzID0gZW5kU3ViOyBzIDwgc3ViQ29sQ291bnQ7IHMrKykge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goeyBjb2xJbmRleDogYywgc3ViQ29sSW5kZXg6IHMgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzdWJDb2xDb3VudDsgcysrKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goeyBjb2xJbmRleDogYywgc3ViQ29sSW5kZXg6IHMgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZ2V0U3ViQ29sdW1uQ291bnQoY29sSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLmNvbHVtbnMgfHwgY29sSW5kZXggPCAwIHx8IGNvbEluZGV4ID49IHRoaXMuY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnNbY29sSW5kZXhdO1xuICAgIGlmIChjb2x1bW4uY2hpbGRyZW4gJiYgQXJyYXkuaXNBcnJheShjb2x1bW4uY2hpbGRyZW4pKSB7XG4gICAgICByZXR1cm4gY29sdW1uLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgaXNHcm91cENvbHVtbihjb2xJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3ViQ29sdW1uQ291bnQoY29sSW5kZXgpID4gMTtcbiAgfVxuICBlbmRTZWxlY3Rpb24oKSB7XG4gICAgdGhpcy5pc1NlbGVjdGluZyA9IGZhbHNlO1xuICAgIHRoaXMuc3RvcEF1dG9TY3JvbGwoKTtcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbkJvdW5kYXJpZXMoKTtcbiAgfVxuICBpc1NlbGVjdGVkKFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgY29sSW5kZXg6IG51bWJlcixcbiAgICBzdWJDb2xJbmRleDogbnVtYmVyIHwgbnVsbCxcbiAgICBmaWVsZDogc3RyaW5nLFxuICAgIHNlY3Rpb246IHN0cmluZ1xuICApIHtcbiAgICBjb25zdCBzYWZlU3ViID0gc3ViQ29sSW5kZXggPz8gMDtcbiAgICBjb25zdCBrZXkgPSBgJHtyb3dJbmRleH0tJHtjb2xJbmRleH0tJHtzYWZlU3VifS0ke3NlY3Rpb259YDtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEtleXMuaGFzKGtleSk7XG4gIH1cblxuXG4gIHByaXZhdGUgc2VsZWN0aW9uQm91bmRzOiB7XG4gICAgdG9wOiBudW1iZXIgfCBudWxsO1xuICAgIGJvdHRvbTogbnVtYmVyIHwgbnVsbDtcbiAgICBsZWZ0OiB7IGNvbEluZGV4OiBudW1iZXI7IHN1YkNvbEluZGV4OiBudW1iZXIgfSB8IG51bGw7XG4gICAgcmlnaHQ6IHsgY29sSW5kZXg6IG51bWJlcjsgc3ViQ29sSW5kZXg6IG51bWJlciB9IHwgbnVsbDtcbiAgfSA9IHsgdG9wOiBudWxsLCBib3R0b206IG51bGwsIGxlZnQ6IG51bGwsIHJpZ2h0OiBudWxsIH07XG5cbiAgdXBkYXRlU2VsZWN0aW9uQm91bmRhcmllcygpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZENlbGxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25Cb3VuZHMgPSB7IHRvcDogbnVsbCwgYm90dG9tOiBudWxsLCBsZWZ0OiBudWxsLCByaWdodDogbnVsbCB9O1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdldCBhbGwgdW5pcXVlIHJvdyBpbmRpY2VzIGFuZCBmaW5kIG1pbi9tYXhcbiAgICBjb25zdCByb3dJbmRpY2VzID0gWy4uLm5ldyBTZXQodGhpcy5zZWxlY3RlZENlbGxzLm1hcChjZWxsID0+IGNlbGwucm93SW5kZXgpKV07XG4gICAgdGhpcy5zZWxlY3Rpb25Cb3VuZHMudG9wID0gTWF0aC5taW4oLi4ucm93SW5kaWNlcyk7XG4gICAgdGhpcy5zZWxlY3Rpb25Cb3VuZHMuYm90dG9tID0gTWF0aC5tYXgoLi4ucm93SW5kaWNlcyk7XG5cbiAgICAvLyBGb3IgbGVmdC9yaWdodCBib3VuZGFyaWVzLCB3ZSBuZWVkIHRvIGNvbnNpZGVyIGJvdGggY29sSW5kZXggYW5kIHN1YkNvbEluZGV4XG4gICAgY29uc3QgbGVmdE1vc3QgPSB0aGlzLmZpbmRMZWZ0TW9zdENlbGwoKTtcbiAgICBjb25zdCByaWdodE1vc3QgPSB0aGlzLmZpbmRSaWdodE1vc3RDZWxsKCk7XG5cbiAgICB0aGlzLnNlbGVjdGlvbkJvdW5kcy5sZWZ0ID0gbGVmdE1vc3Q7XG4gICAgdGhpcy5zZWxlY3Rpb25Cb3VuZHMucmlnaHQgPSByaWdodE1vc3Q7XG4gIH1cbiAgZmluZExlZnRNb3N0Q2VsbCgpOiB7IGNvbEluZGV4OiBudW1iZXI7IHN1YkNvbEluZGV4OiBudW1iZXIgfSB8IG51bGwge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkQ2VsbHMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IG1pbkNvbEluZGV4ID0gTWF0aC5taW4oLi4udGhpcy5zZWxlY3RlZENlbGxzLm1hcChjZWxsID0+IGNlbGwuY29sSW5kZXgpKTtcbiAgICBjb25zdCBsZWZ0Q29sQ2VsbHMgPSB0aGlzLnNlbGVjdGVkQ2VsbHMuZmlsdGVyKGNlbGwgPT4gY2VsbC5jb2xJbmRleCA9PT0gbWluQ29sSW5kZXgpO1xuICAgIGNvbnN0IG1pblN1YkNvbEluZGV4ID0gTWF0aC5taW4oLi4ubGVmdENvbENlbGxzLm1hcChjZWxsID0+IGNlbGwuc3ViQ29sSW5kZXgpKTtcblxuICAgIHJldHVybiB7IGNvbEluZGV4OiBtaW5Db2xJbmRleCwgc3ViQ29sSW5kZXg6IG1pblN1YkNvbEluZGV4IH07XG4gIH1cbiAgZmluZFJpZ2h0TW9zdENlbGwoKTogeyBjb2xJbmRleDogbnVtYmVyOyBzdWJDb2xJbmRleDogbnVtYmVyIH0gfCBudWxsIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZENlbGxzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBtYXhDb2xJbmRleCA9IE1hdGgubWF4KC4uLnRoaXMuc2VsZWN0ZWRDZWxscy5tYXAoY2VsbCA9PiBjZWxsLmNvbEluZGV4KSk7XG4gICAgY29uc3QgcmlnaHRDb2xDZWxscyA9IHRoaXMuc2VsZWN0ZWRDZWxscy5maWx0ZXIoY2VsbCA9PiBjZWxsLmNvbEluZGV4ID09PSBtYXhDb2xJbmRleCk7XG4gICAgY29uc3QgbWF4U3ViQ29sSW5kZXggPSBNYXRoLm1heCguLi5yaWdodENvbENlbGxzLm1hcChjZWxsID0+IGNlbGwuc3ViQ29sSW5kZXgpKTtcblxuICAgIHJldHVybiB7IGNvbEluZGV4OiBtYXhDb2xJbmRleCwgc3ViQ29sSW5kZXg6IG1heFN1YkNvbEluZGV4IH07XG4gIH1cbiAgaXNUb3BCb3JkZXIocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlciwgc3ViQ29sSW5kZXg6IG51bWJlciB8IG51bGwsIHNlY3Rpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNhZmVTdWIgPSBzdWJDb2xJbmRleCA/PyAwO1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkS2V5cy5oYXMoYCR7cm93SW5kZXh9LSR7Y29sSW5kZXh9LSR7c2FmZVN1Yn0tJHtzZWN0aW9ufWApO1xuICAgIHJldHVybiBpc1NlbGVjdGVkICYmIHRoaXMuc2VsZWN0aW9uQm91bmRzLnRvcCAhPT0gbnVsbCAmJiByb3dJbmRleCA9PT0gdGhpcy5zZWxlY3Rpb25Cb3VuZHMudG9wO1xuICB9XG4gIGlzQm90dG9tQm9yZGVyKHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIsIHN1YkNvbEluZGV4OiBudW1iZXIgfCBudWxsLCBzZWN0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBzYWZlU3ViID0gc3ViQ29sSW5kZXggPz8gMDtcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5zZWxlY3RlZEtleXMuaGFzKGAke3Jvd0luZGV4fS0ke2NvbEluZGV4fS0ke3NhZmVTdWJ9LSR7c2VjdGlvbn1gKTtcbiAgICByZXR1cm4gaXNTZWxlY3RlZCAmJiB0aGlzLnNlbGVjdGlvbkJvdW5kcy5ib3R0b20gIT09IG51bGwgJiYgcm93SW5kZXggPT09IHRoaXMuc2VsZWN0aW9uQm91bmRzLmJvdHRvbTtcbiAgfVxuICBpc0xlZnRCb3JkZXIocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlciwgc3ViQ29sSW5kZXg6IG51bWJlciB8IG51bGwsIHNlY3Rpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNhZmVTdWIgPSBzdWJDb2xJbmRleCA/PyAwO1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkS2V5cy5oYXMoYCR7cm93SW5kZXh9LSR7Y29sSW5kZXh9LSR7c2FmZVN1Yn0tJHtzZWN0aW9ufWApO1xuICAgIHJldHVybiBpc1NlbGVjdGVkICYmIHRoaXMuc2VsZWN0aW9uQm91bmRzLmxlZnQgIT09IG51bGwgJiZcbiAgICAgIGNvbEluZGV4ID09PSB0aGlzLnNlbGVjdGlvbkJvdW5kcy5sZWZ0LmNvbEluZGV4ICYmXG4gICAgICBzYWZlU3ViID09PSB0aGlzLnNlbGVjdGlvbkJvdW5kcy5sZWZ0LnN1YkNvbEluZGV4O1xuICB9XG5cbiAgaXNSaWdodEJvcmRlcihyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyLCBzdWJDb2xJbmRleDogbnVtYmVyIHwgbnVsbCwgc2VjdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2FmZVN1YiA9IHN1YkNvbEluZGV4ID8/IDA7XG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRLZXlzLmhhcyhgJHtyb3dJbmRleH0tJHtjb2xJbmRleH0tJHtzYWZlU3VifS0ke3NlY3Rpb259YCk7XG4gICAgcmV0dXJuIGlzU2VsZWN0ZWQgJiYgdGhpcy5zZWxlY3Rpb25Cb3VuZHMucmlnaHQgIT09IG51bGwgJiZcbiAgICAgIGNvbEluZGV4ID09PSB0aGlzLnNlbGVjdGlvbkJvdW5kcy5yaWdodC5jb2xJbmRleCAmJlxuICAgICAgc2FmZVN1YiA9PT0gdGhpcy5zZWxlY3Rpb25Cb3VuZHMucmlnaHQuc3ViQ29sSW5kZXg7XG4gIH1cblxuICBpc1RvcExlZnRDb3JuZXIocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlciwgc3ViQ29sSW5kZXg6IG51bWJlciB8IG51bGwsIHNlY3Rpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVG9wQm9yZGVyKHJvd0luZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pICYmIHRoaXMuaXNMZWZ0Qm9yZGVyKHJvd0luZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pO1xuICB9XG5cbiAgaXNUb3BSaWdodENvcm5lcihyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyLCBzdWJDb2xJbmRleDogbnVtYmVyIHwgbnVsbCwgc2VjdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNUb3BCb3JkZXIocm93SW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCwgc2VjdGlvbikgJiYgdGhpcy5pc1JpZ2h0Qm9yZGVyKHJvd0luZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pO1xuICB9XG5cbiAgaXNCb3R0b21MZWZ0Q29ybmVyKHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIsIHN1YkNvbEluZGV4OiBudW1iZXIgfCBudWxsLCBzZWN0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0JvdHRvbUJvcmRlcihyb3dJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4LCBzZWN0aW9uKSAmJiB0aGlzLmlzTGVmdEJvcmRlcihyb3dJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4LCBzZWN0aW9uKTtcbiAgfVxuXG4gIGlzQm90dG9tUmlnaHRDb3JuZXIocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlciwgc3ViQ29sSW5kZXg6IG51bWJlciB8IG51bGwsIHNlY3Rpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzQm90dG9tQm9yZGVyKHJvd0luZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pICYmIHRoaXMuaXNSaWdodEJvcmRlcihyb3dJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4LCBzZWN0aW9uKTtcbiAgfVxuXG5cbiAgY2VsbFNlbGVjdGlvbkF1dG9TY3JvbGxJbnRlcnZhbDogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSBzY3JvbGxTcGVlZCA9IDE1MDtcbiAgcHJpdmF0ZSBzY3JvbGxNYXJnaW4gPSAzMDtcbiAgaGFuZGxlQ2VsbEF1dG9TY3JvbGwoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAodGhpcy5jZWxsU2VsZWN0aW9uQXV0b1Njcm9sbEludGVydmFsKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuY2VsbFNlbGVjdGlvbkF1dG9TY3JvbGxJbnRlcnZhbCk7XG4gICAgICB0aGlzLmNlbGxTZWxlY3Rpb25BdXRvU2Nyb2xsSW50ZXJ2YWwgPSBudWxsO1xuICAgIH1cbiAgICBjb25zdCBob3Jpem9udGFsQ29udGFpbmVyID0gdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHZlcnRpY2FsQ29udGFpbmVyID0gdGhpcy5tYWluU2Nyb2xsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFob3Jpem9udGFsQ29udGFpbmVyIHx8ICF2ZXJ0aWNhbENvbnRhaW5lcikgcmV0dXJuO1xuICAgIGNvbnN0IGhvcml6b250YWxSZWN0ID0gaG9yaXpvbnRhbENvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBtb3VzZVggPSBldmVudC5jbGllbnRYO1xuICAgIGNvbnN0IHZlcnRpY2FsUmVjdCA9IHZlcnRpY2FsQ29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IG1vdXNlWSA9IGV2ZW50LmNsaWVudFk7XG4gICAgY29uc3QgbmVhclRvcCA9IG1vdXNlWSAtIHZlcnRpY2FsUmVjdC50b3AgPCB0aGlzLnNjcm9sbE1hcmdpbjtcbiAgICBjb25zdCBuZWFyQm90dG9tID0gdmVydGljYWxSZWN0LmJvdHRvbSAtIG1vdXNlWSA8IHRoaXMuc2Nyb2xsTWFyZ2luO1xuICAgIGNvbnN0IG5lYXJMZWZ0ID0gbW91c2VYIC0gaG9yaXpvbnRhbFJlY3QubGVmdCA8IHRoaXMuc2Nyb2xsTWFyZ2luO1xuICAgIGNvbnN0IG5lYXJSaWdodCA9IGhvcml6b250YWxSZWN0LnJpZ2h0IC0gbW91c2VYIDwgdGhpcy5zY3JvbGxNYXJnaW47XG4gICAgbGV0IHNjcm9sbFggPSAwO1xuICAgIGxldCBzY3JvbGxZID0gMDtcbiAgICBpZiAobmVhclRvcCkgc2Nyb2xsWSA9IC10aGlzLnNjcm9sbFNwZWVkO1xuICAgIGlmIChuZWFyQm90dG9tKSBzY3JvbGxZID0gdGhpcy5zY3JvbGxTcGVlZDtcbiAgICBpZiAobmVhckxlZnQpIHNjcm9sbFggPSAtdGhpcy5zY3JvbGxTcGVlZDtcbiAgICBpZiAobmVhclJpZ2h0KSBzY3JvbGxYID0gdGhpcy5zY3JvbGxTcGVlZDtcbiAgICBpZiAoc2Nyb2xsWCAhPT0gMCB8fCBzY3JvbGxZICE9PSAwKSB7XG4gICAgICB0aGlzLmNlbGxTZWxlY3Rpb25BdXRvU2Nyb2xsSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIGlmIChzY3JvbGxYICE9PSAwKSB7XG4gICAgICAgICAgaG9yaXpvbnRhbENvbnRhaW5lci5zY3JvbGxCeShzY3JvbGxYLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Nyb2xsWSAhPT0gMCkge1xuICAgICAgICAgIHZlcnRpY2FsQ29udGFpbmVyLnNjcm9sbEJ5KDAsIHNjcm9sbFkpO1xuICAgICAgICB9XG4gICAgICB9LCA4KTtcbiAgICB9XG4gIH1cblxuICBzdG9wQXV0b1Njcm9sbCgpIHtcbiAgICBpZiAodGhpcy5jZWxsU2VsZWN0aW9uQXV0b1Njcm9sbEludGVydmFsKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuY2VsbFNlbGVjdGlvbkF1dG9TY3JvbGxJbnRlcnZhbCk7XG4gICAgICB0aGlzLmNlbGxTZWxlY3Rpb25BdXRvU2Nyb2xsSW50ZXJ2YWwgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgLy8gUm93IFNlbGVjdGlvbiBmcm9tIHRoZSBJbmRleGluZyBJbXBsZW1lbnRlZCBIZXJlXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuICByb3dTZWxlY3RlZEluZGV4ZXM6IFNldDxudW1iZXI+ID0gbmV3IFNldCgpO1xuICByb3dTZWxlY3RpbmcgPSBmYWxzZTtcbiAgcm93U2VsZWN0aW9uU3RhcnRJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIGF1dG9TY3JvbGxJbnRlcnZhbDogYW55ID0gbnVsbDtcblxuICBnZXQgZmlyc3RTZWxlY3RlZFJvdygpOiBudW1iZXIgfCBudWxsIHtcbiAgICBpZiAodGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMuc2l6ZSA9PT0gMCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIE1hdGgubWluKC4uLnRoaXMucm93U2VsZWN0ZWRJbmRleGVzKTtcbiAgfVxuXG4gIGdldCBsYXN0U2VsZWN0ZWRSb3coKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMucm93U2VsZWN0ZWRJbmRleGVzLnNpemUgPT09IDApIHJldHVybiBudWxsO1xuICAgIHJldHVybiBNYXRoLm1heCguLi50aGlzLnJvd1NlbGVjdGVkSW5kZXhlcyk7XG4gIH1cblxuXG4gIG9uUm93TW91c2VEb3duKGluZGV4OiBudW1iZXIsIGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnJvd1NlbGVjdGluZyA9IHRydWU7XG4gICAgdGhpcy5zZWxlY3RlZEtleXMuY2xlYXIoKTtcbiAgICB0aGlzLnJvd1NlbGVjdGlvblN0YXJ0SW5kZXggPSBpbmRleDtcbiAgICB0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcy5jbGVhcigpO1xuICAgIHRoaXMucm93U2VsZWN0ZWRJbmRleGVzLmFkZChpbmRleCk7XG4gICAgdGhpcy5hY3RpdmVDZWxsID0gJyc7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgY29uc3QgbW91c2VNb3ZlSGFuZGxlciA9IChlOiBNb3VzZUV2ZW50KSA9PiB0aGlzLmhhbmRsZUF1dG9TY3JvbGwoZSk7XG4gICAgY29uc3QgbW91c2VVcEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9uUm93TW91c2VVcCgpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG1vdXNlVXBIYW5kbGVyKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG1vdXNlTW92ZUhhbmRsZXIpO1xuICAgICAgaWYgKHRoaXMuYXV0b1Njcm9sbEludGVydmFsKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuYXV0b1Njcm9sbEludGVydmFsKTtcbiAgICAgICAgdGhpcy5hdXRvU2Nyb2xsSW50ZXJ2YWwgPSBudWxsO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgbW91c2VVcEhhbmRsZXIpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG1vdXNlTW92ZUhhbmRsZXIpO1xuICB9XG5cbiAgb25Sb3dNb3VzZU92ZXIoaW5kZXg6IG51bWJlciwgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMucm93U2VsZWN0aW5nIHx8IHRoaXMucm93U2VsZWN0aW9uU3RhcnRJbmRleCA9PT0gbnVsbCkgcmV0dXJuO1xuICAgIHRoaXMucm93U2VsZWN0ZWRJbmRleGVzLmNsZWFyKCk7XG4gICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1pbih0aGlzLnJvd1NlbGVjdGlvblN0YXJ0SW5kZXgsIGluZGV4KTtcbiAgICBjb25zdCBlbmQgPSBNYXRoLm1heCh0aGlzLnJvd1NlbGVjdGlvblN0YXJ0SW5kZXgsIGluZGV4KTtcbiAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgIHRoaXMucm93U2VsZWN0ZWRJbmRleGVzLmFkZChpKTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coWy4uLnRoaXMucm93U2VsZWN0ZWRJbmRleGVzXSk7XG4gIH1cblxuICBvblJvd01vdXNlVXAoKSB7XG4gICAgdGhpcy5yb3dTZWxlY3RpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnJvd1NlbGVjdGlvblN0YXJ0SW5kZXggPSBudWxsO1xuICB9XG4gIGhhbmRsZUF1dG9TY3JvbGwoZTogTW91c2VFdmVudCkge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMubWFpblNjcm9sbD8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuO1xuXG4gICAgY29uc3QgcmVjdCA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBlZGdlU2l6ZSA9IDQwXG4gICAgbGV0IHNjcm9sbEFtb3VudCA9IDA7XG5cbiAgICBpZiAoZS5jbGllbnRZIDwgcmVjdC50b3AgKyBlZGdlU2l6ZSkge1xuICAgICAgc2Nyb2xsQW1vdW50ID0gLTE1MDtcbiAgICB9IGVsc2UgaWYgKGUuY2xpZW50WSA+IHJlY3QuYm90dG9tIC0gZWRnZVNpemUpIHtcbiAgICAgIHNjcm9sbEFtb3VudCA9IDE1MDtcbiAgICB9XG5cbiAgICBpZiAoc2Nyb2xsQW1vdW50ICE9PSAwKSB7XG4gICAgICBpZiAoIXRoaXMuYXV0b1Njcm9sbEludGVydmFsKSB7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSAoKSA9PiB7XG4gICAgICAgICAgY29udGFpbmVyLnNjcm9sbFRvcCArPSBzY3JvbGxBbW91bnQ7XG4gICAgICAgICAgdGhpcy5hdXRvU2Nyb2xsSW50ZXJ2YWwgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuYXV0b1Njcm9sbEludGVydmFsID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5hdXRvU2Nyb2xsSW50ZXJ2YWwpIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5hdXRvU2Nyb2xsSW50ZXJ2YWwpO1xuICAgICAgICB0aGlzLmF1dG9TY3JvbGxJbnRlcnZhbCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICAvLyBnZXRTZWxlY3RlZERhdGFGb3JDb3B5KCk6IGFueVtdW10ge1xuICAvLyAgIGNvbnN0IGNvcGllZFJvd3M6IGFueVtdW10gPSBbXTtcbiAgLy8gICBjb25zdCBmaW5kUm93QnlWaXJ0dWFsSW5kZXggPSAodkluZGV4OiBudW1iZXIpID0+XG4gIC8vICAgICB0aGlzLmRhdGFTZXQuZmluZCgocjogYW55KSA9PiByLl9fdmlydHVhbEluZGV4ID09PSB2SW5kZXgpO1xuICAvLyAgIGlmICh0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcyAmJiB0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcy5zaXplID4gMCkge1xuICAvLyAgICAgY29uc3Qgc29ydGVkSW5kZXhlcyA9IFsuLi50aGlzLnJvd1NlbGVjdGVkSW5kZXhlc10uc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAvLyAgICAgZm9yIChjb25zdCB2SW5kZXggb2Ygc29ydGVkSW5kZXhlcykge1xuICAvLyAgICAgICBjb25zdCByb3cgPSBmaW5kUm93QnlWaXJ0dWFsSW5kZXgodkluZGV4KTtcbiAgLy8gICAgICAgaWYgKCFyb3cpIGNvbnRpbnVlO1xuICAvLyAgICAgICBjb25zdCByb3dWYWx1ZXMgPSB0aGlzLmNvbHVtbnMuZmxhdE1hcChjb2wgPT5cbiAgLy8gICAgICAgICBjb2wuY2hpbGRyZW4gJiYgQXJyYXkuaXNBcnJheShjb2wuY2hpbGRyZW4pXG4gIC8vICAgICAgICAgICA/IGNvbC5jaGlsZHJlbi5tYXAoKGM6IHsgZmllbGQ6IHN0cmluZyB9KSA9PlxuICAvLyAgICAgICAgICAgICAgIHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjLmZpZWxkKSA/PyAnJ1xuICAvLyAgICAgICAgICAgICApXG4gIC8vICAgICAgICAgICA6IHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpID8/ICcnXG4gIC8vICAgICAgICk7XG4gIC8vICAgICAgIGNvcGllZFJvd3MucHVzaChyb3dWYWx1ZXMpO1xuICAvLyAgICAgfVxuICAvLyAgIH1cblxuICAvLyAgIGlmICh0aGlzLnNlbGVjdGVkQ2VsbHMgJiYgdGhpcy5zZWxlY3RlZENlbGxzLmxlbmd0aCA+IDApIHtcbiAgLy8gICAgIGNvbnN0IHJvd3NNYXAgPSBuZXcgTWFwPG51bWJlciwgYW55W10+KCk7XG4gIC8vICAgICBmb3IgKGNvbnN0IGNlbGwgb2YgdGhpcy5zZWxlY3RlZENlbGxzKSB7XG4gIC8vICAgICAgIGNvbnN0IHJvdyA9IGZpbmRSb3dCeVZpcnR1YWxJbmRleChjZWxsLnJvd0luZGV4KTtcbiAgLy8gICAgICAgaWYgKCFyb3cpIGNvbnRpbnVlO1xuXG4gIC8vICAgICAgIGNvbnN0IGNvbCA9IHRoaXMuY29sdW1uc1tjZWxsLmNvbEluZGV4XTtcbiAgLy8gICAgICAgbGV0IGZpZWxkTmFtZSA9IGNvbD8uZmllbGQ7XG4gIC8vICAgICAgIGlmIChjb2w/LmNoaWxkcmVuICYmIGNvbC5jaGlsZHJlbltjZWxsLnN1YkNvbEluZGV4XSkge1xuICAvLyAgICAgICAgIGZpZWxkTmFtZSA9IGNvbC5jaGlsZHJlbltjZWxsLnN1YkNvbEluZGV4XS5maWVsZDtcbiAgLy8gICAgICAgfVxuICAvLyAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBmaWVsZE5hbWUpID8/ICcnO1xuXG4gIC8vICAgICAgIGlmICghcm93c01hcC5oYXMoY2VsbC5yb3dJbmRleCkpIHJvd3NNYXAuc2V0KGNlbGwucm93SW5kZXgsIFtdKTtcbiAgLy8gICAgICAgcm93c01hcC5nZXQoY2VsbC5yb3dJbmRleCkhLnB1c2godmFsdWUpO1xuICAvLyAgICAgfVxuXG4gIC8vICAgICBjb25zdCBzb3J0ZWRDZWxscyA9IFsuLi5yb3dzTWFwLmVudHJpZXMoKV1cbiAgLy8gICAgICAgLnNvcnQoKFthXSwgW2JdKSA9PiBhIC0gYilcbiAgLy8gICAgICAgLm1hcCgoW18sIHZdKSA9PiB2KTtcblxuICAvLyAgICAgY29waWVkUm93cy5wdXNoKC4uLnNvcnRlZENlbGxzKTtcbiAgLy8gICB9XG5cbiAgLy8gICBpZiAoY29waWVkUm93cy5sZW5ndGggPT09IDApIHtcbiAgLy8gICAgIGNvbnN0IGFjdGl2ZUNlbGwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuYWN0aXZlLWNlbGwnKTtcbiAgLy8gICAgIGlmIChhY3RpdmVDZWxsKSByZXR1cm4gW1thY3RpdmVDZWxsLnRleHRDb250ZW50Py50cmltKCkgfHwgJyddXTtcbiAgLy8gICB9XG4gIC8vICAgY29uc3QgbWF4Q29scyA9IGNvcGllZFJvd3MucmVkdWNlKChtYXgsIHJvdykgPT4gTWF0aC5tYXgobWF4LCByb3cubGVuZ3RoKSwgMCk7XG4gIC8vICAgY29uc3Qgbm9ybWFsaXplZCA9IGNvcGllZFJvd3MubWFwKHJvdyA9PiB7XG4gIC8vICAgICBjb25zdCBuZXdSb3cgPSBbLi4ucm93XTtcbiAgLy8gICAgIHdoaWxlIChuZXdSb3cubGVuZ3RoIDwgbWF4Q29scykgbmV3Um93LnB1c2goJycpOyBcbiAgLy8gICAgIHJldHVybiBuZXdSb3c7XG4gIC8vICAgfSk7XG4gIC8vICAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG4gIC8vIH1cblxuXG4gIHVuZG9TdGFjazogYW55W11bXSA9IFtdO1xuICByZWRvU3RhY2s6IGFueVtdW10gPSBbXTtcblxuICBwcml2YXRlIGNsb25lRGF0YShkYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gIH1cblxuICBwZXJmb3JtQ3V0KHNlbGVjdGVkRGF0YTogYW55W11bXSkge1xuICAgIC8vIFNhdmUgY3VycmVudCBzdGF0ZSBmb3IgdW5kb1xuICAgIHRoaXMudW5kb1N0YWNrLnB1c2godGhpcy5jbG9uZURhdGEodGhpcy52aXNpYmxlUm93cykpO1xuICAgIHRoaXMucmVkb1N0YWNrID0gW107IC8vIENsZWFyIHJlZG8gc3RhY2sgb24gbmV3IGFjdGlvblxuXG4gICAgLy8gUGVyZm9ybSBjdXRcbiAgICB0aGlzLmNvcHlTZXJ2aWNlLmN1dFdpdGhBbmltYXRpb24oc2VsZWN0ZWREYXRhKTtcbiAgICBjb25zdCB7IHVwZGF0ZWRSb3dzIH0gPSB0aGlzLmNvcHlTZXJ2aWNlLmN1dFNlbGVjdGVkU2VsZWN0ZWREYXRhKFxuICAgICAgdGhpcy52aXNpYmxlUm93cyxcbiAgICAgIHRoaXMucm93U2VsZWN0ZWRJbmRleGVzLFxuICAgICAgdGhpcy5zZWxlY3RlZENlbGxzLFxuICAgICAgdGhpcy5jb2x1bW5zLFxuICAgICAgdGhpcy5zZXROZXN0ZWRWYWx1ZS5iaW5kKHRoaXMpXG4gICAgKTtcblxuICAgIC8vIGNvbnNvbGUubG9nKCdVcGRhdGVkIFJvd3M6ICcsIHVwZGF0ZWRSb3dzKTtcbiAgfVxuXG5cblxuICBnZXRTZWxlY3RlZERhdGFGb3JDb3B5KCk6IGFueVtdW10ge1xuICAgIHJldHVybiB0aGlzLmNvcHlTZXJ2aWNlLmdldFNlbGVjdGVkRGF0YUZvckNvcHkoXG4gICAgICB0aGlzLmRhdGFTZXQsXG4gICAgICB0aGlzLmNvbHVtbnMsXG4gICAgICB0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcyxcbiAgICAgIHRoaXMuc2VsZWN0ZWRDZWxscyxcbiAgICAgIHRoaXMuZ2V0TmVzdGVkVmFsdWUuYmluZCh0aGlzKVxuICAgICk7XG4gIH1cblxuXG4gIHBhZ2VTaXplS2V5TWFwOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG4gIHByaXZhdGUgYnVpbGRQYWdlU2l6ZUtleU1hcCgpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2VTaXplS2V5TWFwID0ge307XG5cbiAgICB0aGlzLnBhZ2VTaXplT3B0aW9ucy5mb3JFYWNoKChzaXplLCBpbmRleCkgPT4ge1xuICAgICAgLy8gS2V5czogMeKAkzksIHRoZW4gMCBmb3IgMTB0aCBpdGVtXG4gICAgICBjb25zdCBrZXkgPVxuICAgICAgICBpbmRleCA8IDlcbiAgICAgICAgICA/IFN0cmluZyhpbmRleCArIDEpXG4gICAgICAgICAgOiBpbmRleCA9PT0gOVxuICAgICAgICAgID8gJzAnXG4gICAgICAgICAgOiBudWxsO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHRoaXMucGFnZVNpemVLZXlNYXBba2V5XSA9IHNpemU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgaXNGb3JtRmllbGQgPVxuICAgICAgdGFyZ2V0LnRhZ05hbWUgPT09ICdJTlBVVCcgfHxcbiAgICAgIHRhcmdldC50YWdOYW1lID09PSAnVEVYVEFSRUEnIHx8XG4gICAgICB0YXJnZXQuaXNDb250ZW50RWRpdGFibGU7XG4gICAgaWYgKGlzRm9ybUZpZWxkIHx8IHRoaXMubG9hZGluZykgcmV0dXJuO1xuXG4gICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmICFldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5nb1RvTmV4dFBhZ2UoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBDdHJsICsgQXJyb3cgTGVmdCDihpIgUHJldmlvdXMgUGFnZVxuICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiAhZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuZ29Ub1ByZXZpb3VzUGFnZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEN0cmwgKyBTaGlmdCArIEFycm93IFJpZ2h0IOKGkiBMYXN0IFBhZ2VcbiAgICBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmdvVG9MYXN0UGFnZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBDdHJsICsgU2hpZnQgKyBBcnJvdyBMZWZ0IOKGkiBGaXJzdCBQYWdlXG4gICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmdvVG9GaXJzdFBhZ2UoKTtcbiAgICAgIHJldHVybjtcbiAgICB9IFxuXG4gICAgLy8gQ3RybCArIFNoaWZ0ICsgQXJyb3cgUmlnaHQg4oaSIExhc3QgUGFnZVxuICAgIGNvbnN0IE1JTl9IRUlHSFQgPSAyODtcbiAgICBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmhlYWRlclJvd0hlaWdodCArPSAxO1xuICAgICAgdGhpcy5yb3dIZWlnaHQgKz0gMTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDdHJsICsgU2hpZnQgKyBBcnJvdyBSaWdodCDihpIgTGFzdCBQYWdlXG4gICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgIHRoaXMuaGVhZGVyUm93SGVpZ2h0ID0gTWF0aC5tYXgoTUlOX0hFSUdIVCwgdGhpcy5oZWFkZXJSb3dIZWlnaHQgLSAxKTtcbiAgICAgdGhpcy5yb3dIZWlnaHQgPSBNYXRoLm1heChNSU5fSEVJR0hULCB0aGlzLnJvd0hlaWdodCAtIDEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAgICAgXG5cbiAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5rZXkgPT09ICcvJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmICh0aGlzLmdsb2JhbFNlYXJjaElucHV0KSB7XG4gICAgICAgIGNvbnN0IGlucHV0RWwgPSB0aGlzLmdsb2JhbFNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlucHV0RWwuZm9jdXMoKTtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxPdXRsaW5lID0gaW5wdXRFbC5zdHlsZS5vdXRsaW5lO1xuICAgICAgICBjb25zdCBvcmlnaW5hbEJveFNoYWRvdyA9IGlucHV0RWwuc3R5bGUuYm94U2hhZG93O1xuICAgICAgICBpbnB1dEVsLnN0eWxlLnNldFByb3BlcnR5KCdvdXRsaW5lJywgJzJweCBzb2xpZCAjNGY5Y2ZmJywgJ2ltcG9ydGFudCcpO1xuICAgICAgICAgaW5wdXRFbC5zdHlsZS5zZXRQcm9wZXJ0eSgnYm94LXNoYWRvdycsICcwIDAgOHB4IDJweCAjNGY5Y2ZmJywgJ2ltcG9ydGFudCcpOyBcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaW5wdXRFbC5zdHlsZS5zZXRQcm9wZXJ0eSgnb3V0bGluZScsIG9yaWdpbmFsT3V0bGluZSB8fCAnJywgJ2ltcG9ydGFudCcpO1xuICAgICAgICAgIGlucHV0RWwuc3R5bGUuc2V0UHJvcGVydHkoJ2JveC1zaGFkb3cnLCBvcmlnaW5hbEJveFNoYWRvdyB8fCAnJywgJ2ltcG9ydGFudCcpO1xuICAgICAgICB9LCAxMDAwKTtcblxuXG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgIGlmIChldmVudC5jdHJsS2V5ICYmIGV2ZW50LmFsdEtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3InKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuYXV0b3NpemVBbGxDb2x1bW5zKCk7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgaWYgKGV2ZW50LmFsdEtleSAmJiBldmVudC5rZXk/LnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09ICdyJykge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmF1dG9TaXplQ29sdW1uc0J5UmF0aW8oKVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2MnKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuZG93bmxvYWRDc3YoJ2NzdicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnZScpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5kb3dubG9hZENzdigneGxzeCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2InKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyID0gIXRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyO1xuICAgICAgICB0aGlzLm9uRm9udENoYW5nZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2gnKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMucm93U2hhZGluZ0VuYWJsZWQgPSAhdGhpcy5yb3dTaGFkaW5nRW5hYmxlZDtcbiAgICAgICAgdGhpcy5vbkZvbnRDaGFuZ2UoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3MnKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuc2V0VGFibGVMYXlvdXQoJ3NtYWxsJylcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICdtJykge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnNldFRhYmxlTGF5b3V0KCdtZWRpdW0nKVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2wnKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuc2V0VGFibGVMYXlvdXQoJ2xhcmdlJylcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgIFxuXG5cbiAgICAgaWYgKGV2ZW50LmFsdEtleSkge1xuICAgICBjb25zdCBuZXdMaW1pdCA9IHRoaXMucGFnZVNpemVLZXlNYXBbZXZlbnQua2V5XTtcbiAgICAgIGlmIChuZXdMaW1pdCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0ICE9PSBuZXdMaW1pdCkge1xuICAgICAgICAgIHRoaXMucGFnaW5hdGlvbkNvbmZpZy5saW1pdCA9IG5ld0xpbWl0O1xuICAgICAgICAgIHRoaXMub25QYWdlU2l6ZUNoYW5nZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG5cblxuICAgIGNvbnN0IHRhYmxlQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmRhdGEtZ3JpZC1ib2R5LXdyYXBwZXInKTtcbiAgICBpZiAodGFibGVDb250YWluZXIgJiYgIXRhYmxlQ29udGFpbmVyLmNvbnRhaW5zKHRhcmdldCkpIHJldHVybjtcbiAgICBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjJykge1xuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQ2VsbHM/Lmxlbmd0aCAmJiAhdGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMuc2l6ZSkgcmV0dXJuXG4gICAgICBjb25zdCBzZWxlY3RlZERhdGEgPSB0aGlzLmdldFNlbGVjdGVkRGF0YUZvckNvcHkoKTtcbiAgICAgIC8vIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmNvcHlTZXJ2aWNlLmNvcHlUb0NsaXBib2FyZChzZWxlY3RlZERhdGEpO1xuXG4gICAgfSBlbHNlIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3gnKSB7XG4gICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRDZWxscz8ubGVuZ3RoIHx8ICF0aGlzLmVuYWJsZUN1dCkgcmV0dXJuXG4gICAgICBjb25zdCBzZWxlY3RlZERhdGEgPSB0aGlzLmdldFNlbGVjdGVkRGF0YUZvckNvcHkoKTtcbiAgICAgIC8vIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnBlcmZvcm1DdXQoc2VsZWN0ZWREYXRhKTtcblxuICAgIH0gZWxzZSBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICd6Jykge1xuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQ2VsbHM/Lmxlbmd0aCkgcmV0dXJuXG4gICAgICAvLyBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy51bmRvKCk7XG5cbiAgICB9IGVsc2UgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAneScpIHtcbiAgICAgIGlmICghdGhpcy5zZWxlY3RlZENlbGxzPy5sZW5ndGgpIHJldHVyblxuICAgICAgLy8gZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMucmVkbygpO1xuICAgIH0gZWxzZSBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQua2V5ID09PSAnYScpIHtcbiAgICAgIC8vIOKchSBTZWxlY3QgYWxsIGNlbGxzXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5zZWxlY3RBbGxDZWxscygpO1xuICAgICAgfVxuICB9XG5cbiAgZ29Ub05leHRQYWdlKCk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2U7XG4gICAgY29uc3QgdG90YWxQYWdlcyA9IHRoaXMucGFnaW5hdGlvbkNvbmZpZy50b3RhbFBhZ2VzO1xuICAgIGlmIChjdXJyZW50UGFnZSA+PSB0b3RhbFBhZ2VzKSByZXR1cm47XG4gICAgdGhpcy5nb1RvUGFnZShjdXJyZW50UGFnZSArIDEpO1xuICB9XG5cbiAgZ29Ub1ByZXZpb3VzUGFnZSgpOiB2b2lkIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2U7XG4gICAgICBpZiAoY3VycmVudFBhZ2UgPD0gMSkgcmV0dXJuO1xuICAgICAgdGhpcy5nb1RvUGFnZShjdXJyZW50UGFnZSAtIDEpO1xuICAgIH1cblxuICAgIGdvVG9GaXJzdFBhZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlID09PSAxKSByZXR1cm47XG4gICAgdGhpcy5nb1RvUGFnZSgxKTtcbiAgfVxuXG4gIGdvVG9MYXN0UGFnZSgpOiB2b2lkIHtcbiAgICBjb25zdCBsYXN0UGFnZSA9IHRoaXMucGFnaW5hdGlvbkNvbmZpZy50b3RhbFBhZ2VzO1xuICAgIGlmICh0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZSA9PT0gbGFzdFBhZ2UpIHJldHVybjtcbiAgICB0aGlzLmdvVG9QYWdlKGxhc3RQYWdlKTtcbiAgfVxuXG5cblxuXG4gIHNlbGVjdEFsbENlbGxzKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRDZWxscyA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRLZXlzLmNsZWFyKCk7XG4gICAgdGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMuY2xlYXIoKTtcblxuICAgIC8vIFNldCBzZWxlY3Rpb24gc3RhcnQgbGlrZSBzaW5nbGUgc2VsZWN0aW9uIChmaXJzdCBjZWxsKVxuICAgIGlmICh0aGlzLmRhdGFTZXQubGVuZ3RoICYmIHRoaXMuY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGZpcnN0RmllbGQgPSB0aGlzLmNvbHVtbnNbMF0uZmllbGQgfHwgdGhpcy5jb2x1bW5zWzBdLm5hbWU7XG4gICAgICB0aGlzLnNlbGVjdGlvblN0YXJ0ID0ge1xuICAgICAgICByb3dJbmRleDogMCxcbiAgICAgICAgY29sSW5kZXg6IDAsXG4gICAgICAgIHN1YkNvbEluZGV4OiAwLFxuICAgICAgICBmaWVsZDogZmlyc3RGaWVsZCxcbiAgICAgICAga2V5OiBgMC0wLTAtJHtmaXJzdEZpZWxkfWAsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuaXNTZWxlY3RpbmcgPSB0cnVlO1xuXG4gICAgZm9yIChsZXQgcm93SW5kZXggPSAwOyByb3dJbmRleCA8PSB0aGlzLmRhdGFTZXQ/Lmxlbmd0aDsgcm93SW5kZXgrKykge1xuICAgICAgaWYgKCFyb3dJbmRleCkgY29udGludWU7XG4gICAgICBjb25zdCByb3cgPSB0aGlzLmRhdGFTZXRbcm93SW5kZXhdO1xuICAgICAgdGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMuYWRkKHJvd0luZGV4KTtcblxuICAgICAgLy8gZm9yIChsZXQgY29sSW5kZXggPSAwOyBjb2xJbmRleCA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGNvbEluZGV4KyspIHtcbiAgICAgIC8vICAgY29uc3QgY29sID0gdGhpcy5jb2x1bW5zW2NvbEluZGV4XTtcbiAgICAgIC8vICAgY29uc3QgZmllbGQgPSBjb2wuZmllbGQgfHwgY29sLm5hbWU7XG4gICAgICAvLyAgIGlmKCFjb2wuaXNfdmlzaWJsZSkgY29udGludWU7XG5cbiAgICAgIC8vICAgaWYgKGNvbC5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAvLyAgICAgY29sLmNoaWxkcmVuLmZvckVhY2goKHN1YjogYW55LCBzdWJDb2xJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAvLyAgICAgICBjb25zdCBrZXkgPSBgJHtyb3dJbmRleH0tJHtjb2xJbmRleH0tJHtzdWJDb2xJbmRleH0tJHtmaWVsZH1gO1xuICAgICAgLy8gICAgICAgdGhpcy5zZWxlY3RlZEtleXMuYWRkKGtleSk7XG4gICAgICAvLyAgICAgICB0aGlzLnNlbGVjdGVkQ2VsbHMucHVzaCh7XG4gICAgICAvLyAgICAgICAgIHJvd0luZGV4LFxuICAgICAgLy8gICAgICAgICBjb2xJbmRleCxcbiAgICAgIC8vICAgICAgICAgc3ViQ29sSW5kZXgsXG4gICAgICAvLyAgICAgICAgIGZpZWxkLFxuICAgICAgLy8gICAgICAgICBrZXksXG4gICAgICAvLyAgICAgICB9KTtcbiAgICAgIC8vICAgICB9KTtcbiAgICAgIC8vICAgfSBlbHNlIHtcbiAgICAgIC8vICAgICBjb25zdCBrZXkgPSBgJHtyb3dJbmRleH0tJHtjb2xJbmRleH0tMC0ke2ZpZWxkfWA7XG4gICAgICAvLyAgICAgdGhpcy5zZWxlY3RlZEtleXMuYWRkKGtleSk7XG4gICAgICAvLyAgICAgdGhpcy5zZWxlY3RlZENlbGxzLnB1c2goe1xuICAgICAgLy8gICAgICAgcm93SW5kZXgsXG4gICAgICAvLyAgICAgICBjb2xJbmRleCxcbiAgICAgIC8vICAgICAgIHN1YkNvbEluZGV4OiAwLFxuICAgICAgLy8gICAgICAgZmllbGQsXG4gICAgICAvLyAgICAgICBrZXksXG4gICAgICAvLyAgICAgfSk7XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH1cbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgaGlnaGxpZ2h0aW5nIGFuZCBVSVxuICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uQm91bmRhcmllcygpO1xuXG4gICAgLy8gU3RvcCBcInNlbGVjdGluZ1wiIG1vZGUgc2luY2UgaXQncyBhIG9uZS10aW1lIHNlbGVjdC1hbGxcbiAgICB0aGlzLmlzU2VsZWN0aW5nID0gZmFsc2U7XG4gIH1cblxuXG5cbiAgdW5kbygpIHtcbiAgICBpZiAodGhpcy51bmRvU3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcHJldlN0YXRlID0gdGhpcy51bmRvU3RhY2sucG9wKCkhO1xuICAgICAgdGhpcy5yZWRvU3RhY2sucHVzaCh0aGlzLmNsb25lRGF0YSh0aGlzLnZpc2libGVSb3dzKSk7XG4gICAgICB0aGlzLnZpc2libGVSb3dzID0gdGhpcy5jbG9uZURhdGEocHJldlN0YXRlKTtcbiAgICB9XG4gIH1cblxuICByZWRvKCkge1xuICAgIGlmICh0aGlzLnJlZG9TdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBuZXh0U3RhdGUgPSB0aGlzLnJlZG9TdGFjay5wb3AoKSE7XG4gICAgICB0aGlzLnVuZG9TdGFjay5wdXNoKHRoaXMuY2xvbmVEYXRhKHRoaXMudmlzaWJsZVJvd3MpKTtcbiAgICAgIHRoaXMudmlzaWJsZVJvd3MgPSB0aGlzLmNsb25lRGF0YShuZXh0U3RhdGUpO1xuICAgIH1cbiAgfVxuXG5cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpwYXN0ZScsIFsnJGV2ZW50J10pXG4gIGFzeW5jIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSB7XG4gICAgaWYoIXRoaXMuZW5hYmxlQ3V0KSByZXR1cm47XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IHRhZyA9IHRhcmdldD8udGFnTmFtZT8udG9Mb3dlckNhc2UoKTtcbiAgICBpZiAodGFnID09PSAnaW5wdXQnIHx8IHRhZyA9PT0gJ3RleHRhcmVhJyB8fCB0YXJnZXQ/LmdldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJykgPT09ICd0cnVlJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5zZWxlY3RlZENlbGxzPy5sZW5ndGggfHwgIXRoaXMuYWN0aXZlQ2VsbCkgcmV0dXJuO1xuXG4gICAgY29uc3QgdGV4dCA9IGV2ZW50LmNsaXBib2FyZERhdGE/LmdldERhdGEoJ3RleHQnKTtcbiAgICBpZiAoIXRleHQpIHJldHVybjtcbiAgICBjb25zdCB1c2VyQ29uZmlybWVkID0gYXdhaXQgdGhpcy5zaG93Q29uZmlybWF0aW9uTW9kYWwoXG4gICAgICAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHBhc3RlIHRoZSBjb3BpZWQgZGF0YT8nXG4gICAgKTtcblxuICAgIGlmICghdXNlckNvbmZpcm1lZCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydENlbGwgPSB0aGlzLnNlbGVjdGVkQ2VsbHM/LlswXTtcbiAgICBpZiAoIXN0YXJ0Q2VsbCkgcmV0dXJuO1xuXG4gICAgY29uc3QgdXBkYXRlZFJvd3MgPSBhd2FpdCB0aGlzLmNvcHlTZXJ2aWNlLnBhc3RlRnJvbUNsaXBib2FyZFRleHQoXG4gICAgICB0ZXh0LFxuICAgICAgdGhpcy52aXNpYmxlUm93cyxcbiAgICAgIHRoaXMuY29sdW1ucyxcbiAgICAgIHN0YXJ0Q2VsbC5yb3dJbmRleCxcbiAgICAgIHN0YXJ0Q2VsbC5jb2xJbmRleCxcbiAgICAgIHN0YXJ0Q2VsbC5zdWJDb2xJbmRleFxuICAgICk7XG5cbiAgICBpZiAodXBkYXRlZFJvd3M/LnVwZGF0ZVJvd3M/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdCh7XG4gICAgICAgIGRhdGE6IHVwZGF0ZWRSb3dzPy51cGRhdGVSb3dzLFxuICAgICAgICBldmVudFR5cGU6ICdvbkNlbGxFZGl0JyxcbiAgICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgICAgIGNvbHVtbjogdXBkYXRlZFJvd3M/LmN1cnJlbnRDb2x1bXNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHNob3dDb25maXJtYXRpb25Nb2RhbChtZXNzYWdlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBjb25zdCBvdmVybGF5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBvdmVybGF5LmNsYXNzTGlzdC5hZGQoJ2N1c3RvbS1vdmVybGF5LXdyYXBwZXInKTtcbiAgICAgIG92ZXJsYXkuaW5uZXJIVE1MID0gYFxuICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1vdmVybGF5XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tbW9kYWxcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLW1vZGFsLWJvZHlcIj5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwibW9kYWwtbWVzc2FnZVwiPiR7bWVzc2FnZX08L3A+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWNvbmZpcm1cIj5Db25maXJtPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tY2FuY2VsXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG92ZXJsYXkpO1xuICAgICAgY29uc3QgY29uZmlybUJ0biA9IG92ZXJsYXkucXVlcnlTZWxlY3RvcignLmJ0bi1jb25maXJtJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBjb25zdCBjYW5jZWxCdG4gPSBvdmVybGF5LnF1ZXJ5U2VsZWN0b3IoJy5idG4tY2FuY2VsJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG92ZXJsYXkpO1xuICAgICAgfTtcbiAgICAgIGNvbmZpcm1CdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBjYW5jZWxCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG5cblxuXG5cbiAgaXNEYXRlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIWlzTmFOKG5ldyBEYXRlKHZhbHVlKT8uZ2V0VGltZSgpKTtcbiAgfVxuXG5cbiAgLy8gSG9sZCBleHBhbmRlZCBJRHMgKGFycmF5IGZvciBtdWx0aXBsZSwgc2luZ2xlIHZhbHVlIGZvciBzaW5nbGUpXG4gIGV4cGFuZGVkZWREZXRhaWxSb3dzOiAoc3RyaW5nIHwgbnVtYmVyKVtdIHwgc3RyaW5nIHwgbnVtYmVyID0gJyc7XG5cbiAgdG9nZ2xlRGV0YWlsUm93RXhwYW5kKHJvdzogYW55KSB7XG4gICAgY29uc3QgaWQgPSByb3c/LmlkIHx8IHJvdz8uX2lkO1xuICAgIGlmICh0aGlzLmdyaWRUeXBlID09PSAnQXNzZXRzJyAmJiByb3c/LmRldGFpbD8uY29sdW1ucykge1xuICAgICAgcm93LmRldGFpbC5jb2x1bW5zLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICBpdGVtLndpZHRoID0gaXRlbT8ud2lkdGggfHwgKHRoaXMuZGF0YUdyaWRDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCAvIHJvdy5kZXRhaWwuY29sdW1ucz8ubGVuZ3RoKVxuICAgICAgfSk7XG4gICAgICB0aGlzLnByZXZpZXdOZXN0ZWRDb2xzID0gdGhpcy5kZWVwQ2xvbmVDb2x1bW5zKHJvdy5kZXRhaWwuY29sdW1ucyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmtlZXBNdWx0aXBsZUV4cGFuZGVkRGV0YWlscykge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuZXhwYW5kZWRlZERldGFpbFJvd3MpKSB7XG4gICAgICAgIHRoaXMuZXhwYW5kZWRlZERldGFpbFJvd3MgPSBbXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV4cGFuZGVkID0gdGhpcy5leHBhbmRlZGVkRGV0YWlsUm93cyBhcyAoc3RyaW5nIHwgbnVtYmVyKVtdO1xuICAgICAgY29uc3QgaW5kZXggPSBleHBhbmRlZC5pbmRleE9mKGlkKTtcblxuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgZXhwYW5kZWQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4cGFuZGVkLnB1c2goaWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5leHBhbmRlZGVkRGV0YWlsUm93cyA9PT0gaWQpIHtcbiAgICAgICAgdGhpcy5leHBhbmRlZGVkRGV0YWlsUm93cyA9ICcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5leHBhbmRlZGVkRGV0YWlsUm93cyA9IGlkO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdm9pZCB0aGlzLnJpZ2h0UGlubmVkSGVhZGVyPy5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgdGhpcy5jZW50ZXJQaW5uZWRCb2R5Py5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgdGhpcy5yaWdodFBpbm5lZEJvZHk/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMzAwKVxuICB9XG5cbiAgaXNEZXRhaWxzRXhwYW5kZWQocm93OiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBpZCA9IHJvdz8uaWQgfHwgcm93Py5faWQ7XG5cbiAgICBpZiAodGhpcy5rZWVwTXVsdGlwbGVFeHBhbmRlZERldGFpbHMpIHtcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMuZXhwYW5kZWRlZERldGFpbFJvd3MpICYmXG4gICAgICAgIHRoaXMuZXhwYW5kZWRlZERldGFpbFJvd3MuaW5jbHVkZXMoaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5leHBhbmRlZGVkRGV0YWlsUm93cyA9PT0gaWQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0RmlsdGVyVmFsdWUob3B0aW9uOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBvcHRpb24/LnZhbHVlID8/IG9wdGlvbjtcbiAgfVxuXG5cbiAgb3BlbkluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgdG9nZ2xlTWVudShpOiBudW1iZXIsIGV2ZW50PzogTW91c2VFdmVudCkge1xuICAgIGlmIChldmVudCkgeyBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgfVxuICAgIHRoaXMub3BlbkluZGV4ID0gdGhpcy5vcGVuSW5kZXggPT09IGkgPyBudWxsIDogaTtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ25lc3RlZFRhYmxlJylcbiAgbmVzdGVkVGFibGUhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgZ2V0IGhhc1ZlcnRpY2FsU2Nyb2xsKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5uZXN0ZWRUYWJsZSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLm5lc3RlZFRhYmxlLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gdGhpcy5uZXN0ZWRUYWJsZS5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgfVxuXG4gIGdldCBoYXNIb3Jpem9udGFsU2Nyb2xsKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5uZXN0ZWRUYWJsZSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGVsID0gdGhpcy5uZXN0ZWRUYWJsZS5uYXRpdmVFbGVtZW50O1xuICAgIHJldHVybiBlbC5zY3JvbGxXaWR0aCA+IGVsLmNsaWVudFdpZHRoO1xuICB9XG5cblxuICBnZXRUb3RhbEFtb3VudChjb2x1bW46IGFueSkge1xuICAgIGlmICghY29sdW1uPy5pc19hbW91bnQpIHJldHVybjtcbiAgICBjb25zdCB0b3RhbCA9IHRoaXMub3JpZ2luYWxEYXRhU2V0LnJlZHVjZSgoc3VtLCByb3cpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gcm93W2NvbHVtbi5maWVsZF0gfHwgMDtcbiAgICAgIHJldHVybiBzdW0gKyB2YWx1ZTtcbiAgICB9LCAwKTtcbiAgICBpZiAoIXRvdGFsKSByZXR1cm4gYCR7dGhpcy5jdXJyZW5jeVN5bWJvbH0gMC4wMGBcbiAgICByZXR1cm4gYCR7dGhpcy5jdXJyZW5jeVN5bWJvbH0gJHt0aGlzLmZvcm1hdEN1cnJlbmN5LnRyYW5zZm9ybSh0b3RhbCwgdGhpcy5jdXJyZW5jeUZvcm1hdCl9YDtcbiAgfVxuXG4gIGRyb3BDb2x1bW4oZXZlbnQ6IENka0RyYWdEcm9wPGFueVtdPiwgcm93OiBhbnkpIHtcbiAgICAvLyBSZW9yZGVyIHRoZSBjb2x1bW5zIGFycmF5XG4gICAgbW92ZUl0ZW1JbkFycmF5KHJvdy5kZXRhaWwuY29sdW1ucywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgfVxuXG4gIGN1cnJlbnRTdWJTb3J0Q29sdW1uOiBzdHJpbmcgfCBudWxsID0gbnVsbDsgLy8gYWN0aXZlIGNvbHVtblxuICBjdXJyZW50U29ydERpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgPSAnYXNjJzsgLy8gYWN0aXZlIGRpcmVjdGlvblxuXG4gIHNvcnROZXN0ZWRDb2woY29sOiBhbnksIHJvdzogYW55KSB7XG4gICAgY29uc3QgZGF0YVNldCA9IHJvdz8uZGV0YWlsPy5yZXN1bHQ7XG4gICAgaWYgKHRoaXMuY3VycmVudFN1YlNvcnRDb2x1bW4gPT09IGNvbC5maWVsZCkge1xuICAgICAgdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gJ2Rlc2MnIDogJ2FzYyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudFN1YlNvcnRDb2x1bW4gPSBjb2wuZmllbGQ7XG4gICAgICB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID0gJ2FzYyc7XG4gICAgfVxuICAgIGNvbC5vcmRlcl9ieSA9IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb247XG5cbiAgICAvLyBTb3J0IGNvcHkgaW5zdGVhZCBvZiBtdXRhdGluZ1xuICAgIGNvbnN0IHNvcnRlZCA9IFsuLi5kYXRhU2V0XS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBsZXQgYVZhbCA9IGFbY29sLmZpZWxkXTtcbiAgICAgIGxldCBiVmFsID0gYltjb2wuZmllbGRdO1xuICAgICAgYVZhbCA9IGFWYWwgPT0gbnVsbCA/ICcnIDogYVZhbDtcbiAgICAgIGJWYWwgPSBiVmFsID09IG51bGwgPyAnJyA6IGJWYWw7XG5cbiAgICAgIGlmIChjb2wudHlwZSA9PT0gJ2RhdGUnKSB7XG4gICAgICAgIGFWYWwgPSBuZXcgRGF0ZShhVmFsKS5nZXRUaW1lKCk7XG4gICAgICAgIGJWYWwgPSBuZXcgRGF0ZShiVmFsKS5nZXRUaW1lKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFOdW0gPSBwYXJzZUZsb2F0KGFWYWwpO1xuICAgICAgY29uc3QgYk51bSA9IHBhcnNlRmxvYXQoYlZhbCk7XG4gICAgICBjb25zdCBib3RoTnVtYmVycyA9ICFpc05hTihhTnVtKSAmJiAhaXNOYU4oYk51bSk7XG5cbiAgICAgIGlmIChib3RoTnVtYmVycykge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyBhTnVtIC0gYk51bSA6IGJOdW0gLSBhTnVtO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY29tcCA9IFN0cmluZyhhVmFsKS5sb2NhbGVDb21wYXJlKFN0cmluZyhiVmFsKSk7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID09PSAnYXNjJyA/IGNvbXAgOiAtY29tcDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJvdy5kZXRhaWwucmVzdWx0ID0gc29ydGVkO1xuXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cblxuICBnZXRDb2x1bW5XaWR0aFB4KHJvdzogYW55LCBjb2w6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKGNvbC53aWR0aCkgcmV0dXJuIGNvbC53aWR0aCArICdweCc7XG4gICAgY29uc3QgcGl4ZWxzID0gdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keT8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0V2lkdGggLyByb3cuZGV0YWlsPy5jb2x1bW5zLmxlbmd0aDtcbiAgICByZXR1cm4gcGl4ZWxzICsgJ3B4JztcbiAgfVxuXG4gIGZ1bGxzY3JlZW5JbWFnZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cblxuICAvLyBBc3Nlc3RzIE5lc3RlZCBUYWJsZSBXb3JrIEltcGxlbWVudGVkIEhlcmVcblxuICBwaW5VbnBpbkNvbHVtKGNvbDogYW55LCB2YWx1ZTogJ2xlZnQnIHwgJ3JpZ2h0JyB8IG51bGwsIGNvbHVtbnM6IGFueVtdKSB7XG4gICAgY29sLnBpbm5lZCA9IHZhbHVlO1xuICAgIGNvbnN0IGxlZnQgPSBjb2x1bW5zLmZpbHRlcihjID0+IGMucGlubmVkID09PSAnbGVmdCcpO1xuICAgIGNvbnN0IG1pZGRsZSA9IGNvbHVtbnMuZmlsdGVyKGMgPT4gIWMucGlubmVkIHx8IGMucGlubmVkID09PSBudWxsKTtcbiAgICBjb25zdCByaWdodCA9IGNvbHVtbnMuZmlsdGVyKGMgPT4gYy5waW5uZWQgPT09ICdyaWdodCcpO1xuICAgIGNvbHVtbnMubGVuZ3RoID0gMDtcbiAgICBjb2x1bW5zLnB1c2goLi4ubGVmdCwgLi4ubWlkZGxlLCAuLi5yaWdodCk7XG4gICAgdGhpcy5hY3RpdmVDb2wgPSBudWxsO1xuICB9XG5cbiAgZ2V0TGVmdFBpbm5lZENvdW50KGNvbHVtbnM6IGFueVtdKTogbnVtYmVyIHtcbiAgICByZXR1cm4gY29sdW1ucy5maWx0ZXIoYyA9PiBjLnBpbm5lZCA9PT0gJ2xlZnQnKS5sZW5ndGg7XG4gIH1cblxuICBnZXRSaWdodFBpbm5lZENvdW50KGNvbHVtbnM6IGFueVtdKTogbnVtYmVyIHtcbiAgICByZXR1cm4gY29sdW1ucy5maWx0ZXIoYyA9PiBjLnBpbm5lZCA9PT0gJ3JpZ2h0JykubGVuZ3RoO1xuICB9XG5cbiAgZ2V0U3RpY2t5TGVmdChjb2x1bW5zOiBhbnlbXSwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgbGV0IGxlZnQgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kZXg7IGkrKykge1xuICAgICAgY29uc3QgcHJldkNvbCA9IGNvbHVtbnNbaV07XG4gICAgICBpZiAocHJldkNvbC5waW5uZWQgPT09ICdsZWZ0Jykge1xuICAgICAgICBsZWZ0ICs9IHByZXZDb2wud2lkdGggfHwgMTAwO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYCR7bGVmdH1weGA7XG4gIH1cblxuICBwcmV2aWV3TmVzdGVkQ29sczogYW55W10gPSBbXTtcbiAgb25OZXN0ZWRDb2xTb3J0KGV2ZW50OiBDZGtEcmFnU29ydEV2ZW50PGFueVtdPiwgY29sdW1uczogYW55W10pOiB2b2lkIHtcbiAgICBpZiAoIWV2ZW50IHx8ICFjb2x1bW5zKSByZXR1cm47XG4gICAgY29uc3QgZmlyc3RQb3NpdGlvbnMgPSBuZXcgTWFwPEhUTUxFbGVtZW50LCBudW1iZXI+KCk7XG4gICAgY29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgIGNvbnN0IGNvbENlbGxzID0gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZmllbGQ9XCIke2NvbC5maWVsZH1cIl1gKSkgYXMgSFRNTEVsZW1lbnRbXTtcbiAgICAgIGNvbENlbGxzLmZvckVhY2goKGVsKSA9PiBmaXJzdFBvc2l0aW9ucy5zZXQoZWwsIGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQpKTtcbiAgICB9KTtcbiAgICBtb3ZlSXRlbUluQXJyYXkoY29sdW1ucywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRDZWxscyA9IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2ZpZWxkPVwiJHtjb2wuZmllbGR9XCJdYCkpIGFzIEhUTUxFbGVtZW50W107XG4gICAgICAgIHVwZGF0ZWRDZWxscy5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld0xlZnQgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuICAgICAgICAgIGNvbnN0IG9sZExlZnQgPSBmaXJzdFBvc2l0aW9ucy5nZXQoZWwpID8/IG5ld0xlZnQ7XG4gICAgICAgICAgY29uc3QgZGVsdGFYID0gb2xkTGVmdCAtIG5ld0xlZnQ7XG5cbiAgICAgICAgICBpZiAoZGVsdGFYICE9PSAwKSB7XG4gICAgICAgICAgICBlbC5zdHlsZS50cmFuc2l0aW9uID0gJ25vbmUnO1xuICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVgoJHtkZWx0YVh9cHgpYDtcbiAgICAgICAgICAgIHZvaWQgZWwub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICBlbC5zdHlsZS50cmFuc2l0aW9uID0gJ3RyYW5zZm9ybSAyNTBtcyBlYXNlJztcbiAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGVYKDApJztcbiAgICAgICAgICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zaXRpb24gPSAnJztcbiAgICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gJyc7XG4gICAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBjbGVhbnVwKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgY2xlYW51cCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cblxuICBzYXZlU2VsZWN0aW9uKHNlbGVjdGVkSWRzOiBzdHJpbmdbXSwgdGFibGVUeXBlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRhYmxlVHlwZSkgcmV0dXJuO1xuICAgIGNvbnN0IHN0b3JlZCA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2RhdGF0YWJsZVNlbGVjdGlvbnMnKSB8fCAne1wic2VsZWN0ZWRSb3dzXCI6IHt9fScpO1xuICAgIGNvbnN0IGFsbFNlbGVjdGVkID0gc3RvcmVkLnNlbGVjdGVkUm93cyB8fCB7fTtcbiAgICBhbGxTZWxlY3RlZFt0YWJsZVR5cGVdID0gc2VsZWN0ZWRJZHM7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICAnZGF0YXRhYmxlU2VsZWN0aW9ucycsXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHNlbGVjdGVkUm93czogYWxsU2VsZWN0ZWQsXG4gICAgICAgIGxpc3RpbmdUeXBlOiB0YWJsZVR5cGVcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG5cbiAgcmVzdG9yZVNlbGVjdGlvbih0YWJsZVR5cGU6IHN0cmluZykge1xuICAgIGNvbnN0IHN0b3JlZCA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2RhdGF0YWJsZVNlbGVjdGlvbnMnKSB8fCAne30nKTtcbiAgICBjb25zdCBpZHMgPSBzdG9yZWQuc2VsZWN0ZWRSb3dzPy5bdGFibGVUeXBlXSB8fCBbXTtcbiAgICB0aGlzLnNlbGVjdGVkUm93cyA9IG5ldyBTZXQoaWRzKTtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFJvd3M7XG4gIH1cblxuXG5cbiAgaXNPdXRzaWRlQ29udGFpbmVyID0gZmFsc2U7XG4gIHByaXZhdGUgY29udGFpbmVyUmVjdDogRE9NUmVjdCB8IG51bGwgPSBudWxsO1xuXG5cbiAgb25EcmFnU3RhcnRlZChjb2w6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudERyYWdnaW5nQ29sdW1uID0gY29sO1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkYXRhLWdyaWQtbWFpbi1jb250YWluZXInKTtcbiAgICB0aGlzLmNvbnRhaW5lclJlY3QgPSBjb250YWluZXI/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIHx8IG51bGw7XG4gIH1cblxuICBvbkRyYWdNb3ZlZChldmVudDogQ2RrRHJhZ01vdmUpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29udGFpbmVyUmVjdCkgcmV0dXJuO1xuXG4gICAgY29uc3QgeyB4LCB5IH0gPSBldmVudC5wb2ludGVyUG9zaXRpb247XG4gICAgY29uc3QgaXNPdXRzaWRlID1cbiAgICAgIHggPCB0aGlzLmNvbnRhaW5lclJlY3QubGVmdCB8fFxuICAgICAgeCA+IHRoaXMuY29udGFpbmVyUmVjdC5yaWdodCB8fFxuICAgICAgeSA8IHRoaXMuY29udGFpbmVyUmVjdC50b3AgfHxcbiAgICAgIHkgPiB0aGlzLmNvbnRhaW5lclJlY3QuYm90dG9tO1xuXG4gICAgLy8gaWYgKGlzT3V0c2lkZSAhPT0gdGhpcy5pc091dHNpZGVDb250YWluZXIpIHtcbiAgICAvLyAgIHRoaXMuaXNPdXRzaWRlQ29udGFpbmVyID0gaXNPdXRzaWRlO1xuICAgIC8vIH1cbiAgfVxuXG4gIG9uRHJhZ0VuZGVkKCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gaWYgKHRoaXMuaXNPdXRzaWRlQ29udGFpbmVyICYmIHRoaXMuY3VycmVudERyYWdnaW5nQ29sdW1uKSB7XG4gICAgICAvLyAgIHRoaXMuY3VycmVudERyYWdnaW5nQ29sdW1uIS5pc192aXNpYmxlID0gZmFsc2U7XG4gICAgICB0aGlzLmN1cnJlbnREcmFnZ2luZ0NvbHVtbiA9IG51bGw7XG4gICAgICB0aGlzLmlzT3V0c2lkZUNvbnRhaW5lciA9IGZhbHNlO1xuICAgICAgLy8gICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAvLyB9XG4gICAgfSwgMTAwKTtcbiAgICB0aGlzLmNvbnRhaW5lclJlY3QgPSBudWxsO1xuICB9XG5cbiAgZ2V0U3RhcnRJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhZ2luYXRpb25Db25maWcudG90YWxSZXN1bHRzID09PSAwXG4gICAgICA/IDBcbiAgICAgIDogKHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlIC0gMSkgKiB0aGlzLnBhZ2luYXRpb25Db25maWcubGltaXQgKyAxIHx8IDA7XG4gIH1cblxuICBoYXNBbnlEZWZhdWx0VmlldygpIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZVZpZXc/LnNvbWUoKHgpID0+IHguaXNfZGVmYXVsdCB8fCB4LmlzX3RlbXApO1xuICB9XG5cblxuICBnZXQgaXNUYWJsZVByZXNldE5vdENoYW5nZWQoKSB7XG4gICAgaWYgKHRoaXMudGFibGVGaWx0ZXJWaWV3SWQpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBjdXJyUHJlc2V0ID0gdGhpcy5jdXJyZXRhVGFibGVQcmVzZXRGb3JVcGRhdGU7XG5cbiAgICBjb25zdCBjdXJyZW50UHJlc2V0Q29sdW1ucyA9IGN1cnJQcmVzZXQ/LmNvbHVtbnM/Lm1hcCgoY29sOiB7IGZpZWxkOiBhbnk7IHdpZHRoOiBhbnk7IHBpbm5lZDogYW55OyB9KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmaWVsZDogY29sLmZpZWxkLFxuICAgICAgICB3aWR0aDogY29sLndpZHRoLFxuICAgICAgICBwaW5uZWQ6IGNvbC5waW5uZWRcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zPy5tYXAoY29sID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpZWxkOiBjb2wuZmllbGQsXG4gICAgICAgIHdpZHRoOiBjb2wud2lkdGgsXG4gICAgICAgIHBpbm5lZDogY29sLnBpbm5lZFxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3RyaW5nc0N1cnJlbnRQcmVzdENvbHMgPSBKU09OLnN0cmluZ2lmeShjdXJyZW50UHJlc2V0Q29sdW1ucyk7XG4gICAgY29uc3Qgc3RyaW5nQ29sdW1ucyA9IEpTT04uc3RyaW5naWZ5KGNvbHVtbnMpO1xuICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLmZpbHRlcnNDb25maWcubWFwKChmaWx0ZXIpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpbGVkOiBmaWx0ZXIuZmllbGQsXG4gICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgY29uZGl0aW9uOiBmaWx0ZXI/LnF1ZXJ5Py5jb25kaXRpb24sXG4gICAgICAgICAgZmlyc3RfY29uZGl0aW9uOiBmaWx0ZXI/LnF1ZXJ5Py5maXJzdF9jb25kaXRpb24sXG4gICAgICAgICAgZmlyc3RfdmFsdWU6IGZpbHRlcj8ucXVlcnk/LmZpcnN0X3ZhbHVlLFxuICAgICAgICAgIHNlY29uZF9jb25kaXRpb246IGZpbHRlcj8ucXVlcnk/LnNlY29uZF9jb25kaXRpb24sXG4gICAgICAgICAgc2Vjb25kX3ZhbHVlOiBmaWx0ZXI/LnF1ZXJ5Py5zZWNvbmRfdmFsdWUsXG4gICAgICAgIH0sXG4gICAgICAgIF9pZHM6IGZpbHRlcj8uX2lkc1xuICAgICAgfVxuICAgIH0pXG5cbiAgICBjb25zdCBjdXJyZW50UHJlc2V0RmlsdGVycyA9IGN1cnJQcmVzZXQ/LmZpbHRlcnM/Lm1hcCgoZmlsdGVyOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpbGVkOiBmaWx0ZXIuZmllbGQsXG4gICAgICAgIHF1ZXJ5OiBmaWx0ZXIucXVlcnksXG4gICAgICAgIF9pZHM6IGZpbHRlcj8uX2lkc1xuICAgICAgfVxuICAgIH0pXG5cblxuICAgIC8vIGNvbnNvbGUubG9nKFwiZmlsdGVyIGNvbmdpZzogXCIsIGZpbHRlcnMpO1xuICAgIC8vIGNvbnNvbGUubG9nKFwiY3VycmVudCBwcmVzZXQgZmlsdGVyczogXCIsIGN1cnJlbnRQcmVzZXRGaWx0ZXJzKTtcblxuICAgIC8vIGNvbnNvbGUubG9nKCdpc0VxdWFsJywgc3RyaW5nc0N1cnJlbnRQcmVzdENvbHMgPT0gc3RyaW5nQ29sdW1ucyk7XG4gICAgLy8gY29uc29sZS5sb2coJ0N1cnJlbnQgVGVtcCBQcmVzZXQgOiAnLCBjdXJyUHJlc2V0KVxuICAgIC8vIGNvbnNvbGUubG9nKCdDdXJyZW50IFRlbXAgUHJlc2V0IENvbHMgY29sdW1uczogJywgY3VycmVudFByZXNldENvbHVtbnMpXG4gICAgLy8gY29uc29sZS5sb2coJ0N1cnJlbnQgY29sdW1uczogJywgY29sdW1ucyk7XG5cbiAgICBpZiAoIWN1cnJlbnRQcmVzZXRDb2x1bW5zKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gKGN1cnJlbnRQcmVzZXRDb2x1bW5zICYmIChzdHJpbmdzQ3VycmVudFByZXN0Q29scyA9PSBzdHJpbmdDb2x1bW5zKSAmJiAoSlNPTi5zdHJpbmdpZnkoZmlsdGVycykgPT0gSlNPTi5zdHJpbmdpZnkoY3VycmVudFByZXNldEZpbHRlcnMpKSAmJiAodGhpcy5mb250RmFpbWx5ID09IGN1cnJQcmVzZXQuY29uZmlnLmZvbnRGYWltbHkpXG4gICAgICAmJiAodGhpcy5ib2R5VGV4dEZvbnRzU2l6ZSA9PSBjdXJyUHJlc2V0LmNvbmZpZy5ib2R5VGV4dEZvbnRzU2l6ZSkgJiZcbiAgICAgICh0aGlzLmhlYWRlclRleHRGb250c1NpemUgPT0gdGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplKVxuICAgICAgJiYgdGhpcy5jdXJyZXRhVGFibGVQcmVzZXRGb3JVcGRhdGUuY29uZmlnLnNob3dWZXJ0aWNhbEJvcmRlciA9PSB0aGlzLnNob3dWZXJ0aWNhbEJvcmRlclxuICAgICAgJiYgdGhpcy5jdXJyZXRhVGFibGVQcmVzZXRGb3JVcGRhdGUuY29uZmlnLmZvbnRGYWltbHkgPT0gdGhpcy5mb250RmFpbWx5XG4gICAgICAmJiB0aGlzLmN1cnJldGFUYWJsZVByZXNldEZvclVwZGF0ZS5jb25maWcuc2VsZWN0ZWRUYWJsZUxheW91dCA9PSB0aGlzLnNlbGVjdGVkVGFibGVMYXlvdXRcbiAgICAgICYmIHRoaXMuY3VycmV0YVRhYmxlUHJlc2V0Rm9yVXBkYXRlLmNvbmZpZy5ib2R5VGV4dEZvbnRzU2l6ZSA9PSB0aGlzLmJvZHlUZXh0Rm9udHNTaXplXG4gICAgICAmJiB0aGlzLmN1cnJldGFUYWJsZVByZXNldEZvclVwZGF0ZS5jb25maWcucm93U2hhZGluZ0VuYWJsZWQgPT0gdGhpcy5yb3dTaGFkaW5nRW5hYmxlZCk7XG5cbiAgICAvLyByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIG9uQWN0aW9uQnV0dG9uQ2xpY2soYnV0dG9uOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0ZXh0ID0gYnV0dG9uPy50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIGlmICh0ZXh0ID09ICdhY3RpdmUgZGF0YScgfHwgdGV4dCA9PSAnYWN0aXZlJyB8fCB0ZXh0ID09ICdkYXRhIGFjdGl2ZScgfHwgdGV4dCA9PSAndW5hcmNoaXZlZCBkYXRhJyB8fCB0ZXh0ID09ICd1bmFyY2hpdmUgZGF0YScpIHRoaXMuY2xlYXJTZWxlY3Rpb25TdGF0ZSh0aGlzLnRhYmxlVHlwZSk7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIGxpc3RpbmdUeXBlOiB0aGlzLmxpc3RpbmdUeXBlLFxuICAgICAgICBvYmo6IGJ1dHRvblxuICAgICAgfSxcbiAgICAgIGV2ZW50VHlwZTogXCJvbkFjdGlvbkJ1dHRvbkNsaWNrXCIsXG4gICAgfTtcbiAgICB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KGV2ZW50KTtcbiAgfVxuXG5cbiAgc2V0QWN0aXZlVGFiKHRhYjogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlVGFiID0gdGFiO1xuICAgIGNvbnN0IGFsbFRhYnMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhY3RpdmVUYWJzJykgfHwgJ3t9Jyk7XG4gICAgYWxsVGFic1t0aGlzLnRhYmxlVHlwZV0gPSB0YWI7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2FjdGl2ZVRhYnMnLCBKU09OLnN0cmluZ2lmeShhbGxUYWJzKSk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZGF0YToge1xuICAgICAgICB0YWJsZVR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgICAgICBvYmo6IHRhYlxuICAgICAgfSxcbiAgICAgIGV2ZW50VHlwZTogJ29uVGFiQ2hhbmdlJyxcbiAgICB9O1xuXG4gICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudCk7XG4gIH1cblxuICBnZXRCYWNrZ3JvdW5kQ29sb3Iocm93OiBhbnksIGlzRXZlbjogYm9vbGVhbiwgc2VjdGlvbjogJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5ob3ZlcmVkUm93SWQgPT09IChyb3cuX2lkIHx8IHJvdy5pZCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvd0hvdmVyQ29sb3I7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzUm93U2VsZWN0ZWQocm93KSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2hlY2tlZFJvd0JhY2tncm91bmRDb2xvcjtcbiAgICB9XG4gICAgbGV0IGJhc2VDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKHRoaXMucm93U2hhZGluZ0VuYWJsZWQpIHtcbiAgICAgIGJhc2VDb2xvciA9IGlzRXZlbiA/IHRoaXMuZXZlblJvd3NCYWNrZ3JvdW5kQ29sb3IgOiB0aGlzLm9kZFJvd3NCYWNrZ3JvdW5kQ29sb3I7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJhc2VDb2xvciA9IHRoaXMuZXZlblJvd3NCYWNrZ3JvdW5kQ29sb3I7XG4gICAgfVxuICAgIGlmICghYmFzZUNvbG9yKSB7XG4gICAgICBpZiAoc2VjdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIGJhc2VDb2xvciA9IHRoaXMubGVmdFBpbm5lZEJhY2tncm91bmRDb2xvcjtcbiAgICAgIH0gZWxzZSBpZiAoc2VjdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICBiYXNlQ29sb3IgPSB0aGlzLnJpZ2h0UGlubmVkQmFja2dyb3VuZENvbG9yO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmFzZUNvbG9yID0gdGhpcy5ib2R5QmFja2dyb3VuZENvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmFzZUNvbG9yO1xuICB9XG5cbiAgaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY2VudGVyUGlubmVkSGVhZGVyPy5uYXRpdmVFbGVtZW50KSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgZWwgPSB0aGlzLmNlbnRlclBpbm5lZEhlYWRlci5uYXRpdmVFbGVtZW50O1xuICAgIHJldHVybiBlbC5zY3JvbGxXaWR0aCA+IGVsLmNsaWVudFdpZHRoO1xuICB9XG5cblxuICBnZXRTYWZlQ29tbWVudChkZXNjcmlwdGlvbjogc3RyaW5nKTogU2FmZUh0bWwge1xuICAgIHJldHVybiB0aGlzLmNsZWFuRWRpdG9yQ29udGVudChkZXNjcmlwdGlvbik7XG4gIH1cbiAgY2xlYW5FZGl0b3JDb250ZW50KGNvbnRlbnQ6IHN0cmluZyk6IFNhZmVIdG1sIHtcbiAgIHJldHVybiB0aGlzLmh0bWxTYW5hdGl6ZXJTZXJ2aWNlLmNsZWFuRWRpdG9yQ29udGVudChjb250ZW50KTtcbiAgfVxuXG4gIGdldEV4dGVudGlvbih1cmw6IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh1cmwgIT09ICctJykge1xuICAgICAgaWYgKHR5cGVvZiAodXJsKSA9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdXJsLnNwbGl0KCcuJykucG9wKClcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh1cmwpKSB7XG4gICAgICAgIHJldHVybiB1cmxbMF0uc3BsaXQoJy4nKS5wb3AoKVxuICAgICAgfSBlbHNlIHJldHVybiAnLSdcbiAgICB9XG4gICAgZWxzZSByZXR1cm4gJy0nXG4gIH1cblxuICBkb3dubG9hZEF0dGNobWVudCh1cmw6IGFueSwgZmlsZT86IGFueSkge1xuICAgIC8vIHRoaXMub25FdmVudC5lbWl0KHtcbiAgICAvLyAgIGRvd25sb2FkOiB0cnVlLFxuICAgIC8vIH0pO1xuICAgIC8vIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZGF0YSlcbiAgICAvLyBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgbGluay5ocmVmID0gdXJsO1xuICAgIGxpbmsuZG93bmxvYWQgPSAnJztcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuICAgIGxpbmsuY2xpY2soKTtcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspO1xuXG4gIH1cbiAgZnVsbEltYWdlU3JjOiBzdHJpbmcgfCBudWxsID0gJyc7XG4gIG9wZW5GdWxsSW1hZ2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGlmICh0YXJnZXQudGFnTmFtZSA9PT0gJ0lNRycpIHtcbiAgICAgIHRoaXMuZnVsbEltYWdlU3JjID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnc3JjJyk7XG4gICAgfVxuICB9XG5cbiAgYWRkU3R5bGVzVG9JbWFnZXMoKTogdm9pZCB7XG4gICAgY29uc3QgaW1hZ2VzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmNvbW1lbnQtY29udGVudCBpbWcnKTtcbiAgICBpbWFnZXMuZm9yRWFjaCgoaW1nKSA9PiB7XG4gICAgICAvLyBBcHBseSBpbmxpbmUgc3R5bGVzIGRpcmVjdGx5XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGltZywgJ3dpZHRoJywgJzcwcHgnKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoaW1nLCAnYm9yZGVyLXJhZGl1cycsICcxNnB4Jyk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGltZywgJ21hcmdpbicsICc4cHgnKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoaW1nLCAnY3Vyc29yJywgJ3BvaW50ZXInKTtcblxuICAgICAgLy8gQWRkIGNsaWNrIGxpc3RlbmVyIHRvIHNob3cgZnVsbHNjcmVlbiBpbWFnZSBvbiBjbGlja1xuICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oaW1nLCAnY2xpY2snLCAoKSA9PiB0aGlzLm9uSW1hZ2VDbGljaygoaW1nIGFzIEhUTUxJbWFnZUVsZW1lbnQpLnNyYykpO1xuICAgIH0pO1xuICB9XG5cbiAgb25JbWFnZUNsaWNrKHNyYzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5mdWxsc2NyZWVuSW1hZ2UgPSBzcmM7XG4gIH1cblxuICBAVmlld0NoaWxkKCdmdWxsc2NyZWVuSW1hZ2VUZW1wbGF0ZScpIGZ1bGxzY3JlZW5JbWFnZVRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcbiAgcHJpdmF0ZSBmdWxsc2NyZWVuVmlld1JlZjogRW1iZWRkZWRWaWV3UmVmPGFueT4gfCBudWxsID0gbnVsbDtcblxuICBpY29uTWFwOiBSZWNvcmQ8c3RyaW5nLCAocm93OiBhbnksIGNvbDogYW55KSA9PiBzdHJpbmc+ID0ge1xuICAgIGF0dGFjaG1lbnRzX2NvdW50OiAoKSA9PiB0aGlzLnNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2F0dGFjaG1lbnRzLnN2ZycsXG4gICAgY29tbWVudF9jb3VudDogKCkgPT4gdGhpcy5zaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jb21tZW50cy5zdmcnLFxuICAgIHByaW9yaXR5OiAocm93LCBjb2wpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9XG4gICAgICAgIHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpPy52YWx1ZSB8fFxuICAgICAgICB0aGlzLmdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKT8ubmFtZSB8fFxuICAgICAgICB0aGlzLmdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5zaW5nbGVTcGFBc3NldHNQYXRoICtcbiAgICAgICAgJ2RhdGEtZ3JpZC9pY29ucy8nICtcbiAgICAgICAgKHZhbCA/PyAnZGVmYXVsdCcpICtcbiAgICAgICAgJy5zdmcnXG4gICAgICApO1xuICAgIH0sXG4gIH07XG5cbiAgdG9nZ2xlRnVsbHNjcmVlbigpIHtcbiAgICB0aGlzLmlzRnVsbFNjcmVlbiA9ICF0aGlzLmlzRnVsbFNjcmVlbjtcbiAgICBjb25zdCBlbGVtID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IGFzIGFueTtcbiAgICBpZiAoIWRvY3VtZW50LmZ1bGxzY3JlZW5FbGVtZW50KSB7XG4gICAgICBpZiAoZWxlbS5yZXF1ZXN0RnVsbHNjcmVlbikge1xuICAgICAgICBlbGVtLnJlcXVlc3RGdWxsc2NyZWVuKCk7XG4gICAgICB9IGVsc2UgaWYgKGVsZW0ubW96UmVxdWVzdEZ1bGxTY3JlZW4pIHtcbiAgICAgICAgZWxlbS5tb3pSZXF1ZXN0RnVsbFNjcmVlbigpO1xuICAgICAgfSBlbHNlIGlmIChlbGVtLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKSB7XG4gICAgICAgIGVsZW0ud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4oKTtcbiAgICAgIH0gZWxzZSBpZiAoZWxlbS5tc1JlcXVlc3RGdWxsc2NyZWVuKSB7XG4gICAgICAgIGVsZW0ubXNSZXF1ZXN0RnVsbHNjcmVlbigpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4pIHtcbiAgICAgICAgZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKTtcbiAgICAgIH0gZWxzZSBpZiAoKGRvY3VtZW50IGFzIGFueSkubW96Q2FuY2VsRnVsbFNjcmVlbikge1xuICAgICAgICAoZG9jdW1lbnQgYXMgYW55KS5tb3pDYW5jZWxGdWxsU2NyZWVuKCk7XG4gICAgICB9IGVsc2UgaWYgKChkb2N1bWVudCBhcyBhbnkpLndlYmtpdEV4aXRGdWxsc2NyZWVuKSB7XG4gICAgICAgIChkb2N1bWVudCBhcyBhbnkpLndlYmtpdEV4aXRGdWxsc2NyZWVuKCk7XG4gICAgICB9IGVsc2UgaWYgKChkb2N1bWVudCBhcyBhbnkpLm1zRXhpdEZ1bGxzY3JlZW4pIHtcbiAgICAgICAgKGRvY3VtZW50IGFzIGFueSkubXNFeGl0RnVsbHNjcmVlbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQ2VsbEV2ZW50KGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmN1c3RvbUNlbGxFdmVudC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgZmxhdHRlbkdyb3VwKHJvdzogYW55KTogYW55W10ge1xuICAgIGNvbnN0IHJlc3VsdDogYW55W10gPSBbXTtcbiAgICBjb25zdCB0cmF2ZXJzZSA9IChub2RlOiBhbnkpID0+IHtcbiAgICAgIGlmICghbm9kZSkgcmV0dXJuO1xuICAgICAgaWYgKG5vZGUuaXNHcm91cCkge1xuICAgICAgICBub2RlLmNoaWxkcmVuPy5mb3JFYWNoKChjaGlsZDogYW55KSA9PiB0cmF2ZXJzZShjaGlsZCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0LnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0cmF2ZXJzZShyb3cpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBzZWxlY3RHcm91cFJvdyhlOiBFdmVudCwgcm93OiBhbnkpIHtcbiAgICBjb25zdCBjaGVja2JveCA9IGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgaXNDaGVja2VkID0gY2hlY2tib3guY2hlY2tlZDtcbiAgICAvLyBHZXQgYWxsIGRlZXAgZGF0YSByb3dzIChsZWFmIHJvd3MpXG4gICAgY29uc3QgbGVhZlJvd3MgPSB0aGlzLmZsYXR0ZW5Hcm91cChyb3cpO1xuICAgIGlmIChpc0NoZWNrZWQpIHtcbiAgICAgIGxlYWZSb3dzLmZvckVhY2gociA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0gci5faWQgfHwgci5pZDtcbiAgICAgICAgaWYgKGlkKSB0aGlzLnNlbGVjdGVkUm93cy5hZGQoaWQpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlYWZSb3dzLmZvckVhY2gociA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0gci5faWQgfHwgci5pZDtcbiAgICAgICAgaWYgKGlkKSB0aGlzLnNlbGVjdGVkUm93cy5kZWxldGUoaWQpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IGlkcyA9IEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJvd3MpO1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZGF0YToge1xuICAgICAgICBsaXN0aW5nVHlwZTogdGhpcy5saXN0aW5nVHlwZSxcbiAgICAgICAgb2JqOiBpZHNcbiAgICAgIH0sXG4gICAgICBldmVudFR5cGU6IFwib25TZWxlY3RSb3dcIixcbiAgICB9XG4gICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgZ2V0R3JvdXBDaGVja2VkU3RhdGUocm93OiBhbnkpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXJvdy5pc0dyb3VwKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgbGVhZlJvd3MgPSB0aGlzLmZsYXR0ZW5Hcm91cChyb3cpO1xuICAgIGxldCBjaGVja2VkQ291bnQgPSAwO1xuICAgIGxlYWZSb3dzLmZvckVhY2gociA9PiB7XG4gICAgICBjb25zdCBpZCA9IHIuX2lkIHx8IHIuaWQ7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFJvd3MuaGFzKGlkKSkgY2hlY2tlZENvdW50Kys7XG4gICAgfSk7XG4gICAgaWYgKGNoZWNrZWRDb3VudCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChjaGVja2VkQ291bnQgPT09IGxlYWZSb3dzLmxlbmd0aCkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldENlbGxUaXRsZShyb3c6IGFueSwgY29sOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbCA9IHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpO1xuXG4gICAgaWYgKCF0aGlzLmlzTmVzdGVkVmFsdWVBcnJheShyb3csIGNvbC5maWVsZCkpIHtcbiAgICAgIGlmIChjb2wudHlwZSA9PT0gJ2RhdGUnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbW1vblNldmljZS5mb3JtYXREYXRlVmFsdWUodmFsLCB0aGlzLmRhdGVGb3JtYXQpO1xuICAgICAgfSBlbHNlIGlmIChjb2w/LmlzX2Ftb3VudCkge1xuICAgICAgICBpZiAoIXZhbCkgcmV0dXJuIGAwLjAwYFxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRDdXJyZW5jeS50cmFuc2Zvcm0odmFsLCB0aGlzLmN1cnJlbmN5Rm9ybWF0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgdmFsPy52YWx1ZSA/P1xuICAgICAgICB2YWw/Lm5hbWUgPz9cbiAgICAgICAgdmFsID8/XG4gICAgICAgIChjb2wuaXNfYW1vdW50ID8gJzAnIDogJy0nKVxuICAgICAgKSArICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGZpcnN0ID0gdmFsPy5bMF07XG5cbiAgICByZXR1cm4gKFxuICAgICAgZmlyc3Q/LmRlcGFydG1lbnRfbmFtZSA/P1xuICAgICAgZmlyc3Q/LnJvbGVOYW1lID8/XG4gICAgICBmaXJzdD8uZnVsbF9uYW1lID8/XG4gICAgICBmaXJzdD8udmFsdWUgPz9cbiAgICAgIGZpcnN0Py5uYW1lID8/XG4gICAgICAnLSdcbiAgICApO1xuICB9XG5cblxuICBmaW5pc2hFZGl0KGV2ZW50OiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZygnY2VsbCBlZGl0ZWRkZGRkZGRkZGRkZGRkZDogJywgZXZlbnQpXG4gIH1cblxuXG4gIGdldER5bmFtaWNSaWdodChjb2w6IGFueSwgc2VjdGlvbjogc3RyaW5nLCBjb2xJbmRleDogbnVtYmVyLCBzdWJDb2xJbmRleDogbnVtYmVyKXtcbiAgICBpZihzZWN0aW9uID09ICdyaWdodCcgJiYgdGhpcy5wcmV2aWV3UmlnaHRQaW5uZWRDb2x1bW5zPy5sZW5ndGggPT0gMSAmJiBjb2wud2lkdGggPCAyMDApe1xuICAgICAgcmV0dXJuIDEwMDtcbiAgICB9ZWxzZSBpZihzZWN0aW9uID09ICdyaWdodCcpe1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2UgaWYoc2VjdGlvbiA9PSAncHJldmlld0NlbnRlckNvbHVtbnMnICYmIGNvbEluZGV4ID09ICh0aGlzLnByZXZpZXdDZW50ZXJDb2x1bW5zPy5sZW5ndGggLSAxKSAmJiBjb2wud2lkdGggPCAyMDApe1xuICAgICAgcmV0dXJuIDIwMFxuICAgIH1lbHNle1xuICAgICAgcmV0dXJuIGNvbC53aWR0aCAtIDQ1O1xuICAgIH1cbiAgfVxuXG4gIGJsdXJJbnB1dChldmVudDogRXZlbnQsIHJvdzogYW55LCBjb2w6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQ/LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGlucHV0Py5ibHVyKCk7XG4gICAgdGhpcy5zZXRBY3RpdmVDZWxsKHJvdywgY29sKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICB0aGlzLmVkaXRpbmdLZXkgPSAnJztcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMCk7XG4gIH1cblxuZ2V0VmFsaWRBY3Rpb25zKGVsZW1lbnQ6IGFueSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHRoaXMuYWN0aW9uVmFsaWRhdG9yLmdldFZhbGlkQWN0aW9ucyhcbiAgICB0aGlzLm9yaWdpbmFsQWN0aW9ucywgLy8gQWx3YXlzIHBhc3Mgb3JpZ2luYWwgdW5tb2RpZmllZCBhY3Rpb25zXG4gICAgZWxlbWVudCxcbiAgICB7XG4gICAgICAvLyB1c2VySWQ6IHRoaXMuaWQsXG4gICAgICB0YWJsZVR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgICAgc2hvd1VuTGluazogdGhpcy5zaG93VW5MaW5rLFxuICAgICAgcGFja2FnZURhdGE6IHRoaXMucGFja2FnZURhdGFcbiAgICB9XG4gICk7XG59XG5wcml2YXRlIGlzU3RhdHVzRmllbGQoZmllbGROYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKCFmaWVsZE5hbWUpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgbG93ZXJGaWVsZCA9IGZpZWxkTmFtZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gbG93ZXJGaWVsZCA9PT0gJ3N0YXR1cycgfHwgXG4gICAgICAgICBsb3dlckZpZWxkLmluY2x1ZGVzKCdzdGF0dXMnKSB8fCBcbiAgICAgICAgIGxvd2VyRmllbGQgPT09ICdhdmFpbHN0YXR1cycgfHxcbiAgICAgICAgIGxvd2VyRmllbGQgPT09ICdhY2NvdW50X3N0YXR1cycgfHxcbiAgICAgICAgIGxvd2VyRmllbGQgPT09ICdpc19jdXN0b21fZ3JhZGUnO1xufVxuXG4vKipcbiAqIENhcGl0YWxpemVzIHRoZSBmaXJzdCBsZXR0ZXIgb2YgZWFjaCB3b3JkIGluIGEgc3RyaW5nXG4gKiBIYW5kbGVzOiBzcGFjZWQgd29yZHMsIGNhbWVsQ2FzZSwgc25ha2VfY2FzZSwga2ViYWItY2FzZSwgYW5kIGNvbXBvdW5kIHdvcmRzXG4gKi9cbnByaXZhdGUgY2FwaXRhbGl6ZVN0YXR1cyh2YWx1ZTogYW55KTogc3RyaW5nIHtcbiByZXR1cm4gdGhpcy5jb21tb25TZXZpY2UuY2FwaXRhbGl6ZVN0YXR1cyh2YWx1ZSk7XG59XG5cblxuICBncmlkQ29udGV4dCA9IHtcbiAgICBhcHBseUZpbHRlcjogKGNvbDogYW55KSA9PiB0aGlzLmFwcGx5RmlsdGVyT25Db2x1bW4oY29sKSxcbiAgICBjbGVhckZpbHRlcjogKGNvbDogYW55KSA9PiB0aGlzLnJlbW92ZUZpbHRlckZyb21Db2x1bW4oY29sKVxuICB9O1xuXG4gIHByaXZhdGUgY2xvc2VBbGxGaWx0ZXJNZW51cygpOiB2b2lkIHtcbiAgICB0aGlzLmlzRmlsdGVyT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuaXNBY3RpdmVGaWx0ZXJPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5hY3RpdmVUb3BCdXR0b24gPSAnJztcbiAgICB0aGlzLmFjdGl2ZUZpbHRlckNlbGwgPSBudWxsO1xuICAgIHRoaXMuaXNUaHJlZURvdHNGaWx0ZXJPcGVuID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGVtaXRGaWx0ZXJzKCk6IHZvaWQge1xuICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jb21tb25TZXZpY2UubWFpbkNvbnRhaW5lckxlZnQgPVxuICAgICAgICB0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcblxuICAgICAgdGhpcy5maWx0ZXJPcHRpb25zLmVtaXQoZmlsdGVycyk7XG4gICAgfSwgMjAwKTtcbiAgfVxuXG5cblxuICBhcHBseUZpbHRlck9uQ29sdW1uKGNvbDogYW55KSB7XG4gICAgdGhpcy5jbG9zZUFsbEZpbHRlck1lbnVzKCk7XG4gICAgY29uc3QgZmlsdGVyID0ge1xuICAgICAgZmllbGQ6IGNvbC5maWVsZCxcbiAgICAgIHNlYXJjaDogY29sLnNlYXJjaCxcbiAgICAgIHF1ZXJ5OiBjb2wucXVlcnksXG4gICAgICB0eXBlOiBjb2wudHlwZSxcbiAgICAgIF9pZHM6IGNvbC5faWRzXG4gICAgfTtcblxuICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSB0aGlzLmZpbHRlcnNDb25maWcuZmluZEluZGV4KGYgPT4gZi5maWVsZCA9PT0gY29sLmZpZWxkKTtcblxuICAgIGlmIChleGlzdGluZ0luZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5maWx0ZXJzQ29uZmlnW2V4aXN0aW5nSW5kZXhdID0gZmlsdGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlcnNDb25maWcucHVzaChmaWx0ZXIpO1xuICAgIH1cbiAgICB0aGlzLmNvbW1vblNldmljZS5yZXBsYWNlQ29sdW1uUXVlcnkodGhpcy5jb2x1bW5zLCBjb2wsIGNvbC5xdWVyeSk7XG4gICAgdGhpcy5lbWl0RmlsdGVycygpO1xuXG4gIH1cblxuICByZW1vdmVGaWx0ZXJGcm9tQ29sdW1uKGNvbDogYW55KSB7XG4gICAgdGhpcy5jbG9zZUFsbEZpbHRlck1lbnVzKCk7XG4gICAgY29uc3QgZW1wdHlRdWVyeSA9IHtcbiAgICAgIGZpcnN0X2NvbmRpdGlvbjogbnVsbCxcbiAgICAgIGZpcnN0X3ZhbHVlOiBudWxsLFxuICAgICAgY29uZGl0aW9uOiAnbm9uZScsXG4gICAgICBzZWNvbmRfY29uZGl0aW9uOiBudWxsLFxuICAgICAgc2Vjb25kX3ZhbHVlOiBudWxsXG4gICAgfTtcblxuICAgIHRoaXMuY29tbW9uU2V2aWNlLnJlcGxhY2VDb2x1bW5RdWVyeSh0aGlzLmNvbHVtbnMsIGNvbCwgZW1wdHlRdWVyeSk7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZpbHRlcnNDb25maWcuZmluZEluZGV4KChmOiBhbnkpID0+IGYuZmllbGQgPT09IGNvbC5maWVsZCk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5maWx0ZXJzQ29uZmlnLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlRmlsdGVyQ2VsbCA9IG51bGw7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuZW1pdEZpbHRlcnMoKTtcbiAgfVxuXG4gIGdldEZvcm1hdGVkRGF0ZSh2YWwgOiBhbnkpe1xuICAgIHJldHVybiB0aGlzLmNvbW1vblNldmljZS5mb3JtYXREYXRlVmFsdWUodmFsLCB0aGlzLmRhdGVGb3JtYXQpO1xuICB9XG5cbmNsb3NlQWxsRXhwYW5kZWRSb3dzKCk6IHZvaWQge1xuICBpZiAodGhpcy5rZWVwTXVsdGlwbGVFeHBhbmRlZERldGFpbHMpIHtcbiAgICB0aGlzLmV4cGFuZGVkZWREZXRhaWxSb3dzID0gW107XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5leHBhbmRlZGVkRGV0YWlsUm93cyA9ICcnO1xuICB9XG4gIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbn1cbn0iLCI8ZGl2IGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmUgaC0xMDBcIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG1iLTIgYWxpZ24taXRlbXMtY2VudGVyIHBvc2l0aW9uLXJlbGF0aXZlXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJuYXYgbmF2LXRhYnNcIiAqbmdJZj1cInRhYnM/Lmxlbmd0aFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibmF2IG5hdi10YWJzXCIgaWQ9XCJuYXYtdGFiXCIgcm9sZT1cInRhYmxpc3RcIj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZXRBY3RpdmVUYWIodGFiKVwiXG4gICAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlVGFiID09IHRhYlwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgdGFiIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImdsb2JhbC1zZWFyY2hcIiBbc3R5bGUud2lkdGgucHhdPVwiMzUwXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKm5nSWY9XCJlbmFibGVHbG9iYWxTZWFyY2hcIlxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvc2VhcmNoLnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG14LTIgcG9zaXRpb24tYWJzb2x1dGUgaWNvblwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICNnbG9iYWxTZWFyY2hJbnB1dFxuICAgICAgICAgICpuZ0lmPVwiZW5hYmxlR2xvYmFsU2VhcmNoXCJcbiAgICAgICAgICBzdHlsZT1cImhlaWdodDogMzZweFwiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVHlwZSB0byBzZWFyY2gsIHRoZW4gcHJlc3MgRW50ZXJcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwidGFibGVTZWFyY2hcIlxuICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9uR2xvYmFsU2VhcmNoKClcIlxuICAgICAgICAgIChpbnB1dCk9XCJvblNlYXJjaElucHV0KCRldmVudClcIlxuICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgdGFibGUtcmlnaHQtdG9wLWFjdGlvbnNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJidXR0b25zPy5sZW5ndGhcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBidXR0b25zOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgYWN0aW9uLWJ1dHRvbnMtcm93IG1zLTJcIlxuICAgICAgICAgICpuZ0lmPVwiYnV0dG9uPy5oYXNfcGVybWlzc2lvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8YVxuICAgICAgICAgICAgaHJlZj1cIkphdmFTY3JpcHQ6dm9pZCgwKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25BY3Rpb25CdXR0b25DbGljayhidXR0b24ubmFtZSlcIlxuICAgICAgICAgICAgW2NsYXNzLm1lLTJdPVwiaSA9PSBidXR0b25zLmxlbmd0aCAtMVwiXG4gICAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBidXR0b24tc21hbGwgYnRuIGJvcmRlciBib3JkZXItcHJpbWFyeSBidG4tYWN0aXZlLXByaW1hcnkgIHAtMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgcHgtM1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgKm5nSWY9XCJidXR0b24uaXNfc2hvd0ljb25cIlxuICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zLycgKyBidXR0b24uaWNvbiArICcuc3ZnJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgY2xhc3M9XCJsYWJlbC1oaWRkZW4gdGV4dC13aGl0ZVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5tcy0wXT1cImJ1dHRvbi5pc19zaG93SWNvblwiXG4gICAgICAgICAgICAgID57eyBidXR0b24/Lm5hbWUgfX08L3NwYW5cbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCIhc2hvd0ZpbHRlclJvd1wiXG4gICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgcG9zaXRpb24tcmVsYXRpdmUgYWN0aW9uLWJ1dHRvbnMtcm93XCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU9wZW5GaWx0ZXIoKVwiXG4gICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2hvd0ZpbHRlcnNcIlxuICAgICAgPlxuICAgICAgICA8YVxuICAgICAgICAgIGhyZWY9XCJKYXZhU2NyaXB0OnZvaWQoMClcIlxuICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi1zbWFsbCBidG4gYnRuLWFjdGl2ZS1wcmltYXJ5IGJvcmRlciBib3JkZXItcHJpbWFyeSBtZS0yIHAtMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgcHgtM1wiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9maWx0ZXItMi5zdmcnXCJcbiAgICAgICAgICAgIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMlwiXG4gICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsLWhpZGRlbiB0ZXh0LXdoaXRlXCI+RmlsdGVyczwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICpuZ0lmPVwiYWN0aXZlRmlsdGVyZWRDb2x1bW5zPy5sZW5ndGhcIlxuICAgICAgICAgIHN0eWxlPVwiXG4gICAgICAgICAgICB3aWR0aDogN3B4O1xuICAgICAgICAgICAgaGVpZ2h0OiA3cHg7XG4gICAgICAgICAgICBib3gtc2hhZG93OiAwcHggMHB4IDNweCAjMDAyMmZmO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDAsIDYwLCAyNTUpO1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgcmlnaHQ6IDE2cHg7XG4gICAgICAgICAgICB0b3A6IDEwcHg7XG4gICAgICAgICAgXCJcbiAgICAgICAgICBjbGFzcz1cInJvdW5kZWQtY2lyY2xlIGQtYmxvY2tcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgZC1ub25lXCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFjdGlvbnMoJ2FkdmFuY2UtZmlsdGVyJylcIlxuICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVRvcEJ1dHRvbiA9PT0gJ2FkdmFuY2UtZmlsdGVyJ1wiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy96b29tLWNoYXJnZS5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiB0b3AtaWNvbiBtZS0yXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyIGFjdGlvbi1idXR0b25zLXJvd1wiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVBY3Rpb25zKCdzZXR0aW5nJylcIlxuICAgICAgICBbY2xhc3MuYWN0aXZlXT1cIlxuICAgICAgICAgIGFjdGl2ZVRvcEJ1dHRvbiA9PT0gJ3NldHRpbmcnIHx8XG4gICAgICAgICAgYWN0aXZlVG9wQnV0dG9uID09PSAndGFibGUtbGF5b3V0JyB8fFxuICAgICAgICAgIGFjdGl2ZVRvcEJ1dHRvbiA9PT0gJ3RhYmxlLXByZXNldHMnIHx8XG4gICAgICAgICAgYWN0aXZlVG9wQnV0dG9uID09PSAnc2hvdy1oaWRlLWNvbHVtbnMnXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDwhLS0gPHNwYW5cbiAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3NldHRpbmdzLTIuc3ZnJ1wiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gdG9wLWljb24gbWUtMlwiXG4gICAgICAgID48L3NwYW4+IC0tPlxuICAgICAgICA8YVxuICAgICAgICAgIGhyZWY9XCJKYXZhU2NyaXB0OnZvaWQoMClcIlxuICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi1zbWFsbCBidG4gYnRuLWFjdGl2ZS1wcmltYXJ5IGJvcmRlciBib3JkZXItcHJpbWFyeSBwLTAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHB4LTNcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvc2V0dGluZ3MtMi5zdmcnXCJcbiAgICAgICAgICAgIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMlwiXG4gICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsLWhpZGRlbiB0ZXh0LXdoaXRlXCI+U2V0dGluZzwvc3Bhbj5cbiAgICAgICAgPC9hPlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cImFjdGl2ZVRvcEJ1dHRvbiA9PT0gJ3NldHRpbmcnXCJcbiAgICAgICAgICBjbGFzcz1cImFjdGlvbnMtZHJvcGRvd24gbXQtMSBhY3Rpb25zLWRyb3Bkb3duLXNldHRpbmdcIlxuICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IHNob3cgc2hhZG93IGN1c3RvbS1tZW51XCI+XG4gICAgICAgICAgICA8IS0tIFRhYmxlIExheW91dCAtLT5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgdG9nZ2xlQWN0aW9ucygndGFibGUtbGF5b3V0JylcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgID48c3BhblxuICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvdGFibGUtMi5zdmcnXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICBUYWJsZSBMYXlvdXQ8L3NwYW5cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGV2cm9uLXJpZ2h0LnN2ZydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPCEtLSBUYWJsZSBQcmVzZXRzIC0tPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgdG9nZ2xlQWN0aW9ucygndGFibGUtcHJlc2V0cycpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgID48c3BhblxuICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvbGlzdC1kZXRhaWxzLnN2ZydcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgIFRhYmxlIFByZXNldHM8L3NwYW5cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGV2cm9uLXJpZ2h0LnN2ZydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICA8IS0tIENvbHVtbnMgLS0+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAqbmdJZj1cIiFzaG93U2lkZU1lbnVcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyB0b2dnbGVBY3Rpb25zKCdzaG93LWhpZGUtY29sdW1ucycpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhbGlnbi1pdGVtcy1jZW50ZXIgZC1mbGV4XCJcbiAgICAgICAgICAgICAgICA+PHNwYW5cbiAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZXllLnN2ZydcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICBDb2x1bW5zPC9zcGFuXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXV0ZWQtdGV4dFwiPnt7IGNvbHVtbnNDb3VudCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2E+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1kaXZpZGVyXCI+PC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gRmlsdGVyIC0tPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU9wZW5GaWx0ZXIoKTsgYWN0aXZlVG9wQnV0dG9uID0gJyc7XCJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhc2hvd0ZpbHRlclJvd1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2ZpbHRlci0yLnN2ZydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTIgbXQtMSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgIEZpbHRlclxuICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICA8IS0tIERvd25sb2FkIC0tPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkQ3N2KCdjc3YnKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Rvd25sb2FkLnN2ZydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTIgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICBDU1YgRXhwb3J0XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAqbmdJZj1cImVuYWJsZUV4cG9ydFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZENzdigneGxzeCcpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZG93bmxvYWQuc3ZnJ1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMiBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgIEV4Y2VsIEV4cG9ydFxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPCEtLSBGb250IEZhbWlseSAmIEZvbnQgU2l6ZSAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHBiLTIgcHQtMlwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBGb250IEZhbWlseSAtLT5cbiAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtXCJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZm9udEZhaW1seVwiXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uRm9udENoYW5nZSgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBmb250IG9mIGZvbnRGYW1pbGllc1wiIFt2YWx1ZV09XCJmb250XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGZvbnQgfX1cbiAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBGb250IFNpemUgLS0+XG4gICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbVwiXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uRm9udENoYW5nZSgpXCJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiYm9keVRleHRGb250c1NpemVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHNpemUgb2YgZm9udFNpemVzXCIgW3ZhbHVlXT1cInNpemVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgc2l6ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gVGFibGUgTGF5b3V0IC0tPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY3RpdmVUb3BCdXR0b24gPT09ICd0YWJsZS1sYXlvdXQnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YWJsZUxheW91dFwiXG4gICAgICAgICAgICBjbGFzcz1cImFjdGlvbnMtZHJvcGRvd24gbXQtMVwiXG4gICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZVwiXG4gICAgICAgICAgPjwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIFRhYmxlIFByZXNldHMgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY3RpdmVUb3BCdXR0b24gPT09ICd0YWJsZS1wcmVzZXRzJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFibGVQcmVzZXRcIlxuICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb25zLWRyb3Bkb3duIG10LTFcIlxuICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGVcIlxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBUYWJsZSBQcmVzZXRzIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aXZlVG9wQnV0dG9uID09PSAnc2hvdy1oaWRlLWNvbHVtbnMnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzaG93SGlkZUNvbHVtbnNcIlxuICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb25zLWRyb3Bkb3duIG10LTFcIlxuICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGVcIlxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1idXR0b25zLXJvd1wiICpuZ0lmPVwic2hvd0Z1bGxTY3JlZW5CdXR0b25cIj5cbiAgICAgICAgPGFcbiAgICAgICAgICAqbmdJZj1cIiFpc0Z1bGxTY3JlZW5cIlxuICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi1zbWFsbCBidG4gYnRuLWFjdGl2ZS1wcmltYXJ5IGJvcmRlciBib3JkZXItcHJpbWFyeSBleHBlbmQgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRnVsbHNjcmVlbigpXCJcbiAgICAgICAgICBkYXRhLWJzLXRvZ2dsZT1cInRvb2x0aXBcIlxuICAgICAgICAgIGRhdGEtYnMtcGxhY2VtZW50PVwidG9wXCJcbiAgICAgICAgICB0aXRsZT1cIk1pbmltaXNlXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7IG1pbkFycm93OiAhaXNGdWxsU2NyZWVuLCBtYXhBcnJvdzogaXNGdWxsU2NyZWVuIH1cIlxuICAgICAgICAgIHN0eWxlPVwidHJhbnNpdGlvbjogY29sb3IgMC4yc1wiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9leHBlbmQuc3ZnJ1wiXG4gICAgICAgICAgICBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTIgbWItMVwiXG4gICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgICAgICA8YVxuICAgICAgICAgICpuZ0lmPVwiaXNGdWxsU2NyZWVuXCJcbiAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBidXR0b24tc21hbGwgYnRuIGJ0bi1hY3RpdmUtcHJpbWFyeSBib3JkZXIgYm9yZGVyLXByaW1hcnkgZXhwZW5kIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUZ1bGxzY3JlZW4oKVwiXG4gICAgICAgICAgZGF0YS1icy10b2dnbGU9XCJ0b29sdGlwXCJcbiAgICAgICAgICBkYXRhLWJzLXBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgICAgdGl0bGU9XCJNYXhpbWlzZVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyBtaW5BcnJvdzogIWlzRnVsbFNjcmVlbiwgbWF4QXJyb3c6IGlzRnVsbFNjcmVlbiB9XCJcbiAgICAgICAgICBzdHlsZT1cInRyYW5zaXRpb246IGNvbG9yIDAuMnNcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvbWluaW1pemUuc3ZnJ1wiXG4gICAgICAgICAgICBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTIgbWItMVwiXG4gICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICA8IS0tIEV4YW1wbGUgc2luZ2xlIGRhbmdlciBidXR0b24gLS0+XG5cbiAgICAgICAgPCEtLSA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtIGQtZmxleCBnYXAtMiBhY3Rpb24tYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWN0aW9ucygnYWN0aW9ucycpXCJcbiAgICAgICAgPlxuICAgICAgICAgIEFjdGlvblxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL1ZlY3Rvci5zdmcnXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwiYWN0aXZlVG9wQnV0dG9uID09PSAnYWN0aW9ucydcIlxuICAgICAgICAgIGNsYXNzPVwiYWN0aW9ucy1kcm9wZG93biBtdC0xXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IHNob3dcIj5cbiAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCIjXCI+QWN0aW9uPC9hPlxuICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgaHJlZj1cIiNcIj5Bbm90aGVyIGFjdGlvbjwvYT5cbiAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCIjXCI+U29tZXRoaW5nIGVsc2UgaGVyZTwvYT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1kaXZpZGVyXCI+PC9kaXY+XG4gICAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiI1wiPlNlcGFyYXRlZCBsaW5rPC9hPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgICpuZ0lmPVwic2hvd0ZpbHRlcnMgJiYgIXNob3dGaWx0ZXJSb3dcIlxuICAgIGNsYXNzPVwidG9wLWZpbHRlci1yb3cgYm9yZGVyLXRvcCBweS0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgIFtzdHlsZS5oZWlnaHQucHhdPVwidG9wRmlsdGVyUm93SGVpZ2h0XCJcbiAgPlxuICAgIDwhLS0gTEVGVCBTSURFIChGaWx0ZXIgdGFncyArIEZpbHRlciBidXR0b24pIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTIgYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBhY3RpdmVGaWx0ZXJlZENvbHVtbnM7IHRyYWNrQnk6IHRyYWNrQnlGaWVsZFwiXG4gICAgICAgICAgY2xhc3M9XCJmaWx0ZXItdGFnc1wiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgIGlzQWN0aXZlRmlsdGVyT3BlbiA9IHRydWU7XG4gICAgICAgICAgICAgIGFjdGl2ZVRvcEJ1dHRvbiA9ICdmaWx0ZXItY29sdW1ucyc7XG4gICAgICAgICAgICAgIG9wZW5GaWx0ZXIoY29sKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIG11dGVkLXRleHQgYWRkLWZpbHRlci1idXR0b24gYWN0aXZlLWZpbHRlcnNcIlxuICAgICAgICAgICAgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogbm93cmFwXCJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiXG4gICAgICAgICAgICAgIGNvbD8uZmllbGQgPT0gc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LmZpZWxkICYmXG4gICAgICAgICAgICAgIGlzQWN0aXZlRmlsdGVyT3BlbiAmJlxuICAgICAgICAgICAgICBhY3RpdmVUb3BCdXR0b24gPT0gJ2ZpbHRlci1jb2x1bW5zJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlYWRlci10YWcgbXQtMFwiPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sPy5waW5uZWRcIlxuICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvcGluLnN2ZydcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICB7eyBjb2wuaGVhZGVyIH19XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyByZW1vdmVDb2x1bW5GaWx0ZXJGcm9tQ29sdW1uKGNvbClcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jcm9zcy1wcmltYXJ5LnN2ZydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGNyb3NzLXNlY29uZGFyeSBtcy0yIG1iLTFcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgYWN0aXZlVG9wQnV0dG9uID09PSAnZmlsdGVyLWNvbHVtbnMnICYmXG4gICAgICAgICAgICAgIGNvbD8uZmllbGQgPT0gc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LmZpZWxkICYmXG4gICAgICAgICAgICAgIGlzQWN0aXZlRmlsdGVyT3BlblxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlsdGVyQ29sdW1uczsgY29udGV4dDogeyBjb2x1bW46IGNvbCB9XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb25zLWRyb3Bkb3duIG10LTFcIlxuICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIEZpbHRlciBCdXR0b24gLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiYWRkLWZpbHRlci1idXR0b24tbWVudVwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFjdGlvbnMoJ2ZpbHRlci1jb2x1bW5zJyk7IGlzQWN0aXZlRmlsdGVyT3BlbiA9IGZhbHNlXCJcbiAgICAgICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBtdXRlZC10ZXh0IGFkZC1maWx0ZXItYnV0dG9uIGJ1dHRvbi1maWx0ZXJcIlxuICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDcwcHhcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvcGx1cy5zdmcnXCJcbiAgICAgICAgICAgIGNsYXNzPVwibWUtMiBkYXRhLWdyaWQtc3ZnLWljb25cIlxuICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgRmlsdGVyXG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdJZj1cImFjdGl2ZVRvcEJ1dHRvbiA9PT0gJ2ZpbHRlci1jb2x1bW5zJyAmJiAhaXNBY3RpdmVGaWx0ZXJPcGVuXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlsdGVyQ29sdW1uc1wiXG4gICAgICAgICAgICBjbGFzcz1cImFjdGlvbnMtZHJvcGRvd24gbXQtMVwiXG4gICAgICAgICAgPjwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBSSUdIVCBTSURFIChVcGRhdGUgKyBSZXNldCkgLS0+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKGNsaWNrKT1cInNhdmVQcmVzZXQoKVwiXG4gICAgICAgIGNsYXNzPVwidGV4dC1wcmltYXJ5IGN1cnNvci1wb2ludGVyIGFsbC1maWx0ZXJzLXJlc2V0LWJ1dHRvblwiXG4gICAgICAgICpuZ0lmPVwiIWNoZWNrRmlsdGVyQ2hhbmdlc0VmZmVjdCgpXCJcbiAgICAgID5cbiAgICAgICAgVXBkYXRlIFZpZXdcbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwidGV4dC1wcmltYXJ5IGN1cnNvci1wb2ludGVyIGFsbC1maWx0ZXJzLXJlc2V0LWJ1dHRvblwiXG4gICAgICAgICpuZ0lmPVwiIXRhYmxlRmlsdGVyVmlld0lkICYmIGFjdGl2ZUZpbHRlcmVkQ29sdW1ucz8ubGVuZ3RoXCJcbiAgICAgICAgKGNsaWNrKT1cImNsZWFyQWxsRmlsdGVycygpXCJcbiAgICAgID5cbiAgICAgICAgUmVzZXRcbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgW3N0eWxlLmhlaWdodF09XCJcbiAgICAgIHNob3dGaWx0ZXJzID8gJ2NhbGMoMTAwJSAtICcgKyB0b3BGaWx0ZXJSb3dIZWlnaHQgKyAncHgpJyA6ICcxMDAlJ1xuICAgIFwiXG4gICAgY2RrRHJvcExpc3RHcm91cFxuICAgIGNsYXNzPVwiZGF0YS1ncmlkLXRhYmxlLXdyYXBwZXIgb3ZlcmZsb3ctaGlkZGVuXCJcbiAgICAjZGF0YUdyaWRDb250YWluZXJcbiAgICBbc3R5bGUuZm9udEZhbWlseV09XCJmb250RmFpbWx5XCJcbiAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImJvZHlCYWNrZ3JvdW5kQ29sb3JcIlxuICAgIGlkPVwiZGF0YS1ncmlkLW1haW4tY29udGFpbmVyXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwic2hvd1Jvd3NHcm91cGluZ1wiXG4gICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICBbY2RrRHJvcExpc3REYXRhXT1cImNvbHVtbnNcIlxuICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJcbiAgICAgICAgdG9wR3JvdXBlZEJhZGdlc0JhY2tncm91bmRDb2xvciB8fCBoZWFkZXJCYWNrZ3JvdW5kQ29sb3JcbiAgICAgIFwiXG4gICAgICBjZGtEcm9wTGlzdFxuICAgICAgKGNka0Ryb3BMaXN0RW50ZXJlZCk9XCJlbnRlclRvVG9wUm93R3JvdXBpbmcoJGV2ZW50KVwiXG4gICAgICAoY2RrRHJvcExpc3RFeGl0ZWQpPVwiZXhpdGVkRnJvbVRoZVRvcFJvdygkZXZlbnQpXCJcbiAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwib25Ecm9wVG9wR3JvdXAoJGV2ZW50KVwiXG4gICAgICBbY2RrRHJvcExpc3RFbnRlclByZWRpY2F0ZV09XCJjYW5FbnRlclRvUm93c0dyb3VwaW5nXCJcbiAgICAgIGlkPVwicm93cy1ncm91cGluZy10b3AtY29udGFpbmVyXCJcbiAgICAgIGNsYXNzPVwiYm9yZGVyLWJlbG93IGQtZmxleCBweC00IGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImQtZmxleCBnYXAtMiBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICBbc3R5bGUuY29sb3JdPVwiaGVhZGVyVGV4dENvbG9yXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2p1c3RpZnkuc3ZnJ1wiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFkcmFnZ2luZ0luR3JvdXBBcmVhICYmICFncm91cGVkQ29sdW1ucz8ubGVuZ3RoXCI+XG4gICAgICAgICAgRHJhZyBoZXJlIHRvIHNldCByb3cgZ3JvdXBzXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2RrRHJvcExpc3RPcmllbnRhdGlvbj1cImhvcml6b250YWxcIlxuICAgICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJvbkdyb3VwUmVvcmRlcigkZXZlbnQpXCJcbiAgICAgICAgICBjbGFzcz1cImQtZmxleFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgICBbY2RrRHJhZ0xvY2tBeGlzXT1cIid4J1wiXG4gICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgbGV0IGNoaWxkIG9mIGdyb3VwZWRDb2x1bW5zO1xuICAgICAgICAgICAgICBsZXQgaSA9IGluZGV4O1xuICAgICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5RmllbGRcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICB0b3BHcm91cGluZ1Jvd1BsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY2hpbGQsXG4gICAgICAgICAgICAgICAgICBzaG93Q2hldnJvbjpcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZENvbHVtbnMubGVuZ3RoID4gMSAmJiBpICE9IGdyb3VwZWRDb2x1bW5zLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgY2RrRHJhZ1ByZXZpZXdcbiAgICAgICAgICAgICAgPjxkaXYgY2xhc3M9XCJwLTIgYm9yZGVyIGQtZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFkcmFnZ2luZ0luR3JvdXBBcmVhXCJcbiAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvd3MtbW92ZS5zdmcnXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXY+e3sgY2hpbGQuaGVhZGVyIH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImQtZmxleCBvdmVyZmxvdy1oaWRkZW5cIlxuICAgICAgW3N0eWxlLmhlaWdodF09XCJcbiAgICAgICAgJ2NhbGMoMTAwJSAtICcgK1xuICAgICAgICAoc2hvd1Jvd3NHcm91cGluZ1xuICAgICAgICAgID8gaGVhZGVyUm93SGVpZ2h0ICsgZm9vdGVyUm93SGVpZ2h0XG4gICAgICAgICAgOiBmb290ZXJSb3dIZWlnaHQpICtcbiAgICAgICAgJ3B4KSdcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImgtMTAwXCJcbiAgICAgICAgW3N0eWxlLndpZHRoXT1cIlxuICAgICAgICAgICFzaG93U2lkZU1lbnVcbiAgICAgICAgICAgID8gJzEwMCUnXG4gICAgICAgICAgICA6IHNpZGVNZW51VmlzaWJsZVxuICAgICAgICAgICAgPyAnY2FsYygxMDAlIC0gMjgwcHgpJ1xuICAgICAgICAgICAgOiAnY2FsYygxMDAlIC0gMzBweCknXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoLTEwMCB0cmFuc2l0aW9uIHBvc2l0aW9uLXJlbGF0aXZlIHctMTAwXCI+XG4gICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPlxuICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT5cbiAgICAgICAgICA8IS0tIERhdGEgR3JpZCBIZWFkZXIgc3RhcnRzIGhlcmUgLS0+XG4gICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPlxuICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLWhlYWRlci13cmFwcGVyIHctMTAwXCJcbiAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJoZWFkZXJUZXh0Q29sb3JcIlxuICAgICAgICAgICAgW3N0eWxlLmZvbnRTaXplLnB4XT1cImhlYWRlclRleHRGb250c1NpemVcIlxuICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJoZWFkZXJCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgW2NsYXNzLmJvcmRlci1iZWxvd109XCIhaGFzQW55VmlzaWJsZUNvbHVtblwiXG4gICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIlxuICAgICAgICAgICAgICBzaG93Q29sdW1uc0dyb3VwaW5nICYmIHNob3dGaWx0ZXJSb3dcbiAgICAgICAgICAgICAgICA/IGhlYWRlclJvd0hlaWdodCAqIDNcbiAgICAgICAgICAgICAgICA6IHNob3dDb2x1bW5zR3JvdXBpbmcgfHwgc2hvd0ZpbHRlclJvd1xuICAgICAgICAgICAgICAgID8gaGVhZGVyUm93SGVpZ2h0ICogMlxuICAgICAgICAgICAgICAgIDogaGVhZGVyUm93SGVpZ2h0XG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPlxuICAgICAgICAgICAgPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG4gICAgICAgICAgICA8IS0tIERhdGEgR3JpZCBMZWZ0IFBpbm5lZCBIZWFkZXIgc3RhcnRzIGhlcmUgLS0+XG4gICAgICAgICAgICA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbiAgICAgICAgICAgIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1oZWFkZXIgbGVmdC1waW5uZWRcIlxuICAgICAgICAgICAgICAjbGVmdFBpbm5lZEhlYWRlclxuICAgICAgICAgICAgICBbY2xhc3MuYm9yZGVyLXJpZ2h0XT1cImhhc0xlZnRQaW5uZWRDb2x1bW5zXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd1NlcmlhbE51bWJlclwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJjaGVja2JveGVzQmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdC1hbGwtY2hlY2tib3gtY2VsbCBib3JkZXItYmVsb3dcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCI1NVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJcbiAgICAgICAgICAgICAgICAgIHNob3dDb2x1bW5zR3JvdXBpbmcgJiYgc2hvd0ZpbHRlclJvd1xuICAgICAgICAgICAgICAgICAgICA/IGhlYWRlclJvd0hlaWdodCAqIDNcbiAgICAgICAgICAgICAgICAgICAgOiBzaG93Q29sdW1uc0dyb3VwaW5nIHx8IHNob3dGaWx0ZXJSb3dcbiAgICAgICAgICAgICAgICAgICAgPyBoZWFkZXJSb3dIZWlnaHQgKiAyXG4gICAgICAgICAgICAgICAgICAgIDogaGVhZGVyUm93SGVpZ2h0XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIFMuTm9cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd0NoZWNrYm94ZXNcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiY2hlY2tib3hlc0JhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3QtYWxsLWNoZWNrYm94LWNlbGwgYm9yZGVyLWJlbG93XCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIlxuICAgICAgICAgICAgICAgICAgc2hvd0NvbHVtbnNHcm91cGluZyAmJiBzaG93RmlsdGVyUm93XG4gICAgICAgICAgICAgICAgICAgID8gaGVhZGVyUm93SGVpZ2h0ICogM1xuICAgICAgICAgICAgICAgICAgICA6IHNob3dDb2x1bW5zR3JvdXBpbmcgfHwgc2hvd0ZpbHRlclJvd1xuICAgICAgICAgICAgICAgICAgICA/IGhlYWRlclJvd0hlaWdodCAqIDJcbiAgICAgICAgICAgICAgICAgICAgOiBoZWFkZXJSb3dIZWlnaHRcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImhhc0FueVZpc2libGVDb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTZweDsgaGVpZ2h0OiAxNnB4XCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJpc0luZGV0ZXJtaW5hdGVTdGF0ZShkYXRhU2V0KVwiXG4gICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0FsbFNlbGVjdGVkKGRhdGFTZXQpXCJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsKGRhdGFTZXQpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiaGVhZGVyQmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleFwiXG4gICAgICAgICAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgICAgICAgICBpZD1cImxlZnQtcGlubmVkLWhlYWRlclwiXG4gICAgICAgICAgICAgICAgY2RrRHJvcExpc3RPcmllbnRhdGlvbj1cImhvcml6b250YWxcIlxuICAgICAgICAgICAgICAgIFtjZGtEcm9wTGlzdERhdGFdPVwibGVmdFBpbm5lZENvbHVtbnNcIlxuICAgICAgICAgICAgICAgIChjZGtEcm9wTGlzdEVudGVyZWQpPVwib25Ecm9wTGlzdEVudGVyKCRldmVudCwgJ2xlZnQnKVwiXG4gICAgICAgICAgICAgICAgKGNka0Ryb3BMaXN0U29ydGVkKT1cIlxuICAgICAgICAgICAgICAgICAgb25Tb3J0R3JvdXAoJGV2ZW50LCAncHJldmlld0xlZnRQaW5uZWRDb2x1bW5zJylcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwib25Ecm9wR3JvdXAoKVwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJtaW4td2lkdGg6IDFweFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImRyYWdhYmxlLWhlYWRlclwiXG4gICAgICAgICAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwiY29sXCJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICBsZXQgY29sIG9mIGxlZnRQaW5uZWRDb2x1bW5zO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5RmllbGRcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgIGhlYWRlckNlbGw7XG4gICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246ICdwcmV2aWV3TGVmdFBpbm5lZENvbHVtbnMnXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNka0RyYWdQcmV2aWV3XG4gICAgICAgICAgICAgICAgICAgID48ZGl2IGNsYXNzPVwicC0yIGJvcmRlciBkLWZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZHJhZ2dpbmdJbkdyb3VwQXJlYVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvd3MtbW92ZS5zdmcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3sgY29sLmhlYWRlciB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgY2RrRHJhZ1BsYWNlaG9sZGVyPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWRyYWdnaW5nSW5Hcm91cEFyZWFcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJDZWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkcmFnZ2luZ0luR3JvdXBBcmVhXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBnYXAtMiBtcy0yXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm9wYWNpdHk6IDAuNlwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbD8uY2hpbGRyZW4/Lmxlbmd0aDsgZWxzZSBzaW5nbGVDb2xcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNoaWxkIG9mIGNvbC5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlGaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcEdyb3VwaW5nUm93UGxhY2Vob2xkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY2hpbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDaGV2cm9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbC5jaGlsZHJlbi5sZW5ndGggPiAxICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSAhPSBjb2wuY2hpbGRyZW4ubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzaW5nbGVDb2w+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wR3JvdXBpbmdSb3dQbGFjZWhvbGRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDaGV2cm9uOiBjb2w/LmNoaWxkcmVuPy5sZW5ndGggPiAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG4gICAgICAgICAgICA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbiAgICAgICAgICAgIDwhLS0gRGF0YSBHcmlkIENlbnRlciBQaW5uZWQgSGVhZGVyIHN0YXJ0cyBoZXJlIC0tPlxuICAgICAgICAgICAgPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG4gICAgICAgICAgICA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtaGVhZGVyIGNlbnRlci1zY3JvbGxhYmxlXCJcbiAgICAgICAgICAgICAgI2NlbnRlclBpbm5lZEhlYWRlclxuICAgICAgICAgICAgICAoc2Nyb2xsKT1cIm9uQ2VudGVyQm9keVNjcm9sbCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgaWQ9XCJjZW50ZXItcGlubmVkLWhlYWRlclwiXG4gICAgICAgICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgICAgICAgIFtjZGtEcm9wTGlzdENvbm5lY3RlZFRvXT1cIlxuICAgICAgICAgICAgICAgIHNob3dSb3dzR3JvdXBpbmcgPyBbJ3Jvd3MtZ3JvdXBpbmctdG9wLWNvbnRhaW5lciddIDogW11cbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJjZW50ZXJDb2x1bW5zXCJcbiAgICAgICAgICAgICAgY2RrRHJvcExpc3RPcmllbnRhdGlvbj1cImhvcml6b250YWxcIlxuICAgICAgICAgICAgICBbY2RrRHJvcExpc3RTb3J0aW5nRGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlQ29sdW1uR3JvdXBpbmcgJiYgZHJhZ2dpbmdJbkdyb3VwQXJlYVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAoY2RrRHJvcExpc3RFbnRlcmVkKT1cIm9uRHJvcExpc3RFbnRlcigkZXZlbnQsICdjZW50ZXInKVwiXG4gICAgICAgICAgICAgIChjZGtEcm9wTGlzdFNvcnRlZCk9XCJvblNvcnRHcm91cCgkZXZlbnQsICdwcmV2aWV3Q2VudGVyQ29sdW1ucycpXCJcbiAgICAgICAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJvbkRyb3BHcm91cCgpXCJcbiAgICAgICAgICAgICAgW3N0eWxlLm1heFdpZHRoXT1cIlxuICAgICAgICAgICAgICAgICdjYWxjKDEwMCUgLSAnICtcbiAgICAgICAgICAgICAgICAocmlnaHRQaW5uZWRIZWFkZXIub2Zmc2V0V2lkdGggKyBsZWZ0UGlubmVkSGVhZGVyLm9mZnNldFdpZHRoKSArXG4gICAgICAgICAgICAgICAgJ3B4KSdcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZ3JvdXBlZENvbHVtbnM/Lmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJtaW4td2lkdGg6IDIwMHB4XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImgtMTAwIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgI2NvbHVtbnNHcm91cGVkQm94XG4gICAgICAgICAgICAgICAgaWQ9XCJncm91cEJveEhlYWRlckRpdlwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCB3LTEwMCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgYm9yZGVyLWJlbG93XCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiXG4gICAgICAgICAgICAgICAgICAgIHNob3dGaWx0ZXJSb3cgPyBoZWFkZXJSb3dIZWlnaHQgKiAyIDogaGVhZGVyUm93SGVpZ2h0XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcy0zXCI+R3JvdXA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGhyZWUtZG90cyBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlblRocmVlRG90c01lbnUoJGV2ZW50LCAnZ3JvdXAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVGhyZWVEb3RzRmlsdGVyT3BlbiA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEtZ3JpZC9pY29ucy90aHJlZS1kb3RzLXZlcnRpY2FsLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb25SZXNpemVHcm91cEJveCgkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJlc2l6ZS1oYW5kbGVcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAtMnB4XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEtZ3JpZC9pY29ucy9yZXNpemUtaGFuZGxlLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImJvcmRlci1iZWxvd1wiXG4gICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBjdXJzb3ItcG9pbnRlciBib3JkZXItYmVsb3dcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwibWluLXdpZHRoOiAzMHB4OyBoZWlnaHQ6IDEwMCVcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZ3JpZFR5cGUgPT09ICdBc3NldHMnIHx8IGdyaWRUeXBlID09PSAnVGFza3MnXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRyYWdhYmxlLWhlYWRlclwiXG4gICAgICAgICAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cIlxuICAgICAgICAgICAgICAgICAgY2hlY2tDb2x1bW5Hcm91cGluZ1N0YXR1cyhjb2wpO1xuICAgICAgICAgICAgICAgICAgZHJhZ1N0YXJ0T25Hcm91cChjb2wpO1xuICAgICAgICAgICAgICAgICAgb25EcmFnU3RhcnRlZChjb2wpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAoY2RrRHJhZ01vdmVkKT1cIm9uRHJhZ01vdmVkKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjZGtEcmFnRW5kZWQpPVwib25EcmFnRW5kZWQoKVwiXG4gICAgICAgICAgICAgICAgY2RrRHJhZ1xuICAgICAgICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJjb2xcIlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgbGV0IGNvbCBvZiBjZW50ZXJDb2x1bW5zO1xuICAgICAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlJZFxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJDZWxsO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjb2wsXG4gICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogJ3ByZXZpZXdDZW50ZXJDb2x1bW5zJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgY2RrRHJhZ1ByZXZpZXdcbiAgICAgICAgICAgICAgICAgID48ZGl2IGNsYXNzPVwicC0yIGJvcmRlciBkLWZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaXNPdXRzaWRlQ29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAoZHJhZ2dpbmdJbkdyb3VwQXJlYVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2RhdGEtZ3JpZC9pY29ucy9qdXN0aWZ5LnN2ZydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdkYXRhLWdyaWQvaWNvbnMvYXJyb3dzLW1vdmUuc3ZnJylcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNPdXRzaWRlQ29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2V5ZS1jcm9zcy5zdmcnXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj57eyBjb2wuaGVhZGVyIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjZGtEcmFnUGxhY2Vob2xkZXI+XG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWRyYWdnaW5nSW5Hcm91cEFyZWFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJDZWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246ICdjZW50ZXJDb2x1bW5zJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRyYWdnaW5nSW5Hcm91cEFyZWEgJiYgIWlzT3V0c2lkZUNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGdhcC0yIG1zLTJcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm9wYWNpdHk6IDAuNlwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2w/LmNoaWxkcmVuPy5sZW5ndGg7IGVsc2Ugc2luZ2xlQ29sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZCBvZiBjb2wuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlJZFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hpbGQ/LmlzX2dyb3VwYWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcEdyb3VwaW5nUm93UGxhY2Vob2xkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY2hpbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDaGV2cm9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbC5jaGlsZHJlbi5sZW5ndGggPiAxICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSAhPSBjb2wuY2hpbGRyZW4ubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NpbmdsZUNvbD5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy5pc19ncm91cGFibGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BHcm91cGluZ1Jvd1BsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY29sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0NoZXZyb246IGNvbD8uY2hpbGRyZW4/Lmxlbmd0aCA+IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbiAgICAgICAgICAgIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPlxuICAgICAgICAgICAgPCEtLSBEYXRhIEdyaWQgUmlnaHQgUGlubmVkIEhlYWRlciBzdGFydHMgaGVyZSAtLT5cbiAgICAgICAgICAgIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPlxuICAgICAgICAgICAgPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiaGVhZGVyQmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgICAgICAgaWQ9XCJyaWdodC1waW5uZWQtaGVhZGVyXCJcbiAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0Q29ubmVjdGVkVG9dPVwiXG4gICAgICAgICAgICAgICAgc2hvd1Jvd3NHcm91cGluZyA/IFsncm93cy1ncm91cGluZy10b3AtY29udGFpbmVyJ10gOiBbXVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjZGtEcm9wTGlzdE9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLWhlYWRlciByaWdodC1waW5uZWRcIlxuICAgICAgICAgICAgICAoY2RrRHJvcExpc3RTb3J0ZWQpPVwiXG4gICAgICAgICAgICAgICAgb25Tb3J0R3JvdXAoJGV2ZW50LCAncHJldmlld1JpZ2h0UGlubmVkQ29sdW1ucycpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIChjZGtEcm9wTGlzdEVudGVyZWQpPVwib25Ecm9wTGlzdEVudGVyKCRldmVudCwgJ3JpZ2h0JylcIlxuICAgICAgICAgICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cIm9uRHJvcEdyb3VwKClcIlxuICAgICAgICAgICAgICAjcmlnaHRQaW5uZWRIZWFkZXJcbiAgICAgICAgICAgICAgY2xhc3M9XCJyaWdodC1waW5uZWQtaGVhZGVyIGQtZmxleFwiXG4gICAgICAgICAgICAgIHN0eWxlPVwibWluLXdpZHRoOiAwLjJweFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRyYWdhYmxlLWhlYWRlclwiXG4gICAgICAgICAgICAgICAgY2RrRHJhZ1xuICAgICAgICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJjb2xcIlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgbGV0IGNvbCBvZiByaWdodFBpbm5lZENvbHVtbnM7XG4gICAgICAgICAgICAgICAgICBsZXQgaSA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUlkXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlckNlbGw7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNvbCxcbiAgICAgICAgICAgICAgICAgICAgICBwaW5uZWRSaWdodDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiAncmlnaHQnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjZGtEcmFnUHJldmlld1xuICAgICAgICAgICAgICAgICAgPjxkaXYgY2xhc3M9XCJwLTIgYm9yZGVyIGQtZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFkcmFnZ2luZ0luR3JvdXBBcmVhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YS1ncmlkL2ljb25zL2Fycm93cy1tb3ZlLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7IGNvbC5oZWFkZXIgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNka0RyYWdQbGFjZWhvbGRlcj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhZHJhZ2dpbmdJbkdyb3VwQXJlYVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlckNlbGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY29sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogJ3JpZ2h0J1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRyYWdnaW5nSW5Hcm91cEFyZWFcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBnYXAtMiBtcy0yXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJvcGFjaXR5OiAwLjZcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy5jaGlsZHJlbj8ubGVuZ3RoOyBlbHNlIHNpbmdsZUNvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2hpbGQgb2YgY29sLmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5SWRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcEdyb3VwaW5nUm93UGxhY2Vob2xkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDaGV2cm9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wuY2hpbGRyZW4ubGVuZ3RoID4gMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICE9IGNvbC5jaGlsZHJlbi5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NpbmdsZUNvbD5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BHcm91cGluZ1Jvd1BsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0NoZXZyb246IGNvbD8uY2hpbGRyZW4/Lmxlbmd0aCA+IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT5cbiAgICAgICAgICA8IS0tIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPlxuICAgICAgICAgIDwhLS0gRGF0YSBHcmlkIEJvZHkgc3RhcnRzIGhlcmUgLS0+XG4gICAgICAgICAgPCEtLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT5cbiAgICAgICAgICA8IS0tIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiaC0xMDAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICpuZ0lmPVwiIWRhdGFTZXQ/Lmxlbmd0aCAmJiAhbG9hZGluZyAmJiAhZGF0YVNldExvYWRpbmdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDwhLS0gPGRpdlxuICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvcmVjb3JkLW5vdC1mb3VuZC5zdmcnXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICA+PC9kaXY+IC0tPlxuICAgICAgICAgICAgPGRpdj5ObyBSZWNvcmQgRm91bmQ8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgdy0xMDAgaC0xMDAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGxvYWRpbmctb3ZlcmxheVwiXG4gICAgICAgICAgICAqbmdJZj1cImxvYWRpbmcgfHwgZGF0YVNldExvYWRpbmdcIlxuICAgICAgICAgICAgc3R5bGU9XCJcbiAgICAgICAgICAgICAgei1pbmRleDogOTk5O1xuICAgICAgICAgICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMXB4KTtcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImJvZHlCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyLWJvcmRlciB0ZXh0LXByaW1hcnlcIiByb2xlPVwic3RhdHVzXCI+XG4gICAgICAgICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJsb2FkZXJcIj48L3NwYW4+IC0tPlxuICAgICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+TG9hZGluZy4uLjwvc3Bhbj4gLS0+XG4gICAgICAgICAgICAgIDwhLS0gPC9kaXY+IC0tPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1ib2R5LXdyYXBwZXIgcG9zaXRpb24tcmVsYXRpdmUgZC1mbGV4XCJcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiYm9keVdyYXBwZXJIZWlnaHRcIlxuICAgICAgICAgICAgc3R5bGU9XCJvdmVyZmxvdy15OiBhdXRvOyBvdmVyZmxvdy14OiBoaWRkZW5cIlxuICAgICAgICAgICAgI21haW5TY3JvbGxcbiAgICAgICAgICAgIChzY3JvbGwpPVwib25NYWluU2Nyb2xsKCRldmVudClcIlxuICAgICAgICAgICAgW3N0eWxlLnNjcm9sbGJhcldpZHRoXT1cInZlcnRpY2FsU2Nyb2xsYmFyV2lkdGhcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDwhLS0gTEVGVCBQSU5ORUQgLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiXG4gICAgICAgICAgICAgICAgIWdyb3VwZWRDb2x1bW5zLmxlbmd0aCA/IG9yaWdpbmFsRGF0YVNldC5sZW5ndGggKiByb3dIZWlnaHQgOiAwXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IFtjbGFzcy5oLTEwMF09XCJvcmlnaW5hbERhdGFTZXQubGVuZ3RoIDwgOFwiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtYm9keSBsZWZ0LXBpbm5lZC1ib2R5IHctMTAwXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cIm92ZXJmbG93LXk6IGhpZGRlblwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmJvcmRlci1yaWdodF09XCJoYXNMZWZ0UGlubmVkQ29sdW1uc1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnRyYW5zcGFyZW50LWJvcmRlci1yaWdodF09XCIhaGFzTGVmdFBpbm5lZENvbHVtbnNcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS50cmFuc2Zvcm1dPVwiJ3RyYW5zbGF0ZVkoJyArIHRyYW5zbGF0ZVkgKyAncHgpJ1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJsZWZ0UGlubmVkQmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuaC0xMDBdPVwib3JpZ2luYWxEYXRhU2V0Lmxlbmd0aCA8IDhcIlxuICAgICAgICAgICAgICAgKm5nSWY9XCIhbG9hZGluZyAmJiAhZGF0YVNldExvYWRpbmdcIlxuICAgICAgICAgICAgICAgIFtAcm93RHluYW1pY109XCJyb3dBbmltYXRpb25cIlxuXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJvdyBvZiB2aXNpYmxlUm93cztcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUlkXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICByb3dDZWxsO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogcm93LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uczogcHJldmlld0xlZnRQaW5uZWRDb2x1bW5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNFdmVuOiAoc3RhcnRJbmRleCArIGkpICUgMiA9PT0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzT2RkOiAoc3RhcnRJbmRleCArIGkpICUgMiAhPT0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTGVmdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246ICdsZWZ0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVG90YWxSb3c6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93VG90YWxBbW91bnRSb3cgJiYgb3JpZ2luYWxEYXRhU2V0Py5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICByb3dDZWxsO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogeyBfX3ZpcnR1YWxJbmRleDogMCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uczogcHJldmlld0xlZnRQaW5uZWRDb2x1bW5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNFdmVuOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzT2RkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246ICdsZWZ0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVG90YWxSb3c6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gQ0VOVEVSIC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImgtMTAwXCJcbiAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNlbnRlclBpbm5lZEhlYWRlci5jbGllbnRXaWR0aFwiXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiYm9keUJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1ib2R5IGNlbnRlci1zY3JvbGxhYmxlXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuaC0xMDBdPVwib3JpZ2luYWxEYXRhU2V0Lmxlbmd0aCA8IDhcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwib3ZlcmZsb3cteTogaGlkZGVuOyBvdmVyZmxvdy14OiBhdXRvXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUudHJhbnNmb3JtXT1cIid0cmFuc2xhdGVZKCcgKyB0cmFuc2xhdGVZICsgJ3B4KSdcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiYm9keUJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgICAgI2NlbnRlclNjcm9sbGFibGVCb2R5XG4gICAgICAgICAgICAgICAgKHNjcm9sbCk9XCJvbkNlbnRlckJvZHlTY3JvbGwoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJveFNoYWRvd109XCJoYXNMZWZ0UGlubmVkQ29sdW1ucyA/IGxlZnRQaW5uZWRCb3hzaGFkb3c6ICdub25lJ1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBbQHJvd0R5bmFtaWNdPVwicm93QW5pbWF0aW9uXCIgKm5nSWY9XCIhbG9hZGluZyAmJiAhZGF0YVNldExvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJvdyBvZiB2aXNpYmxlUm93cztcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUlkXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICByb3dDZWxsO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogcm93LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uczogcHJldmlld0NlbnRlckNvbHVtbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0V2ZW46IChzdGFydEluZGV4ICsgaSkgJSAyID09PSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNPZGQ6IChzdGFydEluZGV4ICsgaSkgJSAyICE9PSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1RvdGFsUm93OiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1RvdGFsQW1vdW50Um93ICYmIG9yaWdpbmFsRGF0YVNldD8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgcm93Q2VsbDtcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IHsgX192aXJ0dWFsSW5kZXg6IDAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnM6IHByZXZpZXdDZW50ZXJDb2x1bW5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNFdmVuOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzT2RkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNUb3RhbFJvdzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBSSUdIVCBQSU5ORUQgLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwicmlnaHQtcGlubmVkLWJvZHktd3JhcHBlclwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiaGFzUmlnaHRQaW5uZWRDb2x1bW5zXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmgtMTAwXT1cIm9yaWdpbmFsRGF0YVNldC5sZW5ndGggPCA4XCJcbiAgICAgICAgICAgICAgW3N0eWxlLm1heFdpZHRoLnB4XT1cIlxuICAgICAgICAgICAgICAgIGlzU2Nyb2xsYmFyVmlzaWJsZVxuICAgICAgICAgICAgICAgICAgPyByaWdodFBpbm5lZEhlYWRlci5vZmZzZXRXaWR0aCAtIDE1XG4gICAgICAgICAgICAgICAgICA6IHJpZ2h0UGlubmVkSGVhZGVyLm9mZnNldFdpZHRoXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwicmlnaHRQaW5uZWRCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtYm9keSByaWdodC1waW5uZWQtYm9keSB3LTEwMCBoLTEwMFwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJvdmVyZmxvdy15OiBoaWRkZW5cIlxuICAgICAgICAgICAgICAgIFtzdHlsZS50cmFuc2Zvcm1dPVwiJ3RyYW5zbGF0ZVkoJyArIHRyYW5zbGF0ZVkgKyAncHgpJ1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJveFNoYWRvd109XCJoYXNSaWdodFBpbm5lZENvbHVtbnMgPyByaWdodFBpbm5lZEJveHNoYWRvdzogJ25vbmUnXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cInJpZ2h0UGlubmVkQmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFsb2FkaW5nICYmICFkYXRhU2V0TG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgW0Byb3dEeW5hbWljXT1cInJvd0FuaW1hdGlvblwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJvdyBvZiB2aXNpYmxlUm93cztcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUlkXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICByb3dDZWxsO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogcm93LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uczogcHJldmlld1JpZ2h0UGlubmVkQ29sdW1ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRXZlbjogKHN0YXJ0SW5kZXggKyBpKSAlIDIgPT09IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc09kZDogKHN0YXJ0SW5kZXggKyBpKSAlIDIgIT09IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiAncmlnaHQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNUb3RhbFJvdzogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dUb3RhbEFtb3VudFJvdyAmJiBvcmlnaW5hbERhdGFTZXQ/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgIHJvd0NlbGw7XG4gICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiB7IF9fdmlydHVhbEluZGV4OiAwIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zOiBwcmV2aWV3UmlnaHRQaW5uZWRDb2x1bW5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNFdmVuOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzT2RkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246ICdyaWdodCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1RvdGFsUm93OiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIHN0eWxlPVwidG9wOiBhdXRvOyBsZWZ0OiBhdXRvXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBmdWxsc2NyZWVuSW1hZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGNkci5kZXRlY3RDaGFuZ2VzKClcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImRhdGFHcmlkQ29udGFpbmVyLm9mZnNldFdpZHRoXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJcbiAgICAgICAgICAgICAgICBkYXRhR3JpZENvbnRhaW5lci5vZmZzZXRIZWlnaHQgLSAoZm9vdGVyUm93SGVpZ2h0ICsgMTAwKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cImltYWdlLW1vZGFsIGZ1bGwtaW1hZ2UtbW9kYWxcIlxuICAgICAgICAgICAgICAqbmdJZj1cImZ1bGxzY3JlZW5JbWFnZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICBbc3JjXT1cImZ1bGxzY3JlZW5JbWFnZVwiXG4gICAgICAgICAgICAgICAgYWx0PVwiRnVsbHNjcmVlbiBJbWFnZVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZFJvd3Muc2l6ZSA+IDAgJiYgc2hvd1Rhc2tiYXJcIlxuICAgICAgICAgICAgICBjbGFzcz1cInRhc2tiYXIgdy0xMDBcIlxuICAgICAgICAgICAgICBbc3R5bGUuYm90dG9tLnB4XT1cIjBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWQtcm93cy1hY3Rpb24tYmFyXCIgW0BzbGlkZVVwXT5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlbGVjdGVkLWNvdW50XCI+XG4gICAgICAgICAgICAgICAgICB7eyBzZWxlY3RlZFJvd3Muc2l6ZSB9fSBzZWxlY3RlZCBvZlxuICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgcGFnaW5hdGlvbkNvbmZpZy50b3RhbFJlc3VsdHMgfHxcbiAgICAgICAgICAgICAgICAgICAgICBjb25maWc/LnBhZ2luYXRpb25QYXJhbXM/LnRvdGFsSXRlbXNcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICBUb3RhbFxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWJ1dHRvbnMgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIHRhc2tiYXJBY3Rpb25zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGlvbj8uaGFzX3Blcm1pc3Npb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb24tYnRuIHZlcmlmaWVkIGJ0biB7eyBhY3Rpb24gfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uVmVyaWZ5Q2xpY2soYWN0aW9uPy5hY3Rpb25OYW1lKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+e3sgYWN0aW9uPy5hY3Rpb25OYW1lIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrYmFyQWN0aW9ucy5sZW5ndGggPiAxICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGkgIT09IHRhc2tiYXJBY3Rpb25zLmxlbmd0aCAtIDEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGFza2JhckFjdGlvbnNbaSArIDFdPy5oYXNfcGVybWlzc2lvblxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID58PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xlYXJTZWxlY3Rpb25TdGF0ZSh0YWJsZVR5cGUpO3NlbGVjdGVkUm93cy5jbGVhcigpO1wiIGNsYXNzPVwiY2xlYXItYnRuIG1zLTIgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLXgtY2lyY2xlXCI+PC9pPiBDbGVhciBTZWxlY3Rpb25cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gVmVydGljYWwgRmFrZSBzY3JvbGwgQmFyIC0tPlxuICAgICAgICAgIDwhLS0gPGRpdlxuICAgICAgICAgICAgKHNjcm9sbCk9XCJvbk1haW5GYWtlU2Nyb2xsKCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJmYWtlLXNjcm9sbGJhciBmYWtlLXNjcm9sbGJhci12ZXJ0aWNhbCBkLW5vbmVcIlxuICAgICAgICAgICAgW3N0eWxlLnNjcm9sbGJhcldpZHRoXT1cInZlcnRpY2FsU2Nyb2xsYmFyV2lkdGhcIlxuICAgICAgICAgICAgW3N0eWxlLnRvcC5weF09XCJcbiAgICAgICAgICAgICAgc2hvd0NvbHVtbnNHcm91cGluZyAmJiBzaG93RmlsdGVyUm93XG4gICAgICAgICAgICAgICAgPyBoZWFkZXJSb3dIZWlnaHQgKiAzXG4gICAgICAgICAgICAgICAgOiBzaG93Q29sdW1uc0dyb3VwaW5nIHx8IHNob3dGaWx0ZXJSb3dcbiAgICAgICAgICAgICAgICA/IGhlYWRlclJvd0hlaWdodCAqIDJcbiAgICAgICAgICAgICAgICA6IGhlYWRlclJvd0hlaWdodFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICNmYWtlU2Nyb2xsXG4gICAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cImJvZHlXcmFwcGVySGVpZ2h0XCJcbiAgICAgICAgICAgIHN0eWxlPVwiXG4gICAgICAgICAgICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgICAgICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgICAgICAgICAgICAgd2lkdGg6IDE3cHg7XG4gICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGYxZjJmMztcbiAgICAgICAgICAgICAgei1pbmRleDogMTA7XG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHQgKiBkYXRhU2V0TGVuZ3RoXCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIEhvcml6aW50YWwgRmFrZSBTY3JvbGxiYXJzIC0tPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIlxuICAgICAgICAgICpuZ0lmPVwiaGFzU2Nyb2xsICYmICFzaG91bGRSZXN0b3JlU2Nyb2xsXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtzdHlsZS5zY3JvbGxiYXJXaWR0aF09XCJob3JpemludGFsU2Nyb2xsYmFyV2lkdGhcIlxuICAgICAgICAgICAgY2xhc3M9XCJmYWtlLWhvcml6aW50YWwtc2Nyb2xsYmFyXCJcbiAgICAgICAgICAgICNmYWtlU2Nyb2xsXG4gICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwibGVmdFBpbm5lZEhlYWRlci5vZmZzZXRXaWR0aFwiXG4gICAgICAgICAgICBzdHlsZT1cIm92ZXJmbG93LXg6IHNjcm9sbFwiXG4gICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtzdHlsZS5zY3JvbGxiYXJXaWR0aF09XCJob3JpemludGFsU2Nyb2xsYmFyV2lkdGhcIlxuICAgICAgICAgICAgKHNjcm9sbCk9XCJvbkNlbnRlckJvZHlTY3JvbGwoJGV2ZW50KVwiXG4gICAgICAgICAgICBjbGFzcz1cImZha2UtaG9yaXppbnRhbC1zY3JvbGxiYXJcIlxuICAgICAgICAgICAgI2hvcml6aW50YWxGYWtlU2Nyb2xsXG4gICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY2VudGVyUGlubmVkSGVhZGVyLm9mZnNldFdpZHRoXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IFtzdHlsZS53aWR0aC5weF09XCJjZW50ZXJQaW5uZWRIZWFkZXIuc2Nyb2xsV2lkdGggLSAxMFwiPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtzdHlsZS5zY3JvbGxiYXJXaWR0aF09XCJob3JpemludGFsU2Nyb2xsYmFyV2lkdGhcIlxuICAgICAgICAgICAgY2xhc3M9XCJmYWtlLWhvcml6aW50YWwtc2Nyb2xsYmFyXCJcbiAgICAgICAgICAgICNmYWtlU2Nyb2xsXG4gICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwicmlnaHRQaW5uZWRIZWFkZXIub2Zmc2V0V2lkdGhcIlxuICAgICAgICAgICAgc3R5bGU9XCJvdmVyZmxvdy14OiBzY3JvbGxcIlxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBTaWRlIE1lbnUgSW1wbGVtZW50ZWQgSGVyZSAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJzaG93U2lkZU1lbnVcIlxuICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwic2lkZU1lbnVWaXNpYmxlID8gMjgwIDogMzBcIlxuICAgICAgICBjbGFzcz1cInJpZ2h0LW1lbnUgaC0xMDBcIlxuICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cInNpZGVtZW51QmFja2dyb3VuZENvbG9yXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImgtMTAwIGQtZmxleCBmbGV4LXJvdy1yZXZlcnNlXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMzBweFwiXG4gICAgICAgICAgICBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgW2NsYXNzLmJvcmRlci1zdGFydF09XCJzaWRlTWVudVZpc2libGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNpZGVNZW51KCdjb2xzJylcIlxuICAgICAgICAgICAgICBbY2xhc3MuYmctZmZmXT1cIlxuICAgICAgICAgICAgICAgIGN1cnJlbnRPcGVuZWRTaWRlTWVudWUgPT0gJ2NvbHMnICYmIHNpZGVNZW51VmlzaWJsZVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbY2xhc3MuYm9yZGVyLWJlbG93XT1cInNpZGVNZW51VmlzaWJsZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY29sdW1ucy1idXR0b24gZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3VpLWNoZWNrcy1ncmlkLnN2ZydcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2lkZS1tZW51ZS10ZXh0XCI+Q29sdW1uczwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNpZGVNZW51KCdmaWx0cnMnKVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5iZy1mZmZdPVwiXG4gICAgICAgICAgICAgICAgY3VycmVudE9wZW5lZFNpZGVNZW51ZSA9PSAnZmlsdHJzJyAmJiBzaWRlTWVudVZpc2libGVcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmJvcmRlci1iZWxvd109XCJcbiAgICAgICAgICAgICAgICBzaWRlTWVudVZpc2libGUgJiYgY3VycmVudE9wZW5lZFNpZGVNZW51ZSA9PSAnZmlsdHJzJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cImNvbHVtbnMtYnV0dG9uIGQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9maWx0ZXItMi5zdmcnXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpZGUtbWVudWUtdGV4dFwiPkZpbHRlcjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJoLTEwMFwiXG4gICAgICAgICAgICAqbmdJZj1cInNpZGVNZW51VmlzaWJsZVwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7IHdpZHRoOiBzaWRlTWVudVZpc2libGUgPyAnMjUwcHgnIDogJycgfVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImgtMTAwXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImN1cnJlbnRPcGVuZWRTaWRlTWVudWUgPT0gJ2NvbHMnICYmIHNpZGVNZW51VmlzaWJsZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29sdW1uUGFubmVsXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPCEtLSBDb2x1bW4gSXRlbXMgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbi1wYW5lbC1ib2R5IHB4LTNcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zOyB0cmFja0J5OiB0cmFja0J5RmllbGRcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2x1bW5QYW5lbEl0ZW07IGNvbnRleHQ6IHsgY29sOiBjb2wgfVwiXG4gICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxociAvPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpZGUtbWVudS1yb3ctZ3JvdXBzXCIgc3R5bGU9XCJoZWlnaHQ6IDMwJVwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInNpZGVNZW51Um93R3JvdXBzXCJcbiAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImN1cnJlbnRPcGVuZWRTaWRlTWVudWUgPT0gJ2ZpbHRycycgJiYgc2lkZU1lbnVWaXNpYmxlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzaWRlRmlsdGVyc1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiZm9vdGVyUm93SGVpZ2h0XCJcbiAgICAgIGNsYXNzPVwiYm9yZGVyLXRvcFwiXG4gICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImZvb3RlclJvd0JhY2tncm91bmRDb2xvclwiXG4gICAgICAqbmdJZj1cInBhZ2luYXRpb25Db25maWdcIlxuICAgID5cbiAgICAgIDwhLS0gUm93czogPHNwYW4gY2xhc3M9XCJmdy01MDAgbXMtMVwiPnt7IGRhdGFTZXQubGVuZ3RoIH19PC9zcGFuPiAtLT5cblxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInBhZ2luYXRpb24tY29udGFpbmVyXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJmb290ZXJSb3dIZWlnaHRcIlxuICAgICAgICBbc3R5bGUucGFkZGluZy5weF09XCJmb290ZXJQYWRkaW5nXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2Utc2l6ZVwiPlxuICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwicGFnaW5hdGlvbkNvbmZpZy5saW1pdFwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgc2l6ZSBvZiBwYWdlU2l6ZU9wdGlvbnNcIiBbdmFsdWVdPVwic2l6ZVwiPlxuICAgICAgICAgICAgICB7eyBzaXplIH19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlcGFyYXRvclwiPiBwZXIgcGFnZSA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYWdlLWluZm9cIj5cbiAgICAgICAgICBSZXN1bHRzOlxuICAgICAgICAgIHt7IChwYWdpbmF0aW9uQ29uZmlnLnBhZ2UgLSAxKSAqIHBhZ2luYXRpb25Db25maWcubGltaXQgKyAxIH19LXt7XG4gICAgICAgICAgICBwYWdpbmF0aW9uQ29uZmlnLnBhZ2UgKiBwYWdpbmF0aW9uQ29uZmlnLmxpbWl0IDxcbiAgICAgICAgICAgIHBhZ2luYXRpb25Db25maWcudG90YWxSZXN1bHRzXG4gICAgICAgICAgICAgID8gcGFnaW5hdGlvbkNvbmZpZy5wYWdlICogcGFnaW5hdGlvbkNvbmZpZy5saW1pdFxuICAgICAgICAgICAgICA6IHBhZ2luYXRpb25Db25maWcudG90YWxSZXN1bHRzXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvZlxuICAgICAgICAgIHt7IHBhZ2luYXRpb25Db25maWcudG90YWxSZXN1bHRzIH19XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYWdlLWJ1dHRvbnNcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwiZ29Ub1BhZ2UocGFnaW5hdGlvbkNvbmZpZy5wYWdlIC0gMSlcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInBhZ2luYXRpb25Db25maWcucGFnZSA9PT0gMVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAg4oC5XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwYWdlIG9mIHZpc2libGVQYWdlc1wiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cInBhZ2UgIT09ICcuLi4nXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9QYWdlKHBhZ2UpXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJwYWdlID09PSBwYWdpbmF0aW9uQ29uZmlnLnBhZ2VcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBwYWdlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicGFnZSA9PT0gJy4uLidcIj4uLi48L3NwYW4+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwiZ29Ub1BhZ2UocGFnaW5hdGlvbkNvbmZpZy5wYWdlICsgMSlcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInBhZ2luYXRpb25Db25maWcucGFnZSA9PT0gcGFnaW5hdGlvbkNvbmZpZy50b3RhbFJlc3VsdHNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIOKAulxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cbjwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxuPCEtLSBIZWFkZXIgQ2VsbCBUZW1wbGF0ZSAtLT5cbjwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxuPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XG5cbjxuZy10ZW1wbGF0ZVxuICAjaGVhZGVyQ2VsbFxuICBsZXQtY29sXG4gIGxldC1waW5uZWRSaWdodD1cInBpbm5lZFJpZ2h0XCJcbiAgbGV0LWk9XCJpbmRleFwiXG4gIGxldC1jb2x1bW5JbmRleD1cImluZGV4XCJcbiAgbGV0LXNlY3Rpb25zPVwic2VjdGlvblwiXG4gIGxldC1jYWxsZWRGcm9tTmVzdGVkUGxhY2Vob2xkZXI9XCJjYWxsZWRGcm9tTmVzdGVkUGxhY2Vob2xkZXJcIlxuPlxuICA8ZGl2PlxuICAgIDwhLS0gR3JvdXAgSGVhZGVyIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuY2hpbGRyZW4/Lmxlbmd0aCA+IDA7IGVsc2UgZmxhdEhlYWRlclwiPlxuICAgICAgPGRpdiBjZGtEcm9wbGlzdEdyb3VwIGNsYXNzPVwiZ3JvdXAtY29sdW1uLXdyYXBwZXJcIj5cbiAgICAgICAgPCEtLSBQYXJlbnQgSGVhZGVyIC0tPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJzaG91bGRUaGVHcm91cEhlYWRlclNob3coY29sKVwiXG4gICAgICAgICAgY2xhc3M9XCJoZWFkZXItY2VsbCBncm91cC1oZWFkZXJcIlxuICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgICBbc3R5bGUubWluLWhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgICAgW2NsYXNzLmJvcmRlci1yaWdodF09XCJzaG93VmVydGljYWxCb3JkZXJcIlxuICAgICAgICAgIFtzdHlsZS5ncmlkQ29sdW1uXT1cIidzcGFuICcgKyBjb2wuY2hpbGRyZW4ubGVuZ3RoXCJcbiAgICAgICAgICBbc3R5bGUuZm9udFdlaWdodF09XCJoZWFkZXJGb250V2VpZ2h0XCJcbiAgICAgICAgICBbY2xhc3MuZmxleC1yb3ctcmV2ZXJzZV09XCJwaW5uZWRSaWdodFwiXG4gICAgICAgICAgW2NsYXNzLmp1c3RpZnktY29udGVudC1lbmRdPVwicGlubmVkUmlnaHRcIlxuICAgICAgICAgIHN0eWxlPVwiZ3JpZC1yb3c6IDFcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJncm91cC1oZWFkZXItY29udGVudFwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiY29sLmhlYWRlclwiXG4gICAgICAgICAgICBbY2xhc3MubXMtMl09XCJwaW5uZWRSaWdodFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgY29sLmhlYWRlciB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwicmVzaXplLWhhbmRsZVwiXG4gICAgICAgICAgICAoZGJsY2xpY2spPVwiYXV0b3NpemVDb2x1bW4oY29sLmNoaWxkcmVuKVwiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIlxuICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IG9uUmVzaXplR3JvdXAoJGV2ZW50LCBjb2wsIHBpbm5lZFJpZ2h0KVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3Jlc2l6ZS1oYW5kbGUuc3ZnJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBDaGlsZCBIZWFkZXJzIGFuZCBGaWx0ZXJzIC0tPlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImQtZmxleFwiXG4gICAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgICBjZGtEcm9wTGlzdE9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiXG4gICAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJjb2wuY2hpbGRyZW5cIlxuICAgICAgICAgIChjZGtEcm9wTGlzdFNvcnRlZCk9XCJvbkNoaWxkRHJvcGxpc3RTb3J0ZWQoJGV2ZW50LCBzZWN0aW9ucylcIlxuICAgICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwib25DaGlsZERyb3BsaXN0RHJvcGVkKCRldmVudClcIlxuICAgICAgICAgIFtjZGtEcm9wTGlzdFNvcnRpbmdEaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgICAgICAgW2Nka0Ryb3BMaXN0Q29ubmVjdGVkVG9dPVwiXG4gICAgICAgICAgICBzaG93Um93c0dyb3VwaW5nID8gWydyb3dzLWdyb3VwaW5nLXRvcC1jb250YWluZXInXSA6IFtdXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJjaGlsZFwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY2hpbGQgb2YgY29sLmNoaWxkcmVuOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8IS0tIENoaWxkIEhlYWRlciAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGlsZC5pc192aXNpYmxlICYmICFjaGlsZFsnaXNSb3dHcm91cGVkJ11cIj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNka0RyYWdIYW5kbGVcbiAgICAgICAgICAgICAgICBjbGFzcz1cImhlYWRlci1jZWxsIG9uZS1yb3ctaGVhZGVyLWNlbGxzIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYm9yZGVyLXJpZ2h0XT1cInNob3dWZXJ0aWNhbEJvcmRlclwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZmllbGRdPVwiY2hpbGQuZmllbGRcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjaGlsZC53aWR0aFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJjaGlsZC53aWR0aFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICBbc3R5bGUubWF4LWhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5mb250V2VpZ2h0XT1cImhlYWRlckZvbnRXZWlnaHRcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwiZ3JpZC1yb3c6IDJcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5maWx0ZXItYXBwbGllZC1vbi10ZXh0XT1cImlzRmlsdGVyQXBwbGllZE9uQ29sdW1uKGNoaWxkKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBoLTEwMCBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZsZXgtcm93LXJldmVyc2VdPVwicGlubmVkUmlnaHRcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWVsbGlwc2lzIGgtMTAwIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDBcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2wuaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Mudy0xMDBdPVwicGlubmVkUmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWVsbGlwc2lzIGgtMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lZGl0YWJsZS1oZWFkZXJdPVwiY2hpbGQ/LmlzX2VkaXRhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlblRocmVlRG90c01lbnUoJGV2ZW50LCBjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5GaWx0ZXJvblRocmVlRG90c0NsaWNrKGNoaWxkKVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBjaGlsZC5oZWFkZXIgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmUgZC1mbGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmxleC1yb3ctcmV2ZXJzZV09XCJwaW5uZWRSaWdodFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MubWUtMl09XCJwaW5uZWRSaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjaGlsZC5waW5uZWRcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvcGluLWJsdWUuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRocmVlLWRvdHMgcC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlblRocmVlRG90c01lbnUoJGV2ZW50LCBjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzVGhyZWVEb3RzRmlsdGVyT3BlbiA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEtZ3JpZC9pY29ucy90aHJlZS1kb3RzLXZlcnRpY2FsLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIE9ubHkgc2hvdyBtZW51IGlmIHRoaXMgY29sdW1uIGlzIGFjdGl2ZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlQ29sID09PSBjaGlsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInRvcDogLTUwJTsgei1pbmRleDogMjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC0oIWNoaWxkPy5waW5uZWQgPyBjZW50ZXJQaW5uZWRIZWFkZXIuc2Nyb2xsTGVmdCA6IDApXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnRvcC5weF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNUaHJlZURvdHNGaWx0ZXJPcGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzaG93RmlsdGVyUm93IHx8IHNob3dDb2x1bW5zR3JvdXBpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaGVhZGVyUm93SGVpZ2h0ICogMiAtIDEwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGhlYWRlclJvd0hlaWdodCAtIDEwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5NZW51O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbDogY2hpbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc05lc3RlZFRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IHNlY3Rpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXg6IGNvbHVtbkluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRDb2xJbmRleDogaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicmVzaXplLWhhbmRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiYXV0b3NpemVDb2x1bW4oY2hpbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25SZXNpemVDb2x1bW4oJGV2ZW50LCBjaGlsZClcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YS1ncmlkL2ljb25zL3Jlc2l6ZS1oYW5kbGUuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPCEtLSBGaWx0ZXIgQ2VsbCAtLT5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd0ZpbHRlclJvd1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJoZWFkZXJCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaGVhZGVyLWNlbGwgZmlsdGVyLWNlbGxcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ib3JkZXItcmlnaHRdPVwic2hvd1ZlcnRpY2FsQm9yZGVyXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5maWVsZF09XCJjaGlsZC5maWVsZFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNoaWxkLndpZHRoXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cImNoaWxkLndpZHRoXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICBbc3R5bGUubWF4LWhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ib3JkZXItcmlnaHRdPVwic2hvd1ZlcnRpY2FsQm9yZGVyXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImdyaWQtcm93OiAzXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGVhZGVyLWNlbGwgZmlsdGVyLWNlbGxcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuZmllbGRdPVwiY29sLmZpZWxkXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjb2wud2lkdGhcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJjb2wud2lkdGhcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJGaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNoaWxkLmZpbHRlclZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25GaWx0ZXJDaGFuZ2UoY2hpbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgKHBhc3RlKT1cIm9uRmlsdGVyQ2hhbmdlKGNoaWxkKTsgYXBwbHlEcm9wZG93bkZpbHRlcigpXCJcbiAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGNoaWxkPy50eXBlID09ICdkcm9wZG93bicgfHwgY2hpbGQ/LnR5cGUgPT0gJ2ltYWdlJyB8fCBjaGlsZD8udHlwZSA9PSAnYXJyYXknXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZC1zZWFyY2gtaW5wdXRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgY2hpbGQ/LnR5cGUgPT0gJ2Ryb3Bkb3duJyB8fCBjaGlsZD8udHlwZSA9PSAnaW1hZ2UnIHx8IGNoaWxkPy50eXBlID09ICdhcnJheSdcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICBvcGVuRmlsdGVyRnJvbURpc2FibGVkU2VhcmNoZWRJbnB1dChjaGlsZClcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiYXBwbHlEcm9wZG93bkZpbHRlcigpXCJcbiAgICAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLWljb24td3JhcHBlclwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IG9wZW5GaWx0ZXIoY2hpbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZpbHRlci1hcHBsaWVkXT1cImlzRmlsdGVyQXBwbGllZE9uQ29sdW1uKGNoaWxkKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5wZS1ub25lXT1cImNoaWxkPy50eXBlID09ICdpbWFnZSdcIlxuICAgICAgICAgICAgICAgICAgICA+PHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZmlsdGVyLTIuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzRmlsdGVyQXBwbGllZE9uQ29sdW1uKGNoaWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiA3cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDdweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggM3B4ICM3NDg2ZmY7XG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMCAxNjMgMjMzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiA0cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3A6IDEycHg7XG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdW5kZWQtY2lyY2xlIGQtYmxvY2tcIlxuICAgICAgICAgICAgICAgICAgICA+PC9zcGFuXG4gICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgZmlsdGVyLXJvdy1maWx0ZXItd3JhcHBlclwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlRmlsdGVyQ2VsbD8uZmllbGQgPT0gY2hpbGQ/LmZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ0b3A6IDEwMCU7IHJpZ2h0OiAwOyB6LWluZGV4OiA5OVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGNoaWxkPy5waW5uZWQgPyAwIDogLWNlbnRlclBpbm5lZEhlYWRlci5zY3JvbGxMZWZ0XG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlck1lbnU7IGNvbnRleHQ6IHsgY29sOiBjaGlsZCB9XCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgY2RrRHJhZ1ByZXZpZXdcbiAgICAgICAgICAgICAgPjxkaXYgY2xhc3M9XCJwLTIgYm9yZGVyIGQtZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICFkcmFnZ2luZ0luR3JvdXBBcmVhIHx8XG4gICAgICAgICAgICAgICAgICAgIChjaGlsZC5pc19ncm91cGFibGUgJiYgZHJhZ2dpbmdJbkdyb3VwQXJlYSlcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvd3MtbW92ZS5zdmcnXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJkcmFnZ2luZ0luR3JvdXBBcmVhICYmICFjaGlsZC5pc19ncm91cGFibGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvYmFuLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdj57eyBjaGlsZC5oZWFkZXIgfX08L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNka0RyYWdQbGFjZWhvbGRlcj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFkcmFnZ2luZ0luR3JvdXBBcmVhXCIgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICBjaGlsZEhlYWRlclBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNoaWxkLFxuICAgICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnM6IHNlY3Rpb25zLFxuICAgICAgICAgICAgICAgICAgICBjYWxsZWRGcm9tTmVzdGVkUGxhY2Vob2xkZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJkcmFnZ2luZ0luR3JvdXBBcmVhICYmIGNoaWxkPy5pc19ncm91cGFibGVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGdhcC0yIG1zLTJcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwib3BhY2l0eTogMC42XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIHRvcEdyb3VwaW5nUm93UGxhY2Vob2xkZXI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNoaWxkLFxuICAgICAgICAgICAgICAgICAgICAgIHNob3dDaGV2cm9uOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICBwaW5uZWRSaWdodDogcGlubmVkUmlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnM6IHNlY3Rpb25zLFxuICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIEZsYXQgSGVhZGVyIHx8IFNpbmdsZSBIZWFkZXIgQ2VsbC0tPlxuICAgIDxuZy10ZW1wbGF0ZSAjZmxhdEhlYWRlcj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJncm91cC1jb2x1bW4td3JhcHBlclwiXG4gICAgICAgICpuZ0lmPVwiY29sLmlzX3Zpc2libGUgJiYgIWNvbFsnaXNSb3dHcm91cGVkJ11cIlxuICAgICAgPlxuICAgICAgICA8IS0tIEZ1bGwtaGVpZ2h0IEhlYWRlciBDZWxsIChzcGFucyAyIHJvd3MgdmlzdWFsbHkpIC0tPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJoZWFkZXItY2VsbCBvbmUtcm93LWhlYWRlci1jZWxsc1wiXG4gICAgICAgICAgW2F0dHIuZmllbGRdPVwiY29sLmZpZWxkXCJcbiAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY29sLndpZHRoXCJcbiAgICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cImNvbC53aWR0aFwiXG4gICAgICAgICAgW2NsYXNzLmJvcmRlci1yaWdodF09XCJzaG93VmVydGljYWxCb3JkZXJcIlxuICAgICAgICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cIlxuICAgICAgICAgICAgc2hvd0NvbHVtbnNHcm91cGluZyA/IGhlYWRlclJvd0hlaWdodCAqIDIgOiBoZWFkZXJSb3dIZWlnaHRcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiXG4gICAgICAgICAgICBzaG93Q29sdW1uc0dyb3VwaW5nID8gaGVhZGVyUm93SGVpZ2h0ICogMiA6IGhlYWRlclJvd0hlaWdodFxuICAgICAgICAgIFwiXG4gICAgICAgICAgW3N0eWxlLmZvbnRXZWlnaHRdPVwiaGVhZGVyRm9udFdlaWdodFwiXG4gICAgICAgICAgc3R5bGU9XCJncmlkLXJvdzogMSAvIHNwYW4gMlwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBoLTEwMCBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gdy0xMDAgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmZsZXgtcm93LXJldmVyc2VdPVwicGlubmVkUmlnaHRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWVsbGlwc2lzIGgtMTAwIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDBcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2wuaGVhZGVyXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1lbGxpcHNpcyBoLTEwMCBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuZWRpdGFibGUtaGVhZGVyXT1cImNvbD8uaXNfZWRpdGFibGVcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmZpbHRlci1hcHBsaWVkLW9uLXRleHRdPVwiaXNGaWx0ZXJBcHBsaWVkT25Db2x1bW4oY29sKVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgIG9wZW5UaHJlZURvdHNNZW51KCRldmVudCwgY29sKTtcbiAgICAgICAgICAgICAgICAgICAgb3BlbkZpbHRlcm9uVGhyZWVEb3RzQ2xpY2soY29sKVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBjb2wuaGVhZGVyIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlIGQtZmxleFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmZsZXgtcm93LXJldmVyc2VdPVwicGlubmVkUmlnaHRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLm1lLTJdPVwicGlubmVkUmlnaHRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sPy5waW5uZWRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvcGluLWJsdWUuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBbY2xhc3MubWUtMl09XCJjb2wub3JkZXJfYnlcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwic29ydGluZ0NvbmZpZz8uZmllbGQgPT0gY29sLmZpZWxkXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8IS0tIEFzY2VuZGluZyBTb3J0IEljb24gLS0+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNvcnRpbmdDb25maWc/Lm9yZGVyX2J5ID09ICdhc2MnXCJcbiAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9zb3J0LWFzYy5zdmcnXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBtdC0xIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNvcnREZXNjKGNvbClcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInNvcnRpbmdDb25maWc/Lm9yZGVyX2J5ID09PSAnYXNjJ1wiXG4gICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICA8IS0tIERlc2NlbmRpbmcgU29ydCBJY29uIC0tPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzb3J0aW5nQ29uZmlnPy5vcmRlcl9ieSA9PSAnZGVzYydcIlxuICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3NvcnQtZGVzYy5zdmcnXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBtdC0xIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNvcnRBc2MoY29sKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic29ydGluZ0NvbmZpZz8ub3JkZXJfYnkgPT09ICdkZXNjJ1wiXG4gICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGhyZWUtZG90cyBwLTFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICBvcGVuVGhyZWVEb3RzTWVudSgkZXZlbnQsIGNvbCk7XG4gICAgICAgICAgICAgICAgICAgIGlzVGhyZWVEb3RzRmlsdGVyT3BlbiA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAgICAgICAgICAgJ2RhdGEtZ3JpZC9pY29ucy90aHJlZS1kb3RzLXZlcnRpY2FsLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8IS0tIE9ubHkgc2hvdyBtZW51IGlmIHRoaXMgY29sdW1uIGlzIGFjdGl2ZSAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlQ29sID09PSBjb2xcIlxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ0b3A6IC01MCU7IHotaW5kZXg6IDIxXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cIlxuICAgICAgICAgICAgICAgICAgICAtKCFjb2w/LnBpbm5lZCA/IGNlbnRlclBpbm5lZEhlYWRlci5zY3JvbGxMZWZ0IDogMClcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUudG9wLnB4XT1cIlxuICAgICAgICAgICAgICAgICAgICBpc1RocmVlRG90c0ZpbHRlck9wZW5cbiAgICAgICAgICAgICAgICAgICAgICA/IHNob3dGaWx0ZXJSb3cgfHwgc2hvd0NvbHVtbnNHcm91cGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBoZWFkZXJSb3dIZWlnaHQgKiAyIC0gMTBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaGVhZGVyUm93SGVpZ2h0IC0gMTBcbiAgICAgICAgICAgICAgICAgICAgICA6IDBcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk1lbnU7XG4gICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sOiBjb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc05lc3RlZFRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IHNlY3Rpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXg6IGNvbHVtbkluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRDb2xJbmRleDogMFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInJlc2l6ZS1oYW5kbGVcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnctMTAwXT1cImNvbC5waW5uZWQgPT0gJ3JpZ2h0J1wiXG4gICAgICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiYXV0b3NpemVDb2x1bW4oY29sKVwiXG4gICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIlxuICAgICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IG9uUmVzaXplQ29sdW1uKCRldmVudCwgY29sKVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3Jlc2l6ZS1oYW5kbGUuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBGaWx0ZXIgQ2VsbCAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwic2hvd0ZpbHRlclJvd1wiXG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJoZWFkZXJCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgIGNsYXNzPVwiaGVhZGVyLWNlbGwgZmlsdGVyLWNlbGxcIlxuICAgICAgICAgIFtjbGFzcy5ib3JkZXItcmlnaHRdPVwic2hvd1ZlcnRpY2FsQm9yZGVyXCJcbiAgICAgICAgICBbYXR0ci5maWVsZF09XCJjb2wuZmllbGRcIlxuICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjb2wud2lkdGhcIlxuICAgICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiY29sLndpZHRoXCJcbiAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgICBbc3R5bGUubWF4LWhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgICA+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJGaWx0ZXJcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb2wuZmlsdGVyVmFsdWVcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25GaWx0ZXJDaGFuZ2UoY29sKVwiXG4gICAgICAgICAgICBbcmVhZG9ubHldPVwiY29sPy50eXBlID09ICdkcm9wZG93bicgfHwgY29sPy50eXBlID09ICdpbWFnZScgfHwgY29sPy50eXBlID09ICdhcnJheSdcIlxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkLXNlYXJjaC1pbnB1dF09XCJcbiAgICAgICAgICAgICAgY29sPy50eXBlID09ICdkcm9wZG93bicgfHwgY29sPy50eXBlID09ICdpbWFnZScgfHwgY29sPy50eXBlID09ICdhcnJheSdcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAocGFzdGUpPVwib25QYXN0ZUluRmlsdGVyUm93U2VhcmNoKCRldmVudCwgY29sKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb3BlbkZpbHRlckZyb21EaXNhYmxlZFNlYXJjaGVkSW5wdXQoY29sKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImFwcGx5RHJvcGRvd25GaWx0ZXIoKVwiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJmaWx0ZXItaWNvbi13cmFwcGVyXCJcbiAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IG9wZW5GaWx0ZXIoY29sKVwiXG4gICAgICAgICAgICBbY2xhc3MuZmlsdGVyLWFwcGxpZWRdPVwiaXNGaWx0ZXJBcHBsaWVkT25Db2x1bW4oY29sKVwiXG4gICAgICAgICAgICBbY2xhc3MucGUtbm9uZV09XCJjb2w/LnR5cGUgPT0gJ2ltYWdlJ1wiXG4gICAgICAgICAgICA+PHNwYW5cbiAgICAgICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9maWx0ZXItMi5zdmcnXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAqbmdJZj1cImlzRmlsdGVyQXBwbGllZE9uQ29sdW1uKGNvbClcIlxuICAgICAgICAgICAgICBzdHlsZT1cIlxuICAgICAgICAgICAgICAgIHdpZHRoOiA3cHg7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA3cHg7XG4gICAgICAgICAgICAgICAgYm94LXNoYWRvdzogMHB4IDBweCAzcHggIzc0ODZmZjtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMCAxNjMgMjMzKTtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgcmlnaHQ6IDRweDtcbiAgICAgICAgICAgICAgICB0b3A6IDEycHg7XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwicm91bmRlZC1jaXJjbGUgZC1ibG9ja1wiXG4gICAgICAgICAgICA+PC9zcGFuXG4gICAgICAgICAgPjwvc3Bhbj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgZmlsdGVyLXJvdy1maWx0ZXItd3JhcHBlclwiXG4gICAgICAgICAgICAqbmdJZj1cImFjdGl2ZUZpbHRlckNlbGwgPT09IGNvbFwiXG4gICAgICAgICAgICBzdHlsZT1cInRvcDogMTAwJTsgcmlnaHQ6IDA7IHotaW5kZXg6IDk5XCJcbiAgICAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cImNvbD8ucGlubmVkID8gMCA6IC1jZW50ZXJQaW5uZWRIZWFkZXIuc2Nyb2xsTGVmdFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlck1lbnU7IGNvbnRleHQ6IHsgY29sOiBjb2wgfVwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxuPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cbjwhLS0gQm9keSBDZWxsIFRlbXBsYXRlIC0tPlxuPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cbjwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XG5cbjxuZy10ZW1wbGF0ZVxuICAjcm93Q2VsbFxuICBsZXQtcm93XG4gIGxldC1jb2x1bW5zPVwiY29sdW1uc1wiXG4gIGxldC1pc0V2ZW49XCJpc0V2ZW5cIlxuICBsZXQtaXNPZGQ9XCJpc09kZFwiXG4gIGxldC1pc0xlZnRTZWN0aW9uPVwiaXNMZWZ0XCJcbiAgbGV0LXNlY3Rpb249XCJzZWN0aW9uXCJcbiAgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIlxuICBsZXQtaXNUb3RhbFJvdz1cImlzVG90YWxSb3dcIlxuPlxuICA8IS0tIENoZWNrIGlmIHJvdyBpcyBhIGdyb3VwIC0tPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJncm91cFJvd1RlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93LCBkZXB0aDogMCB9XCJcbiAgPjwvbmctY29udGFpbmVyPlxuICA8bmctdGVtcGxhdGUgI2dyb3VwUm93VGVtcGxhdGUgbGV0LXJvdyBsZXQtZGVwdGg9XCJkZXB0aFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cuaXNHcm91cDsgZWxzZSByZWd1bGFyUm93XCI+XG4gICAgICA8IS0tIEdyb3VwIEhlYWRlciAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJncm91cC1oZWFkZXItcm93IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiXG4gICAgICAgIFtjbGFzcy5ib3JkZXItYmVsb3ddPVwic2VjdGlvbiAhPT0gJ2NlbnRlcidcIlxuICAgICAgICBbc3R5bGUud2lkdGhdPVwiXG4gICAgICAgICAgc2VjdGlvbiA9PT0gJ2NlbnRlcidcbiAgICAgICAgICAgID8gKGNlbnRlclNjcm9sbGFibGVCb2R5Py5zY3JvbGxXaWR0aCA/PyAwKSArICdweCdcbiAgICAgICAgICAgIDogJzEwMCUnXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cInNlY3Rpb24gPT0gJ2xlZnQnXCJcbiAgICAgICAgICBjbGFzcz1cImgtMTAwIGQtZmxleFwiXG4gICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImxlZnRQaW5uZWRIZWFkZXIub2Zmc2V0V2lkdGggLSAxXCJcbiAgICAgICAgICBbY2xhc3Mucm93LXNlbGVjdGVkXT1cInJvd1NlbGVjdGVkSW5kZXhlcy5oYXMocm93Ll9fdmlydHVhbEluZGV4KVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cInNob3dTZXJpYWxOdW1iZXJcIlxuICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogNTBweFwiXG4gICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgaC0xMDAgYm9yZGVyLXJpZ2h0IGp1c3RpZnktY29udGVudC1lbmQgcGUtMiBzLW5vXCJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiY2hlY2tib3hlc0JhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiNTVcIlxuICAgICAgICAgICAgW3N0eWxlLmN1cnNvcl09XCJcbiAgICAgICAgICAgICAgJ3VybCgnICtcbiAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAgICdkYXRhLWdyaWQvaWNvbnMvYXJyb3ctcmlnaHQuc3ZnKSwgYXV0bydcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIm9uUm93TW91c2VEb3duKHJvdy5fX3ZpcnR1YWxJbmRleCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAobW91c2VvdmVyKT1cIm9uUm93TW91c2VPdmVyKHJvdy5fX3ZpcnR1YWxJbmRleCwgJGV2ZW50KVwiXG4gICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiY2hlY2tib3hlc0NvbG9yXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBnZXRTdGFydEluZGV4KCkgKyAocm93Ll9fdmlydHVhbEluZGV4IC0gMSkgfHwgXCJcIiB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cInNob3dDaGVja2JveGVzXCJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDUwcHhcIlxuICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgaC0xMDAgYm9yZGVyLXJpZ2h0XCJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiY2hlY2tib3hlc0JhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICBbY2xhc3Mucm93LXNlbGVjdGVkXT1cInJvd1NlbGVjdGVkSW5kZXhlcy5oYXMocm93Ll9fdmlydHVhbEluZGV4KVwiXG4gICAgICAgICAgICBbY2xhc3MubGVmdC1zZWxlY3Rpb24tYm9yZGVyXT1cIlxuICAgICAgICAgICAgICByb3dTZWxlY3RlZEluZGV4ZXMuaGFzKHJvdy5fX3ZpcnR1YWxJbmRleClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbY2xhc3MuZmlyc3Qtcm93LXNlbGVjdGVkXT1cImZpcnN0U2VsZWN0ZWRSb3cgPT09IHJvdy5fX3ZpcnR1YWxJbmRleFwiXG4gICAgICAgICAgICBbY2xhc3MubGFzdC1yb3ctc2VsZWN0ZWRdPVwibGFzdFNlbGVjdGVkUm93ID09PSByb3cuX192aXJ0dWFsSW5kZXhcIlxuICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImNoZWNrYm94ZXNDb2xvclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDE2cHg7IGhlaWdodDogMTZweFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cImdldEdyb3VwQ2hlY2tlZFN0YXRlKHJvdykgPT09IHRydWVcIlxuICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJnZXRHcm91cENoZWNrZWRTdGF0ZShyb3cpID09PSB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInNlbGVjdEdyb3VwUm93KCRldmVudCwgcm93KVwiXG4gICAgICAgICAgICAvPlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cInNlY3Rpb24gPT0gJ2NlbnRlcidcIlxuICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjZW50ZXJQaW5uZWRIZWFkZXIuc2Nyb2xsV2lkdGhcIlxuICAgICAgICAgIFtzdHlsZS5taW5XaWR0aC5weF09XCJjZW50ZXJQaW5uZWRIZWFkZXIuc2Nyb2xsV2lkdGhcIlxuICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwcy0yIGgtMTAwIGJvcmRlci1iZWxvd1wiXG4gICAgICAgICAgW2NsYXNzLnJvdy1zZWxlY3RlZF09XCJyb3dTZWxlY3RlZEluZGV4ZXMuaGFzKHJvdy5fX3ZpcnR1YWxJbmRleClcIlxuICAgICAgICAgIFtjbGFzcy5maXJzdC1yb3ctc2VsZWN0ZWRdPVwiZmlyc3RTZWxlY3RlZFJvdyA9PT0gcm93Ll9fdmlydHVhbEluZGV4XCJcbiAgICAgICAgICBbY2xhc3MubGFzdC1yb3ctc2VsZWN0ZWRdPVwibGFzdFNlbGVjdGVkUm93ID09PSByb3cuX192aXJ0dWFsSW5kZXhcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCJcbiAgICAgICAgICAgIFtzdHlsZS5wYWRkaW5nTGVmdC5weF09XCJkZXB0aCA+IDAgPyBkZXB0aCAqIDMwIDogMFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0yIGZpbHRlci1pY29uLXdyYXBwZXJcIiAoY2xpY2spPVwidG9nZ2xlRXhwYW5kKHJvdylcIj5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBhbGlnbi1pdGVtcy1jZW50ZXIgZC1mbGV4XCJcbiAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgcm93LmlzRXhwYW5kXG4gICAgICAgICAgICAgICAgICAgID8gc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1kb3duLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgOiBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGV2cm9uLXJpZ2h0LnN2ZydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHN0cm9uZyAoY2xpY2spPVwidG9nZ2xlRXhwYW5kKHJvdylcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+XG4gICAgICAgICAgICAgIHt7IHJvdy5ncm91cFZhbHVlIH19ICh7eyBjb3VudExlYWZSb3dzKHJvdykgfX0pXG4gICAgICAgICAgICA8L3N0cm9uZz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwic2VjdGlvbiA9PSAncmlnaHQnXCJcbiAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwicmlnaHRQaW5uZWRIZWFkZXIub2Zmc2V0V2lkdGhcIlxuICAgICAgICAgIFtjbGFzcy5yb3ctc2VsZWN0ZWRdPVwicm93U2VsZWN0ZWRJbmRleGVzLmhhcyhyb3cuX192aXJ0dWFsSW5kZXgpXCJcbiAgICAgICAgICBbY2xhc3MuZmlyc3Qtcm93LXNlbGVjdGVkXT1cImZpcnN0U2VsZWN0ZWRSb3cgPT09IHJvdy5fX3ZpcnR1YWxJbmRleFwiXG4gICAgICAgICAgW2NsYXNzLmxhc3Qtcm93LXNlbGVjdGVkXT1cImxhc3RTZWxlY3RlZFJvdyA9PT0gcm93Ll9fdmlydHVhbEluZGV4XCJcbiAgICAgICAgPjwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gUmVjdXJzaXZlIENoaWxkcmVuIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImdyb3VwLWNoaWxkcmVuXCIgKm5nSWY9XCJyb3cuaXNFeHBhbmRcIiBbQHNsaWRlVG9nZ2xlXT5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjaGlsZCBvZiByb3cuY2hpbGRyZW47IGxldCBpID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlJZFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hpbGQuaXNHcm91cDsgZWxzZSBkYXRhUm93XCI+XG4gICAgICAgICAgICA8IS0tIFJlY3Vyc2l2ZSBjYWxsIGZvciBuZXN0ZWQgZ3JvdXAgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgZ3JvdXBSb3dUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogY2hpbGQsIGRlcHRoOiBkZXB0aCArIDEgfVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNkYXRhUm93PlxuICAgICAgICAgICAgPCEtLSBSZWd1bGFyIGRhdGEgcm93IC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgIHJvd0NlbGw7XG4gICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjaGlsZCxcbiAgICAgICAgICAgICAgICAgIGNvbHVtbnM6IGNvbHVtbnMsXG4gICAgICAgICAgICAgICAgICBpc0V2ZW46IGkgJSAyID09PSAwLFxuICAgICAgICAgICAgICAgICAgaXNPZGQ6IGkgJSAyICE9PSAwLFxuICAgICAgICAgICAgICAgICAgaXNMZWZ0OiBpc0xlZnRTZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgc2VjdGlvbjogc2VjdGlvbixcbiAgICAgICAgICAgICAgICAgIGlzVG90YWxSb3c6IGlzVG90YWxSb3dcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8IS0tIFJlZ3VsYXIgcm93IChub3QgYSBncm91cCkgLS0+XG4gIDxuZy10ZW1wbGF0ZSAjcmVndWxhclJvdz5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImQtZmxleFwiXG4gICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiXG4gICAgICBbc3R5bGUubWluSGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiXG4gICAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgY3Vyc29yLXBvaW50ZXIgYm9yZGVyLWJlbG93XCJcbiAgICAgICAgc3R5bGU9XCJtaW4td2lkdGg6IDMwcHg7IGhlaWdodDogMTAwJVwiXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgc2VjdGlvbiA9PSAnY2VudGVyJyAmJiAoZ3JpZFR5cGUgPT09ICdBc3NldHMnIHx8IGdyaWRUeXBlID09PSAnVGFza3MnKVxuICAgICAgICBcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgJ2JhY2tncm91bmQtY29sb3InOiByb3dTZWxlY3RlZEluZGV4ZXMuaGFzKHJvdy5fX3ZpcnR1YWxJbmRleClcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiBnZXRCYWNrZ3JvdW5kQ29sb3Iocm93LCBpc0V2ZW4sIHNlY3Rpb24pXG4gICAgICAgIH1cIlxuICAgICAgICBbY2xhc3Muc2VsZWN0ZWQtY2VsbF09XCJyb3dTZWxlY3RlZEluZGV4ZXMuaGFzKHJvdy5fX3ZpcnR1YWxJbmRleClcIlxuICAgICAgICBbY2xhc3MuZmlyc3Qtcm93LXNlbGVjdGVkXT1cImZpcnN0U2VsZWN0ZWRSb3cgPT09IHJvdy5fX3ZpcnR1YWxJbmRleFwiXG4gICAgICAgIFtjbGFzcy5sYXN0LXJvdy1zZWxlY3RlZF09XCJsYXN0U2VsZWN0ZWRSb3cgPT09IHJvdy5fX3ZpcnR1YWxJbmRleFwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZURldGFpbFJvd0V4cGFuZChyb3cpXCJcbiAgICAgICAgICAqbmdJZj1cInJvdz8uZGV0YWlsPy5yZXN1bHQ/Lmxlbmd0aCB8fCBncmlkVHlwZSA9PT0gJ1Rhc2tzJ1wiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZmlsdGVyLWljb24td3JhcHBlclwiXG4gICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgIGlzRGV0YWlsc0V4cGFuZGVkKHJvdylcbiAgICAgICAgICAgICAgPyBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGV2cm9uLWRvd24uc3ZnJ1xuICAgICAgICAgICAgICA6IHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZXZyb24tcmlnaHQuc3ZnJ1xuICAgICAgICAgIFwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICA8L3NwYW4+XG4gICAgICA8ZGl2XG4gICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiXG4gICAgICAgICAgc2VjdGlvbiA9PSAnY2VudGVyJyAmJiBncm91cGVkQ29sdW1ucz8ubGVuZ3RoID8gZ3JvdXBCb3hQYWRkaW5nIDogMFxuICAgICAgICBcIlxuICAgICAgICBbY2xhc3Mucm93LXNlbGVjdGVkXT1cInJvd1NlbGVjdGVkSW5kZXhlcy5oYXMocm93Ll9fdmlydHVhbEluZGV4KVwiXG4gICAgICAgIFtjbGFzcy5maXJzdC1yb3ctc2VsZWN0ZWRdPVwiZmlyc3RTZWxlY3RlZFJvdyA9PT0gcm93Ll9fdmlydHVhbEluZGV4XCJcbiAgICAgICAgW2NsYXNzLmxhc3Qtcm93LXNlbGVjdGVkXT1cImxhc3RTZWxlY3RlZFJvdyA9PT0gcm93Ll9fdmlydHVhbEluZGV4XCJcbiAgICAgICAgKGNvbnRleHRtZW51KT1cIm9uUmlnaHRDbGljaygkZXZlbnQsIHJvdylcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiXG4gICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXJvdyBoLTEwMFwiXG4gICAgICAgIFtjbGFzcy5ldmVuLXJvd109XCJpc0V2ZW5cIlxuICAgICAgICBbY2xhc3Mub2RkLXJvd109XCJpc09kZFwiXG4gICAgICAgIFtjbGFzcy5ob3ZlcmVkLXJvd109XCJob3ZlcmVkUm93SWQgPT09IChyb3cuX2lkIHx8IHJvdy5pZClcIlxuICAgICAgICAobW91c2VlbnRlcik9XCJvblJvd0hvdmVyKHJvdylcIlxuICAgICAgICAobW91c2VsZWF2ZSk9XCJvblJvd0xlYXZlKClcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgJ2JhY2tncm91bmQtY29sb3InOiBnZXRCYWNrZ3JvdW5kQ29sb3Iocm93LCBpc0V2ZW4sIHNlY3Rpb24pXG4gICAgICAgIH1cIlxuICAgICAgICBbc3R5bGUubWluSGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiXG4gICAgICAgIFtzdHlsZS5tYXhIZWlnaHQucHhdPVwicm93SGVpZ2h0XCJcbiAgICAgID48L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgKGNvbnRleHRtZW51KT1cIm9uUmlnaHRDbGljaygkZXZlbnQsIHJvdylcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiXG4gICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXJvd1wiXG4gICAgICAgIFtjbGFzcy5ldmVuLXJvd109XCJpc0V2ZW5cIlxuICAgICAgICBbY2xhc3Mub2RkLXJvd109XCJpc09kZFwiXG4gICAgICAgIFtjbGFzcy5ob3ZlcmVkLXJvd109XCJob3ZlcmVkUm93SWQgPT09IChyb3cuX2lkIHx8IHJvdy5pZClcIlxuICAgICAgICAobW91c2VlbnRlcik9XCJvblJvd0hvdmVyKHJvdylcIlxuICAgICAgICAobW91c2VsZWF2ZSk9XCJvblJvd0xlYXZlKClcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgJ2JhY2tncm91bmQtY29sb3InOiBnZXRCYWNrZ3JvdW5kQ29sb3Iocm93LCBpc0V2ZW4sIHNlY3Rpb24pXG4gICAgICAgIH1cIlxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJjaGVja2JveGVzQmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICBjbGFzcz1cInNlbGVjdC1hbGwtY2hlY2tib3gtY2VsbCBqdXN0aWZ5LWNvbnRlbnQtZW5kIHBlLTIgcy1ub1wiXG4gICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cIjU1XCJcbiAgICAgICAgICAqbmdJZj1cImlzTGVmdFNlY3Rpb24gJiYgc2hvd1NlcmlhbE51bWJlclwiXG4gICAgICAgICAgIFtzdHlsZS5mb250U2l6ZS5weF09XCJib2R5VGV4dEZvbnRzU2l6ZVwiXG4gICAgICAgICAgW3N0eWxlLmN1cnNvcl09XCJcbiAgICAgICAgICAgICd1cmwoJyArXG4gICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICtcbiAgICAgICAgICAgICdkYXRhLWdyaWQvaWNvbnMvYXJyb3ctcmlnaHQuc3ZnKSwgYXV0bydcbiAgICAgICAgICBcIlxuICAgICAgICAgIChtb3VzZWRvd24pPVwib25Sb3dNb3VzZURvd24ocm93Ll9fdmlydHVhbEluZGV4LCAkZXZlbnQpXCJcbiAgICAgICAgICAobW91c2VvdmVyKT1cIm9uUm93TW91c2VPdmVyKHJvdy5fX3ZpcnR1YWxJbmRleCwgJGV2ZW50KVwiXG4gICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImNoZWNrYm94ZXNDb2xvclwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBnZXRTdGFydEluZGV4KCkgKyAocm93Ll9fdmlydHVhbEluZGV4IC0gMSkgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cIlxuICAgICAgICAgICAgcm93U2VsZWN0ZWRJbmRleGVzLmhhcyhyb3cuX192aXJ0dWFsSW5kZXgpXG4gICAgICAgICAgICAgID8gc2VsZWN0ZWRSb3dzQmFja2dyb3VuZENvbG9yXG4gICAgICAgICAgICAgIDogY2hlY2tib3hlc0JhY2tncm91bmRDb2xvclxuICAgICAgICAgIFwiXG4gICAgICAgICAgY2xhc3M9XCJzZWxlY3QtYWxsLWNoZWNrYm94LWNlbGxcIlxuICAgICAgICAgICpuZ0lmPVwiaXNMZWZ0U2VjdGlvbiAmJiBzaG93Q2hlY2tib3hlc1wiXG4gICAgICAgICAgW2NsYXNzLmxlZnQtc2VsZWN0aW9uLWJvcmRlcl09XCJcbiAgICAgICAgICAgIHJvd1NlbGVjdGVkSW5kZXhlcy5oYXMocm93Ll9fdmlydHVhbEluZGV4KVxuICAgICAgICAgIFwiXG4gICAgICAgICAgW2NsYXNzLmZpcnN0LXJvdy1zZWxlY3RlZF09XCJmaXJzdFNlbGVjdGVkUm93ID09PSByb3cuX192aXJ0dWFsSW5kZXhcIlxuICAgICAgICAgIFtjbGFzcy5sYXN0LXJvdy1zZWxlY3RlZF09XCJsYXN0U2VsZWN0ZWRSb3cgPT09IHJvdy5fX3ZpcnR1YWxJbmRleFwiXG4gICAgICAgICAgW3N0eWxlLm1pbkhlaWdodC5weF09XCJyb3dIZWlnaHQgLSAxXCJcbiAgICAgICAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiXG4gICAgICAgID5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICpuZ0lmPVwiaGFzQW55VmlzaWJsZUNvbHVtblwiXG4gICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTZweDsgaGVpZ2h0OiAxNnB4XCJcbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJpc1Jvd1NlbGVjdGVkKHJvdylcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVSb3dTZWxlY3Rpb24ocm93KVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBSZW5kZXIgYWxsIGNvbHVtbnMgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgIGxldCBjb2wgb2YgY29sdW1ucztcbiAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlGaWVsZDtcbiAgICAgICAgICAgIGxldCBjb2xJbmRleCA9IGluZGV4XG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuY2hpbGRyZW4/Lmxlbmd0aCA+IDA7IGVsc2UgZmxhdENvbHVtblwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICBsZXQgY2hpbGQgb2YgY29sLmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlGaWVsZDtcbiAgICAgICAgICAgICAgICBsZXQgc3ViQ29sSW5kZXggPSBpbmRleFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hpbGQ/LmlzX3Zpc2libGUgJiYgIWNoaWxkPy5pc1Jvd0dyb3VwZWRcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICBjZWxsVGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICBjb2w6IGNoaWxkLFxuICAgICAgICAgICAgICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgICAgICAgICAgICAgIHJvd0luZGV4OiByb3dJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xJbmRleDogY29sSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgc3ViQ29sSW5kZXg6IHN1YkNvbEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IHNlY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgaXNUb3RhbFJvdzogaXNUb3RhbFJvd1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZmxhdENvbHVtbj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2w/LmlzX3Zpc2libGUgJiYgIWNvbD8uaXNSb3dHcm91cGVkXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgY2VsbFRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICBjb2w6IGNvbCxcbiAgICAgICAgICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgICAgICAgICAgIHJvd0luZGV4OiByb3dJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgY29sSW5kZXg6IGNvbEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBzdWJDb2xJbmRleDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogc2VjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgaXNUb3RhbFJvdzogaXNUb3RhbFJvd1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICBbQHNsaWRlVG9nZ2xlXVxuICAgICAgKm5nSWY9XCJzZWN0aW9uID09PSAnbGVmdCcgJiYgaXNEZXRhaWxzRXhwYW5kZWQocm93KVwiXG4gICAgICBjbGFzcz1cImFjY29yZGlvbi1kZXRhaWxzXCJcbiAgICAgIHN0eWxlPVwibWF4LWhlaWdodDogMzUwcHg7IG92ZXJmbG93OiBoaWRkZW5cIlxuICAgICAgW3N0eWxlLm1heEhlaWdodC5weF09XCJoYXNIb3Jpem9udGFsU2Nyb2xsID8gMzM5IDogMzQxXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgbGVmdFJpZ2h0TmVzdGVkUGxhY2Vob2xkZXI7XG4gICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IHJvdyB9XG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgIFtAc2xpZGVUb2dnbGVdXG4gICAgICAqbmdJZj1cInNlY3Rpb24gPT09ICdjZW50ZXInICYmIGlzRGV0YWlsc0V4cGFuZGVkKHJvdylcIlxuICAgICAgY2xhc3M9XCJhY2NvcmRpb24tZGV0YWlscyBjZW50ZXItc2VjdGlvblwiXG4gICAgICBzdHlsZT1cIlxuICAgICAgICBtYXgtaGVpZ2h0OiAzNTBweDtcbiAgICAgICAgb3ZlcmZsb3cteTogaGlkZGVuO1xuICAgICAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgICAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47XG4gICAgICBcIlxuICAgICAgI25lc3RlZFRhYmxlXG4gICAgICBbc3R5bGUud2lkdGhdPVwiXG4gICAgICAgIGhhc1JpZ2h0UGlubmVkQ29sdW1uc1xuICAgICAgICAgID8gJzEwMCUnXG4gICAgICAgICAgOiBoYXNWZXJ0aWNhbFNjcm9sbFxuICAgICAgICAgID8gJ2NhbGMoMTAwJSAtIDEycHgpJ1xuICAgICAgICAgIDogJzEwMCUnXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJncmlkVHlwZSA9PSAnQXNzZXRzJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJuZXN0ZWRUYWJsZVRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93IH1cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJncmlkVHlwZSA9PSAnVGFza3MnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgdGFza01hbmFnZW1lbnRUZW1wbGF0ZTtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgdGFza0RldGFpbHM6IHJvdyB9XG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICBbQHNsaWRlVG9nZ2xlXVxuICAgICAgKm5nSWY9XCJzZWN0aW9uID09PSAncmlnaHQnICYmIGlzRGV0YWlsc0V4cGFuZGVkKHJvdylcIlxuICAgICAgY2xhc3M9XCJhY2NvcmRpb24tZGV0YWlsc1wiXG4gICAgICBzdHlsZT1cIm1heC1oZWlnaHQ6IDM1MHB4OyBvdmVyZmxvdzogaGlkZGVuXCJcbiAgICAgIFtzdHlsZS5tYXhIZWlnaHQucHhdPVwiaGFzSG9yaXpvbnRhbFNjcm9sbCA/IDMzOSA6IDM0MVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgIGxlZnRSaWdodE5lc3RlZFBsYWNlaG9sZGVyO1xuICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiByb3cgfVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIEFjdHVhbCBDZWxsIGlzIEhlcmUgLS0+XG48bmctdGVtcGxhdGVcbiAgI2NlbGxUZW1wbGF0ZVxuICBsZXQtY29sPVwiY29sXCJcbiAgbGV0LXJvdz1cInJvd1wiXG4gIGxldC1zZWN0aW9uPVwic2VjdGlvblwiXG4gIGxldC1zdWJDb2xJbmRleD1cInN1YkNvbEluZGV4XCJcbiAgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIlxuICBsZXQtY29sSW5kZXg9XCJjb2xJbmRleFwiXG4gIGxldC1pc1RvdGFsUm93PVwiaXNUb3RhbFJvd1wiXG4+XG4gIDxkaXZcbiAgICAjY2VsbENvbnRhaW5lclxuICAgIChjbGljayk9XCJcbiAgICAgIGVkaXRpbmdLZXkgPSAnJzsgc2V0QWN0aXZlQ2VsbChyb3csIGNvbCk7IGNvbGxhcHNlQWxsRXhwYW5kZWRDZWxscygpXG4gICAgXCJcbiAgICBbc3R5bGUuZm9udFdlaWdodF09XCJib2R5Rm9udFdlaWdodFwiXG4gICAgW2NsYXNzLmJvcmRlci1yaWdodF09XCJzaG93VmVydGljYWxCb3JkZXJcIlxuICAgIGNsYXNzPVwiY2VsbCBvdmVyZmxvdy12aXNpYmxlIHBvc2l0aW9uLXJlbGF0aXZlIGRhdGEtZ3JpZC1jZWxsXCJcbiAgICBbYXR0ci5maWVsZF09XCJjb2wuZmllbGRcIlxuICAgIFtzdHlsZS53aWR0aC5weF09XCJjb2wud2lkdGhcIlxuICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiY29sLndpZHRoXCJcbiAgICBbc3R5bGUuZm9udFNpemUucHhdPVwiYm9keVRleHRGb250c1NpemVcIlxuICAgIFtzdHlsZS5taW5IZWlnaHQucHhdPVwicm93SGVpZ2h0XCJcbiAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiXG4gICAgW2NsYXNzLmFjdGl2ZS1jZWxsXT1cIlxuICAgICAgaXNBY3RpdmVDZWxsKHJvdywgY29sKSAmJiAhaXNFZGl0aW5nKHJvdywgY29sKSAmJiBzZWxlY3RlZEtleXMuc2l6ZSA9PSAxXG4gICAgXCJcbiAgICAoZGJsY2xpY2spPVwiXG4gICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGVuYWJsZUVkaXQocm93LCBjb2wsIGZhbHNlLCBjZWxsQ29udGFpbmVyKVxuICAgIFwiXG4gICAgW2NsYXNzLnJvdy1zZWxlY3RlZF09XCJyb3dTZWxlY3RlZEluZGV4ZXMuaGFzKHJvdy5fX3ZpcnR1YWxJbmRleClcIlxuICAgIFtjbGFzcy5maXJzdC1yb3ctc2VsZWN0ZWRdPVwiZmlyc3RTZWxlY3RlZFJvdyA9PT0gcm93Py5fX3ZpcnR1YWxJbmRleFwiXG4gICAgW2NsYXNzLmxhc3Qtcm93LXNlbGVjdGVkXT1cImxhc3RTZWxlY3RlZFJvdyA9PT0gcm93Py5fX3ZpcnR1YWxJbmRleFwiXG4gICAgdGFiaW5kZXg9XCItMVwiXG4gICAgKGtleWRvd24uZW50ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IGVuYWJsZUVkaXQocm93LCBjb2wpXCJcbiAgICAobW91c2Vkb3duKT1cIlxuICAgICAgc3RhcnRTZWxlY3Rpb24oXG4gICAgICAgIHJvdy5fX3ZpcnR1YWxJbmRleCxcbiAgICAgICAgY29sSW5kZXgsXG4gICAgICAgIHN1YkNvbEluZGV4ID8/IDAsXG4gICAgICAgIGNvbC5maWVsZCxcbiAgICAgICAgJGV2ZW50LFxuICAgICAgICBzZWN0aW9uXG4gICAgICApXG4gICAgXCJcbiAgICAobW91c2VlbnRlcik9XCJcbiAgICAgIGV4dGVuZFNlbGVjdGlvbihcbiAgICAgICAgcm93Ll9fdmlydHVhbEluZGV4LFxuICAgICAgICBjb2xJbmRleCxcbiAgICAgICAgc3ViQ29sSW5kZXggPz8gMCxcbiAgICAgICAgY29sLmZpZWxkLFxuICAgICAgICAkZXZlbnQsXG4gICAgICAgIHNlY3Rpb25cbiAgICAgIClcbiAgICBcIlxuICAgIChtb3VzZXVwKT1cImVuZFNlbGVjdGlvbigpXCJcbiAgICBbY2xhc3Muc2VsZWN0ZWQtY2VsbF09XCJcbiAgICAgIGlzU2VsZWN0ZWQoXG4gICAgICAgIHJvdy5fX3ZpcnR1YWxJbmRleCxcbiAgICAgICAgY29sSW5kZXgsXG4gICAgICAgIHN1YkNvbEluZGV4ID8/IDAsXG4gICAgICAgIGNvbC5maWVsZCxcbiAgICAgICAgc2VjdGlvblxuICAgICAgKVxuICAgIFwiXG4gICAgW2NsYXNzLnRvcC1ib3JkZXJdPVwiXG4gICAgICBpc1RvcEJvcmRlcihyb3cuX192aXJ0dWFsSW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCwgc2VjdGlvbilcbiAgICBcIlxuICAgIFtjbGFzcy5ib3R0b20tYm9yZGVyXT1cIlxuICAgICAgaXNCb3R0b21Cb3JkZXIocm93Ll9fdmlydHVhbEluZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pXG4gICAgXCJcbiAgICBbY2xhc3MubGVmdC1ib3JkZXJdPVwiXG4gICAgICBpc0xlZnRCb3JkZXIocm93Ll9fdmlydHVhbEluZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pXG4gICAgXCJcbiAgICBbY2xhc3MucmlnaHQtYm9yZGVyXT1cIlxuICAgICAgaXNSaWdodEJvcmRlcihyb3cuX192aXJ0dWFsSW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCwgc2VjdGlvbilcbiAgICBcIlxuICAgIFtjbGFzcy50b3AtbGVmdC1jb3JuZXJdPVwiXG4gICAgICBpc1RvcExlZnRDb3JuZXIocm93Ll9fdmlydHVhbEluZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pXG4gICAgXCJcbiAgICBbY2xhc3MudG9wLXJpZ2h0LWNvcm5lcl09XCJcbiAgICAgIGlzVG9wUmlnaHRDb3JuZXIocm93Ll9fdmlydHVhbEluZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pXG4gICAgXCJcbiAgICBbY2xhc3MuYm90dG9tLWxlZnQtY29ybmVyXT1cIlxuICAgICAgaXNCb3R0b21MZWZ0Q29ybmVyKHJvdy5fX3ZpcnR1YWxJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4LCBzZWN0aW9uKVxuICAgIFwiXG4gICAgW2NsYXNzLmJvdHRvbS1yaWdodC1jb3JuZXJdPVwiXG4gICAgICBpc0JvdHRvbVJpZ2h0Q29ybmVyKHJvdy5fX3ZpcnR1YWxJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4LCBzZWN0aW9uKVxuICAgIFwiXG4gID5cbiAgICA8IS0tICAobW91c2Vkb3duKT1cInN0YXJ0U2VsZWN0aW9uKHJvdy5fX3ZpcnR1YWxJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4ID8/IDAsIGNvbC5maWVsZCwgJGV2ZW50KVwiXG4gIChtb3VzZWVudGVyKT1cImV4dGVuZFNlbGVjdGlvbihyb3cuX192aXJ0dWFsSW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCA/PyAwLCBjb2wuZmllbGQsICRldmVudClcIlxuICAobW91c2V1cCk9XCJlbmRTZWxlY3Rpb24oKVwiXG4gIFtjbGFzcy5zZWxlY3RlZC1jZWxsXT1cImlzU2VsZWN0ZWQocm93Ll9fdmlydHVhbEluZGV4LCBjb2xJbmRleCwgIHN1YkNvbEluZGV4ID8/IDAsIGNvbC5maWVsZClcIiAtLT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInRhYmxlLWNlbGxcIlxuICAgICAgW2NsYXNzLmFjdGl2ZS1mb3ItZWRpdGluZ109XCJcbiAgICAgICAgaXNFZGl0aW5nKHJvdywgY29sKSAmJlxuICAgICAgICAoZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpPy5sZW5ndGggPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgIGdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKT8ubGVuZ3RoIDw9IDUwIHx8IGNvbC50eXBlID09ICdpbWFnZScpXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgaXNFZGl0aW5nKHJvdywgY29sKSAmJlxuICAgICAgICAgICAgKGdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKT8ubGVuZ3RoID09PSB1bmRlZmluZWQgfHwgY29sLnR5cGUgPT0gJ2ltYWdlJyB8fFxuICAgICAgICAgICAgICAoZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpPy5sZW5ndGggPD0gNTAgJiZcbiAgICAgICAgICAgICAgICAhZXhwYW5kZWRDZWxscy5zaXplKSk7XG4gICAgICAgICAgZWxzZSB2aWV3TW9kZVxuICAgICAgICBcIlxuICAgICAgPlxuXG4gICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5jZWxsRWRpdG9yOyBlbHNlIGJ1aWx0SW5FZGl0b3JzXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICBbY2VsbEVkaXRvcl09XCJjb2wuY2VsbEVkaXRvclwiXG4gICAgICAgICAgICAgICAgW3Jvd0RhdGFdPVwicm93XCJcbiAgICAgICAgICAgICAgICBbY29sRGF0YV09XCJjb2xcIlxuICAgICAgICAgICAgICAgIFtjZWxsVmFsdWVdPVwiZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpXCJcbiAgICAgICAgICAgICAgICAoZWRpdG9yRXZlbnQpPVwiZmluaXNoRWRpdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLXRlbXBsYXRlICNidWlsdEluRWRpdG9ycz5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29sPy50eXBlXCI+XG4gICAgICAgICAgPCEtLSBUZXh0IElucHV0IC0tPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHQgLSAxMFwiXG4gICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2lucHV0J1wiXG4gICAgICAgICAgICAjZGF0ZUlucHV0PVwibmdNb2RlbFwiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZClcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJkaXNhYmxlRWRpdChyb3csIGNvbCwgZGF0ZUlucHV0KVwiXG4gICAgICAgICAgICAoYmx1cik9XCJkaXNhYmxlRWRpdChyb3csIGNvbClcIlxuICAgICAgICAgICAgYXV0b2ZvY3VzXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJibHVySW5wdXQoJGV2ZW50LCByb3csIGNvbClcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2lzLWludmFsaWQnOiBkYXRlSW5wdXQuaW52YWxpZCB8fCAhaXNWYWx1ZVZhbGlkKHJvdywgY29sLCBkYXRlSW5wdXQpXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAvPlxuXG4gICAgICAgICAgPCEtLSBOdW1iZXIgSW5wdXQgLS0+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodCAtIDhcIlxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCJcbiAgICAgICAgICAgICNudW1iZXJJbnB1dD1cIm5nTW9kZWxcIlxuICAgICAgICAgICAgI251bWJlclJlZlxuICAgICAgICAgICAgKGtleXByZXNzKT1cImFsbG93T25seU51bWJlcnMoJGV2ZW50KVwiXG4gICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cImdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpXCJcbiAgICAgICAgICAgIChibHVyKT1cImRpc2FibGVFZGl0KHJvdywgY29sLCBudW1iZXJJbnB1dClcIlxuICAgICAgICAgICAgYXV0b2ZvY3VzXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJibHVySW5wdXQoJGV2ZW50LCByb3csIGNvbClcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2lzLWludmFsaWQnOiBudW1iZXJJbnB1dC5pbnZhbGlkIHx8ICFpc1ZhbHVlVmFsaWQocm93LCBjb2wsIG51bWJlcklucHV0KVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgLz5cblxuICAgICAgICAgIDwhLS0gRGF0ZSBJbnB1dCAtLT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicm93SGVpZ2h0IC0gOFwiXG4gICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGUnXCJcbiAgICAgICAgICAgIHR5cGU9XCJkYXRlXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cImdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpXCJcbiAgICAgICAgICAgIChibHVyKT1cImRpc2FibGVFZGl0KHJvdywgY29sLCBkYXRlSW5wdXQpXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImRpc2FibGVFZGl0KHJvdywgY29sLCBkYXRlSW5wdXQpXCJcbiAgICAgICAgICAgIGF1dG9mb2N1c1xuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgICAgICNkYXRlSW5wdXQ9XCJuZ01vZGVsXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImJsdXJJbnB1dCgkZXZlbnQsIHJvdywgY29sKVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogZGF0ZUlucHV0LmludmFsaWQgfHwgIWlzVmFsdWVWYWxpZChyb3csIGNvbCwgZGF0ZUlucHV0KVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTtcIlxuICAgICAgICAgIC8+XG5cbiAgICAgICAgICA8IS0tIEltYWdlIFVwbG9hZCAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInaW1hZ2UnXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICBhY2NlcHQ9XCJpbWFnZS8qXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHQgLSA4XCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkltYWdlQ2hhbmdlKCRldmVudCwgcm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICBoaWRkZW5cbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgKm5nSWY9XCJnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZClcIlxuICAgICAgICAgICAgICBbc3JjXT1cImdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKVwiXG4gICAgICAgICAgICAgIGFsdD1cInByZXZpZXdcIlxuICAgICAgICAgICAgICB3aWR0aD1cIjMyXCJcbiAgICAgICAgICAgICAgaGVpZ2h0PVwiMzJcIlxuICAgICAgICAgICAgICBzdHlsZT1cIm9iamVjdC1maXQ6IGNvdmVyOyBib3JkZXItcmFkaXVzOiA0cHhcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gRHJvcGRvd24gLS0+XG4gICAgICAgICAgPCEtLSBuZy1zZWxlY3QgbGlrZSBkcm9wZG93biAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2Ryb3Bkb3duJ1wiXG4gICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duIHctMTAwXCJcbiAgICAgICAgICAgIChibHVyKT1cImRpc2FibGVFZGl0KHJvdywgY29sKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPCEtLSBUcmlnZ2VyIC0tPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtIHRleHQtc3RhcnQgdy0xMDAgdGV4dC1lbGxpcHNpc1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW3N0eWxlLm1pbkhlaWdodC5weF09XCJyb3dIZWlnaHQgLSAxMFwiXG4gICAgICAgICAgICAgIGRhdGEtYnMtZGlzcGxheT1cInN0YXRpY1wiXG4gICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpPy52YWx1ZSB8fFxuICAgICAgICAgICAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCk/Lm5hbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcGxhY2Vob2xkZXI+IFNlbGVjdCBvcHRpb25zLi4uIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPCEtLSBNZW51IC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLW1lbnUgdy0xMDAgcC0wIGNlbGwtZWRpdGluZy1kcm9wZG93bi1tZW51IHJvdW5kZWQtM1wiXG4gICAgICAgICAgICAgIFtjbGFzcy5zaG93XT1cImlzRWRpdGluZyhyb3csIGNvbClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8IS0tIFNlYXJjaCAtLT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHktMSBlZGl0aW5nLWRyb3Bkb3duLXNlYXJjaC1pbnB1dFwiICpuZ0lmPVwiY29sPy5jb2x1bW5fZHJvcGRvd25fdmFsdWU/Lmxlbmd0aCA+IDVcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVkaXRpbkRyb3Bkb3duU2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCBcbiAgICAgICAgICAgICAgICBpdGVtU2l6ZT1cIjM1XCIgXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi12aWV3cG9ydFwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDEyMHB4XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoY29sLmNvbHVtbl9kcm9wZG93bl92YWx1ZSB8IGZpbHRlcjogZWRpdGluRHJvcGRvd25TZWFyY2ggOiAndmFsdWUnKSBhcyBmaWx0ZXJlZE9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgIDwhLS0gRHJvcGRvd24gSXRlbXMgLS0+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICpjZGtWaXJ0dWFsRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpID09IG9wdGlvbj8udmFsdWUgfHwgZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpID09IG9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHgtMiBweS0xIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZHJvcGRvd24taXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXROZXN0ZWRWYWx1ZShyb3csIGNvbCwgb3B0aW9uLCB0cnVlKTsgZWRpdGluZ0tleSA9IG51bGxcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0wIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZm9yXT1cImNvbC5maWVsZCArICctJyArIChvcHRpb24udmFsdWUgfHwgb3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24udmFsdWUgfHwgb3B0aW9uIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPCEtLSBTaG93IHdoZW4gbm8gZmlsdGVyZWQgcmVzdWx0cyAtLT5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIiFmaWx0ZXJlZE9wdGlvbnM/Lmxlbmd0aFwiIGNsYXNzPVwicHgtMiBweS0xIGQtYmxvY2sgdGV4dC1jZW50ZXJcIj5ObyBSZWNvcmQgRm91bmQ8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8IS0tIEZvciBBcnJheSB0eXBlIHZhbHVlcyAtLT5cblxuICAgICAgICAgIDwhLS0gTVVMVEkgU0VMRUNUIChBUlJBWSkgLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidhcnJheSdcIlxuICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93biB3LTEwMFwiXG4gICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgKGJsdXIpPVwib25BcnJheUJsdXIocm93LCBjb2wpXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImNvbW1pdEFycmF5KHJvdywgY29sKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPCEtLSBUcmlnZ2VyIC0tPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbSB0ZXh0LXN0YXJ0IHctMTAwIHRleHQtZWxsaXBzaXNcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCJcbiAgICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICBbc3R5bGUubWluSGVpZ2h0LnB4XT1cInJvd0hlaWdodCAtIDEwXCJcbiAgICAgICAgICAgIGRhdGEtYnMtZGlzcGxheT1cInN0YXRpY1wiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRBcnJheVRlbXAocm93LCBjb2wpLmxlbmd0aDsgZWxzZSBhcnJheVBsYWNlaG9sZGVyXCI+XG4gICAgICAgICAgICAgICAgICB7eyBkaXNwbGF5QXJyYXlMYWJlbHMocm93LCBjb2wpIH19XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cblxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2FycmF5UGxhY2Vob2xkZXI+XG4gICAgICAgICAgICAgICAgU2VsZWN0IG9wdGlvbnMuLi5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8IS0tIE1lbnUgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudSB3LTEwMCBwLTAgY2VsbC1lZGl0aW5nLWRyb3Bkb3duLW1lbnUgcm91bmRlZC0zXCIgW2NsYXNzLmludmlzaWJsZV09XCIhbWVudVJlYWR5XCIgW2NsYXNzLnNob3ddPVwiaXNFZGl0aW5nKHJvdywgY29sKVwiPlxuICAgICAgICAgICAgICA8IS0tIFNlYXJjaCAtLT5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbD8uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlPy5sZW5ndGggPiA1XCIgY2xhc3M9XCJweC0yIHB5LTEgYXJyYXktc2VhcmNoLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIlxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlZGl0aW5Ecm9wZG93blNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPCEtLSBPcHRpb25zIC0tPlxuICAgICAgICAgICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IGl0ZW1TaXplPVwiMzVcIiBzdHlsZT1cImhlaWdodDogMTIwcHhcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGNvbC5jb2x1bW5fZHJvcGRvd25fdmFsdWUgfCBmaWx0ZXI6IGVkaXRpbkRyb3Bkb3duU2VhcmNoIDogJ3ZhbHVlJykgYXMgZmlsdGVyZWRPcHRpb25zXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICpjZGtWaXJ0dWFsRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcHgtMiBweS0xIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgbS0wIG1lLTJcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQXJyYXlTZWxlY3RlZChyb3csIGNvbCwgb3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVBcnJheVRlbXAocm93LCBjb2wsIG9wdGlvbik7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgY29tbWl0QXJyYXkocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxNnB4OyBoZWlnaHQ6IDE2cHg7IG1heC13aWR0aDogMTZweDsgbWF4LWhlaWdodDogMTZweFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbj8udmFsdWUgfHwgb3B0aW9uIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPCEtLSBTaG93IHdoZW4gZmlsdGVyZWQgbGlzdCBpcyBlbXB0eSAtLT5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIiFmaWx0ZXJlZE9wdGlvbnM/Lmxlbmd0aFwiIGNsYXNzPVwicHgtMiBweS0xIGQtYmxvY2sgdGV4dC1jZW50ZXJcIj5ObyBSZWNvcmQgRm91bmQ8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG5cblxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidlbWFpbCdcIlxuICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHQgLSAxMFwiXG4gICAgICAgICAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cInJvd0hlaWdodCAtIDEwXCJcbiAgICAgICAgICAgICNlbWFpbE1vZGVsPVwibmdNb2RlbFwiXG4gICAgICAgICAgICAjZW1haWxJbnB1dFxuICAgICAgICAgICAgdHlwZT1cImVtYWlsXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cImdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpXCJcbiAgICAgICAgICAgIG5hbWU9XCJ7eyBjb2wuZmllbGQgfX1cIlxuICAgICAgICAgICAgcGF0dGVybj1cIl5bYS16QS1aMC05Ll8lKy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsfSRcIlxuICAgICAgICAgICAgKGJsdXIpPVwiZGlzYWJsZUVkaXQocm93LCBjb2wsIGVtYWlsTW9kZWwpXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImJsdXJJbnB1dCgkZXZlbnQsIHJvdywgY29sKVwiXG4gICAgICAgICAgICBhdXRvZm9jdXNcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogZW1haWxNb2RlbC5pbnZhbGlkIHx8ICFpc1ZhbHVlVmFsaWQocm93LCBjb2wsIGVtYWlsTW9kZWwpXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDwhLS0gRGVmYXVsdCBmYWxsYmFjayAtLT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICpuZ1N3aXRjaERlZmF1bHRcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicm93SGVpZ2h0IC0gMTBcIlxuICAgICAgICAgICAgW3N0eWxlLm1heEhlaWdodC5weF09XCJyb3dIZWlnaHQgLSAxMFwiXG4gICAgICAgICAgICAjdGV4dE1vZGVsPVwibmdNb2RlbFwiXG4gICAgICAgICAgICAjdGV4dElucHV0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJibHVySW5wdXQoJGV2ZW50LCByb3csIGNvbClcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwiZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZClcIlxuICAgICAgICAgICAgbmFtZT1cInt7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAoYmx1cik9XCJkaXNhYmxlRWRpdChyb3csIGNvbCwgdGV4dE1vZGVsKVwiXG4gICAgICAgICAgICBhdXRvZm9jdXNcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogdGV4dE1vZGVsLmludmFsaWQgfHwgIWlzVmFsdWVWYWxpZChyb3csIGNvbCwgdGV4dE1vZGVsKVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBEaXNwbGF5IG1vZGUgLS0+XG4gICAgICA8bmctdGVtcGxhdGUgI3ZpZXdNb2RlPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIHctMTAwIG92ZXJmbG93LWhpZGRlblwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzZXMoY29sLCBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCkpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDwhLS0gRmllbGQgaWNvbiAoZm9yIFRhc2tzIGdyaWQpIC0tPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwiZ3JpZFR5cGUgPT09ICdUYXNrcycgJiYgaWNvbk1hcFtjb2wuZmllbGRdICYmICFpc1RvdGFsUm93XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyIG1lLTJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiaWNvbk1hcFtjb2wuZmllbGRdKHJvdywgY29sKVwiXG4gICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPCEtLSDinIUgQ3VzdG9tIGNlbGwgcmVuZGVyZXIgc3VwcG9ydCAtLT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmNlbGxSZW5kZXJlciAmJiAhaXNUb3RhbFJvdzsgZWxzZSBkZWZhdWx0Q2VsbFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICBbY2VsbFJlbmRlckluaXRdPVwiY29sLmNlbGxSZW5kZXJlclwiXG4gICAgICAgICAgICAgIFtyb3dEYXRhXT1cInJvd1wiXG4gICAgICAgICAgICAgIFtjb2xEYXRhXT1cImNvbFwiXG4gICAgICAgICAgICAgIFtjZWxsVmFsdWVdPVwiZ2V0TmVzdGVkVmFsdWUocm93LCBjb2w/LmZpZWxkKVwiXG4gICAgICAgICAgICAgIChjZWxsRXZlbnQpPVwib25DZWxsRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDwhLS0g8J+nviBEZWZhdWx0IHRleHQtYmFzZWQgY2VsbCByZW5kZXJpbmcgLS0+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q2VsbD5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgI2NlbGxUZXh0XG4gICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1lbGxpcHNpcyBmbGV4LWdyb3ctMVwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCJnZXRDZWxsVGl0bGUocm93LCBjb2wpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPCEtLSBOb3JtYWwgY2VsbCAtLT5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICBjb2w/LnR5cGUgIT09ICdpbWFnZScgJiZcbiAgICAgICAgICAgICAgICAgIGNvbD8uZmllbGQgIT0gJ2ltYWdlJyAmJlxuICAgICAgICAgICAgICAgICAgY29sPy5maWVsZCAhPSAnaW52b2ljZS5pbnZvaWNlX2ltYWdlJyAmJlxuICAgICAgICAgICAgICAgICAgIWlzVG90YWxSb3dcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5pc19hbW91bnRcIj57e1xuICAgICAgICAgICAgICAgICAgY3VycmVuY3lTeW1ib2xcbiAgICAgICAgICAgICAgICB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIHt7Z2V0Q2VsbFRpdGxlKHJvdywgY29sKX19XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDwhLS0gVG90YWwgcm93IC0tPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNUb3RhbFJvd1wiPlxuICAgICAgICAgICAgICAgIHt7IGdldFRvdGFsQW1vdW50KGNvbCkgfX1cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPCEtLSBJbnZvaWNlIEltYWdlIC0tPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmZpZWxkID09ICdpbnZvaWNlLmludm9pY2VfaW1hZ2UnXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IHpvb206IDAuN1wiPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCkgfHwgJ0F0dGFjaG1lbnQnIH19XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkQXR0Y2htZW50KGdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKSlcIlxuICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAgICAgICAgICAgICAgICdkYXRhLWdyaWQvZG9jdW1lbnQtaWNvbnMvJyArXG4gICAgICAgICAgICAgICAgICAgICAgZ2V0RXh0ZW50aW9uKGdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKSkgK1xuICAgICAgICAgICAgICAgICAgICAgICcuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPCEtLSBJbWFnZSBjZWxsIC0tPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy50eXBlID09ICdpbWFnZScgJiYgIWlzVG90YWxSb3dcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0SW1hZ2VQbGFjZWhvbGRlcjtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyByb3c6IHJvdywgY29sOiBjb2wgfVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgKCFjb2w/LmNlbGxSZW5kZXJlciAmJiBzaG93Q2VsbERldGFpbHNCb3ggJiZcbiAgICAgICAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCk/Lmxlbmd0aCA+IDUwICYmIGNvbD8udHlwZSAhPT0gJ2ltYWdlJykgfHxcbiAgICAgICAgICAgICAgKGlzTmVzdGVkVmFsdWVBcnJheShyb3csIGNvbC5maWVsZCkgJiZcbiAgICAgICAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCk/Lmxlbmd0aCA+IDEpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJ0b2dnbGUtaWNvbiBkYXRhLWdyaWQtc3ZnLWljb24gbXMtMiBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICBpc0V4cGFuZGVkKHJvdywgY29sKVxuICAgICAgICAgICAgICAgID8gc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1kb3duLnN2ZydcbiAgICAgICAgICAgICAgICA6IHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZXZyb24tcmlnaHQuc3ZnJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICB0b2dnbGVFeHBhbmRPZkxvbmdDZWxsVGV4dChyb3csIGNvbCwgY29sdW1ucywgZmFsc2UpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKGRibGNsaWNrKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8IS0tIEV4cGFuZCAvIENvbGxhcHNlIGljb24gLS0+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gRXhwYW5kZWQgdGV4dCAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgdy0xMDAgZXhwYW5kZWQtYm94XCJcbiAgICAgICAgICAqbmdJZj1cImlzRXhwYW5kZWQocm93LCBjb2wpXCJcbiAgICAgICAgICBbc3R5bGUuekluZGV4XT1cImdldFpJbmRleChyb3csIGNvbClcIlxuICAgICAgICAgIHN0eWxlPVwidG9wOiAxMDAlOyBsZWZ0OiAwXCJcbiAgICAgICAgICBbYXR0ci5pZF09XCIocm93LmlkIHx8IHJvdy5faWQpICsgJy0nICsgKGNvbC5pZCB8fCBjb2wuX2lkKVwiXG4gICAgICAgICAgW2NsYXNzLmludmlzaWJsZV09XCIhc2hvd0RldGFpbHNCb3hcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgZnVsbFRleHRUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgICAgICAgIGNvbDogY29sLFxuICAgICAgICAgICAgICAgIGlzQXJyYXk6IGlzTmVzdGVkVmFsdWVBcnJheShyb3csIGNvbC5maWVsZClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIEhlYWRlcnMgQWN0aW9uIExpc3QgT24gY2xpY2tpbmcgdGhyZWUgZG90cyAtLT5cblxuPG5nLXRlbXBsYXRlXG4gICNjb2x1bW5NZW51XG4gIGxldC1jb2w9XCJjb2xcIlxuICBsZXQtaXNOZXN0ZWRUYWJsZT1cImlzTmVzdGVkVGFibGVcIlxuICBsZXQtY29sdW1ucz1cImNvbHVtbnNcIlxuICBsZXQtc2VjdGlvbj1cInNlY3Rpb25cIlxuICBsZXQtY29sdW1uSW5kZXg9XCJjb2x1bW5JbmRleFwiXG4gIGxldC1jaGlsZENvbEluZGV4PVwiY2hpbGRDb2xJbmRleFwiXG4+XG4gIDxkaXZcbiAgICBjbGFzcz1cImNvbHVtbi1tZW51IHRocmVlLWRvdHMtY29sLW1lbnVcIlxuICAgIFtjbGFzcy52aXN1YWxseS1oaWRkZW5dPVwiaXNNZW51ZUhpZGRlblwiXG4gICAgKm5nSWY9XCJhY3RpdmVDb2wgJiYgIWlzVGhyZWVEb3RzRmlsdGVyT3BlblwiXG4gICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJkcm9wZG93bnNCYWNrZ3JvdW5kQ29sb3JcIlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgIFtzdHlsZS5jb2xvcl09XCJoZWFkZXJUZXh0Q29sb3JcIlxuICA+XG4gICAgPCEtLSBTb3J0IEFzY2VuZGluZyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLWJlbG93IHBiLTJcIiBbY2xhc3MuZGlzYWJsZS1zb3J0aW5nXT1cIiFjb2wuaXNfc29ydGFibGVcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwibXV0ZWQtdGV4dCBmcy03XCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTJweFwiPlNvcnQ8L3NwYW4+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgY29sdW1uVGhyZWVkb3RzTXVudUNvbmZpZz8uc2hvd0FzY2VuZGluZyAmJlxuICAgICAgICAgIChzb3J0aW5nQ29uZmlnPy5maWVsZCAhPSBjb2wuZmllbGQgfHxcbiAgICAgICAgICAgIHNvcnRpbmdDb25maWc/Lm9yZGVyX2J5ID09ICdkZXNjJylcbiAgICAgICAgXCJcbiAgICAgICAgY2xhc3M9XCJjb2x1bW4tbWVudS1pdGVtXCJcbiAgICAgICAgKGNsaWNrKT1cInNvcnRBc2MoYWN0aXZlQ29sKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvdy11cC5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgU29ydCBBc2NlbmRpbmdcbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFNvcnQgRGVzY2VuZGluZyAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBjb2x1bW5UaHJlZWRvdHNNdW51Q29uZmlnPy5zaG93RGVzY2VuZGluZyAmJlxuICAgICAgICAgIChzb3J0aW5nQ29uZmlnPy5maWVsZCAhPSBjb2wuZmllbGQgfHxcbiAgICAgICAgICAgIHNvcnRpbmdDb25maWc/Lm9yZGVyX2J5ID09ICdhc2MnKVxuICAgICAgICBcIlxuICAgICAgICBjbGFzcz1cImNvbHVtbi1tZW51LWl0ZW1cIlxuICAgICAgICAoY2xpY2spPVwic29ydERlc2MoYWN0aXZlQ29sKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvdy1kb3duLnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgICBTb3J0IERlc2NlbmRpbmdcbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgc29ydGluZ0NvbmZpZz8uZmllbGQgPT09IGNvbC5maWVsZCAmJlxuICAgICAgICAgIChzb3J0aW5nQ29uZmlnPy5vcmRlcl9ieSA9PT0gJ2FzYycgfHxcbiAgICAgICAgICAgIHNvcnRpbmdDb25maWc/Lm9yZGVyX2J5ID09PSAnZGVzYycpXG4gICAgICAgIFwiXG4gICAgICAgIGNsYXNzPVwiY29sdW1uLW1lbnUtaXRlbVwiXG4gICAgICAgIChjbGljayk9XCJyZXNldFNvcnQoYWN0aXZlQ29sKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Fycm93LWNvdW50ZXJjbG9ja3dpc2Uuc3ZnJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICAgIFJlc2V0IFNvcnRcbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJweS0yIGJvcmRlci1iZWxvdyB0aHJlZS1kb3RzLWZpbHRlclwiIFtjbGFzcy5kaXNhYmxlLXNvcnRpbmddPVwiY29sPy50eXBlID09ICdpbWFnZScgfHwgIWNvbC5pc19zZWFyY2hfYWJsZVwiPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cImNvbHVtblRocmVlZG90c011bnVDb25maWc/LnNob3dGaWx0ZXJcIlxuICAgICAgICBjbGFzcz1cImNvbHVtbi1tZW51LWl0ZW0gdGhyZWUtZG90cy1maWx0ZXJcIlxuICAgICAgICAoY2xpY2spPVwib3BlbkZpbHRlcm9uVGhyZWVEb3RzQ2xpY2soY29sKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9maWx0ZXItMi5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgRmlsdGVyXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJweS0yIGJvcmRlci1iZWxvd1wiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtdXRlZC10ZXh0IGZzLTdcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMnB4XCI+UGluPC9zcGFuPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cImNvbHVtblRocmVlZG90c011bnVDb25maWc/LnNob3dQaW5sZWZ0ICYmIGNvbD8ucGlubmVkICE9PSAnbGVmdCdcIlxuICAgICAgICBjbGFzcz1cImNvbHVtbi1tZW51LWl0ZW1cIlxuICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHVwZGF0ZUNvbHVtblBpbkluU291cmNlQnlGaWVsZChcbiAgICAgICAgICAgIGFjdGl2ZUNvbCxcbiAgICAgICAgICAgICdsZWZ0JyxcbiAgICAgICAgICAgIGlzTmVzdGVkVGFibGUsXG4gICAgICAgICAgICBjb2x1bW5zXG4gICAgICAgICAgKVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvcGluLWxlZnQuc3ZnJ1wiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgID48L3NwYW5cbiAgICAgICAgPlBpbiBMZWZ0XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIGNvbHVtblRocmVlZG90c011bnVDb25maWc/LnNob3dQaW5yaWdodCAmJiBjb2w/LnBpbm5lZCAhPT0gJ3JpZ2h0J1xuICAgICAgICBcIlxuICAgICAgICBjbGFzcz1cImNvbHVtbi1tZW51LWl0ZW1cIlxuICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHVwZGF0ZUNvbHVtblBpbkluU291cmNlQnlGaWVsZChcbiAgICAgICAgICAgIGFjdGl2ZUNvbCxcbiAgICAgICAgICAgICdyaWdodCcsXG4gICAgICAgICAgICBpc05lc3RlZFRhYmxlLFxuICAgICAgICAgICAgY29sdW1uc1xuICAgICAgICAgIClcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3Bpbi1yaWdodC5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgID48L3NwYW5cbiAgICAgICAgPlBpbiBSaWdodFxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJjb2w/LnBpbm5lZFwiXG4gICAgICAgIGNsYXNzPVwiY29sdW1uLW1lbnUtaXRlbVwiXG4gICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgdXBkYXRlQ29sdW1uUGluSW5Tb3VyY2VCeUZpZWxkKFxuICAgICAgICAgICAgYWN0aXZlQ29sLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIGlzTmVzdGVkVGFibGUsXG4gICAgICAgICAgICBjb2x1bW5zXG4gICAgICAgICAgKVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9sYXlvdXQtdGhyZWUtY29sdW1ucy5zdmcnXG4gICAgICAgICAgXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgICAgPjwvc3BhblxuICAgICAgICA+VW5waW5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJjb2x1bW5UaHJlZWRvdHNNdW51Q29uZmlnPy5zaG93QXV0b3NpemVUaGlzQ29sdW1uXCJcbiAgICAgIGNsYXNzPVwiY29sdW1uLW1lbnUtaXRlbVwiXG4gICAgICAoY2xpY2spPVwiYXV0b3NpemVDb2x1bW4oYWN0aXZlQ29sKVwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvd3MtZXhwYW5kLXZlcnRpY2FsLnN2ZydcbiAgICAgICAgXCJcbiAgICAgICAgY2xhc3M9XCJtZS0yXCJcbiAgICAgID48L3NwYW4+XG4gICAgICBBdXRvc2l6ZSBUaGlzIENvbHVtblxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBBdXRvc2l6ZSBBbGwgQ29sdW1ucyAtLT5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cImNvbHVtblRocmVlZG90c011bnVDb25maWc/LnNob3dBdXRvc2l6ZUFsbENvbHVtbnNcIlxuICAgICAgY2xhc3M9XCJjb2x1bW4tbWVudS1pdGVtXCJcbiAgICAgIChjbGljayk9XCJhdXRvc2l6ZUFsbENvbHVtbnMoKVwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvd3MtYW5nbGUtZXhwYW5kLnN2ZydcbiAgICAgICAgXCJcbiAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICA+PC9zcGFuXG4gICAgICA+QXV0b3NpemUgQWxsIENvbHVtbnNcbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gR3JvdXAgQnkgLS0+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJzaG93Um93c0dyb3VwaW5nXCJcbiAgICAgIGNsYXNzPVwiY29sdW1uLW1lbnUtaXRlbVwiXG4gICAgICAoY2xpY2spPVwiZ3JvdXBCeShhY3RpdmVDb2wpXCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlLXNvcnRpbmddPVwiIWNvbC5pc19ncm91cGFibGVcIlxuICAgID5cbiAgICAgIDxzcGFuXG4gICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZGlhZ3JhbS0zLnN2ZydcIlxuICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgID48L3NwYW4+XG4gICAgICBHcm91cCBieSB7eyBjb2wuaGVhZGVyIH19XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIENob29zZSBDb2x1bW5zIC0tPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwiY29sdW1uVGhyZWVkb3RzTXVudUNvbmZpZz8uc2hvd0Nob3NlQ29sdW1uc1wiXG4gICAgICBjbGFzcz1cImNvbHVtbi1tZW51LWl0ZW1cIlxuICAgICAgKGNsaWNrKT1cImNob29zZUNvbHVtbnMoKVwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy91aS1jaGVja3MtZ3JpZC5zdmcnXCJcbiAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICA+PC9zcGFuPlxuICAgICAgQ2hvb3NlIENvbHVtbnNcbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUmVzZXQgQ29sdW1ucyAtLT5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cImNvbHVtblRocmVlZG90c011bnVDb25maWc/LnNob3dSZXNldENvbHVtbnNcIlxuICAgICAgY2xhc3M9XCJjb2x1bW4tbWVudS1pdGVtXCJcbiAgICAgIChjbGljayk9XCJyZXNldENvbHVtbnMoKVwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvdy1jb3VudGVyY2xvY2t3aXNlLnN2ZydcbiAgICAgICAgXCJcbiAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICA+PC9zcGFuXG4gICAgICA+UmVzZXQgQ29sdW1uc1xuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIEBzbGlkZVRvZ2dsZVxuICAgICpuZ0lmPVwiaXNUaHJlZURvdHNGaWx0ZXJPcGVuICYmIGNvbD8uaXNfc2VhcmNoX2FibGVcIlxuICAgIGNsYXNzPVwidGhyZWUtZG90cy1jb2wtbWVudSBwb3NpdGlvbi1yZWxhdGl2ZVwiXG4gICAgW3N0eWxlLnJpZ2h0LnB4XT1cImdldER5bmFtaWNSaWdodChjb2wsIHNlY3Rpb24sIGNvbHVtbkluZGV4LCBjaGlsZENvbEluZGV4KVwiXG4gICAgW2NsYXNzLnZpc3VhbGx5LWhpZGRlbl09XCJpc01lbnVlSGlkZGVuXCJcbiAgPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy5maWx0ZXJSZW5kZXJlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItbWVudS1jb250YWluZXIgZmlsdGVyLW1lbnUgcC0wXCIgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJkcm9wZG93bnNCYWNrZ3JvdW5kQ29sb3JcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgW2NlbGxSZW5kZXJJbml0XT1cImNvbC5maWx0ZXJSZW5kZXJlclwiXG4gICAgICAgICAgICAgIFtjb2xEYXRhXT1cImNvbFwiXG4gICAgICAgICAgICAgIChjZWxsRXZlbnQpPVwib25DZWxsRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtjb250ZXh0XT1cImdyaWRDb250ZXh0XCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbD8uZmlsdGVyUmVuZGVyZXJcIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlck1lbnU7IGNvbnRleHQ6IHsgY29sOiBjb2wgfVwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gRmlsdGVyIE1lbnVlIC0tPlxuPG5nLXRlbXBsYXRlICNmaWx0ZXJNZW51IGxldC1jb2w9XCJjb2xcIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZmlsdGVyLW1lbnUtY29udGFpbmVyIGZpbHRlci1tZW51XCJcbiAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImRyb3Bkb3duc0JhY2tncm91bmRDb2xvclwiXG4gICAgKm5nSWY9XCIhY29sPy5maWx0ZXJSZW5kZXJlclwiXG4gID5cbiAgICA8IS0tIERyb3Bkb3duIFR5cGUgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbD8udHlwZSA9PT0gJ2Ryb3Bkb3duJyB8fCBjb2w/LnR5cGUgPT09ICdhcnJheSc7IGVsc2UgdGV4dEZpbHRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1kcm9wZG93bi1zZWN0aW9uIHAtMVwiPlxuXG4gICAgPCEtLSBTZWFyY2ggaW5wdXQgLS0+XG4gICAgPGlucHV0XG4gICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIlxuICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICBbKG5nTW9kZWwpXT1cImFkZEZpbHRlckNvbHVtbklucHV0XCJcbiAgICAvPlxuXG4gICAgPCEtLSBGaWx0ZXIgKyBSZXN1bHQgSGFuZGxpbmcgLS0+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgKHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy5jb2x1bW5fZHJvcGRvd25fdmFsdWVcbiAgICAgICAgICB8IGZpbHRlciA6IGFkZEZpbHRlckNvbHVtbklucHV0IDogJ3ZhbHVlJykgYXMgZmlsdGVyZWRPcHRpb25zXG4gICAgICBcIlxuICAgID5cbiA8IS0tIENoZWNrIGlmIGNvbHVtbl9kcm9wZG93bl92YWx1ZSBleGlzdHMgYW5kIGhhcyBkYXRhIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LmNvbHVtbl9kcm9wZG93bl92YWx1ZT8ubGVuZ3RoOyBlbHNlIG5vRHJvcGRvd25EYXRhXCI+XG4gICAgICA8IS0tIERBVEEgRk9VTkQgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyZWRPcHRpb25zLmxlbmd0aDsgZWxzZSBub0RhdGFGb3VuZFwiPlxuXG4gICAgICAgIDwhLS0gU2VsZWN0IEFsbCAob25seSB3aGVuIGRhdGEgZXhpc3RzKSAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWItMSBtdC0yIG1zLTEgc2VsZWN0LWFsbC1maWx0ZXJcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJcbiAgICAgICAgICAgICAgICAoY3VycmVudEZpbHRlclNlbGVjdGVkSWRzPy5zaXplID8/IDApID09PVxuICAgICAgICAgICAgICAgIChzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlPy5sZW5ndGggPz8gMClcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiXG4gICAgICAgICAgICAgICAgKGN1cnJlbnRGaWx0ZXJTZWxlY3RlZElkcz8uc2l6ZSA/PyAwKSA+IDAgJiZcbiAgICAgICAgICAgICAgICAoY3VycmVudEZpbHRlclNlbGVjdGVkSWRzPy5zaXplID8/IDApIDxcbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LmNvbHVtbl9kcm9wZG93bl92YWx1ZT8ubGVuZ3RoID8/IDApXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsU2lkZUZpbHRlcnMoY29sLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgaWQ9XCJzZWxlY3RBbGxfe3sgY29sLmZpZWxkIH19XCJcbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwic2VsZWN0QWxsX3t7IGNvbC5maWVsZCB9fVwiPlxuICAgICAgICAgICAgU2VsZWN0IEFsbFxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gVmlydHVhbCBTY3JvbGwgLS0+XG4gICAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnRcbiAgICAgICAgICBpdGVtU2l6ZT1cIjMyXCJcbiAgICAgICAgICBjbGFzcz1cImZpbHRlci12aWV3cG9ydFwiXG4gICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDEyMHB4XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjayBtYi0xIG1zLTFcIlxuICAgICAgICAgICAgKmNka1ZpcnR1YWxGb3I9XCJsZXQgb3B0aW9uIG9mIGZpbHRlcmVkT3B0aW9uczsgdHJhY2tCeTogdHJhY2tCeUlkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgW2lkXT1cIm9wdGlvbj8uaWQgPz8gb3B0aW9uPy5faWQgPz8gb3B0aW9uXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiXG4gICAgICAgICAgICAgICAgY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmhhcyhvcHRpb24/LmlkID8/IG9wdGlvbj8uX2lkID8/IG9wdGlvbilcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVTZWxlY3Rpb25JbkZpbHRlcihvcHRpb24pXCJcbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgZnctc2VtaWJvbGRcIlxuICAgICAgICAgICAgICBbZm9yXT1cIm9wdGlvbj8uaWQgPz8gb3B0aW9uPy5faWQgPz8gb3B0aW9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgKG9wdGlvbj8udmFsdWUgPz8gb3B0aW9uPy5uYW1lID8/IG9wdGlvbikgfCB0aXRsZWNhc2UgfX1cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuXG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBOTyBEQVRBIEZPVU5EIC0tPlxuICAgICAgPG5nLXRlbXBsYXRlICNub0RhdGFGb3VuZD5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwidGV4dC1jZW50ZXIgdGV4dC1tdXRlZCBtdC0yXCJcbiAgICAgICAgICAqbmdJZj1cImFkZEZpbHRlckNvbHVtbklucHV0XCJcbiAgICAgICAgPlxuICAgICAgICAgIE5vIFJlY29yZCBGb3VuZFxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBOTyBEUk9QRE9XTiBEQVRBIEFWQUlMQUJMRSAtLT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNub0Ryb3Bkb3duRGF0YT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgdGV4dC1tdXRlZCBtdC0zIG1iLTNcIj5cbiAgICAgICAgICAgICBObyBSZWNvcmQgRm91bmRcbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cblxuXG4gICAgPCEtLSBUZXh0IEZpbHRlciBTZWN0aW9uIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSAjdGV4dEZpbHRlcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItdGV4dC1zZWN0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTJcIj5cbiAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtIGN1c3RvbS1zZWxlY3RcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaXJzdENvbmRpdGlvblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdzdHJpbmcnXCI+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJjb250YWluXCI+Q29udGFpbnM8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImRvZXNfbm90X2NvbnRhaW5cIj5Eb2VzIE5vdCBDb250YWluPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFsczwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYmVmb3JlXCI+U3RhcnRzIFdpdGg8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+RW5kcyBXaXRoPC9vcHRpb24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdkYXRlJyB8fCBzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAndGltZSdcIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzIFRvPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJub3RfZXF1YWxcIj5Ob3QgRXF1YWw8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+QWZ0ZXI8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPkJlZm9yZTwvb3B0aW9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ251bWJlcidcIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzIFRvPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5MZXNzIFRoZW4gPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhZnRlclwiPkdyZWF0ZXIgVGhlbiA8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImxlc3NfdGhlbl9lcXVhbFwiPmxlc3MgdGhlbiBFcXVhbCB0bzwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZ3JlYXRlcl90aGVuX2VxdWFsXCI+R3JlYXRlciB0aGVuIEVxdWFsIHRvIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIFt0eXBlXT1cImNvbD8udHlwZSA9PSAnc3RyaW5nJyA/ICd0ZXh0JyA6IGNvbD8udHlwZVwiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIG1iLTNcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVmFsdWVcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiZmlyc3RWYWx1ZVwiXG4gICAgICAgICAgI2ZpbHRlck1lbnVlVGV4dGNoSW5wdXRcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJhcHBseURyb3Bkb3duRmlsdGVyKClcIlxuICAgICAgICAvPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTMgZC1mbGV4IGZsZXgtcm93XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2staW5saW5lIG0tMCBjb2wtNCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGZpbHRlci1yYWRpby1pbnB1dHNcIlxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBuYW1lPVwiY29uZGl0aW9uXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb25kaXRpb25cIlxuICAgICAgICAgICAgICB2YWx1ZT1cImFuZFwiXG4gICAgICAgICAgICAgIGlkPVwiYW5kX3t7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwiY2RyLmRldGVjdENoYW5nZXMoKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBtYi0wIG10LTFcIiBmb3I9XCJhbmRfe3sgY29sLmZpZWxkIH19XCJcbiAgICAgICAgICAgICAgPkFORDwvbGFiZWxcbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmUgbS0wIGNvbC00IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTEgZ2FwLTFcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgZmlsdGVyLXJhZGlvLWlucHV0c1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIG5hbWU9XCJjb25kaXRpb25cIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbmRpdGlvblwiXG4gICAgICAgICAgICAgIHZhbHVlPVwib3JcIlxuICAgICAgICAgICAgICBpZD1cIm9yX3t7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwiY2RyLmRldGVjdENoYW5nZXMoKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBtYi0wIG10LTFcIiBmb3I9XCJvcl97eyBjb2wuZmllbGQgfX1cIlxuICAgICAgICAgICAgICA+T1I8L2xhYmVsXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2staW5saW5lIG0tMCBjb2wtNCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xIGdhcC0xXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGZpbHRlci1yYWRpby1pbnB1dHNcIlxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBuYW1lPVwiY29uZGl0aW9uXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb25kaXRpb25cIlxuICAgICAgICAgICAgICB2YWx1ZT1cIm5vbmVcIlxuICAgICAgICAgICAgICBpZD1cIm5vbmVfe3sgY29sLmZpZWxkIH19XCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjZHIuZGV0ZWN0Q2hhbmdlcygpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIG1iLTAgbXQtMVwiIGZvcj1cIm5vbmVfe3sgY29sLmZpZWxkIH19XCJcbiAgICAgICAgICAgICAgPk5vbmU8L2xhYmVsXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IEBzbGlkZVRvZ2dsZSAqbmdJZj1cImZpcnN0VmFsdWUgJiYgY29uZGl0aW9uICE9ICdub25lJ1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTJcIj5cbiAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbSBjdXN0b20tc2VsZWN0XCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWNvbmRDb25kaXRpb25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ3N0cmluZydcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiY29udGFpblwiPkNvbnRhaW5zPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImRvZXNfbm90X2NvbnRhaW5cIj5Eb2VzIE5vdCBDb250YWluPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPlN0YXJ0cyBXaXRoPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+RW5kcyBXaXRoPC9vcHRpb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAnZGF0ZScgfHwgc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ3RpbWUnXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzIFRvPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm5vdF9lcXVhbFwiPk5vdCBFcXVhbDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhZnRlclwiPkFmdGVyPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPkJlZm9yZTwvb3B0aW9uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdudW1iZXInXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzIFRvPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPkxlc3MgVGhlbiA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5HcmVhdGVyIFRoZW4gPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImxlc3NfdGhlbl9lcXVhbFwiPmxlc3MgdGhlbiBFcXVhbCB0bzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJncmVhdGVyX3RoZW5fZXF1YWxcIj5HcmVhdGVyIHRoZW4gRXF1YWwgdG8gPC9vcHRpb24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBbdHlwZV09XCJjb2w/LnR5cGUgPT0gJ3N0cmluZycgPyAndGV4dCcgOiBjb2w/LnR5cGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIG1iLTNcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWNvbmQgVmFsdWVcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWNvbmRWYWx1ZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPCEtLSBBY3Rpb25zIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTIgbXQtMlwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnkgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCJcbiAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDMwcHhcIlxuICAgICAgICAoY2xpY2spPVwiYXBwbHlEcm9wZG93bkZpbHRlcigpXCJcbiAgICAgID5cbiAgICAgICAgQXBwbHlcbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLXNlY29uZGFyeSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDBcIlxuICAgICAgICBzdHlsZT1cImhlaWdodDogMzBweFwiXG4gICAgICAgIChjbGljayk9XCJyZXNldFNpZGVGaWx0ZXIoY29sKVwiXG4gICAgICA+XG4gICAgICAgIFJlc2V0XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFNpZGUgTWVudWUgLS0+XG5cbjwhLS0gQ29sdW1uIFBhbm5lbCAvIFBpdm90IE1vZGUgLyBTZWFyY2hpbmcgLS0+XG5cbjxuZy10ZW1wbGF0ZSAjY29sdW1uUGFubmVsPlxuICA8ZGl2IGNsYXNzPVwiY29sdW1uLXBhbmVsLWhlYWRlclwiPlxuICAgIDwhLS0gUGl2b3QgVG9nZ2xlIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTIgcGl2b3QtbW9kZSBweC01IG1zLTIgZC1ub25lXCJcbiAgICA+XG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IG1lLTJcIlxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICBpZD1cInBpdm90VG9nZ2xlXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJwaXZvdE1vZGVcIlxuICAgICAgLz5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJwaXZvdFRvZ2dsZVwiPlBpdm90IE1vZGU8L2xhYmVsPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTZWxlY3QgQWxsICYgU2VhcmNoIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTIgcHgtMyBtdC0zXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImZpbHRlci1pY29uLXdyYXBwZXIgbWUtMlwiICpuZ0lmPVwic2hvd0NvbHVtbnNHcm91cGluZ1wiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwidG9nZ2xlLWljb24gZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgYWNjb3JkaW9uU3RhdGUgPT09ICdhbGwnXG4gICAgICAgICAgICAgID8gc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1kb3duLnN2ZydcbiAgICAgICAgICAgICAgOiBhY2NvcmRpb25TdGF0ZSA9PT0gJ3NvbWUnXG4gICAgICAgICAgICAgID8gc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZGFzaC5zdmcnXG4gICAgICAgICAgICAgIDogc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXG4gICAgICAgICAgXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWxsQWNjb3JkaW9ucygpXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgbWUtMlwiXG4gICAgICAgIFtjaGVja2VkXT1cImFsbENvbHVtbnNTZWxlY3RlZCgpXCJcbiAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVBbGxDb2x1bW5zVmlzaWJpbGl0eSgpXCJcbiAgICAgIC8+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBjb2x1bW5zLi4uXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJjb2x1bW5TZWFyY2hcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gU2VwYXJhdG9yIC0tPlxuICAgIDxociBjbGFzcz1cIm15LTJcIiAvPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gUmlnaHQgQ29sdW1ucyBNZW51ZSAtLT5cblxuPCEtLSBDb2x1bW4gUGFuZWwgSXRlbSBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZSAjY29sdW1uUGFuZWxJdGVtIGxldC1jb2w9XCJjb2xcIj5cbiAgPCEtLSBHcm91cCBDb2x1bW4gLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuY2hpbGRyZW4/Lmxlbmd0aFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4tZ3JvdXAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImZpbHRlci1pY29uLXdyYXBwZXIgbWUtMlwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwidG9nZ2xlLWljb24gZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbY2xhc3Mucm90YXRlXT1cImNvbC5leHBhbmRlZFwiXG4gICAgICAgICAgKGNsaWNrKT1cImNvbC5leHBhbmRlZCA9ICFjb2wuZXhwYW5kZWRcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtZS0yXCJcbiAgICAgICAgW2lkXT1cIidncm91cF8nICsgY29sLmhlYWRlclwiXG4gICAgICAgIFtjaGVja2VkXT1cImlzQ29sdW1uVmlzaWJsZShjb2wpXCJcbiAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVHcm91cFZpc2liaWxpdHkoY29sKVwiXG4gICAgICAvPlxuICAgICAgPHNwYW5cbiAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9ncmlkLTN4Mi1nYXAuc3ZnJ1wiXG4gICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBtZS0yXCJcbiAgICAgID48L3NwYW4+XG4gICAgICA8bGFiZWxcbiAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTAgdy0xMDBcIlxuICAgICAgICBbZm9yXT1cIidncm91cF8nICsgY29sLmhlYWRlclwiXG4gICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+e3sgY29sLmhlYWRlciB9fTwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cImNvbC5leHBhbmRlZFwiIGNsYXNzPVwicHMtNFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2hpbGQgb2YgY29sLmNoaWxkcmVuOyB0cmFja0J5OiB0cmFja0J5RmllbGRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29sdW1uUGFuZWxJdGVtOyBjb250ZXh0OiB7IGNvbDogY2hpbGQgfVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tIExlYWYgQ29sdW1uIC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbC5jaGlsZHJlbj8ubGVuZ3RoXCI+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMlwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtZS0yXCIgc3R5bGU9XCJ3aWR0aDogMS41cmVtXCI+PC9zcGFuPlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtZS0yXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJjb2wuaXNfdmlzaWJsZVwiXG4gICAgICAgIFtpZF09XCInY29sXycgKyBjb2wuZmllbGRcIlxuICAgICAgICAoY2hhbmdlKT1cIm9uU2lkZU1lbnVDb2x1bW5zVmlzaWJpbGl0eUNoYW5nZSgpXCJcbiAgICAgIC8+XG4gICAgICA8c3BhblxuICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2dyaWQtM3gyLWdhcC5zdmcnXCJcbiAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIG1lLTJcIlxuICAgICAgPjwvc3Bhbj5cbiAgICAgIDxsYWJlbFxuICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMCB3LTEwMFwiXG4gICAgICAgIFtmb3JdPVwiJ2NvbF8nICsgY29sLmZpZWxkXCJcbiAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIj57eyBjb2wuaGVhZGVyIH19PC9zcGFuPlxuICAgICAgPC9sYWJlbD5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIENvbHVtbnMgU2lkZSBGaWx0ZXIgLS0+XG48bmctdGVtcGxhdGUgI3NpZGVGaWx0ZXJzPlxuICA8ZGl2IGNsYXNzPVwicHktMyBweC0yIHBlLTMgaC0xMDBcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImZpbHRlci1pY29uLXdyYXBwZXIgbWUtMlwiICpuZ0lmPVwic2hvd0NvbHVtbnNHcm91cGluZ1wiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwidG9nZ2xlLWljb24gZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgZmlsdGVyQWNjb3JkaW9uU3RhdGUgPT09ICdhbGwnXG4gICAgICAgICAgICAgID8gc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1kb3duLnN2ZydcbiAgICAgICAgICAgICAgOiBmaWx0ZXJBY2NvcmRpb25TdGF0ZSA9PT0gJ3NvbWUnXG4gICAgICAgICAgICAgID8gc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZGFzaC5zdmcnXG4gICAgICAgICAgICAgIDogc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXG4gICAgICAgICAgXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWxsRmlsdGVyQWNjb3JkaW9ucygpXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJjb2x1bW5TZWFyY2hcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cIm92ZXJmbG93LWF1dG8gc2lkZS1maWx0ZXItY29sdW1ucy13cmFwcGVyXCJcbiAgICAgIHN0eWxlPVwiaGVpZ2h0OiBjYWxjKDEwMCUgLSA3MHB4KTsgc2Nyb2xsYmFyLXdpZHRoOiB0aGluXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgIGxldCBjb2wgb2YgY29sdW1ucyB8IGZpbHRlciA6IGNvbHVtblNlYXJjaCA6ICdoZWFkZXInO1xuICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlGaWVsZFxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWx0ZXJQYW5uZWxJdGVtOyBjb250ZXh0OiB7IGNvbDogY29sIH1cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2ZpbHRlclBhbm5lbEl0ZW0gbGV0LWNvbD1cImNvbFwiPlxuICA8IS0tIEdyb3VwIENvbHVtbiAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5jaGlsZHJlbj8ubGVuZ3RoXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJjb2x1bW4tZ3JvdXAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCJcbiAgICAgICpuZ0lmPVwiY29sPy50eXBlICE9PSAnaW1hZ2UnXCJcbiAgICA+XG4gICAgICA8IS0tIENoZXZyb24gdG9nZ2xlIC0tPlxuICAgICAgPHNwYW4gY2xhc3M9XCJmaWx0ZXItaWNvbi13cmFwcGVyIG1lLTJcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cInRvZ2dsZS1pY29uIGRhdGEtZ3JpZC1zdmctaWNvblwiXG4gICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZXZyb24tcmlnaHQuc3ZnJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgW2NsYXNzLnJvdGF0ZV09XCJjb2wuZXhwYW5kZWRGaWx0ZXJcIlxuICAgICAgICAgIChjbGljayk9XCJjb2wuZXhwYW5kZWRGaWx0ZXIgPSAhY29sLmV4cGFuZGVkRmlsdGVyXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cblxuICAgICAgPCEtLSBHcm91cCBsYWJlbCB0b2dnbGUgLS0+XG4gICAgICA8bGFiZWxcbiAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTAgdy0xMDBcIlxuICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiXG4gICAgICAgIChjbGljayk9XCJjb2wuZXhwYW5kZWRGaWx0ZXIgPSAhY29sLmV4cGFuZGVkRmlsdGVyXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmdy1ib2xkIHRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgID57eyBjb2wuaGVhZGVyIH19XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC1wcmltYXJ5IG1zLTFcIlxuICAgICAgICAgICAgKm5nSWY9XCJjb2w/LnF1ZXJ5Py5faWRzPy5sZW5ndGggfHwgY29sPy5xdWVyeT8uX2ZpcnN0X3ZhbHVlXCJcbiAgICAgICAgICAgID4qPC9zcGFuXG4gICAgICAgICAgPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBDaGlsZHJlbiBjb2x1bW5zIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJjb2wuZXhwYW5kZWRGaWx0ZXJcIiBjbGFzcz1cInBzLTRcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNoaWxkIG9mIGNvbC5jaGlsZHJlbjsgdHJhY2tCeTogdHJhY2tCeUZpZWxkXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlclBhbm5lbEl0ZW07IGNvbnRleHQ6IHsgY29sOiBjaGlsZCB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS0gTGVhZiBDb2x1bW4gLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sLmNoaWxkcmVuPy5sZW5ndGhcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCIgKm5nSWY9XCJjb2w/LnR5cGUgIT09ICdpbWFnZSdcIj5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwibWUtMiBmaWx0ZXItaWNvbi13cmFwcGVyIG1lLTJcIlxuICAgICAgICAoY2xpY2spPVwiY29sLmV4cGFuZGVkRmlsdGVyID0gIWNvbC5leHBhbmRlZEZpbHRlclwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJ0b2dnbGUtaWNvbiBkYXRhLWdyaWQtc3ZnLWljb25cIlxuICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGV2cm9uLXJpZ2h0LnN2ZydcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtjbGFzcy5yb3RhdGVdPVwiY29sLmV4cGFuZGVkRmlsdGVyXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cblxuICAgICAgPGxhYmVsXG4gICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0wIHctMTAwXCJcbiAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxuICAgICAgICAoY2xpY2spPVwiY29sLmV4cGFuZGVkRmlsdGVyID0gIWNvbC5leHBhbmRlZEZpbHRlclwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10cnVuY2F0ZSBmdy1ib2xkXCI+e3sgY29sLmhlYWRlciB9fTwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFNob3cgZmlsdGVyIHdoZW4gZXhwYW5kZWQgLS0+XG4gICAgPGRpdiBbQHNsaWRlVG9nZ2xlXSAqbmdJZj1cImNvbC5leHBhbmRlZEZpbHRlclwiIGNsYXNzPVwicHMtNCBwZS0zXCI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwic2lkZU5lc3RlZEZpbHRlcjsgY29udGV4dDogeyBjb2w6IGNvbCB9XCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFNpZGUgTmVzdGVkIEZpbHRlcnMgLS0+XG48bmctdGVtcGxhdGUgI3NpZGVOZXN0ZWRGaWx0ZXIgbGV0LWNvbD1cImNvbFwiPlxuICA8ZGl2IGNsYXNzPVwiXCI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy50eXBlID09PSAnZHJvcGRvd24nIHx8IGNvbD8udHlwZSA9PSAnYXJyYXknOyBlbHNlIHRleHRGaWx0ZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLTFcIj5cblxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIG1iLTJcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInNpZGVOZXN0ZWRGaWx0ZXJTZWFyY2hcIlxuICAgICAgICAvPlxuXG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgKGNvbD8uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlXG4gICAgICAgICAgICAgIHwgZmlsdGVyIDogc2lkZU5lc3RlZEZpbHRlclNlYXJjaCA6ICd2YWx1ZScpIGFzIGZpbHRlcmVkT3B0aW9uc1xuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyZWRPcHRpb25zLmxlbmd0aDsgZWxzZSBub0RhdGFGb3VuZFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWItMSBtcy0xIHNlbGVjdC1hbGwtZmlsdGVyXCI+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJcbiAgICAgICAgICAgICAgICAgIGNvbC5xdWVyeT8uX2lkcz8ubGVuZ3RoID09IGNvbD8uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlPy5sZW5ndGhcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsU2lkZUZpbHRlcnMoY29sLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cIihjb2wucXVlcnk/Ll9pZHM/Lmxlbmd0aCAhPT0gY29sPy5jb2x1bW5fZHJvcGRvd25fdmFsdWU/Lmxlbmd0aCAmJiBjb2wucXVlcnk/Ll9pZHM/Lmxlbmd0aClcIlxuICAgICAgICAgICAgICAgIGlkPVwic2VsZWN0QWxsX3t7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJzZWxlY3RBbGxfe3sgY29sLmZpZWxkIH19XCI+XG4gICAgICAgICAgICAgICAgU2VsZWN0IEFsbFxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gICAgICAgICAgICAgIGl0ZW1TaXplPVwiMzJcIlxuICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLXZpZXdwb3J0XCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDEyMHB4XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjayBtYi0xIG1zLTFcIlxuICAgICAgICAgICAgICAgICpjZGtWaXJ0dWFsRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnNcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb25cIlxuICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiXG4gICAgICAgICAgICAgICAgICAgIGNvbC5xdWVyeT8uX2lkcz8uaW5jbHVkZXMob3B0aW9uPy5faWQgfHwgb3B0aW9uPy5pZCB8fCBvcHRpb24pXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbk9wdGlvblRvZ2dsZShjb2wsIG9wdGlvbilcIlxuICAgICAgICAgICAgICAgICAgaWQ9XCJvcHRpb25fe3sgY29sLmZpZWxkIH19X3t7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbj8uaWQgfHwgb3B0aW9uPy5faWQgfHwgb3B0aW9uXG4gICAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCJcbiAgICAgICAgICAgICAgICAgIFtmb3JdPVwiXG4gICAgICAgICAgICAgICAgICAgICdvcHRpb25fJyArXG4gICAgICAgICAgICAgICAgICAgIGNvbC5maWVsZCArXG4gICAgICAgICAgICAgICAgICAgICdfJyArXG4gICAgICAgICAgICAgICAgICAgIChvcHRpb24/LmlkIHx8IG9wdGlvbj8uX2lkIHx8IG9wdGlvbilcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgKG9wdGlvbi52YWx1ZSB8fCBvcHRpb24pIHwgdGl0bGVjYXNlIH19XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cblxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9EYXRhRm91bmQ+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1jZW50ZXIgdGV4dC1tdXRlZCBtdC0yXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJzaWRlTmVzdGVkRmlsdGVyU2VhcmNoXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgTm8gUmVjb3JkIEZvdW5kXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuXG4gICAgPCEtLSBUZXh0IEZpbHRlciBTZWN0aW9uIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSAjdGV4dEZpbHRlcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItdGV4dC1zZWN0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTJcIj5cbiAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29sLnF1ZXJ5LmZpcnN0X2NvbmRpdGlvblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbD8udHlwZSA9PSAnc3RyaW5nJ1wiPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiY29udGFpblwiPkNvbnRhaW5zPC9vcHRpb24+XG4gICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZG9lc19ub3RfY29udGFpblwiPkRvZXMgTm90IENvbnRhaW48L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5TdGFydHMgV2l0aDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5FbmRzIFdpdGg8L29wdGlvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy50eXBlID09ICdkYXRlJyB8fCBjb2w/LnR5cGUgPT0gJ3RpbWUnXCI+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFscyBUbzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm5vdF9lcXVhbFwiPk5vdCBFcXVhbDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5BZnRlcjwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYmVmb3JlXCI+QmVmb3JlPC9vcHRpb24+RlZcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy50eXBlID09ICdudW1iZXInXCI+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFscyBUbzwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYmVmb3JlXCI+TGVzcyBUaGVuIDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5HcmVhdGVyIFRoZW4gPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJsZXNzX3RoZW5fZXF1YWxcIj5sZXNzIHRoZW4gRXF1YWwgdG88L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImdyZWF0ZXJfdGhlbl9lcXVhbFwiPkdyZWF0ZXIgdGhlbiBFcXVhbCB0byA8L29wdGlvbj5GVlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIFt0eXBlXT1cImNvbD8udHlwZSA9PSAnZGF0ZScgPyAnZGF0ZScgOiAoY29sPy50eXBlID09ICdudW1iZXInID8gJ251bWJlcic6ICd0ZXh0JylcIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSBtYi0zXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlZhbHVlXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbCEucXVlcnkhLmZpcnN0X3ZhbHVlXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTMgZC1mbGV4IGZsZXgtcm93IG11dGVkXCJcbiAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMTRweFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmUgbS0wIGNvbC00IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgZmlsdGVyLXJhZGlvLWlucHV0c1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIG5hbWU9XCJjb25kaXRpb25cIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbCEucXVlcnkuY29uZGl0aW9uXCJcbiAgICAgICAgICAgICAgdmFsdWU9XCJhbmRcIlxuICAgICAgICAgICAgICBpZD1cImFuZF97eyBjb2wuZmllbGQgfX1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgbWItMCBtdC0xXCIgZm9yPVwiYW5kX3t7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAgID5BTkQ8L2xhYmVsXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2staW5saW5lIG0tMCBjb2wtNCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGZpbHRlci1yYWRpby1pbnB1dHNcIlxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBuYW1lPVwiY29uZGl0aW9uXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb2whLnF1ZXJ5LmNvbmRpdGlvblwiXG4gICAgICAgICAgICAgIHZhbHVlPVwib3JcIlxuICAgICAgICAgICAgICBpZD1cIm9yX3t7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBtYi0wIG10LTFcIiBmb3I9XCJvcl97eyBjb2wuZmllbGQgfX1cIlxuICAgICAgICAgICAgICA+T1I8L2xhYmVsXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2staW5saW5lIG0tMCBjb2wtNCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGZpbHRlci1yYWRpby1pbnB1dHNcIlxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBuYW1lPVwiY29uZGl0aW9uXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb2whLnF1ZXJ5LmNvbmRpdGlvblwiXG4gICAgICAgICAgICAgIHZhbHVlPVwibm9uZVwiXG4gICAgICAgICAgICAgIGlkPVwibm9uZV97eyBjb2wuZmllbGQgfX1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBjbGFzcz1cIm5ub25lbS1jaGVjay1sYWJlbCBtYi0wIG10LTFcIlxuICAgICAgICAgICAgICBmb3I9XCJub25lX3t7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAgID5Ob25lPC9sYWJlbFxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0lmPVwiY29sPy5xdWVyeT8uZmlyc3RfdmFsdWUgJiYgY29sPy5xdWVyeT8uY29uZGl0aW9uICE9PSAnbm9uZSdcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWItMlwiPlxuICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb2whLnF1ZXJ5LnNlY29uZF9jb25kaXRpb25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy50eXBlID09ICdzdHJpbmcnXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImNvbnRhaW5cIj5Db250YWluczwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJkb2VzX25vdF9jb250YWluXCI+RG9lcyBOb3QgQ29udGFpbjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFsczwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5TdGFydHMgV2l0aDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhZnRlclwiPkVuZHMgV2l0aDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy50eXBlID09ICdkYXRlJyB8fCBjb2w/LnR5cGUgPT0gJ3RpbWUnXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzIFRvPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJub3RfZXF1YWxcIj5Ob3QgRXF1YWw8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5BZnRlcjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5CZWZvcmU8L29wdGlvbj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbD8udHlwZSA9PSAnbnVtYmVyJ1wiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFscyBUbzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5MZXNzIFRoZW4gPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+R3JlYXRlciBUaGVuIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJsZXNzX3RoZW5fZXF1YWxcIj5sZXNzIHRoZW4gRXF1YWwgdG88L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZ3JlYXRlcl90aGVuX2VxdWFsXCI+R3JlYXRlciB0aGVuIEVxdWFsIHRvIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgW3R5cGVdPVwiY29sPy50eXBlID09ICdkYXRlJyA/ICdkYXRlJyA6ICd0ZXh0J1wiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc20gbWItM1wiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlY29uZCBWYWx1ZVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbCEucXVlcnkuc2Vjb25kX3ZhbHVlXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnkgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCIgc3R5bGU9XCJoZWlnaHQ6IDIycHg7XCIgKGNsaWNrKT1cImFwcGx5RHJvcGRvd25GaWx0ZXIoKVwiPmFwcGx5PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXNlY29uZGFyeSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIiBzdHlsZT1cImhlaWdodDogMjJweDtcIiAoY2xpY2spPVwiYXBwbHlEcm9wZG93bkZpbHRlcigpXCI+cmVzZXQ8L2Rpdj5cblxuICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZ2FwLTIgYm9yZGVyLXRvcFwiXG4gICAgICBzdHlsZT1cImhlaWdodDogMzhweFwiXG4gICAgPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgc3R5bGU9XCJtYXgtaGVpZ2h0OiAzMHB4XCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJ0bi1saWdodCBib3JkZXIgdy0xMDAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG10LTEgYnRuLWxpZ2h0XCJcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgcmVtb3ZlU2lkZUZpbHRlcihjb2wpXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4+Q2xlYXI8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHN0eWxlPVwibWF4LWhlaWdodDogMzBweFwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHctMTAwIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBtdC0xXCJcbiAgICAgICAgKGNsaWNrKT1cImFwcGx5U2lkZUZpbHRlcihjb2wpXCJcbiAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIihjb2w/LnF1ZXJ5LmNvbmRpdGlvbiAhPT0gJ25vbmUnICYmICFjb2w/LnF1ZXJ5Py5zZWNvbmRfdmFsdWUpXCJcbiAgICAgICAgW2NsYXNzLnBlLW5vbmVdPVwiKGNvbCE/LnF1ZXJ5LmNvbmRpdGlvbiAhPT0gJ25vbmUnICYmICFjb2w/LnF1ZXJ5Py5zZWNvbmRfdmFsdWUpXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tdG9wOiAtMXB4XCI+QXBwbHk8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIENlbnRyIE92ZXJsYXkgZm9yIHNob3dpbmcgdGhlIGNob3NlIGNvbHVtbnMgLS0+XG5cbjxkaXYgKm5nSWY9XCJzaG93Q29sdW1uUGFuZWxcIiBjbGFzcz1cImN1c3RvbS1tb2RhbC1vdmVybGF5XCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cImN1c3RvbS1tb2RhbC1jb250ZW50XCJcbiAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImRyb3Bkb3duc0JhY2tncm91bmRDb2xvclwiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibW9kYWxDb2x1bW5QYW5uZWxcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLSBUaGUgZXhpc3RpbmcgbmctdGVtcGxhdGUgeW91IHByb3ZpZGVkIC0tPlxuPG5nLXRlbXBsYXRlICNtb2RhbENvbHVtblBhbm5lbD5cbiAgPGRpdiBjbGFzcz1cImNvbHVtbi1wYW5lbC1oZWFkZXJcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgcHgtMiBwcy0zIHJvdW5kZWQtdG9wLTIgbW9kYS1oZWFkZXJcIlxuICAgICAgW3N0eWxlLmhlaWdodC5weF09XCI0OFwiXG4gICAgPlxuICAgICAgQ2hvb3NlIENvbHVtbnNcbiAgICAgIDxzcGFuIGNsYXNzPVwiZmlsdGVyLWljb24td3JhcHBlclwiIChjbGljayk9XCJjbG9zZU1vZGFsQ29sdW1uUGFuZWwoKVwiXG4gICAgICAgID48c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMveC5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICA+PC9zcGFuXG4gICAgICA+PC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxociBjbGFzcz1cIm15LTBcIiAvPlxuICAgIDxkaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBweC0yIHBlLTNcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cIjQ4XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZmlsdGVyLWljb24td3JhcHBlciBtZS0yXCIgKm5nSWY9XCJzaG93Q29sdW1uc0dyb3VwaW5nXCI+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwidG9nZ2xlLWljb24gZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgIGFjY29yZGlvblN0YXRlID09PSAnYWxsJ1xuICAgICAgICAgICAgICAgID8gc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1kb3duLnN2ZydcbiAgICAgICAgICAgICAgICA6IGFjY29yZGlvblN0YXRlID09PSAnc29tZSdcbiAgICAgICAgICAgICAgICA/IHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Rhc2guc3ZnJ1xuICAgICAgICAgICAgICAgIDogc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFsbEFjY29yZGlvbnMoKVwiXG4gICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtZS0yXCJcbiAgICAgICAgICBbY2hlY2tlZF09XCJhbGxDb2x1bW5zU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVBbGxDb2x1bW5zVmlzaWJpbGl0eSgpXCJcbiAgICAgICAgLz5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggY29sdW1ucy4uLlwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJjaG9zZUNvbHVtbnNTZWFyY2hcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxociBjbGFzcz1cIm10LTAgbWItMVwiIC8+XG4gICAgICA8ZGl2IGNsYXNzPVwicHgtMiBvdmVybGF5LXNjcm9sbGFibGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgbGV0IGNvbCBvZiBjb2x1bW5zIHwgZmlsdGVyIDogY2hvc2VDb2x1bW5zU2VhcmNoIDogJ2hlYWRlcic7XG4gICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5RmllbGRcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2x1bW5QYW5lbEl0ZW07IGNvbnRleHQ6IHsgY29sOiBjb2wgfVwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2lkZU1lbnVSb3dHcm91cHM+XG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gaC0xMDAgZC1ub25lXCI+XG4gICAgPGRpdiBjbGFzcz1cInB4LTMgaC0xMDBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTMgbWItNFwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvanVzdGlmeS5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8c3Bhbj5Sb3cgR3JvdXBzPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiaC01MFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJweC0zIHB5LTIgYm9yZGVyLWRhc2hlZCBoLTEwMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4XCJcbiAgICAgICAgPlxuICAgICAgICAgIERyYWcgaGVyZSB0byBzZXQgcm93IEdyb3Vwc1xuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGhyIGNsYXNzPVwibXQtNFwiIC8+XG5cbiAgICA8ZGl2IGNsYXNzPVwicHgtMyBoLTEwMFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMyBtYi00XCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9qdXN0aWZ5LnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICAgIDxzcGFuPlZhbHVlczwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImgtNTAgZC1mbGV4XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInB4LTMgcHktMiBib3JkZXItZGFzaGVkIGgtMTAwIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDE0cHhcIlxuICAgICAgICA+XG4gICAgICAgICAgRHJhZyBoZXJlIGFnZ3JlZ2F0ZVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPlxuPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG48IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbjwhLS0gRHJhZyBQcmV2aWV3IFRlbXBsYXRlIC0tPlxuPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG48IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbjxuZy10ZW1wbGF0ZSAjZHJhZ1ByZXZpZXcgbGV0LWNvbD5cbiAgPGRpdiBjbGFzcz1cInAtMiBib3JkZXIgZC1mbGV4IGdhcC0yXCI+XG4gICAgPGRpdj5cbiAgICAgIDxzcGFuXG4gICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvYXJyb3dzLW1vdmUuc3ZnJ1wiXG4gICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICA+PC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXY+e3sgY29sLmhlYWRlciB9fTwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gRHJhZyBQbGFjZWhvbGRlciBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZVxuICAjZHJhZ1BsYWNlaG9sZGVyXG4gIGxldC1jb2xcbiAgbGV0LWk9XCJpbmRleFwiXG4gIGxldC1zZWN0aW9uPVwic2VjdGlvblwiXG4gIGxldC1kcmFnZ2luZ0luR3JvdXBBcmVhPVwiZHJhZ2dpbmdJbkdyb3VwQXJlYVwiXG4+XG4gIDxkaXYgKm5nSWY9XCIhZHJhZ2dpbmdJbkdyb3VwQXJlYVwiPlxuICAgIDxkaXZcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIGhlYWRlckNlbGw7XG4gICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjb2wsIGluZGV4OiBpLCBzZWN0aW9uOiBzZWN0aW9uIH1cbiAgICAgIFwiXG4gICAgPjwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cImRyYWdnaW5nSW5Hcm91cEFyZWFcIj5OZXcgUGxhY2Vob2xkZXI8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gVG9wIEdyb3VwIFJvdyBQbGFjZWhvbGRlciAtLT5cbjxuZy10ZW1wbGF0ZSAjdG9wR3JvdXBpbmdSb3dQbGFjZWhvbGRlciBsZXQtY29sIGxldC1zaG93Q2hldnJvbj1cInNob3dDaGV2cm9uXCI+XG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTJcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImQtZmxleCBnYXAtMiB0b3Atcm93LWdyb3VwaW5nLXBsYWNlaG9sZGVyXCJcbiAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwidG9wR3JvdXBlZEJhZGdlc0JhY2tncm91bmRDb2xvclwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2RrRHJhZ0hhbmRsZVxuICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2dyaWQtM3gyLWdhcC5zdmcnXCJcbiAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgID48L3NwYW4+XG4gICAgICA8c3Bhbj57eyBjb2wuaGVhZGVyIH19PC9zcGFuPlxuICAgICAgPHNwYW5cbiAgICAgICAgKGNsaWNrKT1cInVuZ3JvdXBDb2x1bW4oY29sKVwiXG4gICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMveC5zdmcnXCJcbiAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgID48L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwic2hvd0NoZXZyb25cIiBzdHlsZT1cIm9wYWNpdHk6IDAuNjsgZm9udC1zaXplOiAxNHB4XCI+XG4gICAgPHNwYW5cbiAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXCJcbiAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgPjwvc3Bhbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI2NoaWxkSGVhZGVyUGxhY2Vob2xkZXJcbiAgbGV0LWNvbFxuICBsZXQtcGlubmVkUmlnaHQ9XCJwaW5uZWRSaWdodFwiXG4gIGxldC1pPVwiaW5kZXhcIlxuICBsZXQtc2VjdGlvbnM9XCJzZWN0aW9uc1wiXG4+XG4gIDxkaXZcbiAgICBjbGFzcz1cImhlYWRlci1jZWxsIG9uZS1yb3ctaGVhZGVyLWNlbGxzXCJcbiAgICBbY2xhc3MuYm9yZGVyLXJpZ2h0XT1cInNob3dWZXJ0aWNhbEJvcmRlclwiXG4gICAgW3N0eWxlLndpZHRoLnB4XT1cImNvbC53aWR0aFwiXG4gICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJjb2wud2lkdGhcIlxuICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgW3N0eWxlLm1heC1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICBbc3R5bGUuZm9udFdlaWdodF09XCJoZWFkZXJGb250V2VpZ2h0XCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gaC0xMDAgYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMFwiXG4gICAgICAgIFtjbGFzcy5mbGV4LXJvdy1yZXZlcnNlXT1cInBpbm5lZFJpZ2h0XCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwidGV4dC1lbGxpcHNpcyBoLTEwMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICBbdGl0bGVdPVwiY29sLmhlYWRlclwiXG4gICAgICAgICAgW2NsYXNzLnctMTAwXT1cInBpbm5lZFJpZ2h0XCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGNvbC5oZWFkZXIgfX1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmUgZC1mbGV4XCJcbiAgICAgICAgICBbY2xhc3MuZmxleC1yb3ctcmV2ZXJzZV09XCJwaW5uZWRSaWdodFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhyZWUtZG90cyBwLTFcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy90aHJlZS1kb3RzLXZlcnRpY2FsLnN2ZydcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzaXplLWhhbmRsZVwiPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9yZXNpemUtaGFuZGxlLnN2ZydcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgKm5nSWY9XCJzaG93RmlsdGVyUm93XCJcbiAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImhlYWRlckJhY2tncm91bmRDb2xvclwiXG4gICAgY2xhc3M9XCJoZWFkZXItY2VsbCBmaWx0ZXItY2VsbFwiXG4gICAgW2NsYXNzLmJvcmRlci1yaWdodF09XCJzaG93VmVydGljYWxCb3JkZXJcIlxuICAgIFtzdHlsZS53aWR0aC5weF09XCJjb2wud2lkdGhcIlxuICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiY29sLndpZHRoXCJcbiAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICBbc3R5bGUubWF4LWhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgIFtjbGFzcy5ib3JkZXItcmlnaHRdPVwic2hvd1ZlcnRpY2FsQm9yZGVyXCJcbiAgICBzdHlsZT1cImdyaWQtcm93OiAzXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiaGVhZGVyLWNlbGwgZmlsdGVyLWNlbGxcIlxuICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJoZWFkZXJCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNvbC53aWR0aFwiXG4gICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cImNvbC53aWR0aFwiXG4gICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICBbc3R5bGUubWluLWhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgW3N0eWxlLm1heC1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICA+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIkZpbHRlclwiXG4gICAgICAgIFsobmdNb2RlbCldPVwiY29sLmZpbHRlclZhbHVlXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cImNvbD8udHlwZSA9PSAnZHJvcGRvd24nIHx8IGNvbD8udHlwZSA9PSAnaW1hZ2UnIHx8IGNvbD8udHlwZSA9PSAnYXJyYXknXCJcbiAgICAgICAgW2NsYXNzLmRpc2FibGVkLXNlYXJjaC1pbnB1dF09XCJcbiAgICAgICAgICBjb2w/LnR5cGUgPT0gJ2Ryb3Bkb3duJyB8fCBjb2w/LnR5cGUgPT0gJ2ltYWdlJyB8fCBjb2w/LnR5cGUgPT0gJ2FycmF5J1xuICAgICAgICBcIlxuICAgICAgLz5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwiZmlsdGVyLWljb24td3JhcHBlclwiXG4gICAgICAgIChjbGljayk9XCJhY3RpdmVGaWx0ZXJDZWxsID0gY29sOyBhY3RpdmVDb2wgPSBudWxsXCJcbiAgICAgICAgPjxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9maWx0ZXItMi5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICA+PC9zcGFuXG4gICAgICA+PC9zcGFuPlxuXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGVcIlxuICAgICAgICAqbmdJZj1cImFjdGl2ZUZpbHRlckNlbGwgPT09IGNvbFwiXG4gICAgICAgIHN0eWxlPVwidG9wOiAxMDAlOyByaWdodDogMDsgei1pbmRleDogMTA7IGxlZnQ6IDBcIlxuICAgICAgPjwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdGFibGVMYXlvdXQ+XG4gIDxkaXZcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICBjbGFzcz1cInAtMyBzaGFkb3cgYWN0aW9ucy1kcm9wZG93biBtdC0xIGRyb3Bkb3duLW1lbnUgc2hvdyBzaGFkb3cgY3VzdG9tLW1lbnUgdGFibGUtbGF5b3V0XCJcbiAgICBzdHlsZT1cIndpZHRoOiAzMjBweFwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0zXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rIHAtMFwiXG4gICAgICAgIHN0eWxlPVwibWFyZ2luLWxlZnQ6IC0xMHB4XCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFjdGlvbnMoJ3NldHRpbmcnKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvdy1sZWZ0LnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8aDYgY2xhc3M9XCJtYi0wIG1zLTJcIiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA1MDBcIj5UYWJsZSBMYXlvdXQ8L2g2PlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93VGFibGVMYXlvdXRcIj4gXG4gICAgPGhyIGNsYXNzPVwibXktMlwiIC8+XG4gICAgPGRpdiBjbGFzcz1cInctMTAwIG1iLTMgZC1mbGV4XCIgcm9sZT1cImdyb3VwXCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgY2xhc3M9XCJidG4tY2hlY2sgbGF5b3V0LWJ1dHRvbi1jaGVja1wiXG4gICAgICAgIG5hbWU9XCJsYXlvdXRTaXplXCJcbiAgICAgICAgaWQ9XCJzbWFsbFwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIChjaGFuZ2UpPVwiY2hhbmdlVGFibGVMYXlvdXQoJGV2ZW50LCAnc21hbGwnKVwiXG4gICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGVkVGFibGVMYXlvdXQgPT0gJ3NtYWxsJ1wiXG4gICAgICAvPlxuICAgICAgPGxhYmVsXG4gICAgICAgIGNsYXNzPVwiYm9yZGVyIGQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIgbGF5b3V0LWJ1dHRvblwiXG4gICAgICAgIGZvcj1cInNtYWxsXCJcbiAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgIGNvbG9yOiBzZWxlY3RlZFRhYmxlTGF5b3V0ID09ICdzbWFsbCcgPyAnIzAwMCcgOiAnIzcyNzI3MidcbiAgICAgICAgfVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LWJveCBib3JkZXIgbWItMVwiIHN0eWxlPVwiaGVpZ2h0OiA4cHhcIj48L2Rpdj5cbiAgICAgICAgU21hbGxcbiAgICAgIDwvbGFiZWw+XG5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICBjbGFzcz1cImJ0bi1jaGVjayBsYXlvdXQtYnV0dG9uLWNoZWNrXCJcbiAgICAgICAgbmFtZT1cImxheW91dFNpemVcIlxuICAgICAgICBpZD1cIm1lZGl1bVwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGVkVGFibGVMYXlvdXQgPT0gJ21lZGl1bSdcIlxuICAgICAgICAoY2hhbmdlKT1cImNoYW5nZVRhYmxlTGF5b3V0KCRldmVudCwgJ21lZGl1bScpXCJcbiAgICAgIC8+XG4gICAgICA8bGFiZWxcbiAgICAgICAgY2xhc3M9XCJib3JkZXIgbXgtMyBkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIGxheW91dC1idXR0b25cIlxuICAgICAgICBmb3I9XCJtZWRpdW1cIlxuICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgY29sb3I6IHNlbGVjdGVkVGFibGVMYXlvdXQgPT0gJ21lZGl1bScgPyAnIzAwMCcgOiAnIzcyNzI3MidcbiAgICAgICAgfVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LWJveCBib3JkZXIgbWItMVwiIHN0eWxlPVwiaGVpZ2h0OiAxMnB4XCI+PC9kaXY+XG4gICAgICAgIE1lZGl1bVxuICAgICAgPC9sYWJlbD5cblxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgIGNsYXNzPVwiYnRuLWNoZWNrIGxheW91dC1idXR0b24tY2hlY2tcIlxuICAgICAgICBuYW1lPVwibGF5b3V0U2l6ZVwiXG4gICAgICAgIGlkPVwibGFyZ2VcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAoY2hhbmdlKT1cImNoYW5nZVRhYmxlTGF5b3V0KCRldmVudCwgJ2xhcmdlJylcIlxuICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3RlZFRhYmxlTGF5b3V0ID09ICdsYXJnZSdcIlxuICAgICAgLz5cbiAgICAgIDxsYWJlbFxuICAgICAgICBjbGFzcz1cImJvcmRlciBkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIGxheW91dC1idXR0b25cIlxuICAgICAgICBmb3I9XCJsYXJnZVwiXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICBjb2xvcjogc2VsZWN0ZWRUYWJsZUxheW91dCA9PSAnbGFyZ2UnID8gJyMwMDAnIDogJyM3MjcyNzInXG4gICAgICAgIH1cIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy1ib3ggYm9yZGVyIG1iLTFcIiBzdHlsZT1cImhlaWdodDogMTZweFwiPjwvZGl2PlxuICAgICAgICBMYXJnZVxuICAgICAgPC9sYWJlbD5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG4gICAgPGhyIGNsYXNzPVwibXktMlwiIC8+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMlwiPlxuICAgICAgPHNwYW4+U2hvdyBzZXBhcmF0b3JzPC9zcGFuPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2ggbS0wXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICBpZD1cInNlcGFyYXRvcnNcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwic2hvd1ZlcnRpY2FsQm9yZGVyXCJcbiAgICAgICAgICAoY2hhbmdlKT1cIm9uRm9udENoYW5nZSgpXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICA8c3Bhbj5Sb3cgc2hhZGluZzwvc3Bhbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoIG0tMFwiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwicm93U2hhZGluZ0VuYWJsZWRcIlxuICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlUm93U2hhZGluZygpXCJcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIGlkPVwicm93U2hhZGluZ1wiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTJcIj5cbiAgICAgIDxzcGFuPlNob3cgU2lkZSBNZW51PC9zcGFuPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2ggbS0wXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJzaG93U2lkZU1lbnVcIlxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgaWQ9XCJyb3dTaGFkaW5nXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTJcIj5cbiAgICAgIDxzcGFuPlNob3cgRmlsdGVyIFJvdzwvc3Bhbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoIG0tMFwiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwic2hvd0ZpbHRlclJvd1wiXG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICBpZD1cInJvd1NoYWRpbmdcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdGFibGVQcmVzZXQ+XG4gIDxkaXZcbiAgICAqbmdJZj1cImFjdGl2ZVN1YkJ1dHRvbiAhPT0gJ3NhdmUtcHJlc2V0J1wiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgY2xhc3M9XCJwLTMgc2hhZG93IGFjdGlvbnMtZHJvcGRvd24gbXQtMSBkcm9wZG93bi1tZW51IHNob3cgc2hhZG93IGN1c3RvbS1tZW51IHRhYmxlLWxheW91dFwiXG4gICAgc3R5bGU9XCJ3aWR0aDogMjgwcHhcIlxuICA+XG4gICAgPCEtLSBIZWFkZXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItM1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rIHAtMFwiXG4gICAgICAgICAgc3R5bGU9XCJtYXJnaW4tbGVmdDogLTEwcHhcIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVBY3Rpb25zKCdzZXR0aW5nJylcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvYXJyb3ctbGVmdC5zdmcnXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGg2IGNsYXNzPVwibWItMCBtcy0yXCIgc3R5bGU9XCJmb250LXdlaWdodDogNTAwXCI+VGFibGUgUHJlc2V0czwvaDY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwhLS0gU2F2ZSBQcmVzZXQgQnV0dG9uIHdpdGggRHJvcGRvd24gLS0+XG4gICAgICA8ZGl2PlxuICAgICAgICA8YVxuICAgICAgICAgIGNsYXNzPVwidGV4dC1kZWNvcmF0aW9uLW5vbmUgdGV4dC1wcmltYXJ5XCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBpZD1cInNhdmVQcmVzZXREcm9wZG93blwiXG4gICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgdG9nZ2xlU3ViQWN0aW9ucygnc2F2ZS1wcmVzZXQnKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBpc1RhYmxlUHJlc2V0Tm90Q2hhbmdlZCA/IFwiU2F2ZSBwcmVzZXRcIiA6IFwiVXBkYXRlIFByZXNldFwiIH19XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTZWFyY2ggLS0+XG4gICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZ2xvYmFsLXNlYXJjaFwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvc2VhcmNoLnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG14LTIgcG9zaXRpb24tYWJzb2x1dGUgaWNvblwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFByZXNldFRhYmxlXCJcbiAgICAgICAgICB0eXBlPVwic2VhcmNoXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBQcmVzZXQgTGlzdCAtLT5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdJZj1cIlxuICAgICAgICB0YWJsZVZpZXcgfCBmaWx0ZXIgOiBzZWFyY2hUZXh0UHJlc2V0VGFibGUgOiAnbmFtZScgYXMgZmlsdGVyZWRMaXN0XG4gICAgICBcIlxuICAgID5cbiAgICAgIDwhLS0gSWYgZmlsdGVyZWRMaXN0IGV4aXN0cyBhbmQgbm9uZSBpcyBkZWZhdWx0IC0+IHNob3cgZmFsbGJhY2sgLS0+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiIHBiLTUgb3ZlcmZsb3ctYXV0b1wiXG4gICAgICAgIFtzdHlsZS5tYXhIZWlnaHQucHhdPVwiZGF0YUdyaWRDb250YWluZXIub2Zmc2V0SGVpZ2h0IC0gMjUwXCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgIGNsZWFyQWxsRmlsdGVycyh0cnVlKTtcbiAgICAgICAgICAgIG9wZW5JbmRleCA9IG51bGw7XG4gICAgICAgICAgICB0ZW1wX3N0YXRlLmlkID0gJyc7XG4gICAgICAgICAgICBhY3RpdmVUb3BCdXR0b24gPSAnJztcbiAgICAgICAgICAgIGN1cnJldGFUYWJsZVByZXNldEZvclVwZGF0ZSA9IG51bGxcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LXNlbWlib2xkXCI+RGVmYXVsdCBWaWV3PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XG4gICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1kYXJrXCI+Q3JlYXRlZCBieSBzeXN0ZW08L3NtYWxsPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAqbmdJZj1cIiF0YWJsZUZpbHRlclZpZXdJZCAmJiAhaGFzQW55RGVmYXVsdFZpZXcoKVwiXG4gICAgICAgICAgICBjbGFzcz1cImJhZGdlIGJnLWxpZ2h0IHRleHQtcHJpbWFyeSBtcy0yXCJcbiAgICAgICAgICAgID5EZWZhdWx0PC9zcGFuXG4gICAgICAgICAgPlxuICAgICAgICAgIDwhLS0gPHNwYW5cbiAgICAgICAgICAgICpuZ0lmPVwiIXRhYmxlRmlsdGVyVmlld0lkICYmICFoYXNBbnlEZWZhdWx0VmlldygpXCJcbiAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hlY2stYmx1ZS5zdmcnXCJcbiAgICAgICAgICAgIGNsYXNzPVwibWUtMlwiXG4gICAgICAgICAgPjwvc3Bhbj4gLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93biBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiXG4gICAgICAgICAgICAqbmdJZj1cInRhYmxlRmlsdGVyVmlld0lkXCJcbiAgICAgICAgICA+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gVGhlIGxpc3Q6IHJlbmRlciBlYWNoIHRhYmxlIGZyb20gZmlsdGVyZWRMaXN0IC0tPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIlxuICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgbGV0IHRhYmxlIG9mIGZpbHRlcmVkTGlzdDtcbiAgICAgICAgICAgIGxldCBpID0gaW5kZXg7XG4gICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5VGFibGVcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPCEtLSBJdGVtIC0tPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBvcGVuSW5kZXggPSBudWxsOyBhY3RpdmVUb3BCdXR0b24gPSAnJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIHB4LTAgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwic2VsZWN0RmlsdGVyKHRhYmxlKTsgb3BlbkluZGV4ID0gbnVsbFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctc2VtaWJvbGRcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiPlxuICAgICAgICAgICAgICAgIHt7IHRhYmxlPy5uYW1lIH19XG4gICAgICAgICAgICAgICAgPCEtLSB7e3RhYmxlPy5pc190ZW1wfX0gLS0+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICh0YWJsZT8uaXNfdGVtcCAmJiAhdGVtcF9zdGF0ZS5pZCkgfHxcbiAgICAgICAgICAgICAgICAgICAgdGVtcF9zdGF0ZS5pZCA9PSB0YWJsZS5pZFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZWNrLWJsdWUuc3ZnJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWUtMlwiXG4gICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ0YWJsZT8uaXNfZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImJhZGdlIGJnLWxpZ2h0IHRleHQtcHJpbWFyeSBtcy0yXCJcbiAgICAgICAgICAgICAgICAgID5EZWZhdWx0PC9zcGFuXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1kYXJrXCIgKm5nSWY9XCJ0YWJsZT8uY29uZmlnPy5maWx0ZXJOYW1lc1wiIFt0aXRsZV09XCJ0YWJsZT8uY29uZmlnPy5maWx0ZXJOYW1lc1wiPlxuICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICB0YWJsZT8uY29uZmlnPy5maWx0ZXJOYW1lcz8ubGVuZ3RoID4gMjVcbiAgICAgICAgICAgICAgPyAodGFibGU/LmNvbmZpZz8uZmlsdGVyTmFtZXMgfCBzbGljZTowOjI1KSArICcuLi4nXG4gICAgICAgICAgICAgIDogdGFibGU/LmNvbmZpZz8uZmlsdGVyTmFtZXNcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgKHt7IHRhYmxlPy5jb25maWc/LnRvdGFsQ291bnQgfX0pXG4gICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtZGFya1wiICpuZ0lmPVwiIXRhYmxlPy5jb25maWc/LmZpbHRlck5hbWVzXCI+e3sgdGFibGU/LmNyZWF0ZWRBdCB8IGRhdGUgOiBcIk1NTSBkLCB5XCIgfX08L3NtYWxsPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJ0YWJsZT8uaXNfZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZWNrLWJsdWUuc3ZnJ1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtZS0yXCJcbiAgICAgICAgICAgICAgPjwvc3Bhbj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd25cIiAqbmdJZj1cIiF0YWJsZT8uaXNfZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24td3JhcHBlclwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1pY29uIG11dGVkLXRleHRcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlTWVudShpLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIm9wZW5JbmRleCA9PT0gaVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEtZ3JpZC9pY29ucy9ob3Jpem9udGFsLWRvdHMuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZS0yXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICA8IS0tIG1lbnUgLS0+XG4gICAgICAgICAgICAgICAgIDx1bFxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm9wZW5JbmRleCA9PT0gaVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3VzdG9tLWRyb3Bkb3duLW1lbnUgcG9zaXRpb24tZml4ZWQgdG9wLWF1dG9cIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwibWVudVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5yaWdodC5weF09XCIndW5zZXQnXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwiZGF0YUdyaWRDb250YWluZXIub2Zmc2V0V2lkdGggLSAyMDBcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInRvcDogdW5zZXQ7IHJpZ2h0OiB1bnNldFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxsaSByb2xlPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJtZW51aXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25QcmVzZXQodGFibGUsICdzZXRQcmVzZXQnKTsgdGVtcF9zdGF0ZS5pZCA9ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvc3Rhci5zdmcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWUtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgU2V0IGFzIGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cblxuICAgICAgICAgICAgICAgICAgICA8bGkgcm9sZT1cIm5vbmVcIiAqbmdJZj1cIiF0YWJsZS5jb25maXJtRGVsZXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSB0ZXh0LWRhbmdlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidGFibGUuY29uZmlybURlbGV0ZSA9IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLXRvcDogLTRweFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEtZ3JpZC9pY29ucy90cmFzaC1yZWQuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1lLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIERlbGV0ZVxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuXG4gICAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRhYmxlLmNvbmZpcm1EZWxldGVcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29uZmlybS1ibG9ja1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMyBweS0yIHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIDxiciAvPjxiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPuKAnHt7IHRhYmxlPy5uYW1lIH194oCdPC9iXG4gICAgICAgICAgICAgICAgICAgICAgICAgID4/XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQgbWUtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRhYmxlLmNvbmZpcm1EZWxldGUgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLWRhbmdlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvblByZXNldCh0YWJsZSwgJ2RlbGV0ZVByZXNldCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlbGV0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIEl0ZW0gRW5kIEhlcmUgLS0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuXG4gIDxkaXZcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAqbmdJZj1cImFjdGl2ZVN1YkJ1dHRvbiA9PSAnc2F2ZS1wcmVzZXQnXCJcbiAgICBjbGFzcz1cImRyb3Bkb3duLW1lbnUgcC0zIGJhZGdlIG10LTQgc2F2ZS1wcmVzZXQtZHJvcGRvd24gbXQtMVwiXG4gICAgYXJpYS1sYWJlbGxlZGJ5PVwic2F2ZVByZXNldERyb3Bkb3duXCJcbiAgICBzdHlsZT1cIm1pbi13aWR0aDogMjUwcHhcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImZ3LWJvbGQgZnMtMTRweCBtYi0yXCI+XG4gICAgICB7eyBpc1RhYmxlUHJlc2V0Tm90Q2hhbmdlZCA/IFwiU2F2ZSBwcmVzZXRcIiA6IFwiVXBkYXRlIFByZXNldFwiIH19XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZzLTE0cHggbWItMlwiIHN0eWxlPVwibGluZS1oZWlnaHQ6IDIwcHhcIj5cbiAgICAgIFRoaXMgd2lsbCBzYXZlIHRoZSBjdXJyZW50IHRhYmxlIGFkanVzdG1lbnRzIGFzIGEgcHJlc2V0LlxuICAgIDwvZGl2PlxuICAgIDwhLS0gSW5wdXQgLS0+XG4gICAgPGRpdiBjbGFzcz1cIm1iLTJcIj5cbiAgICAgIDxsYWJlbCBmb3I9XCJwcmVzZXROYW1lXCIgY2xhc3M9XCJmb3JtLWxhYmVsIGZzLTEycHggZnctYm9sZFwiXG4gICAgICAgID5QcmVzZXQgTmFtZTwvbGFiZWxcbiAgICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZ2xvYmFsLXNlYXJjaFwiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAjcHJlc2V0TmFtZUN0cmw9XCJuZ01vZGVsXCJcbiAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgIFsobmdNb2RlbCldPVwicHJlc2V0TmFtZVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2lzLWludmFsaWQnOlxuICAgICAgICAgICAgICBwcmVzZXROYW1lQ3RybC5pbnZhbGlkICYmXG4gICAgICAgICAgICAgIChwcmVzZXROYW1lQ3RybC5kaXJ0eSB8fCBwcmVzZXROYW1lQ3RybC50b3VjaGVkKVxuICAgICAgICAgIH1cIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSBwcy0yXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHByZXNldCBuYW1lXCJcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQ2hlY2tib3ggLS0+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWItMlwiPlxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgIFsobmdNb2RlbCldPVwicHJlc2V0RmlsdGVyXCJcbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgaWQ9XCJzYXZlRmlsdGVyc1wiXG4gICAgICAvPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBtdC0xXCIgZm9yPVwic2F2ZUZpbHRlcnNcIj5cbiAgICAgICAgU2F2ZSBhY3RpdmUgZmlsdGVyc1xuICAgICAgPC9sYWJlbD5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gU2F2ZSBCdXR0b24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGdhcC0yXCIgc3R5bGU9XCJoZWlnaHQ6IDMycHhcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAzMnB4XCJcbiAgICAgICAgY2xhc3M9XCJidG4gYm9yZGVyIHctMTAwIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBidG4tbGlnaHRcIlxuICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyB0b2dnbGVBY3Rpb25zKCd0YWJsZS1wcmVzZXRzJylcIlxuICAgICAgICBzdHlsZT1cIm1hcmdpbi10b3A6IC0ycHhcIlxuICAgICAgPlxuICAgICAgICA8c3Bhbj5DYW5jZWw8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgW2Rpc2FibGVkXT1cImNsb3NlRHJvcGRvd24ucHJlc2V0LmxvYWRpbmdcIlxuICAgICAgICAoY2xpY2spPVwic2F2ZVByZXNldChwcmVzZXROYW1lQ3RybClcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDMycHhcIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB3LTEwMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxuICAgICAgPlxuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi10b3A6IC0ycHhcIiAqbmdJZj1cImlzVGFibGVQcmVzZXROb3RDaGFuZ2VkXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjbG9zZURyb3Bkb3duLnByZXNldC5sb2FkaW5nXCJcbiAgICAgICAgICAgID5TYXZlPC9uZy1jb250YWluZXJcbiAgICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNsb3NlRHJvcGRvd24ucHJlc2V0LmxvYWRpbmdcIlxuICAgICAgICAgICAgPjxzcGFuIGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgc3Bpbm5lci1ib3JkZXItc21cIj48L3NwYW5cbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gc3R5bGU9XCJ3aGl0ZS1zcGFjZTogbm93cmFwXCIgKm5nSWY9XCIhaXNUYWJsZVByZXNldE5vdENoYW5nZWRcIlxuICAgICAgICAgID5VcGRhdGUgUHJlc2V0PC9zcGFuXG4gICAgICAgID5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2hvd0hpZGVDb2x1bW5zPlxuICA8ZGl2XG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgY2xhc3M9XCJwLTMgc2hhZG93IGFjdGlvbnMtZHJvcGRvd24gbXQtMSBkcm9wZG93bi1tZW51IHNob3cgc2hhZG93IGN1c3RvbS1tZW51IHRhYmxlLWxheW91dFwiXG4gICAgc3R5bGU9XCJ3aWR0aDogMjgwcHhcIlxuICA+XG4gICAgPCEtLSBIZWFkZXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItM1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rIHAtMFwiXG4gICAgICAgICAgc3R5bGU9XCJtYXJnaW4tbGVmdDogLTEwcHhcIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVBY3Rpb25zKCdzZXR0aW5nJylcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvYXJyb3ctbGVmdC5zdmcnXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGg2IGNsYXNzPVwibWItMCBtcy0yXCIgc3R5bGU9XCJmb250LXdlaWdodDogNTAwXCI+Q29sdW1uczwvaDY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxhXG4gICAgICAgIChjbGljayk9XCJyZXNldENvbHVtbnMoKVwiXG4gICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIlxuICAgICAgICBjbGFzcz1cInRleHQtcHJpbWFyeSB0ZXh0LWRlY29yYXRpb24tbm9uZSBkLW5vbmVcIlxuICAgICAgICA+UmVzZXQ8L2FcbiAgICAgID5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gU2VhcmNoIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGdsb2JhbC1zZWFyY2hcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3NlYXJjaC5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cIm14LTIgcG9zaXRpb24tYWJzb2x1dGUgaWNvbiBkYXRhLWdyaWQtc3ZnLWljb25cIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGNvbHVtblwiXG4gICAgICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJ0b3BTaG93SGlkZUNvbHVtbnNcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPCEtLSBQcmVzZXQgTGlzdCAtLT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiXG4gICAgICBzdHlsZT1cIm92ZXJmbG93OiBhdXRvOyBzY3JvbGxiYXItd2lkdGg6IHRoaW5cIlxuICAgICAgW3N0eWxlLm1heEhlaWdodC5weF09XCJkYXRhR3JpZENvbnRhaW5lci5vZmZzZXRIZWlnaHQgLSAyMjBcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJtdXRlZC10ZXh0IHNob3ctaGlkZS10YWJsZS1sYWJlbCBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIiAqbmdJZj1cImhhc0FueVZpc2libGVDb2x1bW5cIj5cbiAgICAgICAgU2hvdyBpbiB0YWJsZVxuICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICBpZD1cImhpZGVfYWxsXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiYWxsQ29sdW1uc1NlbGVjdGVkKClcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZUFsbENvbHVtbnNWaXNpYmlsaXR5KClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgZnctc2VtaWJvbGRcIiBmb3I9XCJoaWRlX2FsbFwiPlxuICAgICAgICAgICAgICBTaG93L0hpZGUgQWxsIFxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPCEtLSBJdGVtIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICBsZXQgY29sIG9mIGNvbHVtbnMgfCBmaWx0ZXIgOiB0b3BTaG93SGlkZUNvbHVtbnMgOiAnaGVhZGVyJztcbiAgICAgICAgICB0cmFja0J5OiB0cmFja0J5RmllbGRcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwiY29sLmlzX3Zpc2libGVcIlxuICAgICAgICAgIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJvcmRlci0wIHB4LTAgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0xXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNvbD8ucGlubmVkXCJcbiAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZ3JpcC12ZXJ0aWNhbC5zdmcnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1ncmFwIGRhdGEtZ3JpZC1zdmctaWNvblwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb2w/LnBpbm5lZFwiXG4gICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3Bpbi1ibHVlLnN2ZydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLWdyYXAgZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LXNlbWlib2xkXCI+XG4gICAgICAgICAgICAgIHt7IGNvbC5oZWFkZXIgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiIWNvbD8ucXVlcnk/LmZpcnN0X3ZhbHVlICYmICFjb2w/LnF1ZXJ5Py5faWRzPy5sZW5ndGhcIlxuICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDb2x1bW5WaXNpYmlsaXR5KGNvbCwgZmFsc2UpXCJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJ2aXNpYmxlQ29sdW1ucygpLmxlbmd0aCA8PSAyIHx8IGNvbD8uaXNfYWx3YXlzX3Zpc2libGVcIlxuICAgICAgICAgICAgW2NsYXNzLnBlLW5vbmVdPVwidmlzaWJsZUNvbHVtbnMoKS5sZW5ndGggPD0gMiB8fCBjb2w/LmlzX2Fsd2F5c192aXNpYmxlXCJcbiAgICAgICAgICAgIFtjbGFzcy5vcGFjaXR5LTUwXT1cInZpc2libGVDb2x1bW5zKCkubGVuZ3RoIDw9IDIgfHwgY29sPy5pc19hbHdheXNfdmlzaWJsZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9leWUuc3ZnJ1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cImNvbD8ucXVlcnk/LmZpcnN0X3ZhbHVlIHx8IGNvbD8ucXVlcnk/Ll9pZHM/Lmxlbmd0aFwiXG4gICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgc3R5bGU9XCJvcGFjaXR5OiAwLjVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZXllLnN2ZydcIlxuICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gSXRlbSBFbmQgSGVyZSAtLT5cblxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWRpdmlkZXJcIlxuICAgICAgICAqbmdJZj1cImhhc0FueVZpc2libGVDb2x1bW4gJiYgaGFzQW55SW5WaXNpYmxlQ29sdW1uXCJcbiAgICAgID48L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cIm11dGVkLXRleHQgc2hvdy1oaWRlLXRhYmxlLWxhYmVsIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiXG4gICAgICAgICpuZ0lmPVwiaGFzQW55SW5WaXNpYmxlQ29sdW1uXCJcbiAgICAgID5cbiAgICAgICAgSGlkZSBpbiB0YWJsZVxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgIGlkPVwic2hvd19hbGxcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJhbGxDb2x1bW5zU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlQWxsQ29sdW1uc1Zpc2liaWxpdHkoKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBmdy1zZW1pYm9sZFwiIGZvcj1cInNob3dfYWxsXCI+XG4gICAgICAgICAgICAgIFNob3cvSGlkZSBBbGwgXG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zIHwgZmlsdGVyIDogdG9wU2hvd0hpZGVDb2x1bW5zIDogJ2hlYWRlcic7IHRyYWNrQnk6IHRyYWNrQnlGaWVsZFwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiIWNvbC5pc192aXNpYmxlXCJcbiAgICAgICAgICAgIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJvcmRlci0wIHB4LTAgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMVwiPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIiFjb2w/LnBpbm5lZFwiXG4gICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9ncmlwLXZlcnRpY2FsLnN2ZydcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBjdXJzb3ItZ3JhcFwiXG4gICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbD8ucGlubmVkXCJcbiAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3Bpbi1ibHVlLnN2ZydcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBjdXJzb3ItZ3JhcFwiXG4gICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LXNlbWlib2xkXCI+XG4gICAgICAgICAgICAgICAge3sgY29sLmhlYWRlciB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQ29sdW1uVmlzaWJpbGl0eShjb2wsIHRydWUpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZXllLWNyb3NzLnN2ZydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gSXRlbSBFbmQgSGVyZSAtLT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2ZpbHRlckNvbHVtbnMgbGV0LWNvbD1cImNvbHVtblwiPlxuICA8ZGl2XG4gICAgQHNsaWRlVG9nZ2xlXG4gICAgKm5nSWY9XCIhaXNGaWx0ZXJPcGVuICYmIGFjdGl2ZVRvcEJ1dHRvbiA9PSAnZmlsdGVyLWNvbHVtbnMnXCJcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICBjbGFzcz1cInNoYWRvdyBhY3Rpb25zLWRyb3Bkb3duIG10LTEgc2hvdyBzaGFkb3cgY3VzdG9tLW1lbnUgdGFibGUtbGF5b3V0IGZpbHRlci1jb2x1bW5zXCJcbiAgICBzdHlsZT1cIndpZHRoOiAyODBweDsgcmlnaHQ6IHVuc2V0OyBtYXgtd2lkdGg6IDIzMHB4XCJcbiAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImNoZWNrYm94ZXNCYWNrZ3JvdW5kQ29sb3JcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cIm1iLTIgcHgtM1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBnbG9iYWwtc2VhcmNoXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9zZWFyY2guc3ZnJ1wiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbXgtMiBwb3NpdGlvbi1hYnNvbHV0ZSBpY29uXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIkZpbHRlciBieVwiXG4gICAgICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJhZGRGaWx0ZXJDb2x1bW5JbnB1dFwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiXG4gICAgICBzdHlsZT1cIm1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSA1MDBweCk7IG92ZXJmbG93OiBhdXRvXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgIGxldCBjb2wgb2YgY29sdW1ucyB8IGZpbHRlciA6IGFkZEZpbHRlckNvbHVtbklucHV0IDogJ2hlYWRlcic7XG4gICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUZpZWxkXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAoY2xpY2spPVwib3BlbkZpbHRlcihjb2wpXCJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgY29sLmlzX3Zpc2libGUgJiZcbiAgICAgICAgICAgICFjb2w/LnF1ZXJ5Py5maXJzdF92YWx1ZSAmJlxuICAgICAgICAgICAgIWNvbD8ucXVlcnk/Ll9pZHM/Lmxlbmd0aCAmJiBjb2w/LnR5cGUgIT09ICdpbWFnZScgJiYgY29sLmlzX3NlYXJjaF9hYmxlXG4gICAgICAgICAgXCJcbiAgICAgICAgICBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBib3JkZXItMCBweC0wIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgZHJvcGRvd24taXRlbSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0xXCI+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDogLTNweFwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LXNlbWlib2xkIHRleHQtY2FwaXRhbGl6ZVwiIHN0eWxlPVwidGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XCI+XG4gICAgICAgICAgICAgIHt7IGNvbC5oZWFkZXIgIHwgdGl0bGVjYXNlICB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gRHJvcGRvd24gLS0+XG4gIDxkaXZcbiAgICBAc2xpZGVUb2dnbGVcbiAgICAqbmdJZj1cImlzRmlsdGVyT3BlbiAmJiBzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAnZHJvcGRvd24nIHx8IHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdhcnJheSdcIlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgIGNsYXNzPVwic2hhZG93IGFjdGlvbnMtZHJvcGRvd24gbXQtMSBzaG93IHNoYWRvdyBjdXN0b20tbWVudSB0YWJsZS1sYXlvdXQgZmlsdGVyLWNvbHVtbnMgcGItMlwiXG4gICAgc3R5bGU9XCJ3aWR0aDogMjgwcHg7IHJpZ2h0OiB1bnNldDsgbWF4LXdpZHRoOiAyMzBweFwiXG4gICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJjaGVja2JveGVzQmFja2dyb3VuZENvbG9yXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJweC0zIG15LTIgYm9yZGVyLWJlbG93IHB5LTEgcGItMiBtYi0zIGQtZmxleCBwcy0xXCI+XG4gICAgICA8c3BhblxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWN0aW9ucygnZmlsdGVyLWNvbHVtbnMnKTsgaXNBY3RpdmVGaWx0ZXJPcGVuID0gZmFsc2VcIlxuICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Fycm93LWxlZnQuc3ZnJ1wiXG4gICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTIgY3Vyc29yLXBvaW50ZXIgdGV4dC1jYXBpdGFsaXplXCIgc3R5bGU9XCJ0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcIlxuICAgICAgPjwvc3BhblxuICAgICAgPjxiPnt7IHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy5oZWFkZXIgfCB0aXRsZWNhc2UgIH19PC9iPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtYi0yIHB4LTNcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjb2wtMTIgZ2xvYmFsLXNlYXJjaCBwb3NpdGlvbi1yZWxhdGl2ZSBib3JkZXIgcm91bmRlZCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtd3JhcCBweC0yIGZpbHRlci1zZXJhY2gtaW5wdFwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHNlbGVjdGVkIG9mIHNlbGVjdGVkRmlsdGVyT3B0aW9uc1wiXG4gICAgICAgICAgY2xhc3M9XCJiYWRnZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xIG1lLTEgbWItMSB0b3Atcm93LWZpbHRlci1kcm9wZG93biB0ZXh0LWNhcGl0YWxpemVcIiBzdHlsZT1cInRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplO1wiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBzZWxlY3RlZD8udmFsdWUgPyBzZWxlY3RlZC52YWx1ZSA6IHNlbGVjdGVkIHwgdGl0bGVjYXNlIH19XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTZWxlY3Rpb25JbkZpbHRlcihzZWxlY3RlZClcIlxuICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY3Jvc3MtcHJpbWFyeS5zdmcnXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJtZS0yXCJcbiAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSBib3JkZXItMCBmbGV4LWdyb3ctMVwiXG4gICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAwXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VsZWN0ZWRGaWx0ZXJPcHRpb25zPy5sZW5ndGggPyAnJyA6ICdGaWx0ZXIgYnknXCJcbiAgICAgICAgICB0eXBlPVwic2VhcmNoXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRGb3JGaWx0ZXJEcm9wRG93blwiXG4gICAgICAgICAgKGtleWRvd24uYmFja3NwYWNlKT1cImhhbmRsZUJhY2tzcGFjZSgkZXZlbnQpXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCJcbiAgICAgIHN0eWxlPVwibWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDYwMHB4KTsgb3ZlcmZsb3c6IGF1dG9cIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgbGV0IGNvbCBvZiBzZWxlY3RlZENvbHVtbkZvckZpbHRlci5jb2x1bW5fZHJvcGRvd25fdmFsdWVcbiAgICAgICAgICAgIHwgZmlsdGVyIDogc2VhcmNoVGV4dEZvckZpbHRlckRyb3BEb3duIDogJ3ZhbHVlJztcbiAgICAgICAgICBsZXQgaSA9IGluZGV4XG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBib3JkZXItMCBweC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgZHJvcGRvd24taXRlbSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgIFtpZF09XCJpXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmhhcyhjb2wuaWQgfHwgY29sLl9pZCB8fCBjb2wpXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVTZWxlY3Rpb25JbkZpbHRlcihjb2wpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIGZ3LXNlbWlib2xkIHRleHQtY2FwaXRhbGl6ZVwiIHN0eWxlPVwidGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XCIgW2Zvcl09XCJpXCI+XG4gICAgICAgICAgICAgIHt7IGNvbD8udmFsdWUgfHwgY29sPy5uYW1lIHx8IGNvbCB8IHRpdGxlY2FzZSAgfX1cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBnYXAtMiBweC0yIGJvcmRlci10b3BcIlxuICAgICAgc3R5bGU9XCJoZWlnaHQ6IDM4cHhcIlxuICAgID5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAzMnB4XCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJ0bi1saWdodCBib3JkZXIgdy0xMDAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG10LTEgYnRuLWxpZ2h0XCJcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgcmVzZXRGaWx0ZXJDaGFuZ2VzKClcIlxuICAgICAgPlxuICAgICAgICA8c3Bhbj5DYW5jZWw8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAzMnB4XCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdy0xMDAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG10LTFcIlxuICAgICAgICAoY2xpY2spPVwiYXBwbHlEcm9wZG93bkZpbHRlcigpXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tdG9wOiAtMnB4XCI+U2F2ZTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEZvciBUZXh0IGZpZWxkcyBhbmQgbnVtYmVyIGZpZWxkcy0tPlxuXG4gIDxkaXZcbiAgICBAc2xpZGVUb2dnbGVcbiAgICAqbmdJZj1cIlxuICAgICAgaXNGaWx0ZXJPcGVuICYmXG4gICAgICAoc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ3N0cmluZycgfHxcbiAgICAgICAgc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICAgc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ3RpbWUnIHx8XG4gICAgICAgIHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdkYXRlJylcbiAgICBcIlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgIGNsYXNzPVwic2hhZG93IGFjdGlvbnMtZHJvcGRvd24gbXQtMSBzaG93IHNoYWRvdyBjdXN0b20tbWVudSB0YWJsZS1sYXlvdXQgZmlsdGVyLWNvbHVtbnMgcGItMlwiXG4gICAgc3R5bGU9XCJ3aWR0aDogMjEwcHg7IHJpZ2h0OiB1bnNldDsgbWF4LXdpZHRoOiAyMzBweFwiXG4gICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJjaGVja2JveGVzQmFja2dyb3VuZENvbG9yXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJweC0zIGJvcmRlci1iZWxvdyBweS0xIHBiLTIgZC1mbGV4IHBzLTFcIj5cbiAgICAgIDxzcGFuXG4gICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvYXJyb3ctbGVmdC5zdmcnXCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFjdGlvbnMoJ2ZpbHRlci1jb2x1bW5zJyk7IGlzQWN0aXZlRmlsdGVyT3BlbiA9IGZhbHNlXCJcbiAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMiBjdXJzb3ItcG9pbnRlclwiXG4gICAgICA+PC9zcGFuXG4gICAgICA+PGI+e3sgc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LmhlYWRlciB9fTwvYj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIHBvc2l0aW9uLXJlbGF0aXZlIHAtMiB0ZXh0LWZpbHRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTJcIj5cbiAgICAgICAgPHNlbGVjdFxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1zZWxlY3QgZm9ybS1zZWxlY3Qtc20gY3VzdG9tLXNlbGVjdCBib3JkZXJcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiZmlyc3RDb25kaXRpb25cIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdzdHJpbmcnXCI+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiY29udGFpblwiPkNvbnRhaW5zPC9vcHRpb24+XG4gICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImRvZXNfbm90X2NvbnRhaW5cIj5Eb2VzIE5vdCBDb250YWluPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXF1YWxcIj5FcXVhbHM8L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5TdGFydHMgV2l0aDwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+RW5kcyBXaXRoPC9vcHRpb24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ2RhdGUnIHx8IHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICd0aW1lJ1wiPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzIFRvPC9vcHRpb24+XG4gICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm5vdF9lcXVhbFwiPk5vdCBFcXVhbDwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+QWZ0ZXI8L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5CZWZvcmU8L29wdGlvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ251bWJlcidcIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzIFRvPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5MZXNzIFRoZW4gPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhZnRlclwiPkdyZWF0ZXIgVGhlbiA8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImxlc3NfdGhlbl9lcXVhbFwiPmxlc3MgdGhlbiBFcXVhbCB0bzwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZ3JlYXRlcl90aGVuX2VxdWFsXCI+R3JlYXRlciB0aGVuIEVxdWFsIHRvIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibWItMlwiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgZmlyc3QgdmFsdWVcIlxuICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICAgIFt0eXBlXT1cIlxuICAgICAgICAgICAgc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgPyAndGV4dCdcbiAgICAgICAgICAgICAgOiBzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZVxuICAgICAgICAgIFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJmaXJzdFZhbHVlXCJcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJhcHBseURyb3Bkb3duRmlsdGVyKClcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG15LTMgZC1mbGV4IGZsZXgtcm93XCIgc3R5bGU9XCJmb250LXNpemU6IDE0cHhcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmUgY29sLTQgbS0wIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBpZD1cImxvZ2ljYWxBbmRcIlxuICAgICAgICAgICAgICBuYW1lPVwibG9naWNhbE9wZXJhdG9yXCJcbiAgICAgICAgICAgICAgdmFsdWU9XCJhbmRcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbmRpdGlvblwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBtYi0wIG10LTFcIiBmb3I9XCJsb2dpY2FsQW5kXCJcbiAgICAgICAgICAgICAgPkFORDwvbGFiZWxcbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLWlubGluZSBjb2wtNCBtLTAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIGlkPVwibG9naWNhbE9yXCJcbiAgICAgICAgICAgICAgbmFtZT1cImxvZ2ljYWxPcGVyYXRvclwiXG4gICAgICAgICAgICAgIHZhbHVlPVwib3JcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbmRpdGlvblwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBtYi0wIG10LTFcIiBmb3I9XCJsb2dpY2FsT3JcIj5PUjwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmUgY29sLTQgbS0wIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBpZD1cImxvZ2ljYWxOb25lXCJcbiAgICAgICAgICAgICAgbmFtZT1cImxvZ2ljYWxPcGVyYXRvclwiXG4gICAgICAgICAgICAgIHZhbHVlPVwibm9uZVwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29uZGl0aW9uXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIG1iLTAgbXQtMVwiIGZvcj1cImxvZ2ljYWxOb25lXCJcbiAgICAgICAgICAgICAgPk5vbmU8L2xhYmVsXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb25kaXRpb24gIT09ICdub25lJyAmJiBmaXJzdFZhbHVlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTIgbXQtM1wiPlxuICAgICAgICAgICAgPCEtLSBTZWNvbmQgY29uZGl0aW9uIHNlbGVjdCAtLT5cbiAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbSBib3JkZXJcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlY29uZENvbmRpdGlvblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAnc3RyaW5nJ1wiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJjb250YWluXCI+Q29udGFpbnM8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZG9lc19ub3RfY29udGFpblwiPkRvZXMgTm90IENvbnRhaW48L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXF1YWxcIj5FcXVhbHM8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYmVmb3JlXCI+U3RhcnRzIFdpdGg8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5FbmRzIFdpdGg8L29wdGlvbj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdkYXRlJyB8fCBzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAndGltZSdcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXF1YWxcIj5FcXVhbHMgVG88L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibm90X2VxdWFsXCI+Tm90IEVxdWFsPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+QWZ0ZXI8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYmVmb3JlXCI+QmVmb3JlPC9vcHRpb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdudW1iZXInXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzIFRvPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPkxlc3MgVGhlbiA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5HcmVhdGVyIFRoZW4gPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImxlc3NfdGhlbl9lcXVhbFwiPmxlc3MgdGhlbiBFcXVhbCB0bzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJncmVhdGVyX3RoZW5fZXF1YWxcIj5HcmVhdGVyIHRoZW4gRXF1YWwgdG8gPC9vcHRpb24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTJcIj5cbiAgICAgICAgICAgIDwhLS0gU2Vjb25kIHZhbHVlIGlucHV0IC0tPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIFt0eXBlXT1cIlxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICA/ICd0ZXh0J1xuICAgICAgICAgICAgICAgICAgOiBzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHNlY29uZCB2YWx1ZVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlY29uZFZhbHVlXCJcbiAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiYXBwbHlEcm9wZG93bkZpbHRlcigpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGdhcC0yIHB4LTIgYm9yZGVyLXRvcFwiXG4gICAgICBzdHlsZT1cImhlaWdodDogMzhweFwiXG4gICAgPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBbZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXJTZWxlY3RlZElkcz8uc2l6ZSAmJiAhZmlyc3RWYWx1ZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBzdHlsZT1cImhlaWdodDogMzJweFwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBidG4tbGlnaHQgYm9yZGVyIHctMTAwIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBtdC0xIGJ0bi1saWdodFwiXG4gICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHJlc2V0VGV4dEZpbHRlckNoYW5nZXMoKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuPkNhbmNlbDwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBbZGlzYWJsZWRdPVwiKGN1cnJlbnRGaWx0ZXJTZWxlY3RlZElkcz8uc2l6ZSA9PT0gMCAmJiAhZmlyc3RWYWx1ZSkgfHwgKGNvbmRpdGlvbiAhPT0gJ25vbmUnICYmICFzZWNvbmRWYWx1ZSlcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDMycHhcIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB3LTEwMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgbXQtMVwiXG4gICAgICAgIChjbGljayk9XCJhcHBseURyb3Bkb3duRmlsdGVyKClcIlxuICAgICAgPlxuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi10b3A6IC0ycHhcIj5BcHBseTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gRWRpdCBkcm9wZG93biBoZXJlIC0tPlxuPG5nLXRlbXBsYXRlIGxldC1jb2w+XG4gIDxkaXYgY2xhc3M9XCJkcm9wLWRvd24tZWRpdFwiPjwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNmdWxsVGV4dFRlbXBsYXRlXG4gIGxldC1yb3c9XCJyb3dcIlxuICBsZXQtY29sPVwiY29sXCJcbiAgbGV0LWlzQXJyYXk9XCJpc0FycmF5XCJcbj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZnVsbC10ZXh0LWJveFwiXG4gICAgKGRibGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cImRhdGFHcmlkQ29udGFpbmVyLm9mZnNldEhlaWdodCAvIDJcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0VkaXRpbmcocm93LCBjb2wpXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiIWlzQXJyYXlcIlxuICAgICAgICBjbGFzcz1cImZ1bGwtdGV4dC1jb250ZW50XCJcbiAgICAgICAgW3N0eWxlLm1heEhlaWdodC5weF09XCJkYXRhR3JpZENvbnRhaW5lci5vZmZzZXRIZWlnaHQgLyAyXCJcbiAgICAgICAgKGRibGNsaWNrKT1cIlxuICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBlbmFibGVFZGl0KHJvdywgY29sLCB0cnVlKVxuICAgICAgICBcIlxuICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICA+XG4gICAgICAgIHt7XG4gICAgICAgICAgZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpPy52YWx1ZSB8fFxuICAgICAgICAgICAgZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpPy5uYW1lIHx8XG4gICAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZClcbiAgICAgICAgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cImlzQXJyYXlcIj5cbiAgICAgICAgPHVsPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKTsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGxpICpuZ0lmPVwiaSAhPT0gMFwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICBpdGVtPy5kZXBhcnRtZW50X25hbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgaXRlbT8ucm9sZU5hbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgaXRlbT8uZnVsbF9uYW1lIHx8XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0/LnZhbHVlIHx8XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0/Lm5hbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgXCItXCJcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNFZGl0aW5nKHJvdywgY29sKVwiPlxuICAgICAgPHRleHRhcmVhXG4gICAgICAgIChkYmxjbGljayk9XCJcbiAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZW5hYmxlRWRpdChyb3csIGNvbCwgdHJ1ZSlcbiAgICAgICAgXCJcbiAgICAgICAgI3RleHRNb2RlbD1cIm5nTW9kZWxcIlxuICAgICAgICByb3dzPVwiNFwiXG4gICAgICAgICN0ZXh0QXJlYWRJbnB1dFxuICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2wuZmllbGRdXCJcbiAgICAgICAgbmFtZT1cInt7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgIHJlcXVpcmVkXG4gICAgICAgIChibHVyKT1cImRpc2FibGVFZGl0KHJvdywgY29sLCB0ZXh0TW9kZWwpXCJcbiAgICAgICAgKGtleWRvd24uZW50ZXIpPVwidGV4dEFyZWFkSW5wdXQuYmx1cigpXCJcbiAgICAgICAgYXV0b2ZvY3VzXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICdpcy1pbnZhbGlkJzogdGV4dE1vZGVsLmludmFsaWRcbiAgICAgICAgfVwiXG4gICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgID48L3RleHRhcmVhPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEltYWdlUGxhY2Vob2xkZXIgbGV0LXJvdz1cInJvd1wiIGxldC1jb2w9XCJjb2xcIj5cbiAgPHNwYW5cbiAgICBjbGFzcz1cInB4LTIgZC1mbGV4IHctMTAwIGNlbGwtY29udGVudCBpbWFnZS1wbGFjZWhvbGRlclwiXG4gICAgW3RpdGxlXT1cInJvdz8uZnVsbF9uYW1lIHx8IHJvdz8ubmFtZSB8fCAnTi9BJ1wiXG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdJZj1cIlxuICAgICAgICByb3c/LmxvZ28gfHxcbiAgICAgICAgICByb3c/LmFzc2V0SW1hZ2UgfHxcbiAgICAgICAgICByb3c/Lmludm9pY2U/Lmludm9pY2VfaW1hZ2UgfHxcbiAgICAgICAgICByb3c/Lmludm9pY2VfaW1hZ2U7XG4gICAgICAgIGVsc2UgcGxhY2Vob2xkZXJcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgKGNsaWNrKT1cImZ1bGxzY3JlZW5JbWFnZSA9IHJvdz8ubG9nbyB8fCByb3c/LnByb2ZpbGVfcGljdHVyZXM/Lls0XT8ucGF0aCB8fFxuICAgICAgICAgICAgcm93Py5sb2dvIHx8XG4gICAgICAgICAgICByb3c/LmFzc2V0SW1hZ2UgfHxcbiAgICAgICAgICAgIHJvdz8uaW52b2ljZV9pbWFnZVwiXG4gICAgICAgIGNsYXNzPVwicGljXCJcbiAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cInJvd0hlaWdodCAtIDEwXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHQgLSAxMFwiXG4gICAgICAgIFtjbGFzcy5hc3NldHMtcGljXT1cImdyaWRUeXBlID09ICdBc3NldHMnXCJcbiAgICAgID5cbiAgICAgICAgPGltZ1xuICAgICAgICAgIFt3aWR0aF09XCJyb3dIZWlnaHQgLSAxMlwiXG4gICAgICAgICAgW2hlaWdodF09XCJyb3dIZWlnaHQgLSAxMlwiXG4gICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cInJvd0hlaWdodCAtIDEwXCJcbiAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodCAtIDEwXCJcbiAgICAgICAgICBbc3JjXT1cIlxuICAgICAgICAgICAgcm93Py5sb2dvIHx8XG4gICAgICAgICAgICByb3c/LnByb2ZpbGVfcGljdHVyZXM/Lls0XT8ucGF0aCB8fFxuICAgICAgICAgICAgcm93Py5sb2dvIHx8XG4gICAgICAgICAgICByb3c/LmFzc2V0SW1hZ2UgfHxcbiAgICAgICAgICAgIHJvdz8uaW52b2ljZV9pbWFnZVxuICAgICAgICAgIFwiXG4gICAgICAgICAgYWx0PVwiaWNvblwiXG4gICAgICAgICAgY2xhc3M9XCJvcHRpb24taWNvblwiXG4gICAgICAgICAgbG9hZGluZz1cImxhenlcIlxuICAgICAgICAvPlxuICAgICAgPC9zcGFuPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwhLS0gPGRpdlxuICAgICAgY2xhc3M9XCJmdWxsc2NyZWVuLW92ZXJsYXlcIlxuICAgICAgKm5nSWY9XCJmdWxsc2NyZWVuSW1hZ2VcIlxuICAgICAgKGNsaWNrKT1cImZ1bGxzY3JlZW5JbWFnZSA9IG51bGxcIlxuICAgID5cbiAgICAgIDxpbWcgW3NyY109XCJmdWxsc2NyZWVuSW1hZ2VcIiBjbGFzcz1cImZ1bGxzY3JlZW4taW1nXCIgLz5cbiAgICA8L2Rpdj4gLS0+XG5cbiAgICA8bmctdGVtcGxhdGUgI3BsYWNlaG9sZGVyPlxuICAgICAgPHNwYW5cbiAgICAgICAgW25nQ2xhc3NdPVwiZ2V0RHluYW1pY0NsYXNzKHJvdz8uZnVsbF9uYW1lIHx8IHJvdz8ubmFtZSlcIlxuICAgICAgICBjbGFzcz1cInBpYyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHJvdW5kZWQtY2lyY2xlXCJcbiAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cInJvd0hlaWdodCAtIDEyXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHQgLSAxMlwiXG4gICAgICAgIFtzdHlsZS5mb250U2l6ZS5weF09XCJyb3dIZWlnaHQgLyAzXCJcbiAgICAgICAgW2NsYXNzLmFzc2V0cy1waWNdPVwiZ3JpZFR5cGUgPT0gJ0Fzc2V0cydcIlxuICAgICAgPlxuICAgICAgICB7eyBnZXRJbml0aWFscyhyb3c/LmZ1bGxfbmFtZSkgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFJpZ2h0IENsaWNrIE1lbnVlIC0tPlxuPGRpdlxuICBbY2xhc3MuaW52aXNpYmxlXT1cIiFwb3NpdGlvbmVkWWV0XCJcbiAgY2xhc3M9XCJjb250ZXh0LW1lbnUgcC0yXCJcbiAgKm5nSWY9XCJhY3Rpb25IaWRlICYmIGFjdGlvbnM/Lmxlbmd0aFwiXG4gIFtuZ1N0eWxlXT1cInsgJ3RvcC5weCc6IHlQb3MsICdsZWZ0LnB4JzogeFBvcyB9XCJcbiAgW2NsYXNzLnNob3ddPVwiaXNWaXNpYmxlXCJcbiAgYXBwZW5kVG89XCJib2R5XCJcbj5cbiAgPHVsPlxuICAgIDxsaVxuICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBhY3Rpb25zXCJcbiAgICAgIGNsYXNzPVwicm91bmRlZCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgIChjbGljayk9XCJvbkFjdGlvbkNsaWNrKGFjdGlvbilcIlxuICAgID5cbiAgICAgIDxzcGFuXG4gICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvJyArIGFjdGlvbiArICcuc3ZnJ1wiXG4gICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIHJpZ2h0LWNsaWNrLW1lbnUtaWNvbnMgbWUtMlwiXG4gICAgICA+PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWNhcGl0YWxpemUgZnctNTAwXCI+e3sgYWN0aW9uIH19PC9zcGFuPlxuICAgIDwvbGk+XG4gIDwvdWw+XG48L2Rpdj5cblxuPCEtLSBEZXRhaWxzIFRvZ2dsZSBmcm9tIGJvdHRvbSAtLT5cblxuPG5nLXRlbXBsYXRlICNuZXN0ZWRUYWJsZVRlbXBsYXRlIGxldC1yb3c+XG4gIDxkaXZcbiAgICBjbGFzcz1cIm5lc3RlZC10YWJsZSB0YWJsZSB0YWJsZS1zbSB3LTEwMCBtYi0wIGNlbnRlci1uZXN0ZWQtdGFibGUgdy0xMDBcIlxuICAgIHN0eWxlPVwidGFibGUtbGF5b3V0OiBmaXhlZCAhaW1wb3J0YW50XCJcbiAgICAjbmVzdGVkVGFibGVDb250YWluZXJcbiAgPlxuICAgIDx0aGVhZFxuICAgICAgI25lc3RlZEhlYWRlclxuICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJuZXN0ZWRUYWJsZUhlYWRlckJhY2tncm91bmRDb2xvclwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjZGtEcm9wTGlzdFxuICAgICAgICBbY2RrRHJvcExpc3REYXRhXT1cInJvdz8uZGV0YWlsLmNvbHVtbnNcIlxuICAgICAgICBjZGtEcm9wTGlzdE9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiXG4gICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcENvbHVtbigkZXZlbnQsIHJvdylcIlxuICAgICAgICAoY2RrRHJvcExpc3RTb3J0ZWQpPVwib25OZXN0ZWRDb2xTb3J0KCRldmVudCwgcHJldmlld05lc3RlZENvbHMpXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJuZXN0ZWRUYWJsZUhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgIGNsYXNzPVwiZC1mbGV4IHRyIGJvcmRlci1iZWxvd1wiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIHJvdy5kZXRhaWwuY29sdW1uczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNvbD8ud2lkdGggfHwgMjUwXCJcbiAgICAgICAgICBbc3R5bGUubWluV2lkdGgucHhdPVwiY29sPy53aWR0aCB8fCAyNTBcIlxuICAgICAgICAgIFtzdHlsZS5tYXhXaWR0aC5weF09XCJjb2w/LndpZHRoIHx8IDI1MFwiXG4gICAgICAgICAgY2xhc3M9XCJweC00IHRoXCJcbiAgICAgICAgICBbYXR0ci5maWVsZF09XCJjb2wuZmllbGRcIlxuICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwibmVzdGVkVGFibGVIZWFkZXJCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGgtMTAwIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHBvc2l0aW9uLXJlbGF0aXZlIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZWxsaXBzaXNcIiAoY2xpY2spPVwic29ydE5lc3RlZENvbChjb2wsIHJvdylcIj5cbiAgICAgICAgICAgICAge3sgY29sLmhlYWRlciB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yXCI+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjdXJyZW50U3ViU29ydENvbHVtbiA9PSBjb2wuZmllbGRcIlxuICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICtcbiAgICAgICAgICAgICAgICAgIChjb2w/Lm9yZGVyX2J5ID09ICdkZXNjJ1xuICAgICAgICAgICAgICAgICAgICA/ICdkYXRhLWdyaWQvaWNvbnMvc29ydC1kZXNjLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgOiAnZGF0YS1ncmlkL2ljb25zL3NvcnQtYXNjLnN2ZycpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgbXMtMiBzdGFydC01MFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8IS0tIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRocmVlLWRvdHMgcC0xXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlblRocmVlRG90c01lbnUoJGV2ZW50LCBjb2wpXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAgICAgICAgICdkYXRhLWdyaWQvaWNvbnMvdGhyZWUtZG90cy12ZXJ0aWNhbC5zdmcnXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgICAgICAgPCEtLSBPbmx5IHNob3cgbWVudSBpZiB0aGlzIGNvbHVtbiBpcyBhY3RpdmUgLS0+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGl2ZUNvbCA9PT0gY29sXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cInRvcDogLTUwJTsgei1pbmRleDogMjE7IGxlZnQ6IDBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uTWVudTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbDogY29sLFxuICAgICAgICAgICAgICAgICAgICAgIGlzTmVzdGVkVGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uczogcm93Py5kZXRhaWwuY29sdW1uc1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInJlc2l6ZS1oYW5kbGVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiXG4gICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgIG9uUmVzaXplQ29sdW1uKCRldmVudCwgY29sKTtcbiAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvcmVzaXplLWhhbmRsZS5zdmcnXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjZGtEcmFnUHJldmlldz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTIgYm9yZGVyIGQtZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvd3MtbW92ZS5zdmcnXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdj57eyBjb2wuaGVhZGVyIH19PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvdGhlYWQ+XG4gICAgPGRpdlxuICAgICAgW3N0eWxlLndpZHRoLnB4XT1cIm5lc3RlZEhlYWRlci5vZmZzZXRXaWR0aCAtIDEwXCJcbiAgICAgIFtzdHlsZS5taW5XaWR0aC5weF09XCJuZXN0ZWRIZWFkZXIub2Zmc2V0V2lkdGggLSAxMFwiXG4gICAgPlxuICAgICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydFxuICAgICAgICBbaXRlbVNpemVdPVwibmVzdGVkVGFibGVyb3dIZWlnaHRcIlxuICAgICAgICBjbGFzcz1cInZpZXdwb3J0XCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJcbiAgICAgICAgICAocm93Py5kZXRhaWw/LnJlc3VsdD8ubGVuZ3RoIDwgNVxuICAgICAgICAgICAgPyBuZXN0ZWRUYWJsZXJvd0hlaWdodCAqIHJvdz8uZGV0YWlsPy5yZXN1bHQ/Lmxlbmd0aCArIDQwXG4gICAgICAgICAgICA6IDMwMCkgKyAoaGFzSG9yaXpvbnRhbFNjcm9sbCA/IC0xMiA6IDEpXG4gICAgICAgIFwiXG4gICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJuZXN0ZWRIZWFkZXIub2Zmc2V0V2lkdGggLSAxMFwiXG4gICAgICAgIFtzdHlsZS5taW5XaWR0aC5weF09XCJuZXN0ZWRIZWFkZXIub2Zmc2V0V2lkdGggLSAxMFwiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyIGJvcmRlci1iZWxvdyBkLWZsZXggdHJcIlxuICAgICAgICAgICpjZGtWaXJ0dWFsRm9yPVwibGV0IGQgb2Ygcm93Py5kZXRhaWw/LnJlc3VsdDsgdHJhY2tCeTogdHJhY2tCeUlkXCJcbiAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIm5lc3RlZFRhYmxlcm93SGVpZ2h0XCJcbiAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwibmVzdGVkSGVhZGVyPy5vZmZzZXRXaWR0aFwiXG4gICAgICAgICAgW3N0eWxlLm1pbldpZHRoLnB4XT1cIm5lc3RlZEhlYWRlcj8ub2Zmc2V0V2lkdGhcIlxuICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiYm9keUJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgKGNvbnRleHRtZW51KT1cIm9uUmlnaHRDbGljaygkZXZlbnQsIGQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwicHgtNCBweS0wIHRkXCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2wgb2YgcHJldmlld05lc3RlZENvbHM7IGxldCBqID0gaW5kZXhcIlxuICAgICAgICAgICAgW3N0eWxlLmZvbnRTaXplLnB4XT1cIm5lc3RlZFRhYmxlcm93Rm9udHNpemVcIlxuICAgICAgICAgICAgW2F0dHIuZmllbGRdPVwiY29sLmZpZWxkXCJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjb2w/LndpZHRoIHx8IDI1MFwiXG4gICAgICAgICAgICBbc3R5bGUubWluV2lkdGgucHhdPVwiY29sPy53aWR0aCB8fCAyNTBcIlxuICAgICAgICAgICAgW3N0eWxlLm1heFdpZHRoLnB4XT1cImNvbD8ud2lkdGggfHwgMjUwXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwibmVzdGVkVGFibGVyb3dIZWlnaHQgLSAxXCJcbiAgICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aC5weF09XCJjb2w/LndpZHRoXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPCEtLSB7eyBkW2NvbC5maWVsZF0gfHwgKGNvbC5pc19hbW91bnQgPyAwIDogXCItXCIpIH19IC0tPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgI2NlbGxUZXh0XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWVsbGlwc2lzIGZsZXgtZ3Jvdy0xXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiXG4gICAgICAgICAgICAgICAgICBjb2w/LnR5cGUgPT09ICdkYXRlJ1xuICAgICAgICAgICAgICAgICAgICA/IChnZXROZXN0ZWRWYWx1ZShkLCBjb2wuZmllbGQpIHwgZGF0ZSA6IGRhdGVGb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgIDogZ2V0TmVzdGVkVmFsdWUoZCwgY29sLmZpZWxkKSB8fCAnLSdcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbD8udHlwZSAhPT0gJ2ltYWdlJ1wiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5pc19hbW91bnRcIj57e1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeVN5bWJvbFxuICAgICAgICAgICAgICAgICAgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICFpc05lc3RlZFZhbHVlQXJyYXkoZCwgY29sLmZpZWxkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY29sPy50eXBlID09PSAnZGF0ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKGlzRGF0ZShnZXROZXN0ZWRWYWx1ZShkLCBjb2wuZmllbGQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKGdldE5lc3RlZFZhbHVlKGQsIGNvbC5maWVsZCkgfCBkYXRlOiBkYXRlRm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGdldE5lc3RlZFZhbHVlKGQsIGNvbC5maWVsZCk/LnZhbHVlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShkLCBjb2wuZmllbGQpPy5uYW1lIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShkLCBjb2wuZmllbGQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLScpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoZ2V0TmVzdGVkVmFsdWUoZCwgY29sLmZpZWxkKT8udmFsdWUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TmVzdGVkVmFsdWUoZCwgY29sLmZpZWxkKT8ubmFtZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShkLCBjb2wuZmllbGQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb2wuaXNfYW1vdW50ID8gMDogJy0nKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChnZXROZXN0ZWRWYWx1ZShkLCBjb2wuZmllbGQpPy5bMF0/LmRlcGFydG1lbnRfbmFtZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TmVzdGVkVmFsdWUoZCwgY29sLmZpZWxkKT8uWzBdPy5yb2xlTmFtZSB8fCBnZXROZXN0ZWRWYWx1ZShkLCBjb2wuZmllbGQpPy5bMF0/LmZ1bGxfbmFtZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0nKVxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGdldFRvdGFsQW1vdW50KGNvbCkgfX1cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy50eXBlID09ICdpbWFnZSdcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0SW1hZ2VQbGFjZWhvbGRlcjtcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3c6IGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2w6IGNvbCxcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNsZWZ0UmlnaHROZXN0ZWRQbGFjZWhvbGRlciBsZXQtcm93PlxuICA8dGFibGVcbiAgICBjbGFzcz1cIm5lc3RlZC10YWJsZSB0YWJsZSB0YWJsZS1zbSB3LTEwMCBtYi0wXCJcbiAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImJvZHlCYWNrZ3JvdW5kQ29sb3JcIlxuICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiXG4gICAgICBncmlkVHlwZSA9PSAnQXNzZXRzJ1xuICAgICAgICA/IChuZXN0ZWRUYWJsZUNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0SGVpZ2h0ID8/IDApICsgMTJcbiAgICAgICAgOiAodGFza01hbmFnZW1lbnRDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/Lm9mZnNldEhlaWdodCA/PyAwKVxuICAgIFwiXG4gID5cbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJ0aGVhZFwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInRyIGQtZmxleCBib3JkZXItYmVsb3dcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIm5lc3RlZFRhYmxlSGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJoZWFkZXJCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIiAqbmdGb3I9XCJsZXQgXyBvZiBbMSwgMiwgMywgNCwgNV1cIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PiAtLT5cbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJ0Ym9keVwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInRyIGJvcmRlci1iZWxvd1wiXG4gICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwibmVzdGVkVGFibGVyb3dIZWlnaHRcIlxuICAgICAgICAqbmdGb3I9XCJsZXQgXyBvZiByb3c/LmRldGFpbD8ucmVzdWx0XCJcbiAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJoZWFkZXJCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIiAqbmdGb3I9XCJsZXQgX18gb2YgWzEsIDIsIDMsIDQsIDVdXCIgY2xhc3M9XCJweS0wXCI+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwibmVzdGVkVGFibGVyb3dIZWlnaHRcIlxuICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aC5weF09XCJuZXN0ZWRUYWJsZXJvd0hlaWdodFwiXG4gICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gLS0+XG4gIDwvdGFibGU+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3Rhc2tNYW5hZ2VtZW50VGVtcGxhdGUgbGV0LXRhc2tEZXRhaWxzPVwidGFza0RldGFpbHNcIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwicC00XCJcbiAgICAjdGFza01hbmFnZW1lbnRDb250YWluZXJcbiAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cIm5lc3RlZFRhYmxlSGVhZGVyQmFja2dyb3VuZENvbG9yXCJcbiAgICBbc3R5bGUuZm9udEZhaW1seV09XCJmb250RmFpbWx5XCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS10aXRsZVwiPkRlc2NyaXB0aW9uPC9kaXY+XG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIml0ZW0tY29udGVudCBmaXJzdERpdlwiPlxuICAgICAgICB7eyB0YXNrRGV0YWlscy5kZXNjcmlwdGlvbiB9fVxuICAgICAgPC9kaXY+IC0tPlxuICAgICAgICA8cFxuICAgICAgICAgIFtzdHlsZS5mb250U2l6ZV09XCJib2R5VGV4dEZvbnRzU2l6ZVwiXG4gICAgICAgICAgY2xhc3M9XCJpdGVtLWNvbnRlbnQgZmlyc3REaXYgdGFza0Rlc2NyaXB0aW9uIHBlLTRcIlxuICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0U2FmZUNvbW1lbnQodGFza0RldGFpbHM/LmVkaXRvcl9kZXNjcmlwdGlvbilcIlxuICAgICAgICAgIChjbGljayk9XCJvcGVuRnVsbEltYWdlKCRldmVudClcIlxuICAgICAgICA+PC9wPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tdGl0bGVcIj5BdHRhY2htZW50czwvZGl2PlxuICAgICAgICA8aDUgKm5nSWY9XCJ0YXNrRGV0YWlscz8uYXR0YWNobWVudHM/Lmxlbmd0aCA9PSAwXCI+XG4gICAgICAgICAgTm8gQXR0YWNobWVudHMgZm91bmRcbiAgICAgICAgPC9oNT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwidGFza0RldGFpbHM/LmF0dGFjaG1lbnRzPy5sZW5ndGhcIlxuICAgICAgICAgIGNsYXNzPVwiaXRlbS1jb250ZW50IGQtZmxleCBmbGV4LXdyYXBcIlxuICAgICAgICAgIHN0eWxlPVwiZ2FwOiAxMHB4XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxhXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgYXR0YWNoZW1lbnQgb2YgdGFza0RldGFpbHM/LmF0dGFjaG1lbnRzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgIGNsYXNzPVwic3ltYm9sLWxhYmVsIGZzLTIgZnctc2VtaWJvbGQgdGV4dC1zdWNjZXNzIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICB0aXRsZT1cInt7IHRhc2tEZXRhaWxzPy5hdHRhY2htZW50c19uYW1lW2ldIHx8ICdBdHRhY2htZW50JyB9fVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZEF0dGNobWVudChhdHRhY2hlbWVudClcIlxuICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAgICAgICAgICdkYXRhLWdyaWQvZG9jdW1lbnQtaWNvbnMvJyArXG4gICAgICAgICAgICAgICAgZ2V0RXh0ZW50aW9uKGF0dGFjaGVtZW50KSArXG4gICAgICAgICAgICAgICAgJy5zdmcnXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC00XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLXRpdGxlXCI+XG4gICAgICAgICAgQ29tbWVudHMgKHt7IHRhc2tEZXRhaWxzPy5jb21tZW50cz8ubGVuZ3RoIH19KVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGg1ICpuZ0lmPVwidGFza0RldGFpbHM/LmNvbW1lbnRzPy5sZW5ndGggPT0gMFwiPk5vIENvbW1lbnRzIGZvdW5kPC9oNT5cbiAgICAgICAgPGRpdiAqbmdJZj1cInRhc2tEZXRhaWxzPy5jb21tZW50cz8ubGVuZ3RoXCIgY2xhc3M9XCJpdGVtLWNvbnRlbnRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tbWVudFwiICpuZ0Zvcj1cImxldCBjb21tZW50IG9mIHRhc2tEZXRhaWxzLmNvbW1lbnRzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwZS0zXCI+XG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICBjbGFzcz1cInBpYyBpbWFnZS1pbnB1dC13cmFwcGVyXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwicm93SGVpZ2h0IC0gMTJcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicm93SGVpZ2h0IC0gMTJcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29tbWVudD8uY29tbWVudF9ieS5sb2dvXCJcbiAgICAgICAgICAgICAgICBzcmM9XCJ7eyBjb21tZW50Py5jb21tZW50X2J5LmxvZ28gfX1cIlxuICAgICAgICAgICAgICAgIGFsdD1cInt7IGNvbW1lbnQuY29tbWVudF9ieS5mdWxsX25hbWUgfX1cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8IS0tIDxhcHAtZGVmYXVsdC1pbWFnZS1wbGFjZWhvbGRlciAqbmdJZj1cIiFjb21tZW50Py5jb21tZW50X2J5LmxvZ29cIiB0aXRsZT1cInt7IGNvbW1lbnQuY29tbWVudF9ieS5mdWxsX25hbWUgfX1cIiBbbmFtZV09XCJjb21tZW50LmNvbW1lbnRfYnkuZnVsbF9uYW1lXCI+PC9hcHAtZGVmYXVsdC1pbWFnZS1wbGFjZWhvbGRlcj4gLS0+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhY29tbWVudD8uY29tbWVudF9ieS5sb2dvXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXREeW5hbWljQ2xhc3MoY29tbWVudC5jb21tZW50X2J5LmZ1bGxfbmFtZSlcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicGljIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcm91bmRlZC1jaXJjbGVcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJyb3dIZWlnaHQgLSAxMlwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHQgLSAxMlwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmZvbnRTaXplLnB4XT1cInJvd0hlaWdodCAvIDNcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgY29tbWVudC5jb21tZW50X2J5LmZ1bGxfbmFtZSB9fVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBnZXRJbml0aWFscyhjb21tZW50LmNvbW1lbnRfYnkuZnVsbF9uYW1lKSB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21tZW50LWF1dGhvciBmcy0xNHB4XCI+XG4gICAgICAgICAgICAgICAge3sgY29tbWVudD8uY29tbWVudF9ieS5mdWxsX25hbWUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvbW1lbnQtY29udGVudCBmb3JDb21tZW50SW1nXCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImdldFNhZmVDb21tZW50KGNvbW1lbnQuY29tbWVudClcIlxuICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21tZW50LXRpbWVzdGFtcFwiPlxuICAgICAgICAgICAgICAgIHt7IGNvbW1lbnQuY29tbWVudF9kYXRlIHwgZGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbW1lbnQtdGltZXN0YW1wXCI+XG4gICAgICAgICAgICAgICAgUmVwbGllczogKHt7IGNvbW1lbnQucmVwbGllcy5sZW5ndGggfX0pXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==